aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs')
-rw-r--r--src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs136
1 files changed, 58 insertions, 78 deletions
diff --git a/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs
index b6e4be55..3596c9aa 100644
--- a/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs
+++ b/src/Ryujinx.Ava/UI/Windows/MainWindow.axaml.cs
@@ -25,6 +25,7 @@ using Ryujinx.Ui.Common.Helper;
using System;
using System.IO;
using System.Runtime.Versioning;
+using System.Threading;
using System.Threading.Tasks;
namespace Ryujinx.Ava.UI.Windows
@@ -79,35 +80,11 @@ namespace Ryujinx.Ava.UI.Windows
if (Program.PreviewerDetached)
{
- Initialize();
-
InputManager = new InputManager(new AvaloniaKeyboardDriver(this), new SDL2GamepadDriver());
- ViewModel.Initialize(
- ContentManager,
- StorageProvider,
- ApplicationLibrary,
- VirtualFileSystem,
- AccountManager,
- InputManager,
- _userChannelPersistence,
- LibHacHorizonManager,
- UiHandler,
- ShowLoading,
- SwitchToGameControl,
- SetMainContent,
- this);
-
- ViewModel.RefreshFirmwareStatus();
-
- LoadGameList();
-
this.GetObservable(IsActiveProperty).Subscribe(IsActiveChanged);
this.ScalingChanged += OnScalingChanged;
}
-
- ApplicationLibrary.ApplicationCountUpdated += ApplicationLibrary_ApplicationCountUpdated;
- ApplicationLibrary.ApplicationAdded += ApplicationLibrary_ApplicationAdded;
}
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
@@ -122,38 +99,19 @@ namespace Ryujinx.Ava.UI.Windows
ViewModel.IsActive = obj;
}
- public void LoadGameList()
- {
- if (_isLoading)
- {
- return;
- }
-
- _isLoading = true;
-
- LoadApplications();
-
- _isLoading = false;
- }
-
private void OnScalingChanged(object sender, EventArgs e)
{
Program.DesktopScaleFactor = this.RenderScaling;
}
- public void AddApplication(ApplicationData applicationData)
+ private void ApplicationLibrary_ApplicationAdded(object sender, ApplicationAddedEventArgs e)
{
- Dispatcher.UIThread.InvokeAsync(() =>
+ Dispatcher.UIThread.Post(() =>
{
- ViewModel.Applications.Add(applicationData);
+ ViewModel.Applications.Add(e.AppData);
});
}
- private void ApplicationLibrary_ApplicationAdded(object sender, ApplicationAddedEventArgs e)
- {
- AddApplication(e.AppData);
- }
-
private void ApplicationLibrary_ApplicationCountUpdated(object sender, ApplicationCountUpdatedEventArgs e)
{
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarGamesLoaded, e.NumAppsLoaded, e.NumAppsFound);
@@ -183,7 +141,7 @@ namespace Ryujinx.Ava.UI.Windows
string path = new FileInfo(args.Application.Path).FullName;
- ViewModel.LoadApplication(path);
+ ViewModel.LoadApplication(path).Wait();
}
args.Handled = true;
@@ -202,13 +160,10 @@ namespace Ryujinx.Ava.UI.Windows
ViewModel.ShowContent = true;
ViewModel.IsLoadingIndeterminate = false;
- Dispatcher.UIThread.InvokeAsync(() =>
+ if (startFullscreen && ViewModel.WindowState != WindowState.FullScreen)
{
- if (startFullscreen && ViewModel.WindowState != WindowState.FullScreen)
- {
- ViewModel.ToggleFullscreen();
- }
- });
+ ViewModel.ToggleFullscreen();
+ }
}
public void ShowLoading(bool startFullscreen = false)
@@ -217,13 +172,10 @@ namespace Ryujinx.Ava.UI.Windows
ViewModel.ShowLoadProgress = true;
ViewModel.IsLoadingIndeterminate = true;
- Dispatcher.UIThread.InvokeAsync(() =>
+ if (startFullscreen && ViewModel.WindowState != WindowState.FullScreen)
{
- if (startFullscreen && ViewModel.WindowState != WindowState.FullScreen)
- {
- ViewModel.ToggleFullscreen();
- }
- });
+ ViewModel.ToggleFullscreen();
+ }
}
private void Initialize()
@@ -255,7 +207,7 @@ namespace Ryujinx.Ava.UI.Windows
}
[SupportedOSPlatform("linux")]
- private static async void ShowVmMaxMapCountWarning()
+ private static async Task ShowVmMaxMapCountWarning()
{
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.LinuxVmMaxMapCountWarningTextSecondary,
LinuxHelper.VmMaxMapCount, LinuxHelper.RecommendedVmMaxMapCount);
@@ -267,7 +219,7 @@ namespace Ryujinx.Ava.UI.Windows
}
[SupportedOSPlatform("linux")]
- private static async void ShowVmMaxMapCountDialog()
+ private static async Task ShowVmMaxMapCountDialog()
{
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.LinuxVmMaxMapCountDialogTextPrimary,
LinuxHelper.RecommendedVmMaxMapCount);
@@ -317,8 +269,7 @@ namespace Ryujinx.Ava.UI.Windows
{
ShowKeyErrorOnLoad = false;
- Dispatcher.UIThread.Post(async () => await
- UserErrorDialog.ShowUserErrorDialog(UserError.NoKeys));
+ UserErrorDialog.ShowUserErrorDialog(UserError.NoKeys).Wait();
}
if (OperatingSystem.IsLinux() && LinuxHelper.VmMaxMapCount < LinuxHelper.RecommendedVmMaxMapCount)
@@ -327,11 +278,11 @@ namespace Ryujinx.Ava.UI.Windows
if (LinuxHelper.PkExecPath is not null)
{
- Dispatcher.UIThread.Post(ShowVmMaxMapCountDialog);
+ ShowVmMaxMapCountDialog().Wait();
}
else
{
- Dispatcher.UIThread.Post(ShowVmMaxMapCountWarning);
+ ShowVmMaxMapCountWarning().Wait();
}
}
@@ -339,7 +290,7 @@ namespace Ryujinx.Ava.UI.Windows
{
_deferLoad = false;
- ViewModel.LoadApplication(_launchPath, _startFullscreen);
+ ViewModel.LoadApplication(_launchPath, _startFullscreen).Wait();
}
if (ConfigurationState.Instance.CheckUpdatesOnStart.Value && Updater.CanUpdate(false))
@@ -372,7 +323,7 @@ namespace Ryujinx.Ava.UI.Windows
ViewModel.WindowHeight = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight * Program.WindowScaleFactor;
ViewModel.WindowWidth = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth * Program.WindowScaleFactor;
- ViewModel.WindowState = ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value is true ? WindowState.Maximized : WindowState.Normal;
+ ViewModel.WindowState = ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value ? WindowState.Maximized : WindowState.Normal;
if (CheckScreenBounds(savedPoint))
{
@@ -415,6 +366,30 @@ namespace Ryujinx.Ava.UI.Windows
{
base.OnOpened(e);
+ Initialize();
+
+ ViewModel.Initialize(
+ ContentManager,
+ StorageProvider,
+ ApplicationLibrary,
+ VirtualFileSystem,
+ AccountManager,
+ InputManager,
+ _userChannelPersistence,
+ LibHacHorizonManager,
+ UiHandler,
+ ShowLoading,
+ SwitchToGameControl,
+ SetMainContent,
+ this);
+
+ ApplicationLibrary.ApplicationCountUpdated += ApplicationLibrary_ApplicationCountUpdated;
+ ApplicationLibrary.ApplicationAdded += ApplicationLibrary_ApplicationAdded;
+
+ ViewModel.RefreshFirmwareStatus();
+
+ LoadApplications();
+
CheckLaunchState();
}
@@ -514,18 +489,15 @@ namespace Ryujinx.Ava.UI.Windows
});
}
- public async void LoadApplications()
+ public void LoadApplications()
{
- await Dispatcher.UIThread.InvokeAsync(() =>
- {
- ViewModel.Applications.Clear();
+ ViewModel.Applications.Clear();
- StatusBarView.LoadProgressBar.IsVisible = true;
- ViewModel.StatusBarProgressMaximum = 0;
- ViewModel.StatusBarProgressValue = 0;
+ StatusBarView.LoadProgressBar.IsVisible = true;
+ ViewModel.StatusBarProgressMaximum = 0;
+ ViewModel.StatusBarProgressValue = 0;
- LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarGamesLoaded, 0, 0);
- });
+ LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarGamesLoaded, 0, 0);
ReloadGameList();
}
@@ -558,9 +530,17 @@ namespace Ryujinx.Ava.UI.Windows
_isLoading = true;
- ApplicationLibrary.LoadApplications(ConfigurationState.Instance.Ui.GameDirs.Value, ConfigurationState.Instance.System.Language);
+ Thread applicationLibraryThread = new(() =>
+ {
+ ApplicationLibrary.LoadApplications(ConfigurationState.Instance.Ui.GameDirs, ConfigurationState.Instance.System.Language);
- _isLoading = false;
+ _isLoading = false;
+ })
+ {
+ Name = "GUI.ApplicationLibraryThread",
+ IsBackground = true,
+ };
+ applicationLibraryThread.Start();
}
}
}