diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs index 4be5580..2d305b5 100644 --- a/FoxTube/Classes/SecretsVault.cs +++ b/FoxTube/Classes/SecretsVault.cs @@ -57,6 +57,45 @@ namespace FoxTube } } + public static async Task ChangeSubscriptionState(string id) + { + if (!IsAuthorized) + return false; + + if(Subscriptions.Find(x => x.Snippet.ResourceId.ChannelId == id) != null) + { + Subscription s = Subscriptions.Find(x => x.Snippet.ResourceId.ChannelId == id); + + try { await Service.Subscriptions.Delete(s.Id).ExecuteAsync(); } + catch { return true; } + + SubscriptionsChanged.Invoke(null, "remove", Subscriptions.IndexOf(s)); + Subscriptions.Remove(s); + return false; + } + else + { + var request = Service.Subscriptions.Insert(new Subscription() + { + Snippet = new SubscriptionSnippet() + { + ResourceId = new ResourceId() + { + ChannelId = id, + Kind = "youtube#channel" + } + } + }, "snippet"); + + Subscription s = await request.ExecuteAsync(); + if (s == null) + return false; + Subscriptions.Add(s); + SubscriptionsChanged.Invoke(null, "add", s); + return true; + } + } + public static async Task Subscribe(string id) { if (!IsAuthorized) @@ -75,6 +114,8 @@ namespace FoxTube }, "snippet"); Subscription s = await request.ExecuteAsync(); + if (s == null) + return false; Subscriptions.Add(s); SubscriptionsChanged.Invoke(null, "add", s); return true; diff --git a/FoxTube/Controls/ChannelCard.xaml.cs b/FoxTube/Controls/ChannelCard.xaml.cs index 3da8933..7ccd966 100644 --- a/FoxTube/Controls/ChannelCard.xaml.cs +++ b/FoxTube/Controls/ChannelCard.xaml.cs @@ -91,23 +91,17 @@ namespace FoxTube.Controls private async void subscribe_Click(object sender, RoutedEventArgs e) { - if (subscribe.Background == new SolidColorBrush(Colors.Red)) + if (await SecretsVault.ChangeSubscriptionState(channelId)) { - if (await SecretsVault.Subscribe(channelId)) - { - subscribe.Background = new SolidColorBrush(Colors.Transparent); - subscribe.Foreground = new SolidColorBrush(Colors.Gray); - subscribe.Content = "Subscribed"; - } + subscribe.Background = new SolidColorBrush(Colors.Transparent); + subscribe.Foreground = new SolidColorBrush(Colors.Gray); + subscribe.Content = "Subscribed"; } else { - if (await SecretsVault.Unsubscibe(channelId)) - { - subscribe.Background = new SolidColorBrush(Colors.Red); - subscribe.Foreground = new SolidColorBrush(Colors.White); - subscribe.Content = "Subscribe"; - } + subscribe.Background = new SolidColorBrush(Colors.Red); + subscribe.Foreground = new SolidColorBrush(Colors.White); + subscribe.Content = "Subscribe"; } } } diff --git a/FoxTube/Pages/ChannelPage.xaml.cs b/FoxTube/Pages/ChannelPage.xaml.cs index 4b6d70a..6b7453c 100644 --- a/FoxTube/Pages/ChannelPage.xaml.cs +++ b/FoxTube/Pages/ChannelPage.xaml.cs @@ -250,23 +250,17 @@ namespace FoxTube.Pages private async void subscribe_Click(object sender, RoutedEventArgs e) { - if (subscribe.Background == new SolidColorBrush(Colors.Red)) + if(await SecretsVault.ChangeSubscriptionState(channelId)) { - if (await SecretsVault.Subscribe(channelId)) - { - subscribe.Background = new SolidColorBrush(Colors.Transparent); - subscribe.Foreground = new SolidColorBrush(Colors.Gray); - subscribe.Content = "Subscribed"; - } + subscribe.Background = new SolidColorBrush(Colors.Transparent); + subscribe.Foreground = new SolidColorBrush(Colors.Gray); + subscribe.Content = "Subscribed"; } else { - if (await SecretsVault.Unsubscibe(channelId)) - { - subscribe.Background = new SolidColorBrush(Colors.Red); - subscribe.Foreground = new SolidColorBrush(Colors.White); - subscribe.Content = "Subscribe"; - } + subscribe.Background = new SolidColorBrush(Colors.Red); + subscribe.Foreground = new SolidColorBrush(Colors.White); + subscribe.Content = "Subscribe"; } } diff --git a/FoxTube/Pages/VideoPage.xaml.cs b/FoxTube/Pages/VideoPage.xaml.cs index 9a7bab6..5e75068 100644 --- a/FoxTube/Pages/VideoPage.xaml.cs +++ b/FoxTube/Pages/VideoPage.xaml.cs @@ -523,23 +523,17 @@ namespace FoxTube.Pages private async void subscribe_Click(object sender, RoutedEventArgs e) { - if (subscribe.Background == new SolidColorBrush(Colors.Red)) + if (await SecretsVault.ChangeSubscriptionState(channelId)) { - if (await SecretsVault.Subscribe(item.Snippet.ChannelId)) - { - subscribe.Background = new SolidColorBrush(Colors.Transparent); - subscribe.Foreground = new SolidColorBrush(Colors.Gray); - subscribe.Content = "Subscribed"; - } + subscribe.Background = new SolidColorBrush(Colors.Transparent); + subscribe.Foreground = new SolidColorBrush(Colors.Gray); + subscribe.Content = "Subscribed"; } else { - if (await SecretsVault.Unsubscibe(item.Snippet.ChannelId)) - { - subscribe.Background = new SolidColorBrush(Colors.Red); - subscribe.Foreground = new SolidColorBrush(Colors.White); - subscribe.Content = "Subscribe"; - } + subscribe.Background = new SolidColorBrush(Colors.Red); + subscribe.Foreground = new SolidColorBrush(Colors.White); + subscribe.Content = "Subscribe"; } } }