Compare commits

...

3 commits

Author SHA1 Message Date
Evan Husted
cb170ab054
Merge branch 'master' into net90 2024-12-04 18:09:28 -06:00
Evan Husted
1d0152b961 UI: Move Shader Compilation hint, graphics backend, and GPU manufacturer to the right side of the status bar, next to firmware version.
Some checks failed
Canary release job / Create tag (push) Has been cancelled
Canary release job / Release for linux-arm64 (push) Has been cancelled
Canary release job / Release for linux-x64 (push) Has been cancelled
Canary release job / Release for win-x64 (push) Has been cancelled
Canary release job / Release MacOS universal (push) Has been cancelled
Removed the "Game:" prefix in front of FPS.
2024-12-04 03:37:21 -06:00
Evan Husted
07690e4527 chore: applets: Cleanup redundant ReadStruct implementations & provide a default implementation for IApplet#GetResult. 2024-12-04 02:24:40 -06:00
36 changed files with 59 additions and 111 deletions

View file

@ -38,7 +38,7 @@
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.3-build14" /> <PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.3-build14" />
<PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" /> <PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" /> <PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
<PackageVersion Include="Gommon" Version="2.6.6" /> <PackageVersion Include="Gommon" Version="2.6.8" />
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" /> <PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
<PackageVersion Include="shaderc.net" Version="0.1.0" /> <PackageVersion Include="shaderc.net" Version="0.1.0" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" /> <PackageVersion Include="SharpZipLib" Version="1.4.2" />

View file

@ -24,11 +24,9 @@ namespace Ryujinx.HLE.HOS.Applets
case AppletId.SoftwareKeyboard: case AppletId.SoftwareKeyboard:
return new SoftwareKeyboardApplet(system); return new SoftwareKeyboardApplet(system);
case AppletId.LibAppletWeb: case AppletId.LibAppletWeb:
return new BrowserApplet(system);
case AppletId.LibAppletShop: case AppletId.LibAppletShop:
return new BrowserApplet(system);
case AppletId.LibAppletOff: case AppletId.LibAppletOff:
return new BrowserApplet(system); return new BrowserApplet();
case AppletId.MiiEdit: case AppletId.MiiEdit:
Logger.Warning?.Print(LogClass.Application, $"Please use the MiiEdit inside File/Open Applet"); Logger.Warning?.Print(LogClass.Application, $"Please use the MiiEdit inside File/Open Applet");
return new DummyApplet(system); return new DummyApplet(system);

View file

@ -18,13 +18,6 @@ namespace Ryujinx.HLE.HOS.Applets.Browser
private List<BrowserArgument> _arguments; private List<BrowserArgument> _arguments;
private ShimKind _shimKind; private ShimKind _shimKind;
public BrowserApplet(Horizon system) { }
public ResultCode GetResult()
{
return ResultCode.Success;
}
public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession) public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession)
{ {
_normalSession = normalSession; _normalSession = normalSession;

View file

@ -125,19 +125,6 @@ namespace Ryujinx.HLE.HOS.Applets.Cabinet
return bytes; return bytes;
} }
public static T ReadStruct<T>(byte[] data) where T : unmanaged
{
if (data.Length < Unsafe.SizeOf<T>())
{
throw new ArgumentException("Not enough data to read the struct");
}
fixed (byte* dataPtr = data)
{
return Unsafe.Read<T>(dataPtr);
}
}
#region Structs #region Structs
[StructLayout(LayoutKind.Sequential, Pack = 1)] [StructLayout(LayoutKind.Sequential, Pack = 1)]

View file

