From 26907c9aac9100e85b01106825797b3ae3312db5 Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Wed, 15 Aug 2018 16:57:31 +0300 Subject: [PATCH] Offline errors fix --- FoxTube/App.xaml.cs | 2 + FoxTube/Classes/Methods.cs | 8 +- FoxTube/Classes/SecretsVault.cs | 106 +++++++++++-------- FoxTube/Pages/ChannelPage.xaml.cs | 8 ++ FoxTube/Pages/Home.xaml.cs | 90 +++++++++++----- FoxTube/Pages/LoadingPage.xaml | 8 +- FoxTube/Pages/LoadingPage.xaml.cs | 8 +- FoxTube/Pages/MainPage.xaml.cs | 8 +- FoxTube/Pages/PlaylistPage.xaml.cs | 4 + FoxTube/Pages/Search.xaml.cs | 4 + FoxTube/Pages/SettingsPages/Feedback.xaml.cs | 35 ------ FoxTube/Pages/VideoPage.xaml.cs | 4 + 12 files changed, 172 insertions(+), 113 deletions(-) diff --git a/FoxTube/App.xaml.cs b/FoxTube/App.xaml.cs index d5382f5..b2ba3c7 100644 --- a/FoxTube/App.xaml.cs +++ b/FoxTube/App.xaml.cs @@ -55,6 +55,8 @@ namespace FoxTube /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { + SecretsVault.CheckAuthorization(); + Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, diff --git a/FoxTube/Classes/Methods.cs b/FoxTube/Classes/Methods.cs index 5141c13..2913870 100644 --- a/FoxTube/Classes/Methods.cs +++ b/FoxTube/Classes/Methods.cs @@ -3,6 +3,7 @@ using System; using System.Diagnostics; using System.Text.RegularExpressions; using System.Threading.Tasks; +using Windows.ApplicationModel.Core; using Windows.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -11,13 +12,18 @@ using Windows.UI.Xaml.Media; namespace FoxTube { - class Methods + public static class Methods { public static MainPage MainPage { get { return (Window.Current.Content as Frame).Content as MainPage; } } + public static void CloseApp() + { + CoreApplication.Exit(); + } + public static string GetAgo(DateTime dateTime) { TimeSpan span = DateTime.Now - dateTime; diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs index 842c6ad..20f395e 100644 --- a/FoxTube/Classes/SecretsVault.cs +++ b/FoxTube/Classes/SecretsVault.cs @@ -10,6 +10,7 @@ using Google.Apis.Services; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; using Windows.Storage; +using Windows.UI.Popups; namespace FoxTube { @@ -114,61 +115,82 @@ namespace FoxTube catch { } if(Credential != null) { - if (settings.Values["authorized"] == null) - settings.Values.Add("authorized", true); - else settings.Values["authorized"] = true; + try + { + if (settings.Values["authorized"] == null) + settings.Values.Add("authorized", true); + else settings.Values["authorized"] = true; IsAuthorized = true; - var request = Service.Channels.List("snippet,contentDetails"); - request.Mine = true; - UserChannel = (await request.ExecuteAsync()).Items[0]; - AccountId = UserChannel.Id; + var request = Service.Channels.List("snippet,contentDetails"); + request.Mine = true; + UserChannel = (await request.ExecuteAsync()).Items[0]; + AccountId = UserChannel.Id; - PlaylistItemsResource.ListRequest playlistRequest = Service.PlaylistItems.List("snippet"); - playlistRequest.PlaylistId = UserChannel.ContentDetails.RelatedPlaylists.WatchHistory; - playlistRequest.MaxResults = 50; - PlaylistItemListResponse playlistResponse = await playlistRequest.ExecuteAsync(); - UserHistory.Clear(); - foreach (PlaylistItem i in playlistResponse.Items) - UserHistory.Add(i); + PlaylistItemsResource.ListRequest playlistRequest = Service.PlaylistItems.List("snippet"); + playlistRequest.PlaylistId = UserChannel.ContentDetails.RelatedPlaylists.WatchHistory; + playlistRequest.MaxResults = 50; + PlaylistItemListResponse playlistResponse = await playlistRequest.ExecuteAsync(); + UserHistory.Clear(); + foreach (PlaylistItem i in playlistResponse.Items) + UserHistory.Add(i); - playlistRequest = Service.PlaylistItems.List("snippet"); - playlistRequest.PlaylistId = UserChannel.ContentDetails.RelatedPlaylists.WatchLater; - playlistRequest.MaxResults = 50; - playlistResponse = await playlistRequest.ExecuteAsync(); - WatchLater.Clear(); - - foreach (PlaylistItem i in playlistResponse.Items) - WatchLater.Add(i); - - string nextToken = playlistResponse.NextPageToken; - while (nextToken != null) - { - playlistRequest.PageToken = nextToken; + playlistRequest = Service.PlaylistItems.List("snippet"); + playlistRequest.PlaylistId = UserChannel.ContentDetails.RelatedPlaylists.WatchLater; + playlistRequest.MaxResults = 50; playlistResponse = await playlistRequest.ExecuteAsync(); + WatchLater.Clear(); + foreach (PlaylistItem i in playlistResponse.Items) WatchLater.Add(i); - nextToken = playlistResponse.NextPageToken; - } + string nextToken = playlistResponse.NextPageToken; + while (nextToken != null) + { + playlistRequest.PageToken = nextToken; + playlistResponse = await playlistRequest.ExecuteAsync(); + foreach (PlaylistItem i in playlistResponse.Items) + WatchLater.Add(i); - SubscriptionsResource.ListRequest subRequest = Service.Subscriptions.List("snippet"); - subRequest.Mine = true; - subRequest.MaxResults = 50; - subRequest.Order = SubscriptionsResource.ListRequest.OrderEnum.Relevance; - SubscriptionListResponse subResponse = await subRequest.ExecuteAsync(); - Subscriptions.Clear(); + nextToken = playlistResponse.NextPageToken; + } - foreach (Subscription s in subResponse.Items) - Subscriptions.Add(s); + SubscriptionsResource.ListRequest subRequest = Service.Subscriptions.List("snippet"); + subRequest.Mine = true; + subRequest.MaxResults = 50; + subRequest.Order = SubscriptionsResource.ListRequest.OrderEnum.Relevance; + SubscriptionListResponse subResponse = await subRequest.ExecuteAsync(); + Subscriptions.Clear(); - nextToken = subResponse.NextPageToken; - while(nextToken != null) - { - subRequest.PageToken = nextToken; - subResponse = await subRequest.ExecuteAsync(); foreach (Subscription s in subResponse.Items) Subscriptions.Add(s); + + nextToken = subResponse.NextPageToken; + while (nextToken != null) + { + subRequest.PageToken = nextToken; + subResponse = await subRequest.ExecuteAsync(); + foreach (Subscription s in subResponse.Items) + Subscriptions.Add(s); + } + } + catch + { + MessageDialog dialog = new MessageDialog("We were unabled to retrieve your account information due to weak internet connection or Google servers' problems. PLease, try again later", "Failed to connect"); + + dialog.Commands.Add(new UICommand("Try again", (command) => + { + Authorize(); + })); + dialog.Commands.Add(new UICommand("Quit", (command) => + { + Methods.CloseApp(); + })); + dialog.Commands.Add(new UICommand("Close")); + + await dialog.ShowAsync(); + + IsAuthorized = false; } AuthorizationStateChanged.Invoke(null, null); diff --git a/FoxTube/Pages/ChannelPage.xaml.cs b/FoxTube/Pages/ChannelPage.xaml.cs index a9a4c24..a418392 100644 --- a/FoxTube/Pages/ChannelPage.xaml.cs +++ b/FoxTube/Pages/ChannelPage.xaml.cs @@ -141,6 +141,10 @@ namespace FoxTube.Pages loading.Close(); } + catch (System.Net.Http.HttpRequestException) + { + loading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true); + } catch { loading.Error(); @@ -175,6 +179,10 @@ namespace FoxTube.Pages playlistLoading.Close(); } + catch (System.Net.Http.HttpRequestException) + { + playlistLoading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true); + } catch { playlistLoading.Error(); diff --git a/FoxTube/Pages/Home.xaml.cs b/FoxTube/Pages/Home.xaml.cs index c50fcc8..5d1fe95 100644 --- a/FoxTube/Pages/Home.xaml.cs +++ b/FoxTube/Pages/Home.xaml.cs @@ -57,6 +57,15 @@ namespace FoxTube trendMore.Clicked += TrendMore_Clicked; subsMore.Clicked += SubsMore_Clicked; + recLoading.RefreshPage += refreshPage; + subsLoading.RefreshPage += refreshPage; + trendLoading.RefreshPage += refreshPage; + + Initialize(); + } + + private void refreshPage(object sender, RoutedEventArgs e) + { Initialize(); } @@ -196,40 +205,73 @@ namespace FoxTube async void LoadTrending() { - VideosResource.ListRequest request = SecretsVault.Service.Videos.List("id"); - request.MaxResults = 48; - - request.Chart = VideosResource.ListRequest.ChartEnum.MostPopular; - request.RegionCode = reg; - VideoListResponse response = await request.ExecuteAsync(); - - if (!string.IsNullOrWhiteSpace(response.NextPageToken)) - trendToken = response.NextPageToken; - else - trendMore.Complete(true); - - foreach (Video vid in response.Items) + try { - VideoCard vCard = new VideoCard(vid.Id); - trendGrid.Add(vCard); - } + VideosResource.ListRequest request = SecretsVault.Service.Videos.List("id"); + request.MaxResults = 48; - trendLoading.Close(); - trendLoaded = true; + request.Chart = VideosResource.ListRequest.ChartEnum.MostPopular; + request.RegionCode = reg; + VideoListResponse response = await request.ExecuteAsync(); + + if (!string.IsNullOrWhiteSpace(response.NextPageToken)) + trendToken = response.NextPageToken; + else + trendMore.Complete(true); + + foreach (Video vid in response.Items) + { + VideoCard vCard = new VideoCard(vid.Id); + trendGrid.Add(vCard); + } + + trendLoading.Close(); + trendLoaded = true; + } + catch (System.Net.Http.HttpRequestException) + { + trendLoading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true); + } + catch + { + trendLoading.Error(); + } } void LoadRecommendations() { - recLoading.Close(); - recLoaded = true; - recLoading.Block(); + try + { + recLoading.Close(); + recLoaded = true; + recLoading.Block(); + } + catch (System.Net.Http.HttpRequestException) + { + recLoading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true); + } + catch + { + recLoading.Error(); + } } void LoadSubscriptions() { - subsLoading.Close(); - subsLoaded = true; - subsLoading.Block(); + try + { + subsLoading.Close(); + subsLoaded = true; + subsLoading.Block(); + } + catch (System.Net.Http.HttpRequestException) + { + subsLoading.Error("System.Net.Http.HttpRequestException", "Unable to connect to Google servers.", true); + } + catch + { + subsLoading.Error(); + } } } } diff --git a/FoxTube/Pages/LoadingPage.xaml b/FoxTube/Pages/LoadingPage.xaml index 9fecba7..239bd4d 100644 --- a/FoxTube/Pages/LoadingPage.xaml +++ b/FoxTube/Pages/LoadingPage.xaml @@ -20,8 +20,8 @@