From 8cd16bc334ec975c64f1262f0ac8b709917df44b Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Thu, 6 Jun 2019 18:42:47 +0300 Subject: [PATCH 1/5] Added Stack trace parameter to Analytics --- FoxTube/App.xaml.cs | 9 ++++++--- FoxTube/Classes/DownloadAgent.cs | 3 ++- FoxTube/Classes/ManifestGenerator.cs | 3 ++- FoxTube/Classes/Methods.cs | 3 ++- FoxTube/Classes/SecretsVault.cs | 6 ++++-- FoxTube/Classes/SettingsStorage.cs | 3 ++- FoxTube/Controls/ChannelCard.xaml.cs | 3 ++- FoxTube/Controls/Chat.xaml.cs | 3 ++- FoxTube/Controls/CommentCard.xaml.cs | 9 ++++++--- FoxTube/Controls/DownloadItem.xaml.cs | 3 ++- FoxTube/Controls/PlaylistCard.xaml.cs | 3 ++- FoxTube/Controls/VideoCard.xaml.cs | 3 ++- FoxTube/Pages/ChannelPage.xaml.cs | 6 ++++-- FoxTube/Pages/CommentsPage.xaml.cs | 3 ++- FoxTube/Pages/History.xaml.cs | 6 ++++-- FoxTube/Pages/Home.xaml.cs | 9 ++++++--- FoxTube/Pages/PlaylistPage.xaml.cs | 6 ++++-- FoxTube/Pages/Search.xaml.cs | 3 ++- FoxTube/Pages/SettingsPages/Inbox.xaml.cs | 3 ++- FoxTube/Pages/VideoPage.xaml.cs | 3 ++- 20 files changed, 60 insertions(+), 30 deletions(-) diff --git a/FoxTube/App.xaml.cs b/FoxTube/App.xaml.cs index 6e8a466..f101394 100644 --- a/FoxTube/App.xaml.cs +++ b/FoxTube/App.xaml.cs @@ -75,7 +75,8 @@ namespace FoxTube { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "App version", $"{ver.Major}.{ver.Minor}.{ver.Revision}.{ver.Build}" } + { "App version", $"{ver.Major}.{ver.Minor}.{ver.Revision}.{ver.Build}" }, + { "StackTrace", e.StackTrace } }); } } @@ -188,7 +189,8 @@ namespace FoxTube { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Video ID", arguments[1] } + { "Video ID", arguments[1] }, + { "StackTrace", e.StackTrace } }); } break; @@ -278,7 +280,8 @@ namespace FoxTube Analytics.TrackEvent("The app crashed", new Dictionary() { { "Exception", e.Exception.GetType().ToString() }, - { "Details", e.Message } + { "Details", e.Message }, + { "StackTrace", e.Exception.StackTrace } }); } } diff --git a/FoxTube/Classes/DownloadAgent.cs b/FoxTube/Classes/DownloadAgent.cs index f4c59e8..24cae97 100644 --- a/FoxTube/Classes/DownloadAgent.cs +++ b/FoxTube/Classes/DownloadAgent.cs @@ -30,7 +30,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to load downloads history", new Dictionary { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Classes/ManifestGenerator.cs b/FoxTube/Classes/ManifestGenerator.cs index 66a05bf..3be4856 100644 --- a/FoxTube/Classes/ManifestGenerator.cs +++ b/FoxTube/Classes/ManifestGenerator.cs @@ -75,7 +75,8 @@ namespace FoxTube.Controls.Player { "Exception", e.GetType().ToString() }, { "Message", e.Message }, { "Video ID", meta.Id }, - { "Requested quality", requestedQuality.VideoQualityLabel } + { "Requested quality", requestedQuality.VideoQualityLabel }, + { "StackTrace", e.StackTrace } }); return null; } diff --git a/FoxTube/Classes/Methods.cs b/FoxTube/Classes/Methods.cs index 11e1c5d..99a1a9c 100644 --- a/FoxTube/Classes/Methods.cs +++ b/FoxTube/Classes/Methods.cs @@ -125,7 +125,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to parse duration", new Dictionary { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); return TimeSpan.FromMilliseconds(0); } diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs index 2a9686b..c78f4b6 100644 --- a/FoxTube/Classes/SecretsVault.cs +++ b/FoxTube/Classes/SecretsVault.cs @@ -152,7 +152,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to authorize", new Dictionary { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } @@ -206,7 +207,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to retrieve user's info", new Dictionary { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Classes/SettingsStorage.cs b/FoxTube/Classes/SettingsStorage.cs index cdc348d..0287a05 100644 --- a/FoxTube/Classes/SettingsStorage.cs +++ b/FoxTube/Classes/SettingsStorage.cs @@ -238,7 +238,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to retrieve settings", new Dictionary { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Controls/ChannelCard.xaml.cs b/FoxTube/Controls/ChannelCard.xaml.cs index dd63c60..c9f1c99 100644 --- a/FoxTube/Controls/ChannelCard.xaml.cs +++ b/FoxTube/Controls/ChannelCard.xaml.cs @@ -78,7 +78,8 @@ namespace FoxTube.Controls { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Video ID", id } + { "Video ID", id }, + { "StackTrace", e.StackTrace } }); } diff --git a/FoxTube/Controls/Chat.xaml.cs b/FoxTube/Controls/Chat.xaml.cs index 53de462..649a940 100644 --- a/FoxTube/Controls/Chat.xaml.cs +++ b/FoxTube/Controls/Chat.xaml.cs @@ -284,7 +284,8 @@ namespace FoxTube.Controls Analytics.TrackEvent("Failed to send a chat message", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } diff --git a/FoxTube/Controls/CommentCard.xaml.cs b/FoxTube/Controls/CommentCard.xaml.cs index 56b40c8..8d98e5a 100644 --- a/FoxTube/Controls/CommentCard.xaml.cs +++ b/FoxTube/Controls/CommentCard.xaml.cs @@ -215,7 +215,8 @@ namespace FoxTube.Controls { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Top comment ID", item.Id } + { "Top comment ID", item.Id }, + { "StackTrace", e.StackTrace } }); } @@ -268,7 +269,8 @@ namespace FoxTube.Controls Analytics.TrackEvent("Failed to edit comment", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } @@ -313,7 +315,8 @@ namespace FoxTube.Controls Analytics.TrackEvent("Failed delete comment", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } })); diff --git a/FoxTube/Controls/DownloadItem.xaml.cs b/FoxTube/Controls/DownloadItem.xaml.cs index 6a23ce6..7ec4ad5 100644 --- a/FoxTube/Controls/DownloadItem.xaml.cs +++ b/FoxTube/Controls/DownloadItem.xaml.cs @@ -186,7 +186,8 @@ namespace FoxTube.Controls { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Container", JsonConvert.SerializeObject(Container) } + { "Container", JsonConvert.SerializeObject(Container) }, + { "StackTrace", e.StackTrace } }); try { await File.DeleteAsync(StorageDeleteOption.PermanentDelete); } diff --git a/FoxTube/Controls/PlaylistCard.xaml.cs b/FoxTube/Controls/PlaylistCard.xaml.cs index 02f0adc..8ed514f 100644 --- a/FoxTube/Controls/PlaylistCard.xaml.cs +++ b/FoxTube/Controls/PlaylistCard.xaml.cs @@ -57,7 +57,8 @@ namespace FoxTube.Controls { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Playlist ID", playlistId } + { "Playlist ID", playlistId }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Controls/VideoCard.xaml.cs b/FoxTube/Controls/VideoCard.xaml.cs index 8e0785e..1c22402 100644 --- a/FoxTube/Controls/VideoCard.xaml.cs +++ b/FoxTube/Controls/VideoCard.xaml.cs @@ -119,7 +119,8 @@ namespace FoxTube.Controls { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Video ID", item.Id } + { "Video ID", item.Id }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Pages/ChannelPage.xaml.cs b/FoxTube/Pages/ChannelPage.xaml.cs index 9eb354e..aa69916 100644 --- a/FoxTube/Pages/ChannelPage.xaml.cs +++ b/FoxTube/Pages/ChannelPage.xaml.cs @@ -118,7 +118,8 @@ namespace FoxTube.Pages { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Channel ID", item.Id } + { "Channel ID", item.Id }, + { "StackTrace", e.StackTrace } }); } } @@ -155,7 +156,8 @@ namespace FoxTube.Pages { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Channel ID", item.Id } + { "Channel ID", item.Id }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Pages/CommentsPage.xaml.cs b/FoxTube/Pages/CommentsPage.xaml.cs index 7abd708..994e3ef 100644 --- a/FoxTube/Pages/CommentsPage.xaml.cs +++ b/FoxTube/Pages/CommentsPage.xaml.cs @@ -164,7 +164,8 @@ namespace FoxTube.Pages { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Thread ID", threadId } + { "Thread ID", threadId }, + { "StackTrace", e.StackTrace } }); } diff --git a/FoxTube/Pages/History.xaml.cs b/FoxTube/Pages/History.xaml.cs index f12d272..a939ab7 100644 --- a/FoxTube/Pages/History.xaml.cs +++ b/FoxTube/Pages/History.xaml.cs @@ -61,7 +61,8 @@ namespace FoxTube.Pages Analytics.TrackEvent("Local history loading error", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } @@ -139,7 +140,8 @@ namespace FoxTube.Pages Analytics.TrackEvent("History loading error", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } }); diff --git a/FoxTube/Pages/Home.xaml.cs b/FoxTube/Pages/Home.xaml.cs index d2c5f7a..d6c4db3 100644 --- a/FoxTube/Pages/Home.xaml.cs +++ b/FoxTube/Pages/Home.xaml.cs @@ -84,7 +84,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to load recommendations", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } @@ -123,7 +124,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to load trendings", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } @@ -158,7 +160,8 @@ namespace FoxTube Analytics.TrackEvent("Failed to load subscriptions", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Pages/PlaylistPage.xaml.cs b/FoxTube/Pages/PlaylistPage.xaml.cs index 93f5154..bfb5083 100644 --- a/FoxTube/Pages/PlaylistPage.xaml.cs +++ b/FoxTube/Pages/PlaylistPage.xaml.cs @@ -91,7 +91,8 @@ namespace FoxTube.Pages { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Playlist ID", playlistId } + { "Playlist ID", playlistId }, + { "StackTrace", e.StackTrace } }); } } @@ -129,7 +130,8 @@ namespace FoxTube.Pages Analytics.TrackEvent("WL playlist loading error", new Dictionary() { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Pages/Search.xaml.cs b/FoxTube/Pages/Search.xaml.cs index cae9394..6f4dc51 100644 --- a/FoxTube/Pages/Search.xaml.cs +++ b/FoxTube/Pages/Search.xaml.cs @@ -145,7 +145,8 @@ namespace FoxTube { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Parameters", Parameters.ToString() } + { "Parameters", Parameters.ToString() }, + { "StackTrace", e.StackTrace } }); } } diff --git a/FoxTube/Pages/SettingsPages/Inbox.xaml.cs b/FoxTube/Pages/SettingsPages/Inbox.xaml.cs index 6acbec7..73955a1 100644 --- a/FoxTube/Pages/SettingsPages/Inbox.xaml.cs +++ b/FoxTube/Pages/SettingsPages/Inbox.xaml.cs @@ -51,7 +51,8 @@ namespace FoxTube.Pages.SettingsPages Analytics.TrackEvent("Failed to load inbox", new Dictionary { { "Exception", e.GetType().ToString() }, - { "Message", e.Message } + { "Message", e.Message }, + { "StackTrace", e.StackTrace } }); } diff --git a/FoxTube/Pages/VideoPage.xaml.cs b/FoxTube/Pages/VideoPage.xaml.cs index 9a754a5..fed868b 100644 --- a/FoxTube/Pages/VideoPage.xaml.cs +++ b/FoxTube/Pages/VideoPage.xaml.cs @@ -135,7 +135,8 @@ namespace FoxTube.Pages { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, - { "Video ID", item.Id } + { "Video ID", item.Id }, + { "StackTrace", e.StackTrace } }); } } From 6d2c05e3f608f5a82bdf063e055b3d2584352a92 Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Thu, 6 Jun 2019 19:38:32 +0300 Subject: [PATCH 2/5] Fixed multipying downloads on login/logout Added failed message on logon --- FoxTube/Assets/Data/Patchnotes.xml | 8 ++++++++ FoxTube/Classes/DownloadAgent.cs | 1 + FoxTube/Classes/SecretsVault.cs | 3 +++ FoxTube/Pages/Downloads.xaml.cs | 1 + 4 files changed, 13 insertions(+) diff --git a/FoxTube/Assets/Data/Patchnotes.xml b/FoxTube/Assets/Data/Patchnotes.xml index f12ec2f..bfaa073 100644 --- a/FoxTube/Assets/Data/Patchnotes.xml +++ b/FoxTube/Assets/Data/Patchnotes.xml @@ -1,5 +1,13 @@  + + + ### What's new: +- Improved analytics tools for more precise bugs tracking +- Fixed multipying downloads history entries on login/logout + + + ##[Final release] diff --git a/FoxTube/Classes/DownloadAgent.cs b/FoxTube/Classes/DownloadAgent.cs index 24cae97..8bf1d48 100644 --- a/FoxTube/Classes/DownloadAgent.cs +++ b/FoxTube/Classes/DownloadAgent.cs @@ -20,6 +20,7 @@ namespace FoxTube public static async void Initialize() { Downloads = await KnownFolders.VideosLibrary.CreateFolderAsync("FoxTube", CreationCollisionOption.OpenIfExists); + Items.Clear(); try { List containers = JsonConvert.DeserializeObject>((string)settings.Values[$"downloads"]); diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs index c78f4b6..4fa7ef2 100644 --- a/FoxTube/Classes/SecretsVault.cs +++ b/FoxTube/Classes/SecretsVault.cs @@ -149,12 +149,15 @@ namespace FoxTube if (e.Message.Contains("UserCancel")) return; else + { + AuthorizationStateChanged?.Invoke(args: new bool?[] { null }); Analytics.TrackEvent("Failed to authorize", new Dictionary { { "Exception", e.GetType().ToString() }, { "Message", e.Message }, { "StackTrace", e.StackTrace } }); + } } if (Credential == null || !retrieveSubs) diff --git a/FoxTube/Pages/Downloads.xaml.cs b/FoxTube/Pages/Downloads.xaml.cs index e7a1536..1df6314 100644 --- a/FoxTube/Pages/Downloads.xaml.cs +++ b/FoxTube/Pages/Downloads.xaml.cs @@ -30,6 +30,7 @@ namespace FoxTube.Pages protected override void OnNavigatedFrom(NavigationEventArgs e) { base.OnNavigatedFrom(e); + list.Children.Clear(); DownloadAgent.Page = null; } From ca15bbe47fb553518dae43133f93adf5e1212b89 Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Thu, 6 Jun 2019 19:41:34 +0300 Subject: [PATCH 3/5] Updated version and changelog --- FoxTube/Assets/Data/Patchnotes.xml | 4 ++++ FoxTube/FoxTube.csproj | 2 +- FoxTube/Package.appxmanifest | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/FoxTube/Assets/Data/Patchnotes.xml b/FoxTube/Assets/Data/Patchnotes.xml index bfaa073..85eb007 100644 --- a/FoxTube/Assets/Data/Patchnotes.xml +++ b/FoxTube/Assets/Data/Patchnotes.xml @@ -6,6 +6,10 @@ - Improved analytics tools for more precise bugs tracking - Fixed multipying downloads history entries on login/logout + ### Что нового: +- Улучшены инструменты аналитики для более быстрого поиска багов +- Исправлено дублирование записей истории загрузок при входе/выходе из аккаунта + diff --git a/FoxTube/FoxTube.csproj b/FoxTube/FoxTube.csproj index c71604d..cadd022 100644 --- a/FoxTube/FoxTube.csproj +++ b/FoxTube/FoxTube.csproj @@ -21,7 +21,7 @@ 50B93E6A246058D555BA65CD203D7A02064A7409 False False - E:\XFox\Documents\FoxTube builds\0.6\ + E:\XFox\Documents\FoxTube builds\1.0\ Always x86|x64|arm 1 diff --git a/FoxTube/Package.appxmanifest b/FoxTube/Package.appxmanifest index feeae81..65f608e 100644 --- a/FoxTube/Package.appxmanifest +++ b/FoxTube/Package.appxmanifest @@ -1,6 +1,6 @@  - + FoxTube From 9fae17c417d627bc27d55417260afdb773f371d0 Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Thu, 6 Jun 2019 19:46:30 +0300 Subject: [PATCH 4/5] Feedback button on failed login message --- FoxTube/Assets/Data/Patchnotes.xml | 2 ++ FoxTube/Pages/MainPage.xaml.cs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/FoxTube/Assets/Data/Patchnotes.xml b/FoxTube/Assets/Data/Patchnotes.xml index 85eb007..244ccc2 100644 --- a/FoxTube/Assets/Data/Patchnotes.xml +++ b/FoxTube/Assets/Data/Patchnotes.xml @@ -5,10 +5,12 @@ ### What's new: - Improved analytics tools for more precise bugs tracking - Fixed multipying downloads history entries on login/logout +- Added feedback button failed authentication popup ### Что нового: - Улучшены инструменты аналитики для более быстрого поиска багов - Исправлено дублирование записей истории загрузок при входе/выходе из аккаунта +- Добавлена кнопка отзыва в сообщении об ошибке при входе в аккаунт diff --git a/FoxTube/Pages/MainPage.xaml.cs b/FoxTube/Pages/MainPage.xaml.cs index 9ea77ea..9f73150 100644 --- a/FoxTube/Pages/MainPage.xaml.cs +++ b/FoxTube/Pages/MainPage.xaml.cs @@ -231,6 +231,8 @@ namespace FoxTube default: MessageDialog dialog = new MessageDialog(resources.GetString("/Main/connectErrContent"), resources.GetString("/Main/connectErrHeader")); + if (StoreServicesFeedbackLauncher.IsSupported()) + dialog.Commands.Add(new UICommand(resources.GetString("/About/feedback/Content"), async (command) => await StoreServicesFeedbackLauncher.GetDefault().LaunchAsync())); dialog.Commands.Add(new UICommand(resources.GetString("/Main/tryAgain"), (command) => { SecretsVault.Authorize(); From af489c4364c64da397391791aeb0fa750422ed7b Mon Sep 17 00:00:00 2001 From: Michael Gordeev Date: Thu, 6 Jun 2019 20:01:32 +0300 Subject: [PATCH 5/5] Duplicated subscriptions are now ignored on login --- FoxTube/Assets/Data/Patchnotes.xml | 2 ++ FoxTube/Classes/SecretsVault.cs | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/FoxTube/Assets/Data/Patchnotes.xml b/FoxTube/Assets/Data/Patchnotes.xml index 244ccc2..d300d6f 100644 --- a/FoxTube/Assets/Data/Patchnotes.xml +++ b/FoxTube/Assets/Data/Patchnotes.xml @@ -6,11 +6,13 @@ - Improved analytics tools for more precise bugs tracking - Fixed multipying downloads history entries on login/logout - Added feedback button failed authentication popup +- Duplicated subscriptions are now ignored on login ### Что нового: - Улучшены инструменты аналитики для более быстрого поиска багов - Исправлено дублирование записей истории загрузок при входе/выходе из аккаунта - Добавлена кнопка отзыва в сообщении об ошибке при входе в аккаунт +- Повторяющиеся подписки теперь игнорируются при входе diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs index 4fa7ef2..ad71473 100644 --- a/FoxTube/Classes/SecretsVault.cs +++ b/FoxTube/Classes/SecretsVault.cs @@ -222,7 +222,22 @@ namespace FoxTube public static void SaveSubscriptions() { Dictionary subs = new Dictionary(); - Subscriptions.ForEach(x => subs.Add(x.Snippet.ResourceId.ChannelId, x.Snippet.Thumbnails.Default__.Url)); + foreach(Subscription i in Subscriptions) + try + { + subs.Add(i.Snippet.ResourceId.ChannelId, i.Snippet.Thumbnails.Default__.Url); + } + catch (Exception e) + { + Analytics.TrackEvent("Failed to save user's subscription", new Dictionary + { + { "Exception", e.GetType().ToString() }, + { "Message", e.Message }, + { "Channel ID", i.Snippet.ResourceId.ChannelId }, + { "StackTrace", e.StackTrace } + }); + continue; + } ApplicationData.Current.RoamingSettings.Values["subscriptions"] = JsonConvert.SerializeObject(subs); }