@ -117,11 +117,6 @@ namespace Ryujinx.HLE.HOS.Applets
return ResultCode.Success; return ResultCode.Success;
} }
public ResultCode GetResult()
{
return ResultCode.Success;
}
private static byte[] BuildResponse(ControllerSupportResultInfo result) private static byte[] BuildResponse(ControllerSupportResultInfo result)
{ {
using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); using MemoryStream stream = MemoryStreamManager.Shared.GetStream();

View file

@ -11,11 +11,14 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy
{ {
private readonly Horizon _system; private readonly Horizon _system;
private AppletSession _normalSession; private AppletSession _normalSession;
public event EventHandler AppletStateChanged; public event EventHandler AppletStateChanged;
public DummyApplet(Horizon system) public DummyApplet(Horizon system)
{ {
_system = system; _system = system;
} }
public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession) public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession)
{ {
_normalSession = normalSession; _normalSession = normalSession;
@ -24,10 +27,7 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy
_system.ReturnFocus(); _system.ReturnFocus();
return ResultCode.Success; return ResultCode.Success;
} }
private static T ReadStruct<T>(byte[] data) where T : struct
{
return MemoryMarshal.Read<T>(data.AsSpan());
}
private static byte[] BuildResponse() private static byte[] BuildResponse()
{ {
using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); using MemoryStream stream = MemoryStreamManager.Shared.GetStream();
@ -35,9 +35,5 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy
writer.Write((ulong)ResultCode.Success); writer.Write((ulong)ResultCode.Success);
return stream.ToArray(); return stream.ToArray();
} }
public ResultCode GetResult()
{
return ResultCode.Success;
}
} }
} }

View file

@ -203,10 +203,5 @@ namespace Ryujinx.HLE.HOS.Applets.Error
_horizon.Device.UIHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber} (Details)", "\n" + detailsText, buttons.ToArray()); _horizon.Device.UIHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber} (Details)", "\n" + detailsText, buttons.ToArray());
} }
} }
public ResultCode GetResult()
{
return ResultCode.Success;
}
} }
} }

View file

@ -13,7 +13,7 @@ namespace Ryujinx.HLE.HOS.Applets
ResultCode Start(AppletSession normalSession, ResultCode Start(AppletSession normalSession,
AppletSession interactiveSession); AppletSession interactiveSession);
ResultCode GetResult(); ResultCode GetResult() => ResultCode.Success;
bool DrawTo(RenderingSurfaceInfo surfaceInfo, IVirtualMemoryManager destination, ulong position) => false; bool DrawTo(RenderingSurfaceInfo surfaceInfo, IVirtualMemoryManager destination, ulong position) => false;

View file

@ -37,11 +37,6 @@ namespace Ryujinx.HLE.HOS.Applets
return ResultCode.Success; return ResultCode.Success;
} }
public ResultCode GetResult()
{
return ResultCode.Success;
}
private byte[] BuildResponse() private byte[] BuildResponse()
{ {
UserProfile currentUser = _system.AccountManager.LastOpenedUser; UserProfile currentUser = _system.AccountManager.LastOpenedUser;

View file

@ -145,11 +145,6 @@ namespace Ryujinx.HLE.HOS.Applets
} }
} }
public ResultCode GetResult()
{
return ResultCode.Success;
}
private bool IsKeyboardActive() private bool IsKeyboardActive()
{ {
return _backgroundState >= InlineKeyboardState.Appearing && _backgroundState < InlineKeyboardState.Disappearing; return _backgroundState >= InlineKeyboardState.Appearing && _backgroundState < InlineKeyboardState.Disappearing;

View file

@ -2,7 +2,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
{ {
/// <summary> /// <summary>
/// Wraps a type in a class so it gets stored in the GC managed heap. This is used as communication mechanism /// Wraps a type in a class so it gets stored in the GC managed heap. This is used as communication mechanism
/// between classed that need to be disposed and, thus, can't share their references. /// between classes that need to be disposed and, thus, can't share their references.
/// </summary> /// </summary>
/// <typeparam name="T">The internal type.</typeparam> /// <typeparam name="T">The internal type.</typeparam>
class TRef<T> class TRef<T>

View file

@ -1,3 +1,5 @@
using Gommon;
using Humanizer;
using NetCoreServer; using NetCoreServer;
using Open.Nat; using Open.Nat;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
@ -153,7 +155,10 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
if (_publicPort != 0) if (_publicPort != 0)
{ {
_ = Task.Delay(PortLeaseRenew * 1000, _disposedCancellation.Token).ContinueWith((task) => Task.Run(RefreshLease)); _ = Executor.ExecuteAfterDelayAsync(
PortLeaseRenew.Seconds(),
_disposedCancellation.Token,
RefreshLease);
} }
_natDevice = device; _natDevice = device;
@ -257,7 +262,10 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
} }
_ = Task.Delay(PortLeaseRenew, _disposedCancellation.Token).ContinueWith((task) => Task.Run(RefreshLease)); _ = Executor.ExecuteAfterDelayAsync(
PortLeaseRenew.Milliseconds(),
_disposedCancellation.Token,
RefreshLease);
} }
public bool TryRegisterUser(P2pProxySession session, ExternalProxyConfig config) public bool TryRegisterUser(P2pProxySession session, ExternalProxyConfig config)

