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)