diff --git a/assets/locales.json b/assets/locales.json index f1d2b5719..903a3e6ef 100644 --- a/assets/locales.json +++ b/assets/locales.json @@ -6445,26 +6445,27 @@ { "ID": "SettingsButtonResetConfirm", "Translations": { - "ar_SA": "أريد إعادة تعيين إعداداتي", - "de_DE": "Ich möchte meine Einstellungen zurücksetzen", - "el_GR": "Θέλω να επαναφέρω τις ρυθμίσεις μου", - "en_US": "I Want To Reset My Settings", - "es_ES": "Quiero Restablecer Mi Configuración", - "fr_FR": "Je Veux Réinitialiser Mes Paramètres", - "he_IL": "אני רוצה לאפס את ההגדרות שלי", - "it_IT": "Voglio reimpostare le mie impostazioni", - "ja_JP": "設定をリセットしたいです", - "ko_KR": "설정을 초기화하고 싶습니다", - "no_NO": "Jeg vil tilbakestille innstillingene mine", - "pl_PL": "Chcę zresetować moje ustawienia", - "pt_BR": "Quero redefinir minhas configurações", - "ru_RU": "Я хочу сбросить свои настройки", - "sv_SE": "Jag vill nollställa mina inställningar", - "th_TH": "ฉันต้องการรีเซ็ตการตั้งค่าของฉัน", - "tr_TR": "Ayarlarımı sıfırlamak istiyorum", - "uk_UA": "Я хочу скинути налаштування", - "zh_CN": "我要重置我的设置", - "zh_TW": "我想重設我的設定" + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "I want to reset my settings.", + "es_ES": "Quiero restablecer mi Configuración.", + "fr_FR": "Je veux réinitialiser mes paramètres.", + "he_IL": "", + "it_IT": "Voglio ripristinare le mie impostazioni.", + "ja_JP": "", + "ko_KR": "설정을 초기화하고 싶습니다.", + "no_NO": "Jeg vil tilbakestille innstillingene mine.", + "pl_PL": "", + "pt_BR": "Quero redefinir minhas configurações.", + "ru_RU": "Я хочу сбросить свои настройки.", + "sv_SE": "Jag vill nollställa mina inställningar.", + "th_TH": "", + "tr_TR": "", + "uk_UA": "Я хочу скинути налаштування.", + "zh_CN": "我要重置我的设置。", + "zh_TW": "我想重設我的設定。" + } }, { diff --git a/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs index 5656d6e73..c10ec69bd 100644 --- a/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs @@ -11,11 +11,13 @@ using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Systems.PlayReport; using Ryujinx.Ava.Utilities; +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; using System; using System.IO; +using System.Linq; using System.Text.Json.Serialization; namespace Ryujinx.Ava.Systems.AppLibrary @@ -84,6 +86,32 @@ namespace Ryujinx.Ava.Systems.AppLibrary public LocaleKeys? PlayabilityStatus => Compatibility.Convert(x => x.Status).OrElse(null); + public bool HasPtcCacheFiles + { + get + { + DirectoryInfo mainDir = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, IdString, "cache", "cpu", "0")); + DirectoryInfo backupDir = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, IdString, "cache", "cpu", "1")); + + return (mainDir.Exists && (mainDir.EnumerateFiles("*.cache").Any() || mainDir.EnumerateFiles("*.info").Any())) || + (backupDir.Exists && (backupDir.EnumerateFiles("*.cache").Any() || backupDir.EnumerateFiles("*.info").Any())); + } + } + + public bool HasShaderCacheFiles + { + get + { + DirectoryInfo shaderCacheDir = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, IdString, "cache", "shader")); + + if (!shaderCacheDir.Exists) return false; + + return shaderCacheDir.EnumerateDirectories("*").Any() || + shaderCacheDir.GetFiles("*.toc").Length != 0 || + shaderCacheDir.GetFiles("*.data").Length != 0; + } + } + public string LocalizedStatusTooltip => Compatibility.Convert(x => #pragma warning disable CS8509 // It is exhaustive for all possible values this can contain. diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index 909154540..9f2999a4c 100755 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -120,13 +120,13 @@ CommandParameter="{Binding}" Header="{ext:Locale GameListContextMenuCacheManagementNukePptc}" Icon="{ext:Icon fa-solid fa-trash-can}" - IsEnabled="{Binding HasPtcCacheFiles}" /> + IsEnabled="{Binding SelectedApplication.HasPtcCacheFiles, FallbackValue=False}" /> + IsEnabled="{Binding SelectedApplication.HasShaderCacheFiles, FallbackValue=False}" /> NukePtcCache { get; } = - Commands.CreateConditional(vm => vm?.SelectedApplication != null && - vm.HasPtcCacheFiles(), + Commands.CreateConditional(vm => vm?.SelectedApplication?.HasPtcCacheFiles ?? false, async viewModel => { UserResult result = await ContentDialogHelper.CreateLocalizedConfirmationDialog( @@ -2171,22 +2170,9 @@ namespace Ryujinx.Ava.UI.ViewModels } }); - private bool HasPtcCacheFiles() - { - if (this.SelectedApplication == null) return false; - - DirectoryInfo mainDir = new DirectoryInfo(Path.Combine(AppDataManager.GamesDirPath, - this.SelectedApplication.IdString, "cache", "cpu", "0")); - DirectoryInfo backupDir = new DirectoryInfo(Path.Combine(AppDataManager.GamesDirPath, - this.SelectedApplication.IdString, "cache", "cpu", "1")); - - return (mainDir.Exists && (mainDir.EnumerateFiles("*.cache").Any() || mainDir.EnumerateFiles("*.info").Any())) || - (backupDir.Exists && (backupDir.EnumerateFiles("*.cache").Any() || backupDir.EnumerateFiles("*.info").Any())); - } - public static AsyncRelayCommand PurgeShaderCache { get; } = Commands.CreateConditional( - vm => vm?.SelectedApplication != null && vm.HasShaderCacheFiles(), + vm => vm?.SelectedApplication?.HasShaderCacheFiles ?? false, async viewModel => { UserResult result = await ContentDialogHelper.CreateLocalizedConfirmationDialog( @@ -2243,20 +2229,6 @@ namespace Ryujinx.Ava.UI.ViewModels } }); - private bool HasShaderCacheFiles() - { - if (this.SelectedApplication == null) return false; - - DirectoryInfo shaderCacheDir = new(Path.Combine(AppDataManager.GamesDirPath, - this.SelectedApplication.IdString, "cache", "shader")); - - if (!shaderCacheDir.Exists) return false; - - return shaderCacheDir.EnumerateDirectories("*").Any() || - shaderCacheDir.GetFiles("*.toc").Any() || - shaderCacheDir.GetFiles("*.data").Any(); - } - public static RelayCommand OpenPtcDirectory { get; } = Commands.CreateConditional(vm => vm?.SelectedApplication != null, viewModel => diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml b/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml index 39db76031..b572d04e6 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml +++ b/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml @@ -35,7 +35,7 @@ @@ -49,11 +46,9 @@ Padding="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" - ClipToBounds="True"> + ClipToBounds="True" + CornerRadius="5"> - -