View file

@ -1137,7 +1137,7 @@ namespace Ryujinx.Ava
LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%", LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%",
dockedMode, dockedMode,
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(), ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", $"{Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
$"FIFO: {Device.Statistics.GetFifoPercent():00.00} %", $"FIFO: {Device.Statistics.GetFifoPercent():00.00} %",
_displayCount)); _displayCount));
} }

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "إضافة ملفات جديدة...", "UpdaterAddingFiles": "إضافة ملفات جديدة...",
"UpdaterExtracting": "استخراج التحديث...", "UpdaterExtracting": "استخراج التحديث...",
"UpdaterDownloading": "تحميل التحديث...", "UpdaterDownloading": "تحميل التحديث...",
"Game": "لعبة",
"Docked": "تركيب بالمنصة", "Docked": "تركيب بالمنصة",
"Handheld": "محمول", "Handheld": "محمول",
"ConnectionError": "خطأ في الاتصال", "ConnectionError": "خطأ في الاتصال",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Neue Dateien hinzufügen...", "UpdaterAddingFiles": "Neue Dateien hinzufügen...",
"UpdaterExtracting": "Update extrahieren...", "UpdaterExtracting": "Update extrahieren...",
"UpdaterDownloading": "Update herunterladen...", "UpdaterDownloading": "Update herunterladen...",
"Game": "Spiel",
"Docked": "Docked", "Docked": "Docked",
"Handheld": "Handheld", "Handheld": "Handheld",
"ConnectionError": "Verbindungsfehler.", "ConnectionError": "Verbindungsfehler.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Προσθήκη Νέων Αρχείων...", "UpdaterAddingFiles": "Προσθήκη Νέων Αρχείων...",
"UpdaterExtracting": "Εξαγωγή Ενημέρωσης...", "UpdaterExtracting": "Εξαγωγή Ενημέρωσης...",
"UpdaterDownloading": "Λήψη Ενημέρωσης...", "UpdaterDownloading": "Λήψη Ενημέρωσης...",
"Game": "Παιχνίδι",
"Docked": "Προσκολλημένο", "Docked": "Προσκολλημένο",
"Handheld": "Χειροκίνητο", "Handheld": "Χειροκίνητο",
"ConnectionError": "Σφάλμα Σύνδεσης.", "ConnectionError": "Σφάλμα Σύνδεσης.",

View file

