diff --git a/Unicord.Universal.Package/Package.appxmanifest b/Unicord.Universal.Package/Package.appxmanifest index aceabca..87dbb1a 100644 --- a/Unicord.Universal.Package/Package.appxmanifest +++ b/Unicord.Universal.Package/Package.appxmanifest @@ -9,7 +9,7 @@ xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" IgnorableNamespaces="uap mp uap2 uap3 uap4 uap5 rescap"> - + ms-resource:AppDisplayName diff --git a/Unicord.Universal.Shared/Constants.cs b/Unicord.Universal.Shared/Constants.cs index 92ecf92..7f1e61d 100644 --- a/Unicord.Universal.Shared/Constants.cs +++ b/Unicord.Universal.Shared/Constants.cs @@ -94,6 +94,13 @@ internal static partial class Constants public const string ENABLE_LIVE_TILES = "EnableLiveTiles"; public const bool ENABLE_LIVE_TILES_DEFAULT = true; + + // old resource keys for migration + public const string TOKEN_IDENTIFIER_OLD = "Unicord_Token"; + public const string AUTO_TRANSCODE_MEDIA_OLD = "AutoTranscodeMedia"; + public const string VIDEO_PROCESSING_OLD = "VideoProcessingAlgorithm"; + public const string TIMESTAMP_STYLE_OLD = "TimestampStyle"; + public const string REQUESTED_COLOUR_SCHEME_OLD = "RequestedTheme"; } internal enum MediaTranscodeOptions diff --git a/Unicord.Universal/App.xaml.cs b/Unicord.Universal/App.xaml.cs index 841220e..0b814cd 100644 --- a/Unicord.Universal/App.xaml.cs +++ b/Unicord.Universal/App.xaml.cs @@ -3,43 +3,32 @@ using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; -using System.Threading; using System.Threading.Tasks; using System.Web; using DSharpPlus; -using DSharpPlus.AsyncEvents; using DSharpPlus.Entities; -using DSharpPlus.EventArgs; using Microsoft.AppCenter; using Microsoft.AppCenter.Analytics; -using Microsoft.AppCenter.Crashes; - #if XBOX_GAME_BAR using Microsoft.Gaming.XboxGameBar; using Unicord.Universal.Pages.GameBar; #endif using Microsoft.Toolkit.Uwp.Helpers; using Microsoft.Toolkit.Uwp.UI; -using Unicord.Universal.Dialogs; using Unicord.Universal.Integration; -using Unicord.Universal.Misc; using Unicord.Universal.Models; -using Unicord.Universal.Models.Messaging; using Unicord.Universal.Pages; using Unicord.Universal.Services; using Unicord.Universal.Utilities; using WamWooWam.Core; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; -using Windows.ApplicationModel.Core; using Windows.ApplicationModel.Resources; -using Windows.Foundation; +using Windows.Media.Transcoding; using Windows.Security.Credentials; -using Windows.System.Profile; -using Windows.UI.Core; +using Windows.Storage; using Windows.UI.Notifications; using Windows.UI.Popups; -using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; @@ -54,7 +43,6 @@ sealed partial class App : Application private static XboxGameBarWidget _chatListWidget; private static XboxGameBarWidget _friendsListWidget; #endif - internal static ApplicationDataStorageHelper LocalSettings { get; } = ApplicationDataStorageHelper.GetCurrent(); internal static ApplicationDataStorageHelper RoamingSettings { get; } @@ -63,6 +51,7 @@ sealed partial class App : Application public App() { InitializeComponent(); + MigratePreV2Settings(); var theme = (ElementTheme)LocalSettings.Read(REQUESTED_COLOUR_SCHEME, (int)ElementTheme.Default); switch (theme) @@ -82,6 +71,57 @@ public App() Debug.WriteLine("Welcome to Unicord!"); } + private static void MigratePreV2Settings() + { + foreach (var item in ApplicationData.Current.RoamingSettings.Values) + ApplicationData.Current.LocalSettings.Values[item.Key] = item.Value; + + if (LocalSettings.TryRead(AUTO_TRANSCODE_MEDIA_OLD, out var autoTranscodeMedia)) + { + if (Enum.TryParse(autoTranscodeMedia, out var result)) + LocalSettings.Save(AUTO_TRANSCODE_MEDIA, (int)result); + + LocalSettings.TryDelete(AUTO_TRANSCODE_MEDIA_OLD); + } + + if (LocalSettings.TryRead(VIDEO_PROCESSING_OLD, out var videoProcessingOptions)) + { + if (Enum.TryParse(videoProcessingOptions, out var result)) + LocalSettings.Save(VIDEO_PROCESSING, (int)result); + + LocalSettings.TryDelete(VIDEO_PROCESSING_OLD); + } + + if (LocalSettings.TryRead(TIMESTAMP_STYLE_OLD, out var timestampStyle)) + { + if (Enum.TryParse(timestampStyle, out var result)) + LocalSettings.Save(TIMESTAMP_STYLE, (int)result); + + LocalSettings.TryDelete(TIMESTAMP_STYLE_OLD); + } + + if (LocalSettings.TryRead(REQUESTED_COLOUR_SCHEME_OLD, out var requestedScheme)) + { + if (Enum.TryParse(requestedScheme, out var result)) + LocalSettings.Save(REQUESTED_COLOUR_SCHEME, (int)result); + + LocalSettings.TryDelete(REQUESTED_COLOUR_SCHEME_OLD); + } + + try + { + var passwordVault = new PasswordVault(); + foreach (var c in passwordVault.FindAllByResource(TOKEN_IDENTIFIER_OLD)) + { + c.RetrievePassword(); + passwordVault.Add(new PasswordCredential(TOKEN_IDENTIFIER, c.UserName, c.Password)); + + passwordVault.Remove(c); + } + } + catch { } + } + private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { Logger.LogError(e.Exception); diff --git a/Unicord.Universal/Pages/LoginPage.xaml.cs b/Unicord.Universal/Pages/LoginPage.xaml.cs index 3712a58..86571c5 100644 --- a/Unicord.Universal/Pages/LoginPage.xaml.cs +++ b/Unicord.Universal/Pages/LoginPage.xaml.cs @@ -44,15 +44,12 @@ private async void TokenLoginButton_Click(object sender, RoutedEventArgs e) private async Task TryLoginAsync(string token) { - async Task OnReady(DiscordClient client, ReadyEventArgs e) + Task OnReady(DiscordClient client, ReadyEventArgs e) { var vault = new PasswordVault(); vault.Add(new PasswordCredential(Constants.TOKEN_IDENTIFIER, "Default", token)); - await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => - { - Frame.Navigate(typeof(DiscordPage)); - }); + return Task.CompletedTask; } var mainPage = this.FindParent(); @@ -65,6 +62,7 @@ await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => throw new ArgumentException("Your token cannot be empty! If you were logging in via the browser, try using your token."); mainPage.ShowConnectingOverlay(); + Frame.Navigate(typeof(DiscordPage)); await DiscordManager.LoginAsync(token, OnReady, App.LoginError, false); } catch (Exception ex) diff --git a/Unicord.Universal/Services/DiscordNavigationService.cs b/Unicord.Universal/Services/DiscordNavigationService.cs index 768780c..0795001 100644 --- a/Unicord.Universal/Services/DiscordNavigationService.cs +++ b/Unicord.Universal/Services/DiscordNavigationService.cs @@ -8,6 +8,7 @@ using Microsoft.AppCenter.Analytics; using Unicord.Universal.Models; using Unicord.Universal.Models.Channels; +using Unicord.Universal.Models.Guild; using Unicord.Universal.Models.Voice; using Unicord.Universal.Pages; using Unicord.Universal.Pages.Subpages; @@ -148,15 +149,16 @@ internal async Task NavigateAsync(DiscordChannel channel, bool skipPreviousDm = if (await WindowingService.Current.ActivateOtherWindowAsync(channel, window)) return; + GuildListViewModel guildVm; if (channel is DiscordDmChannel dm) { _discordPageModel.SelectedDM = _discordPageModel.PreviousDM = new ChannelViewModel(dm.Id); _discordPageModel.IsFriendsSelected = true; _discordPage.LeftSidebarFrame.Navigate(typeof(DMChannelsPage), channel, new DrillInNavigationTransitionInfo()); } - else if (channel.Guild != null) + else if (channel.Guild != null && (guildVm = _discordPageModel.ViewModelFromGuild(channel.Guild)) != null) { - _discordPageModel.SelectedGuild = _discordPageModel.ViewModelFromGuild(channel.Guild); + _discordPageModel.SelectedGuild = guildVm; _discordPageModel.SelectedGuild.IsSelected = true; if (!(_discordPage.LeftSidebarFrame.Content is GuildChannelListPage p) || p.Guild != channel.Guild)