@ -730,7 +730,6 @@
"UpdaterAddingFiles": "Adding New Files...", "UpdaterAddingFiles": "Adding New Files...",
"UpdaterExtracting": "Extracting Update...", "UpdaterExtracting": "Extracting Update...",
"UpdaterDownloading": "Downloading Update...", "UpdaterDownloading": "Downloading Update...",
"Game": "Game",
"Docked": "Docked", "Docked": "Docked",
"Handheld": "Handheld", "Handheld": "Handheld",
"ConnectionError": "Connection Error.", "ConnectionError": "Connection Error.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Añadiendo nuevos archivos...", "UpdaterAddingFiles": "Añadiendo nuevos archivos...",
"UpdaterExtracting": "Extrayendo actualización...", "UpdaterExtracting": "Extrayendo actualización...",
"UpdaterDownloading": "Descargando actualización...", "UpdaterDownloading": "Descargando actualización...",
"Game": "Juego",
"Docked": "Dock/TV", "Docked": "Dock/TV",
"Handheld": "Portátil", "Handheld": "Portátil",
"ConnectionError": "Error de conexión.", "ConnectionError": "Error de conexión.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Ajout des nouveaux fichiers...", "UpdaterAddingFiles": "Ajout des nouveaux fichiers...",
"UpdaterExtracting": "Extraction de la mise à jour…", "UpdaterExtracting": "Extraction de la mise à jour…",
"UpdaterDownloading": "Téléchargement de la mise à jour...", "UpdaterDownloading": "Téléchargement de la mise à jour...",
"Game": "Jeu",
"Docked": "Mode station d'accueil", "Docked": "Mode station d'accueil",
"Handheld": "Mode Portable", "Handheld": "Mode Portable",
"ConnectionError": "Erreur de connexion.", "ConnectionError": "Erreur de connexion.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "מוסיף קבצים חדשים...", "UpdaterAddingFiles": "מוסיף קבצים חדשים...",
"UpdaterExtracting": "מחלץ עדכון...", "UpdaterExtracting": "מחלץ עדכון...",
"UpdaterDownloading": "מוריד עדכון...", "UpdaterDownloading": "מוריד עדכון...",
"Game": "משחק",
"Docked": "בתחנת עגינה", "Docked": "בתחנת עגינה",
"Handheld": "נייד", "Handheld": "נייד",
"ConnectionError": "שגיאת חיבור", "ConnectionError": "שגיאת חיבור",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Aggiunta dei nuovi file...", "UpdaterAddingFiles": "Aggiunta dei nuovi file...",
"UpdaterExtracting": "Estrazione dell'aggiornamento...", "UpdaterExtracting": "Estrazione dell'aggiornamento...",
"UpdaterDownloading": "Download dell'aggiornamento...", "UpdaterDownloading": "Download dell'aggiornamento...",
"Game": "Gioco",
"Docked": "TV", "Docked": "TV",
"Handheld": "Portatile", "Handheld": "Portatile",
"ConnectionError": "Errore di connessione.", "ConnectionError": "Errore di connessione.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "新規ファイルを追加中...", "UpdaterAddingFiles": "新規ファイルを追加中...",
"UpdaterExtracting": "アップデートを展開中...", "UpdaterExtracting": "アップデートを展開中...",
"UpdaterDownloading": "アップデートをダウンロード中...", "UpdaterDownloading": "アップデートをダウンロード中...",
"Game": "ゲーム",
"Docked": "ドッキング", "Docked": "ドッキング",
"Handheld": "携帯", "Handheld": "携帯",
"ConnectionError": "接続エラー.", "ConnectionError": "接続エラー.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "새 파일 추가...", "UpdaterAddingFiles": "새 파일 추가...",
"UpdaterExtracting": "업데이트 추출...", "UpdaterExtracting": "업데이트 추출...",
"UpdaterDownloading": "업데이트 내려받기 중...", "UpdaterDownloading": "업데이트 내려받기 중...",
"Game": "게임",
"Docked": "도킹", "Docked": "도킹",
"Handheld": "휴대", "Handheld": "휴대",
"ConnectionError": "연결 오류가 발생했습니다.", "ConnectionError": "연결 오류가 발생했습니다.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Dodawanie Nowych Plików...", "UpdaterAddingFiles": "Dodawanie Nowych Plików...",
"UpdaterExtracting": "Wypakowywanie Aktualizacji...", "UpdaterExtracting": "Wypakowywanie Aktualizacji...",
"UpdaterDownloading": "Pobieranie Aktualizacji...", "UpdaterDownloading": "Pobieranie Aktualizacji...",
"Game": "Gra",
"Docked": "Zadokowany", "Docked": "Zadokowany",
"Handheld": "Przenośny", "Handheld": "Przenośny",
"ConnectionError": "Błąd Połączenia.", "ConnectionError": "Błąd Połączenia.",

View file

@ -717,7 +717,6 @@
"UpdaterAddingFiles": "Adicionando novos arquivos...", "UpdaterAddingFiles": "Adicionando novos arquivos...",
"UpdaterExtracting": "Extraíndo atualização...", "UpdaterExtracting": "Extraíndo atualização...",
"UpdaterDownloading": "Baixando atualização...", "UpdaterDownloading": "Baixando atualização...",
"Game": "Jogo",
"Docked": "TV", "Docked": "TV",
"Handheld": "Portátil", "Handheld": "Portátil",
"ConnectionError": "Erro de conexão.", "ConnectionError": "Erro de conexão.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Добавление новых файлов...", "UpdaterAddingFiles": "Добавление новых файлов...",
"UpdaterExtracting": "Извлечение обновления...", "UpdaterExtracting": "Извлечение обновления...",
"UpdaterDownloading": "Загрузка обновления...", "UpdaterDownloading": "Загрузка обновления...",
"Game": "Игра",
"Docked": "Стационарный режим", "Docked": "Стационарный режим",
"Handheld": "Портативный режим", "Handheld": "Портативный режим",
"ConnectionError": "Ошибка соединения", "ConnectionError": "Ошибка соединения",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "กำลังเพิ่มไฟล์ใหม่...", "UpdaterAddingFiles": "กำลังเพิ่มไฟล์ใหม่...",
"UpdaterExtracting": "กำลังแยกการอัปเดต...", "UpdaterExtracting": "กำลังแยกการอัปเดต...",
"UpdaterDownloading": "กำลังดาวน์โหลดอัปเดต...", "UpdaterDownloading": "กำลังดาวน์โหลดอัปเดต...",
"Game": "เกมส์",
"Docked": "ด็อก", "Docked": "ด็อก",
"Handheld": "แฮนด์เฮลด์", "Handheld": "แฮนด์เฮลด์",
"ConnectionError": "การเชื่อมต่อล้มเหลว", "ConnectionError": "การเชื่อมต่อล้มเหลว",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Yeni Dosyalar Ekleniyor...", "UpdaterAddingFiles": "Yeni Dosyalar Ekleniyor...",
"UpdaterExtracting": "Güncelleme Ayrıştırılıyor...", "UpdaterExtracting": "Güncelleme Ayrıştırılıyor...",
"UpdaterDownloading": "Güncelleme İndiriliyor...", "UpdaterDownloading": "Güncelleme İndiriliyor...",
"Game": "Oyun",
"Docked": "Docked", "Docked": "Docked",
"Handheld": "El tipi", "Handheld": "El tipi",
"ConnectionError": "Bağlantı Hatası.", "ConnectionError": "Bağlantı Hatası.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "Додавання нових файлів...", "UpdaterAddingFiles": "Додавання нових файлів...",
"UpdaterExtracting": "Видобування оновлення...", "UpdaterExtracting": "Видобування оновлення...",
"UpdaterDownloading": "Завантаження оновлення...", "UpdaterDownloading": "Завантаження оновлення...",
"Game": "Гра",
"Docked": "Док-станція", "Docked": "Док-станція",
"Handheld": "Портативний", "Handheld": "Портативний",
"ConnectionError": "Помилка з'єднання.", "ConnectionError": "Помилка з'єднання.",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "安装更新中...", "UpdaterAddingFiles": "安装更新中...",
"UpdaterExtracting": "正在提取更新...", "UpdaterExtracting": "正在提取更新...",
"UpdaterDownloading": "下载更新中...", "UpdaterDownloading": "下载更新中...",
"Game": "游戏",
"Docked": "主机模式", "Docked": "主机模式",
"Handheld": "掌机模式", "Handheld": "掌机模式",
"ConnectionError": "连接错误。", "ConnectionError": "连接错误。",

View file

@ -718,7 +718,6 @@
"UpdaterAddingFiles": "正在加入新檔案...", "UpdaterAddingFiles": "正在加入新檔案...",
"UpdaterExtracting": "正在提取更新...", "UpdaterExtracting": "正在提取更新...",
"UpdaterDownloading": "正在下載更新...", "UpdaterDownloading": "正在下載更新...",
"Game": "遊戲",
"Docked": "底座模式", "Docked": "底座模式",
"Handheld": "手提模式", "Handheld": "手提模式",
"ConnectionError": "連線錯誤。", "ConnectionError": "連線錯誤。",

View file

@ -70,7 +70,7 @@ namespace Ryujinx.Ava.UI.ViewModels
private string _gpuStatusText; private string _gpuStatusText;
private string _shaderCountText; private string _shaderCountText;
private bool _isAmiiboRequested; private bool _isAmiiboRequested;
private bool _showRightmostSeparator; private bool _showShaderCompilationHint;
private bool _isGameRunning; private bool _isGameRunning;
private bool _isFullScreen; private bool _isFullScreen;
private int _progressMaximum; private int _progressMaximum;
@ -275,12 +275,12 @@ namespace Ryujinx.Ava.UI.ViewModels
public bool ShowFirmwareStatus => !ShowLoadProgress; public bool ShowFirmwareStatus => !ShowLoadProgress;
public bool ShowRightmostSeparator public bool ShowShaderCompilationHint
{ {
get => _showRightmostSeparator; get => _showShaderCompilationHint;
set set
{ {
_showRightmostSeparator = value; _showShaderCompilationHint = value;
OnPropertyChanged(); OnPropertyChanged();
} }
@ -1497,7 +1497,7 @@ namespace Ryujinx.Ava.UI.ViewModels
VolumeStatusText = args.VolumeStatus; VolumeStatusText = args.VolumeStatus;
FifoStatusText = args.FifoStatus; FifoStatusText = args.FifoStatus;
ShaderCountText = (ShowRightmostSeparator = args.ShaderCount > 0) ShaderCountText = (ShowShaderCompilationHint = args.ShaderCount > 0)
? $"{LocaleManager.Instance[LocaleKeys.CompilingShaders]}: {args.ShaderCount}" ? $"{LocaleManager.Instance[LocaleKeys.CompilingShaders]}: {args.ShaderCount}"
: string.Empty; : string.Empty;

View file

@ -200,7 +200,6 @@ namespace Ryujinx.Ava.UI.Views.Main
await Dispatcher.UIThread.InvokeAsync(() => await Dispatcher.UIThread.InvokeAsync(() =>
{ {
ViewModel.WindowState = WindowState.Normal; ViewModel.WindowState = WindowState.Normal;
Window.Arrange(new Rect(Window.Position.X, Window.Position.Y, windowWidthScaled, windowHeightScaled)); Window.Arrange(new Rect(Window.Position.X, Window.Position.Y, windowWidthScaled, windowHeightScaled));
@ -210,7 +209,7 @@ namespace Ryujinx.Ava.UI.Views.Main
public async void CheckForUpdates(object sender, RoutedEventArgs e) public async void CheckForUpdates(object sender, RoutedEventArgs e)
{ {
if (Updater.CanUpdate(true)) if (Updater.CanUpdate(true))
await Window.BeginUpdateAsync(true); await Updater.BeginUpdateAsync(true);
} }
public async void OpenXCITrimmerWindow(object sender, RoutedEventArgs e) => await XCITrimmerWindow.Show(ViewModel); public async void OpenXCITrimmerWindow(object sender, RoutedEventArgs e) => await XCITrimmerWindow.Show(ViewModel);

View file

@ -23,7 +23,7 @@
Background="{DynamicResource ThemeContentBackgroundColor}" Background="{DynamicResource ThemeContentBackgroundColor}"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
IsVisible="{Binding ShowMenuAndStatusBar}" IsVisible="{Binding ShowMenuAndStatusBar}"
ColumnDefinitions="Auto,Auto,*,Auto"> ColumnDefinitions="Auto,Auto,*,Auto,Auto">
<StackPanel <StackPanel
Grid.Column="0" Grid.Column="0"
Margin="5" Margin="5"
@ -284,14 +284,27 @@
IsVisible="{Binding !ShowLoadProgress}" IsVisible="{Binding !ShowLoadProgress}"
Text="{Binding FifoStatusText}" Text="{Binding FifoStatusText}"
TextAlignment="Start" /> TextAlignment="Start" />
</StackPanel>
<StackPanel
Grid.Column="3"
Margin="0, 0, 5, 0"
IsVisible="{Binding IsGameRunning}"
VerticalAlignment="Center"
Orientation="Horizontal">
<TextBlock
Name="ShaderCount"
Margin="5,0,5,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
IsVisible="{Binding ShowShaderCompilationHint}"
Text="{Binding ShaderCountText}" />
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
Background="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding ShowShaderCompilationHint}" />
<TextBlock <TextBlock
Margin="5,0,5,0" Margin="5,0,5,0"
HorizontalAlignment="Left" HorizontalAlignment="Left"
@ -308,35 +321,29 @@
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding !ShowLoadProgress}" /> IsVisible="{Binding !ShowLoadProgress}" />
<TextBlock <TextBlock
Margin="5,0,5,0" Margin="5,0,0,0"
HorizontalAlignment="Left" HorizontalAlignment="Left"
VerticalAlignment="Center" VerticalAlignment="Center"
IsVisible="{Binding !ShowLoadProgress}" IsVisible="{Binding !ShowLoadProgress}"
Text="{Binding GpuNameText}" Text="{Binding GpuNameText}"
TextAlignment="Start" /> TextAlignment="Start" />
</StackPanel>
<StackPanel
Grid.Column="4"
Margin="0,0,5,0"
VerticalAlignment="Center"
IsVisible="{Binding ShowFirmwareStatus}"
Orientation="Horizontal">
<Border <Border
Width="2" Width="2"
Height="12" Height="12"
Margin="0" Margin="0"
BorderBrush="Gray" BorderBrush="Gray"
BorderThickness="1" BorderThickness="1"
IsVisible="{Binding ShowRightmostSeparator}" /> IsVisible="{Binding IsGameRunning}" />
<TextBlock
Name="ShaderCount"
Margin="5,0,5,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding ShaderCountText}" />
</StackPanel>
<StackPanel
Grid.Column="3"
Margin="0,0,5,0"
VerticalAlignment="Center"
IsVisible="{Binding ShowFirmwareStatus}"
Orientation="Horizontal">
<TextBlock <TextBlock
Name="FirmwareStatus" Name="FirmwareStatus"
Margin="0" Margin="5, 0, 0, 0"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{ext:Locale StatusBarSystemVersion}" /> Text="{ext:Locale StatusBarSystemVersion}" />

View file

@ -7,6 +7,7 @@ using Avalonia.Threading;
using DynamicData; using DynamicData;
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using FluentAvalonia.UI.Windowing; using FluentAvalonia.UI.Windowing;
using Gommon;
using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem;
using Ryujinx.Ava.Common; using Ryujinx.Ava.Common;
using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Locale;
@ -387,10 +388,8 @@ namespace Ryujinx.Ava.UI.Windows
if (ConfigurationState.Instance.CheckUpdatesOnStart && !CommandLineState.HideAvailableUpdates && Updater.CanUpdate()) if (ConfigurationState.Instance.CheckUpdatesOnStart && !CommandLineState.HideAvailableUpdates && Updater.CanUpdate())
{ {
await this.BeginUpdateAsync() await Updater.BeginUpdateAsync()
.ContinueWith( .Catch(task => Logger.Error?.Print(LogClass.Application, $"Updater Error: {task.Exception}"));
task => Logger.Error?.Print(LogClass.Application, $"Updater Error: {task.Exception}"),
TaskContinuationOptions.OnlyOnFaulted);
} }
} }

View file

@ -1,4 +1,3 @@
using Avalonia.Controls;
using Avalonia.Threading; using Avalonia.Threading;
using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Controls;
using Gommon; using Gommon;
@ -51,7 +50,7 @@ namespace Ryujinx.Ava
private static readonly string[] _windowsDependencyDirs = []; private static readonly string[] _windowsDependencyDirs = [];
public static async Task BeginUpdateAsync(this Window mainWindow, bool showVersionUpToDate = false) public static async Task BeginUpdateAsync(bool showVersionUpToDate = false)
{ {
if (_running) if (_running)
{ {
@ -235,7 +234,7 @@ namespace Ryujinx.Ava
switch (shouldUpdate) switch (shouldUpdate)
{ {
case UserResult.Yes: case UserResult.Yes:
await UpdateRyujinx(mainWindow, _buildUrl); await UpdateRyujinx(_buildUrl);
break; break;
// Secondary button maps to no, which in this case is the show changelog button. // Secondary button maps to no, which in this case is the show changelog button.
case UserResult.No: case UserResult.No:
@ -258,7 +257,7 @@ namespace Ryujinx.Ava
return result; return result;
} }
private static async Task UpdateRyujinx(Window parent, string downloadUrl) private static async Task UpdateRyujinx(string downloadUrl)
{ {
_updateSuccessful = false; _updateSuccessful = false;
@ -278,7 +277,7 @@ namespace Ryujinx.Ava
SubHeader = LocaleManager.Instance[LocaleKeys.UpdaterDownloading], SubHeader = LocaleManager.Instance[LocaleKeys.UpdaterDownloading],
IconSource = new SymbolIconSource { Symbol = Symbol.Download }, IconSource = new SymbolIconSource { Symbol = Symbol.Download },
ShowProgressBar = true, ShowProgressBar = true,
XamlRoot = parent, XamlRoot = App.MainWindow,
}; };
taskDialog.Opened += (s, e) => taskDialog.Opened += (s, e) =>