mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-09-12 13:05:26 +00:00
Compare commits
8 Commits
Canary-1.2
...
Canary-1.2
Author | SHA1 | Date | |
---|---|---|---|
|
15c20920b3 | ||
|
285ee276b6 | ||
|
617b81e209 | ||
|
eb6ce7bcb3 | ||
|
69f75f2df1 | ||
|
10c8d73b60 | ||
|
e01a30016e | ||
|
e26625dfd5 |
@@ -1,11 +1,13 @@
|
|||||||
|
using Ryujinx.Common.Logging;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace Ryujinx.Common
|
namespace Ryujinx.Common
|
||||||
{
|
{
|
||||||
public class ReactiveObject<T>
|
public class ReactiveObject<T>
|
||||||
{
|
{
|
||||||
private readonly ReaderWriterLockSlim _readerWriterLock = new();
|
private readonly ReaderWriterLockSlim _rwLock = new();
|
||||||
private bool _isInitialized;
|
private bool _isInitialized;
|
||||||
private T _value;
|
private T _value;
|
||||||
|
|
||||||
@@ -15,15 +17,15 @@ namespace Ryujinx.Common
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
_readerWriterLock.EnterReadLock();
|
_rwLock.EnterReadLock();
|
||||||
T value = _value;
|
T value = _value;
|
||||||
_readerWriterLock.ExitReadLock();
|
_rwLock.ExitReadLock();
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_readerWriterLock.EnterWriteLock();
|
_rwLock.EnterWriteLock();
|
||||||
|
|
||||||
T oldValue = _value;
|
T oldValue = _value;
|
||||||
|
|
||||||
@@ -32,7 +34,7 @@ namespace Ryujinx.Common
|
|||||||
_isInitialized = true;
|
_isInitialized = true;
|
||||||
_value = value;
|
_value = value;
|
||||||
|
|
||||||
_readerWriterLock.ExitWriteLock();
|
_rwLock.ExitWriteLock();
|
||||||
|
|
||||||
if (!oldIsInitialized || oldValue == null || !oldValue.Equals(_value))
|
if (!oldIsInitialized || oldValue == null || !oldValue.Equals(_value))
|
||||||
{
|
{
|
||||||
@@ -40,12 +42,22 @@ namespace Ryujinx.Common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LogChangesToValue(string valueName, LogClass logClass = LogClass.Configuration)
|
||||||
|
=> Event += (_, e) => ReactiveObjectHelper.LogValueChange(logClass, e, valueName);
|
||||||
|
|
||||||
public static implicit operator T(ReactiveObject<T> obj) => obj.Value;
|
public static implicit operator T(ReactiveObject<T> obj) => obj.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ReactiveObjectHelper
|
public static class ReactiveObjectHelper
|
||||||
{
|
{
|
||||||
|
public static void LogValueChange<T>(LogClass logClass, ReactiveEventArgs<T> eventArgs, string valueName)
|
||||||
|
{
|
||||||
|
string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}");
|
||||||
|
|
||||||
|
Logger.Info?.Print(logClass, message);
|
||||||
|
}
|
||||||
|
|
||||||
public static void Toggle(this ReactiveObject<bool> rBoolean) => rBoolean.Value = !rBoolean.Value;
|
public static void Toggle(this ReactiveObject<bool> rBoolean) => rBoolean.Value = !rBoolean.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2463,7 +2463,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler
|
|||||||
return ParseIntegerLiteral("unsigned short");
|
return ParseIntegerLiteral("unsigned short");
|
||||||
case 'i':
|
case 'i':
|
||||||
_position++;
|
_position++;
|
||||||
return ParseIntegerLiteral("");
|
return ParseIntegerLiteral(string.Empty);
|
||||||
case 'j':
|
case 'j':
|
||||||
_position++;
|
_position++;
|
||||||
return ParseIntegerLiteral("u");
|
return ParseIntegerLiteral("u");
|
||||||
|
@@ -116,18 +116,13 @@ namespace Ryujinx.HLE.HOS
|
|||||||
private readonly Dictionary<ulong, ModCache> _appMods; // key is ApplicationId
|
private readonly Dictionary<ulong, ModCache> _appMods; // key is ApplicationId
|
||||||
private PatchCache _patches;
|
private PatchCache _patches;
|
||||||
|
|
||||||
private static readonly EnumerationOptions _dirEnumOptions;
|
private static readonly EnumerationOptions _dirEnumOptions = new()
|
||||||
|
|
||||||
static ModLoader()
|
|
||||||
{
|
{
|
||||||
_dirEnumOptions = new EnumerationOptions
|
MatchCasing = MatchCasing.CaseInsensitive,
|
||||||
{
|
MatchType = MatchType.Simple,
|
||||||
MatchCasing = MatchCasing.CaseInsensitive,
|
RecurseSubdirectories = false,
|
||||||
MatchType = MatchType.Simple,
|
ReturnSpecialDirectories = false,
|
||||||
RecurseSubdirectories = false,
|
};
|
||||||
ReturnSpecialDirectories = false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public ModLoader()
|
public ModLoader()
|
||||||
{
|
{
|
||||||
@@ -169,7 +164,7 @@ namespace Ryujinx.HLE.HOS
|
|||||||
foreach (var modDir in dir.EnumerateDirectories())
|
foreach (var modDir in dir.EnumerateDirectories())
|
||||||
{
|
{
|
||||||
types.Clear();
|
types.Clear();
|
||||||
Mod<DirectoryInfo> mod = new("", null, true);
|
Mod<DirectoryInfo> mod = new(string.Empty, null, true);
|
||||||
|
|
||||||
if (StrEquals(RomfsDir, modDir.Name))
|
if (StrEquals(RomfsDir, modDir.Name))
|
||||||
{
|
{
|
||||||
|
@@ -13,8 +13,6 @@ using Ryujinx.UI.Common.Configuration.UI;
|
|||||||
using Ryujinx.UI.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
|
||||||
using System.Text.Json.Nodes;
|
|
||||||
|
|
||||||
namespace Ryujinx.UI.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
@@ -201,7 +199,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
IsAscendingOrder = new ReactiveObject<bool>();
|
IsAscendingOrder = new ReactiveObject<bool>();
|
||||||
LanguageCode = new ReactiveObject<string>();
|
LanguageCode = new ReactiveObject<string>();
|
||||||
ShowConsole = new ReactiveObject<bool>();
|
ShowConsole = new ReactiveObject<bool>();
|
||||||
ShowConsole.Event += static (s, e) => { ConsoleHelper.SetConsoleWindowState(e.NewValue); };
|
ShowConsole.Event += static (_, e) => ConsoleHelper.SetConsoleWindowState(e.NewValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,6 +266,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
public LoggerSection()
|
public LoggerSection()
|
||||||
{
|
{
|
||||||
EnableDebug = new ReactiveObject<bool>();
|
EnableDebug = new ReactiveObject<bool>();
|
||||||
|
EnableDebug.LogChangesToValue(nameof(EnableDebug));
|
||||||
EnableStub = new ReactiveObject<bool>();
|
EnableStub = new ReactiveObject<bool>();
|
||||||
EnableInfo = new ReactiveObject<bool>();
|
EnableInfo = new ReactiveObject<bool>();
|
||||||
EnableWarn = new ReactiveObject<bool>();
|
EnableWarn = new ReactiveObject<bool>();
|
||||||
@@ -277,7 +276,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
EnableFsAccessLog = new ReactiveObject<bool>();
|
EnableFsAccessLog = new ReactiveObject<bool>();
|
||||||
FilteredClasses = new ReactiveObject<LogClass[]>();
|
FilteredClasses = new ReactiveObject<LogClass[]>();
|
||||||
EnableFileLog = new ReactiveObject<bool>();
|
EnableFileLog = new ReactiveObject<bool>();
|
||||||
EnableFileLog.Event += static (sender, e) => LogValueChange(e, nameof(EnableFileLog));
|
EnableFileLog.LogChangesToValue(nameof(EnableFileLog));
|
||||||
GraphicsDebugLevel = new ReactiveObject<GraphicsDebugLevel>();
|
GraphicsDebugLevel = new ReactiveObject<GraphicsDebugLevel>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -370,33 +369,37 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
public SystemSection()
|
public SystemSection()
|
||||||
{
|
{
|
||||||
Language = new ReactiveObject<Language>();
|
Language = new ReactiveObject<Language>();
|
||||||
|
Language.LogChangesToValue(nameof(Language));
|
||||||
Region = new ReactiveObject<Region>();
|
Region = new ReactiveObject<Region>();
|
||||||
|
Region.LogChangesToValue(nameof(Region));
|
||||||
TimeZone = new ReactiveObject<string>();
|
TimeZone = new ReactiveObject<string>();
|
||||||
|
TimeZone.LogChangesToValue(nameof(TimeZone));
|
||||||
SystemTimeOffset = new ReactiveObject<long>();
|
SystemTimeOffset = new ReactiveObject<long>();
|
||||||
|
SystemTimeOffset.LogChangesToValue(nameof(SystemTimeOffset));
|
||||||
EnableDockedMode = new ReactiveObject<bool>();
|
EnableDockedMode = new ReactiveObject<bool>();
|
||||||
EnableDockedMode.Event += static (sender, e) => LogValueChange(e, nameof(EnableDockedMode));
|
EnableDockedMode.LogChangesToValue(nameof(EnableDockedMode));
|
||||||
EnablePtc = new ReactiveObject<bool>();
|
EnablePtc = new ReactiveObject<bool>();
|
||||||
EnablePtc.Event += static (sender, e) => LogValueChange(e, nameof(EnablePtc));
|
EnablePtc.LogChangesToValue(nameof(EnablePtc));
|
||||||
EnableLowPowerPtc = new ReactiveObject<bool>();
|
EnableLowPowerPtc = new ReactiveObject<bool>();
|
||||||
EnableLowPowerPtc.Event += static (sender, e) => LogValueChange(e, nameof(EnableLowPowerPtc));
|
EnableLowPowerPtc.LogChangesToValue(nameof(EnableLowPowerPtc));
|
||||||
EnableInternetAccess = new ReactiveObject<bool>();
|
EnableInternetAccess = new ReactiveObject<bool>();
|
||||||
EnableInternetAccess.Event += static (sender, e) => LogValueChange(e, nameof(EnableInternetAccess));
|
EnableInternetAccess.LogChangesToValue(nameof(EnableInternetAccess));
|
||||||
EnableFsIntegrityChecks = new ReactiveObject<bool>();
|
EnableFsIntegrityChecks = new ReactiveObject<bool>();
|
||||||
EnableFsIntegrityChecks.Event += static (sender, e) => LogValueChange(e, nameof(EnableFsIntegrityChecks));
|
EnableFsIntegrityChecks.LogChangesToValue(nameof(EnableFsIntegrityChecks));
|
||||||
FsGlobalAccessLogMode = new ReactiveObject<int>();
|
FsGlobalAccessLogMode = new ReactiveObject<int>();
|
||||||
FsGlobalAccessLogMode.Event += static (sender, e) => LogValueChange(e, nameof(FsGlobalAccessLogMode));
|
FsGlobalAccessLogMode.LogChangesToValue(nameof(FsGlobalAccessLogMode));
|
||||||
AudioBackend = new ReactiveObject<AudioBackend>();
|
AudioBackend = new ReactiveObject<AudioBackend>();
|
||||||
AudioBackend.Event += static (sender, e) => LogValueChange(e, nameof(AudioBackend));
|
AudioBackend.LogChangesToValue(nameof(AudioBackend));
|
||||||
MemoryManagerMode = new ReactiveObject<MemoryManagerMode>();
|
MemoryManagerMode = new ReactiveObject<MemoryManagerMode>();
|
||||||
MemoryManagerMode.Event += static (sender, e) => LogValueChange(e, nameof(MemoryManagerMode));
|
MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode));
|
||||||
DramSize = new ReactiveObject<MemoryConfiguration>();
|
DramSize = new ReactiveObject<MemoryConfiguration>();
|
||||||
DramSize.Event += static (sender, e) => LogValueChange(e, nameof(DramSize));
|
DramSize.LogChangesToValue(nameof(DramSize));
|
||||||
IgnoreMissingServices = new ReactiveObject<bool>();
|
IgnoreMissingServices = new ReactiveObject<bool>();
|
||||||
IgnoreMissingServices.Event += static (sender, e) => LogValueChange(e, nameof(IgnoreMissingServices));
|
IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices));
|
||||||
AudioVolume = new ReactiveObject<float>();
|
AudioVolume = new ReactiveObject<float>();
|
||||||
AudioVolume.Event += static (sender, e) => LogValueChange(e, nameof(AudioVolume));
|
AudioVolume.LogChangesToValue(nameof(AudioVolume));
|
||||||
UseHypervisor = new ReactiveObject<bool>();
|
UseHypervisor = new ReactiveObject<bool>();
|
||||||
UseHypervisor.Event += static (sender, e) => LogValueChange(e, nameof(UseHypervisor));
|
UseHypervisor.LogChangesToValue(nameof(UseHypervisor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -524,36 +527,36 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
public GraphicsSection()
|
public GraphicsSection()
|
||||||
{
|
{
|
||||||
BackendThreading = new ReactiveObject<BackendThreading>();
|
BackendThreading = new ReactiveObject<BackendThreading>();
|
||||||
BackendThreading.Event += static (_, e) => LogValueChange(e, nameof(BackendThreading));
|
BackendThreading.LogChangesToValue(nameof(BackendThreading));
|
||||||
ResScale = new ReactiveObject<int>();
|
ResScale = new ReactiveObject<int>();
|
||||||
ResScale.Event += static (_, e) => LogValueChange(e, nameof(ResScale));
|
ResScale.LogChangesToValue(nameof(ResScale));
|
||||||
ResScaleCustom = new ReactiveObject<float>();
|
ResScaleCustom = new ReactiveObject<float>();
|
||||||
ResScaleCustom.Event += static (_, e) => LogValueChange(e, nameof(ResScaleCustom));
|
ResScaleCustom.LogChangesToValue(nameof(ResScaleCustom));
|
||||||
MaxAnisotropy = new ReactiveObject<float>();
|
MaxAnisotropy = new ReactiveObject<float>();
|
||||||
MaxAnisotropy.Event += static (_, e) => LogValueChange(e, nameof(MaxAnisotropy));
|
MaxAnisotropy.LogChangesToValue(nameof(MaxAnisotropy));
|
||||||
AspectRatio = new ReactiveObject<AspectRatio>();
|
AspectRatio = new ReactiveObject<AspectRatio>();
|
||||||
AspectRatio.Event += static (_, e) => LogValueChange(e, nameof(AspectRatio));
|
AspectRatio.LogChangesToValue(nameof(AspectRatio));
|
||||||
ShadersDumpPath = new ReactiveObject<string>();
|
ShadersDumpPath = new ReactiveObject<string>();
|
||||||
EnableVsync = new ReactiveObject<bool>();
|
EnableVsync = new ReactiveObject<bool>();
|
||||||
EnableVsync.Event += static (_, e) => LogValueChange(e, nameof(EnableVsync));
|
EnableVsync.LogChangesToValue(nameof(EnableVsync));
|
||||||
EnableShaderCache = new ReactiveObject<bool>();
|
EnableShaderCache = new ReactiveObject<bool>();
|
||||||
EnableShaderCache.Event += static (_, e) => LogValueChange(e, nameof(EnableShaderCache));
|
EnableShaderCache.LogChangesToValue(nameof(EnableShaderCache));
|
||||||
EnableTextureRecompression = new ReactiveObject<bool>();
|
EnableTextureRecompression = new ReactiveObject<bool>();
|
||||||
EnableTextureRecompression.Event += static (_, e) => LogValueChange(e, nameof(EnableTextureRecompression));
|
EnableTextureRecompression.LogChangesToValue(nameof(EnableTextureRecompression));
|
||||||
GraphicsBackend = new ReactiveObject<GraphicsBackend>();
|
GraphicsBackend = new ReactiveObject<GraphicsBackend>();
|
||||||
GraphicsBackend.Event += static (_, e) => LogValueChange(e, nameof(GraphicsBackend));
|
GraphicsBackend.LogChangesToValue(nameof(GraphicsBackend));
|
||||||
PreferredGpu = new ReactiveObject<string>();
|
PreferredGpu = new ReactiveObject<string>();
|
||||||
PreferredGpu.Event += static (_, e) => LogValueChange(e, nameof(PreferredGpu));
|
PreferredGpu.LogChangesToValue(nameof(PreferredGpu));
|
||||||
EnableMacroHLE = new ReactiveObject<bool>();
|
EnableMacroHLE = new ReactiveObject<bool>();
|
||||||
EnableMacroHLE.Event += static (_, e) => LogValueChange(e, nameof(EnableMacroHLE));
|
EnableMacroHLE.LogChangesToValue(nameof(EnableMacroHLE));
|
||||||
EnableColorSpacePassthrough = new ReactiveObject<bool>();
|
EnableColorSpacePassthrough = new ReactiveObject<bool>();
|
||||||
EnableColorSpacePassthrough.Event += static (_, e) => LogValueChange(e, nameof(EnableColorSpacePassthrough));
|
EnableColorSpacePassthrough.LogChangesToValue(nameof(EnableColorSpacePassthrough));
|
||||||
AntiAliasing = new ReactiveObject<AntiAliasing>();
|
AntiAliasing = new ReactiveObject<AntiAliasing>();
|
||||||
AntiAliasing.Event += static (_, e) => LogValueChange(e, nameof(AntiAliasing));
|
AntiAliasing.LogChangesToValue(nameof(AntiAliasing));
|
||||||
ScalingFilter = new ReactiveObject<ScalingFilter>();
|
ScalingFilter = new ReactiveObject<ScalingFilter>();
|
||||||
ScalingFilter.Event += static (_, e) => LogValueChange(e, nameof(ScalingFilter));
|
ScalingFilter.LogChangesToValue(nameof(ScalingFilter));
|
||||||
ScalingFilterLevel = new ReactiveObject<int>();
|
ScalingFilterLevel = new ReactiveObject<int>();
|
||||||
ScalingFilterLevel.Event += static (_, e) => LogValueChange(e, nameof(ScalingFilterLevel));
|
ScalingFilterLevel.LogChangesToValue(nameof(ScalingFilterLevel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -576,7 +579,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
{
|
{
|
||||||
LanInterfaceId = new ReactiveObject<string>();
|
LanInterfaceId = new ReactiveObject<string>();
|
||||||
Mode = new ReactiveObject<MultiplayerMode>();
|
Mode = new ReactiveObject<MultiplayerMode>();
|
||||||
Mode.Event += static (_, e) => LogValueChange(e, nameof(MultiplayerMode));
|
Mode.LogChangesToValue(nameof(MultiplayerMode));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -667,6 +670,7 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
CheckUpdatesOnStart = new ReactiveObject<bool>();
|
CheckUpdatesOnStart = new ReactiveObject<bool>();
|
||||||
ShowConfirmExit = new ReactiveObject<bool>();
|
ShowConfirmExit = new ReactiveObject<bool>();
|
||||||
IgnoreApplet = new ReactiveObject<bool>();
|
IgnoreApplet = new ReactiveObject<bool>();
|
||||||
|
IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet));
|
||||||
RememberWindowState = new ReactiveObject<bool>();
|
RememberWindowState = new ReactiveObject<bool>();
|
||||||
ShowTitleBar = new ReactiveObject<bool>();
|
ShowTitleBar = new ReactiveObject<bool>();
|
||||||
EnableHardwareAcceleration = new ReactiveObject<bool>();
|
EnableHardwareAcceleration = new ReactiveObject<bool>();
|
||||||
@@ -1654,13 +1658,6 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
return GraphicsBackend.OpenGl;
|
return GraphicsBackend.OpenGl;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void LogValueChange<T>(ReactiveEventArgs<T> eventArgs, string valueName)
|
|
||||||
{
|
|
||||||
string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}");
|
|
||||||
|
|
||||||
Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Initialize()
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
if (Instance != null)
|
if (Instance != null)
|
||||||
|
@@ -163,6 +163,7 @@ namespace Ryujinx.UI.Common
|
|||||||
"010036b0034e4000", // Super Mario Party
|
"010036b0034e4000", // Super Mario Party
|
||||||
"01006fe013472000", // Mario Party Superstars
|
"01006fe013472000", // Mario Party Superstars
|
||||||
"0100965017338000", // Super Mario Party Jamboree
|
"0100965017338000", // Super Mario Party Jamboree
|
||||||
|
"01006d0017f7a000", // Mario & Luigi: Brothership
|
||||||
"010067300059a000", // Mario + Rabbids: Kingdom Battle
|
"010067300059a000", // Mario + Rabbids: Kingdom Battle
|
||||||
"0100317013770000", // Mario + Rabbids: Sparks of Hope
|
"0100317013770000", // Mario + Rabbids: Sparks of Hope
|
||||||
"0100a3900c3e2000", // Paper Mario: The Origami King
|
"0100a3900c3e2000", // Paper Mario: The Origami King
|
||||||
|
@@ -4,6 +4,7 @@ using Ryujinx.Common.Logging;
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Runtime.Versioning;
|
using System.Runtime.Versioning;
|
||||||
|
|
||||||
@@ -23,6 +24,26 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
public static partial void SHChangeNotify(uint wEventId, uint uFlags, nint dwItem1, nint dwItem2);
|
public static partial void SHChangeNotify(uint wEventId, uint uFlags, nint dwItem1, nint dwItem2);
|
||||||
|
|
||||||
public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows()) && !ReleaseInformation.IsFlatHubBuild;
|
public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows()) && !ReleaseInformation.IsFlatHubBuild;
|
||||||
|
|
||||||
|
public static bool AreMimeTypesRegistered
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (OperatingSystem.IsLinux())
|
||||||
|
{
|
||||||
|
return AreMimeTypesRegisteredLinux();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OperatingSystem.IsWindows())
|
||||||
|
{
|
||||||
|
return AreMimeTypesRegisteredWindows();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Add macOS support.
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[SupportedOSPlatform("linux")]
|
[SupportedOSPlatform("linux")]
|
||||||
private static bool AreMimeTypesRegisteredLinux() => File.Exists(Path.Combine(_mimeDbPath, "packages", "Ryujinx.xml"));
|
private static bool AreMimeTypesRegisteredLinux() => File.Exists(Path.Combine(_mimeDbPath, "packages", "Ryujinx.xml"));
|
||||||
@@ -72,6 +93,10 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
[SupportedOSPlatform("windows")]
|
[SupportedOSPlatform("windows")]
|
||||||
private static bool AreMimeTypesRegisteredWindows()
|
private static bool AreMimeTypesRegisteredWindows()
|
||||||
{
|
{
|
||||||
|
return _fileExtensions.Aggregate(false,
|
||||||
|
(current, ext) => current | CheckRegistering(ext)
|
||||||
|
);
|
||||||
|
|
||||||
static bool CheckRegistering(string ext)
|
static bool CheckRegistering(string ext)
|
||||||
{
|
{
|
||||||
RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}");
|
RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}");
|
||||||
@@ -87,20 +112,20 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
|
|
||||||
return keyValue is not null && (keyValue.Contains("Ryujinx") || keyValue.Contains(AppDomain.CurrentDomain.FriendlyName));
|
return keyValue is not null && (keyValue.Contains("Ryujinx") || keyValue.Contains(AppDomain.CurrentDomain.FriendlyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool registered = false;
|
|
||||||
|
|
||||||
foreach (string ext in _fileExtensions)
|
|
||||||
{
|
|
||||||
registered |= CheckRegistering(ext);
|
|
||||||
}
|
|
||||||
|
|
||||||
return registered;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[SupportedOSPlatform("windows")]
|
[SupportedOSPlatform("windows")]
|
||||||
private static bool InstallWindowsMimeTypes(bool uninstall = false)
|
private static bool InstallWindowsMimeTypes(bool uninstall = false)
|
||||||
{
|
{
|
||||||
|
bool registered = _fileExtensions.Aggregate(false,
|
||||||
|
(current, ext) => current | RegisterExtension(ext, uninstall)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Notify Explorer the file association has been changed.
|
||||||
|
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, nint.Zero, nint.Zero);
|
||||||
|
|
||||||
|
return registered;
|
||||||
|
|
||||||
static bool RegisterExtension(string ext, bool uninstall = false)
|
static bool RegisterExtension(string ext, bool uninstall = false)
|
||||||
{
|
{
|
||||||
string keyString = @$"Software\Classes\{ext}";
|
string keyString = @$"Software\Classes\{ext}";
|
||||||
@@ -127,42 +152,13 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
|
|
||||||
Logger.Debug?.Print(LogClass.Application, $"Adding type association {ext}");
|
Logger.Debug?.Print(LogClass.Application, $"Adding type association {ext}");
|
||||||
using var openCmd = key.CreateSubKey(@"shell\open\command");
|
using var openCmd = key.CreateSubKey(@"shell\open\command");
|
||||||
openCmd.SetValue("", $"\"{Environment.ProcessPath}\" \"%1\"");
|
openCmd.SetValue(string.Empty, $"\"{Environment.ProcessPath}\" \"%1\"");
|
||||||
Logger.Debug?.Print(LogClass.Application, $"Added type association {ext}");
|
Logger.Debug?.Print(LogClass.Application, $"Added type association {ext}");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool registered = false;
|
|
||||||
|
|
||||||
foreach (string ext in _fileExtensions)
|
|
||||||
{
|
|
||||||
registered |= RegisterExtension(ext, uninstall);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify Explorer the file association has been changed.
|
|
||||||
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, nint.Zero, nint.Zero);
|
|
||||||
|
|
||||||
return registered;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool AreMimeTypesRegistered()
|
|
||||||
{
|
|
||||||
if (OperatingSystem.IsLinux())
|
|
||||||
{
|
|
||||||
return AreMimeTypesRegisteredLinux();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OperatingSystem.IsWindows())
|
|
||||||
{
|
|
||||||
return AreMimeTypesRegisteredWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Add macOS support.
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool Install()
|
public static bool Install()
|
||||||
|
@@ -43,8 +43,8 @@ namespace Ryujinx.UI.Common.Models
|
|||||||
{
|
{
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
return false;
|
return false;
|
||||||
else
|
|
||||||
return this.Path == obj.Path;
|
return this.Path == obj.Path;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "تعيين لون الخلفية",
|
"AvatarSetBackgroundColor": "تعيين لون الخلفية",
|
||||||
"AvatarClose": "إغلاق",
|
"AvatarClose": "إغلاق",
|
||||||
"ControllerSettingsLoadProfileToolTip": "تحميل الملف الشخصي",
|
"ControllerSettingsLoadProfileToolTip": "تحميل الملف الشخصي",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "إضافة ملف شخصي",
|
"ControllerSettingsAddProfileToolTip": "إضافة ملف شخصي",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "إزالة الملف الشخصي",
|
"ControllerSettingsRemoveProfileToolTip": "إزالة الملف الشخصي",
|
||||||
"ControllerSettingsSaveProfileToolTip": "حفظ الملف الشخصي",
|
"ControllerSettingsSaveProfileToolTip": "حفظ الملف الشخصي",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "حدث خطأ أثناء البحث عن بيانات الحفظ المحددة: {0}",
|
"DialogMessageFindSaveErrorMessage": "حدث خطأ أثناء البحث عن بيانات الحفظ المحددة: {0}",
|
||||||
"FolderDialogExtractTitle": "اختر المجلد الذي تريد الاستخراج إليه",
|
"FolderDialogExtractTitle": "اختر المجلد الذي تريد الاستخراج إليه",
|
||||||
"DialogNcaExtractionMessage": "استخراج قسم {0} من {1}...",
|
"DialogNcaExtractionMessage": "استخراج قسم {0} من {1}...",
|
||||||
"DialogNcaExtractionTitle": "ريوجينكس - مستخرج قسم NCA",
|
"DialogNcaExtractionTitle": "مستخرج قسم NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "فشل الاستخراج. لم يكن NCA الرئيسي موجودا في الملف المحدد.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "فشل الاستخراج. لم يكن NCA الرئيسي موجودا في الملف المحدد.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "فشل الاستخراج. اقرأ ملف التسجيل لمزيد من المعلومات.",
|
"DialogNcaExtractionCheckLogErrorMessage": "فشل الاستخراج. اقرأ ملف التسجيل لمزيد من المعلومات.",
|
||||||
"DialogNcaExtractionSuccessMessage": "تم الاستخراج بنجاح.",
|
"DialogNcaExtractionSuccessMessage": "تم الاستخراج بنجاح.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Hintergrundfarbe auswählen",
|
"AvatarSetBackgroundColor": "Hintergrundfarbe auswählen",
|
||||||
"AvatarClose": "Schließen",
|
"AvatarClose": "Schließen",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Lädt ein Profil",
|
"ControllerSettingsLoadProfileToolTip": "Lädt ein Profil",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Fügt ein Profil hinzu",
|
"ControllerSettingsAddProfileToolTip": "Fügt ein Profil hinzu",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Entfernt ein Profil",
|
"ControllerSettingsRemoveProfileToolTip": "Entfernt ein Profil",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Speichert ein Profil",
|
"ControllerSettingsSaveProfileToolTip": "Speichert ein Profil",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Es ist ein Fehler beim Suchen der angegebenen Speicherdaten aufgetreten: {0}",
|
"DialogMessageFindSaveErrorMessage": "Es ist ein Fehler beim Suchen der angegebenen Speicherdaten aufgetreten: {0}",
|
||||||
"FolderDialogExtractTitle": "Wähle den Ordner, in welchen die Dateien entpackt werden sollen",
|
"FolderDialogExtractTitle": "Wähle den Ordner, in welchen die Dateien entpackt werden sollen",
|
||||||
"DialogNcaExtractionMessage": "Extrahiert {0} abschnitt von {1}...",
|
"DialogNcaExtractionMessage": "Extrahiert {0} abschnitt von {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA-Abschnitt-Extraktor",
|
"DialogNcaExtractionTitle": "NCA-Abschnitt-Extraktor",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraktion fehlgeschlagen. Der Hauptheader der NCA war in der ausgewählten Datei nicht vorhanden.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraktion fehlgeschlagen. Der Hauptheader der NCA war in der ausgewählten Datei nicht vorhanden.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Extraktion fehlgeschlagen. Überprüfe die Logs für weitere Informationen.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Extraktion fehlgeschlagen. Überprüfe die Logs für weitere Informationen.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Extraktion erfolgreich abgeschlossen.",
|
"DialogNcaExtractionSuccessMessage": "Extraktion erfolgreich abgeschlossen.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Ορισμός Χρώματος Φόντου",
|
"AvatarSetBackgroundColor": "Ορισμός Χρώματος Φόντου",
|
||||||
"AvatarClose": "Κλείσιμο",
|
"AvatarClose": "Κλείσιμο",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Φόρτωση Προφίλ",
|
"ControllerSettingsLoadProfileToolTip": "Φόρτωση Προφίλ",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Προσθήκη Προφίλ",
|
"ControllerSettingsAddProfileToolTip": "Προσθήκη Προφίλ",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Κατάργηση Προφίλ",
|
"ControllerSettingsRemoveProfileToolTip": "Κατάργηση Προφίλ",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Αποθήκευση Προφίλ",
|
"ControllerSettingsSaveProfileToolTip": "Αποθήκευση Προφίλ",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Σφάλμα κατά την εύρεση των αποθηκευμένων δεδομένων: {0}",
|
"DialogMessageFindSaveErrorMessage": "Σφάλμα κατά την εύρεση των αποθηκευμένων δεδομένων: {0}",
|
||||||
"FolderDialogExtractTitle": "Επιλέξτε τον φάκελο στον οποίο θέλετε να εξαγάγετε",
|
"FolderDialogExtractTitle": "Επιλέξτε τον φάκελο στον οποίο θέλετε να εξαγάγετε",
|
||||||
"DialogNcaExtractionMessage": "Εξαγωγή ενότητας {0} από {1}...",
|
"DialogNcaExtractionMessage": "Εξαγωγή ενότητας {0} από {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA Εξαγωγέας Τμημάτων",
|
"DialogNcaExtractionTitle": "NCA Εξαγωγέας Τμημάτων",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Αποτυχία εξαγωγής. Η κύρια NCA δεν υπήρχε στο επιλεγμένο αρχείο.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Αποτυχία εξαγωγής. Η κύρια NCA δεν υπήρχε στο επιλεγμένο αρχείο.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Αποτυχία εξαγωγής. Διαβάστε το αρχείο καταγραφής για περισσότερες πληροφορίες.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Αποτυχία εξαγωγής. Διαβάστε το αρχείο καταγραφής για περισσότερες πληροφορίες.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Η εξαγωγή ολοκληρώθηκε με επιτυχία.",
|
"DialogNcaExtractionSuccessMessage": "Η εξαγωγή ολοκληρώθηκε με επιτυχία.",
|
||||||
|
@@ -444,7 +444,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "There was an error finding the specified savedata: {0}",
|
"DialogMessageFindSaveErrorMessage": "There was an error finding the specified savedata: {0}",
|
||||||
"FolderDialogExtractTitle": "Choose the folder to extract into",
|
"FolderDialogExtractTitle": "Choose the folder to extract into",
|
||||||
"DialogNcaExtractionMessage": "Extracting {0} section from {1}...",
|
"DialogNcaExtractionMessage": "Extracting {0} section from {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA Section Extractor",
|
"DialogNcaExtractionTitle": "NCA Section Extractor",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraction failure. The main NCA was not present in the selected file.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraction failure. The main NCA was not present in the selected file.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Extraction failed. Please check the log file for more details.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Extraction failed. Please check the log file for more details.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Extraction completed successfully.",
|
"DialogNcaExtractionSuccessMessage": "Extraction completed successfully.",
|
||||||
@@ -461,7 +461,7 @@
|
|||||||
"DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?",
|
"DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?",
|
||||||
"DialogUpdaterNoInternetMessage": "You are not connected to the Internet!",
|
"DialogUpdaterNoInternetMessage": "You are not connected to the Internet!",
|
||||||
"DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!",
|
"DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!",
|
||||||
"DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Ryujinx!",
|
"DialogUpdaterDirtyBuildMessage": "You cannot update a Dirty build of Ryujinx!",
|
||||||
"DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://github.com/GreemDev/Ryujinx/releases/ if you are looking for a supported version.",
|
"DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://github.com/GreemDev/Ryujinx/releases/ if you are looking for a supported version.",
|
||||||
"DialogRestartRequiredMessage": "Restart Required",
|
"DialogRestartRequiredMessage": "Restart Required",
|
||||||
"DialogThemeRestartMessage": "Theme has been saved. A restart is needed to apply the theme.",
|
"DialogThemeRestartMessage": "Theme has been saved. A restart is needed to apply the theme.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Establecer color de fondo",
|
"AvatarSetBackgroundColor": "Establecer color de fondo",
|
||||||
"AvatarClose": "Cerrar",
|
"AvatarClose": "Cerrar",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Cargar perfil",
|
"ControllerSettingsLoadProfileToolTip": "Cargar perfil",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Agregar perfil",
|
"ControllerSettingsAddProfileToolTip": "Agregar perfil",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Eliminar perfil",
|
"ControllerSettingsRemoveProfileToolTip": "Eliminar perfil",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Guardar perfil",
|
"ControllerSettingsSaveProfileToolTip": "Guardar perfil",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Hubo un error encontrando los datos de guardado especificados: {0}",
|
"DialogMessageFindSaveErrorMessage": "Hubo un error encontrando los datos de guardado especificados: {0}",
|
||||||
"FolderDialogExtractTitle": "Elige la carpeta en la que deseas extraer",
|
"FolderDialogExtractTitle": "Elige la carpeta en la que deseas extraer",
|
||||||
"DialogNcaExtractionMessage": "Extrayendo {0} sección de {1}...",
|
"DialogNcaExtractionMessage": "Extrayendo {0} sección de {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Extractor de sección NCA",
|
"DialogNcaExtractionTitle": "Extractor de sección NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Fallo de extracción. El NCA principal no estaba presente en el archivo seleccionado.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Fallo de extracción. El NCA principal no estaba presente en el archivo seleccionado.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Fallo de extracción. Lee el registro para más información.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Fallo de extracción. Lee el registro para más información.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Se completó la extracción con éxito.",
|
"DialogNcaExtractionSuccessMessage": "Se completó la extracción con éxito.",
|
||||||
|
@@ -408,6 +408,7 @@
|
|||||||
"AvatarClose": "Fermer",
|
"AvatarClose": "Fermer",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Charger un profil",
|
"ControllerSettingsLoadProfileToolTip": "Charger un profil",
|
||||||
"ControllerSettingsAddProfileToolTip": "Ajouter un profil",
|
"ControllerSettingsAddProfileToolTip": "Ajouter un profil",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Supprimer un profil",
|
"ControllerSettingsRemoveProfileToolTip": "Supprimer un profil",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Enregistrer un profil",
|
"ControllerSettingsSaveProfileToolTip": "Enregistrer un profil",
|
||||||
"MenuBarFileToolsTakeScreenshot": "Prendre une capture d'écran",
|
"MenuBarFileToolsTakeScreenshot": "Prendre une capture d'écran",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Une erreur s'est produite lors de la recherche de la sauvegarde spécifiée : {0}",
|
"DialogMessageFindSaveErrorMessage": "Une erreur s'est produite lors de la recherche de la sauvegarde spécifiée : {0}",
|
||||||
"FolderDialogExtractTitle": "Choisissez le dossier dans lequel extraire",
|
"FolderDialogExtractTitle": "Choisissez le dossier dans lequel extraire",
|
||||||
"DialogNcaExtractionMessage": "Extraction de la section {0} depuis {1}...",
|
"DialogNcaExtractionMessage": "Extraction de la section {0} depuis {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Extracteur de la section NCA",
|
"DialogNcaExtractionTitle": "Extracteur de la section NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Échec de l'extraction. Le NCA principal n'était pas présent dans le fichier sélectionné.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Échec de l'extraction. Le NCA principal n'était pas présent dans le fichier sélectionné.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Échec de l'extraction. Lisez le fichier journal pour plus d'informations.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Échec de l'extraction. Lisez le fichier journal pour plus d'informations.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Extraction terminée avec succès.",
|
"DialogNcaExtractionSuccessMessage": "Extraction terminée avec succès.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "הגדר צבע רקע",
|
"AvatarSetBackgroundColor": "הגדר צבע רקע",
|
||||||
"AvatarClose": "סגור",
|
"AvatarClose": "סגור",
|
||||||
"ControllerSettingsLoadProfileToolTip": "טען פרופיל",
|
"ControllerSettingsLoadProfileToolTip": "טען פרופיל",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "הוסף פרופיל",
|
"ControllerSettingsAddProfileToolTip": "הוסף פרופיל",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "הסר פרופיל",
|
"ControllerSettingsRemoveProfileToolTip": "הסר פרופיל",
|
||||||
"ControllerSettingsSaveProfileToolTip": "שמור פרופיל",
|
"ControllerSettingsSaveProfileToolTip": "שמור פרופיל",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "אירעה שגיאה במציאת שמור המשחק שצויין: {0}",
|
"DialogMessageFindSaveErrorMessage": "אירעה שגיאה במציאת שמור המשחק שצויין: {0}",
|
||||||
"FolderDialogExtractTitle": "בחרו את התיקייה לחילוץ",
|
"FolderDialogExtractTitle": "בחרו את התיקייה לחילוץ",
|
||||||
"DialogNcaExtractionMessage": "מלחץ {0} ממקטע {1}...",
|
"DialogNcaExtractionMessage": "מלחץ {0} ממקטע {1}...",
|
||||||
"DialogNcaExtractionTitle": "ריוג'ינקס - מחלץ מקטע NCA",
|
"DialogNcaExtractionTitle": "מחלץ מקטע NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "כשל בחילוץ. ה-NCA הראשי לא היה קיים בקובץ שנבחר.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "כשל בחילוץ. ה-NCA הראשי לא היה קיים בקובץ שנבחר.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "כשל בחילוץ. קרא את קובץ הרישום למידע נוסף.",
|
"DialogNcaExtractionCheckLogErrorMessage": "כשל בחילוץ. קרא את קובץ הרישום למידע נוסף.",
|
||||||
"DialogNcaExtractionSuccessMessage": "החילוץ הושלם בהצלחה.",
|
"DialogNcaExtractionSuccessMessage": "החילוץ הושלם בהצלחה.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Imposta colore di sfondo",
|
"AvatarSetBackgroundColor": "Imposta colore di sfondo",
|
||||||
"AvatarClose": "Chiudi",
|
"AvatarClose": "Chiudi",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Carica profilo",
|
"ControllerSettingsLoadProfileToolTip": "Carica profilo",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Aggiungi profilo",
|
"ControllerSettingsAddProfileToolTip": "Aggiungi profilo",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Rimuovi profilo",
|
"ControllerSettingsRemoveProfileToolTip": "Rimuovi profilo",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Salva profilo",
|
"ControllerSettingsSaveProfileToolTip": "Salva profilo",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "C'è stato un errore durante la ricerca dei dati di salvataggio: {0}",
|
"DialogMessageFindSaveErrorMessage": "C'è stato un errore durante la ricerca dei dati di salvataggio: {0}",
|
||||||
"FolderDialogExtractTitle": "Scegli una cartella in cui estrarre",
|
"FolderDialogExtractTitle": "Scegli una cartella in cui estrarre",
|
||||||
"DialogNcaExtractionMessage": "Estrazione della sezione {0} da {1}...",
|
"DialogNcaExtractionMessage": "Estrazione della sezione {0} da {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Estrazione sezione NCA",
|
"DialogNcaExtractionTitle": "Estrazione sezione NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "L'estrazione è fallita. L'NCA principale non era presente nel file selezionato.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "L'estrazione è fallita. L'NCA principale non era presente nel file selezionato.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "L'estrazione è fallita. Consulta il file di log per maggiori informazioni.",
|
"DialogNcaExtractionCheckLogErrorMessage": "L'estrazione è fallita. Consulta il file di log per maggiori informazioni.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Estrazione completata con successo.",
|
"DialogNcaExtractionSuccessMessage": "Estrazione completata con successo.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "背景色を指定",
|
"AvatarSetBackgroundColor": "背景色を指定",
|
||||||
"AvatarClose": "閉じる",
|
"AvatarClose": "閉じる",
|
||||||
"ControllerSettingsLoadProfileToolTip": "プロファイルをロード",
|
"ControllerSettingsLoadProfileToolTip": "プロファイルをロード",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "プロファイルを追加",
|
"ControllerSettingsAddProfileToolTip": "プロファイルを追加",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "プロファイルを削除",
|
"ControllerSettingsRemoveProfileToolTip": "プロファイルを削除",
|
||||||
"ControllerSettingsSaveProfileToolTip": "プロファイルをセーブ",
|
"ControllerSettingsSaveProfileToolTip": "プロファイルをセーブ",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "セーブデータ: {0} の検索中にエラーが発生しました",
|
"DialogMessageFindSaveErrorMessage": "セーブデータ: {0} の検索中にエラーが発生しました",
|
||||||
"FolderDialogExtractTitle": "展開フォルダを選択",
|
"FolderDialogExtractTitle": "展開フォルダを選択",
|
||||||
"DialogNcaExtractionMessage": "{1} から {0} セクションを展開中...",
|
"DialogNcaExtractionMessage": "{1} から {0} セクションを展開中...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA セクション展開",
|
"DialogNcaExtractionTitle": "NCA セクション展開",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "展開に失敗しました. 選択されたファイルにはメイン NCA が存在しません.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "展開に失敗しました. 選択されたファイルにはメイン NCA が存在しません.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "展開に失敗しました. 詳細はログを確認してください.",
|
"DialogNcaExtractionCheckLogErrorMessage": "展開に失敗しました. 詳細はログを確認してください.",
|
||||||
"DialogNcaExtractionSuccessMessage": "展開が正常終了しました",
|
"DialogNcaExtractionSuccessMessage": "展開が正常終了しました",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "배경색 설정",
|
"AvatarSetBackgroundColor": "배경색 설정",
|
||||||
"AvatarClose": "닫기",
|
"AvatarClose": "닫기",
|
||||||
"ControllerSettingsLoadProfileToolTip": "프로필 불러오기",
|
"ControllerSettingsLoadProfileToolTip": "프로필 불러오기",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "프로필 추가",
|
"ControllerSettingsAddProfileToolTip": "프로필 추가",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "프로필 제거",
|
"ControllerSettingsRemoveProfileToolTip": "프로필 제거",
|
||||||
"ControllerSettingsSaveProfileToolTip": "프로필 저장",
|
"ControllerSettingsSaveProfileToolTip": "프로필 저장",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "지정된 저장 데이터를 찾는 중에 오류 발생: {0}",
|
"DialogMessageFindSaveErrorMessage": "지정된 저장 데이터를 찾는 중에 오류 발생: {0}",
|
||||||
"FolderDialogExtractTitle": "추출할 폴더 선택",
|
"FolderDialogExtractTitle": "추출할 폴더 선택",
|
||||||
"DialogNcaExtractionMessage": "{1}에서 {0} 섹션을 추출하는 중...",
|
"DialogNcaExtractionMessage": "{1}에서 {0} 섹션을 추출하는 중...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA 섹션 추출기",
|
"DialogNcaExtractionTitle": "NCA 섹션 추출기",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "추출 실패하였습니다. 선택한 파일에 기본 NCA가 없습니다.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "추출 실패하였습니다. 선택한 파일에 기본 NCA가 없습니다.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "추출 실패하였습니다. 자세한 내용은 로그 파일을 읽으세요.",
|
"DialogNcaExtractionCheckLogErrorMessage": "추출 실패하였습니다. 자세한 내용은 로그 파일을 읽으세요.",
|
||||||
"DialogNcaExtractionSuccessMessage": "추출이 성공적으로 완료되었습니다.",
|
"DialogNcaExtractionSuccessMessage": "추출이 성공적으로 완료되었습니다.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Ustaw kolor tła",
|
"AvatarSetBackgroundColor": "Ustaw kolor tła",
|
||||||
"AvatarClose": "Zamknij",
|
"AvatarClose": "Zamknij",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Wczytaj profil",
|
"ControllerSettingsLoadProfileToolTip": "Wczytaj profil",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Dodaj profil",
|
"ControllerSettingsAddProfileToolTip": "Dodaj profil",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Usuń profil",
|
"ControllerSettingsRemoveProfileToolTip": "Usuń profil",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Zapisz profil",
|
"ControllerSettingsSaveProfileToolTip": "Zapisz profil",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Wystąpił błąd podczas próby znalezienia określonych zapisanych danych: {0}",
|
"DialogMessageFindSaveErrorMessage": "Wystąpił błąd podczas próby znalezienia określonych zapisanych danych: {0}",
|
||||||
"FolderDialogExtractTitle": "Wybierz folder, do którego chcesz rozpakować",
|
"FolderDialogExtractTitle": "Wybierz folder, do którego chcesz rozpakować",
|
||||||
"DialogNcaExtractionMessage": "Wypakowywanie sekcji {0} z {1}...",
|
"DialogNcaExtractionMessage": "Wypakowywanie sekcji {0} z {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Asystent wypakowania sekcji NCA",
|
"DialogNcaExtractionTitle": "Asystent wypakowania sekcji NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Niepowodzenie podczas wypakowywania. W wybranym pliku nie było głównego NCA.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Niepowodzenie podczas wypakowywania. W wybranym pliku nie było głównego NCA.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Niepowodzenie podczas wypakowywania. Przeczytaj plik dziennika, aby uzyskać więcej informacji.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Niepowodzenie podczas wypakowywania. Przeczytaj plik dziennika, aby uzyskać więcej informacji.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Wypakowywanie zakończone pomyślnie.",
|
"DialogNcaExtractionSuccessMessage": "Wypakowywanie zakończone pomyślnie.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Definir cor de fundo",
|
"AvatarSetBackgroundColor": "Definir cor de fundo",
|
||||||
"AvatarClose": "Fechar",
|
"AvatarClose": "Fechar",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Carregar perfil",
|
"ControllerSettingsLoadProfileToolTip": "Carregar perfil",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Adicionar perfil",
|
"ControllerSettingsAddProfileToolTip": "Adicionar perfil",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Remover perfil",
|
"ControllerSettingsRemoveProfileToolTip": "Remover perfil",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Salvar perfil",
|
"ControllerSettingsSaveProfileToolTip": "Salvar perfil",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Ocorreu um erro ao tentar encontrar o diretório de salvamento: {0}",
|
"DialogMessageFindSaveErrorMessage": "Ocorreu um erro ao tentar encontrar o diretório de salvamento: {0}",
|
||||||
"FolderDialogExtractTitle": "Escolha o diretório onde os arquivos serão extraídos",
|
"FolderDialogExtractTitle": "Escolha o diretório onde os arquivos serão extraídos",
|
||||||
"DialogNcaExtractionMessage": "Extraindo seção {0} de {1}...",
|
"DialogNcaExtractionMessage": "Extraindo seção {0} de {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Extrator de seções NCA",
|
"DialogNcaExtractionTitle": "Extrator de seções NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Falha na extração. O NCA principal não foi encontrado no arquivo selecionado.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Falha na extração. O NCA principal não foi encontrado no arquivo selecionado.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Falha na extração. Leia o arquivo de log para mais informações.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Falha na extração. Leia o arquivo de log para mais informações.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Extração concluída com êxito.",
|
"DialogNcaExtractionSuccessMessage": "Extração concluída com êxito.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Установить цвет фона",
|
"AvatarSetBackgroundColor": "Установить цвет фона",
|
||||||
"AvatarClose": "Закрыть",
|
"AvatarClose": "Закрыть",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Загрузить профиль",
|
"ControllerSettingsLoadProfileToolTip": "Загрузить профиль",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Добавить профиль",
|
"ControllerSettingsAddProfileToolTip": "Добавить профиль",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Удалить профиль",
|
"ControllerSettingsRemoveProfileToolTip": "Удалить профиль",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Сохранить профиль",
|
"ControllerSettingsSaveProfileToolTip": "Сохранить профиль",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Произошла ошибка при поиске указанных данных сохранения: {0}",
|
"DialogMessageFindSaveErrorMessage": "Произошла ошибка при поиске указанных данных сохранения: {0}",
|
||||||
"FolderDialogExtractTitle": "Выберите папку для извлечения",
|
"FolderDialogExtractTitle": "Выберите папку для извлечения",
|
||||||
"DialogNcaExtractionMessage": "Извлечение {0} раздела из {1}...",
|
"DialogNcaExtractionMessage": "Извлечение {0} раздела из {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Извлечение разделов NCA",
|
"DialogNcaExtractionTitle": "Извлечение разделов NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ошибка извлечения. Основной NCA не присутствовал в выбранном файле.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ошибка извлечения. Основной NCA не присутствовал в выбранном файле.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Ошибка извлечения. Прочтите файл журнала для получения дополнительной информации.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Ошибка извлечения. Прочтите файл журнала для получения дополнительной информации.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Извлечение завершено успешно.",
|
"DialogNcaExtractionSuccessMessage": "Извлечение завершено успешно.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "ตั้งค่าสีพื้นหลัง",
|
"AvatarSetBackgroundColor": "ตั้งค่าสีพื้นหลัง",
|
||||||
"AvatarClose": "ปิด",
|
"AvatarClose": "ปิด",
|
||||||
"ControllerSettingsLoadProfileToolTip": "โหลด โปรไฟล์",
|
"ControllerSettingsLoadProfileToolTip": "โหลด โปรไฟล์",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "เพิ่ม โปรไฟล์",
|
"ControllerSettingsAddProfileToolTip": "เพิ่ม โปรไฟล์",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "ลบ โปรไฟล์",
|
"ControllerSettingsRemoveProfileToolTip": "ลบ โปรไฟล์",
|
||||||
"ControllerSettingsSaveProfileToolTip": "บันทึก โปรไฟล์",
|
"ControllerSettingsSaveProfileToolTip": "บันทึก โปรไฟล์",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "มีข้อผิดพลาดในการค้นหาข้อมูลบันทึกที่ระบุไว้: {0}",
|
"DialogMessageFindSaveErrorMessage": "มีข้อผิดพลาดในการค้นหาข้อมูลบันทึกที่ระบุไว้: {0}",
|
||||||
"FolderDialogExtractTitle": "เลือกโฟลเดอร์ที่จะแตกไฟล์เข้าไป",
|
"FolderDialogExtractTitle": "เลือกโฟลเดอร์ที่จะแตกไฟล์เข้าไป",
|
||||||
"DialogNcaExtractionMessage": "กำลังแตกไฟล์ {0} จากส่วน {1}...",
|
"DialogNcaExtractionMessage": "กำลังแตกไฟล์ {0} จากส่วน {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - เครื่องมือแตกไฟล์ของ NCA",
|
"DialogNcaExtractionTitle": "เครื่องมือแตกไฟล์ของ NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "เกิดความล้มเหลวในการแตกไฟล์เนื่องจากไม่พบ NCA หลักในไฟล์ที่เลือก",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "เกิดความล้มเหลวในการแตกไฟล์เนื่องจากไม่พบ NCA หลักในไฟล์ที่เลือก",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "เกิดความล้มเหลวในการแตกไฟล์ โปรดอ่านไฟล์บันทึกประวัติเพื่อดูข้อมูลเพิ่มเติม",
|
"DialogNcaExtractionCheckLogErrorMessage": "เกิดความล้มเหลวในการแตกไฟล์ โปรดอ่านไฟล์บันทึกประวัติเพื่อดูข้อมูลเพิ่มเติม",
|
||||||
"DialogNcaExtractionSuccessMessage": "การแตกไฟล์เสร็จสมบูรณ์แล้ว",
|
"DialogNcaExtractionSuccessMessage": "การแตกไฟล์เสร็จสมบูรณ์แล้ว",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Arka Plan Rengi Ayarla",
|
"AvatarSetBackgroundColor": "Arka Plan Rengi Ayarla",
|
||||||
"AvatarClose": "Kapat",
|
"AvatarClose": "Kapat",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Profil Yükle",
|
"ControllerSettingsLoadProfileToolTip": "Profil Yükle",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Profil Ekle",
|
"ControllerSettingsAddProfileToolTip": "Profil Ekle",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Profili Kaldır",
|
"ControllerSettingsRemoveProfileToolTip": "Profili Kaldır",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Profili Kaydet",
|
"ControllerSettingsSaveProfileToolTip": "Profili Kaydet",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Belirtilen kayıt verisi bulunmaya çalışırken hata: {0}",
|
"DialogMessageFindSaveErrorMessage": "Belirtilen kayıt verisi bulunmaya çalışırken hata: {0}",
|
||||||
"FolderDialogExtractTitle": "İçine ayıklanacak klasörü seç",
|
"FolderDialogExtractTitle": "İçine ayıklanacak klasörü seç",
|
||||||
"DialogNcaExtractionMessage": "{1} den {0} kısmı ayıklanıyor...",
|
"DialogNcaExtractionMessage": "{1} den {0} kısmı ayıklanıyor...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA Kısmı Ayıklayıcısı",
|
"DialogNcaExtractionTitle": "NCA Kısmı Ayıklayıcısı",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ayıklama hatası. Ana NCA seçilen dosyada bulunamadı.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ayıklama hatası. Ana NCA seçilen dosyada bulunamadı.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Ayıklama hatası. Ek bilgi için kayıt dosyasını okuyun.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Ayıklama hatası. Ek bilgi için kayıt dosyasını okuyun.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Ayıklama başarıyla tamamlandı.",
|
"DialogNcaExtractionSuccessMessage": "Ayıklama başarıyla tamamlandı.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "Встановити колір фону",
|
"AvatarSetBackgroundColor": "Встановити колір фону",
|
||||||
"AvatarClose": "Закрити",
|
"AvatarClose": "Закрити",
|
||||||
"ControllerSettingsLoadProfileToolTip": "Завантажити профіль",
|
"ControllerSettingsLoadProfileToolTip": "Завантажити профіль",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "Додати профіль",
|
"ControllerSettingsAddProfileToolTip": "Додати профіль",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "Видалити профіль",
|
"ControllerSettingsRemoveProfileToolTip": "Видалити профіль",
|
||||||
"ControllerSettingsSaveProfileToolTip": "Зберегти профіль",
|
"ControllerSettingsSaveProfileToolTip": "Зберегти профіль",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "Під час пошуку вказаних даних збереження сталася помилка: {0}",
|
"DialogMessageFindSaveErrorMessage": "Під час пошуку вказаних даних збереження сталася помилка: {0}",
|
||||||
"FolderDialogExtractTitle": "Виберіть папку для видобування",
|
"FolderDialogExtractTitle": "Виберіть папку для видобування",
|
||||||
"DialogNcaExtractionMessage": "Видобування розділу {0} з {1}...",
|
"DialogNcaExtractionMessage": "Видобування розділу {0} з {1}...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - Екстрактор розділів NCA",
|
"DialogNcaExtractionTitle": "Екстрактор розділів NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "Помилка видобування. Прочитайте файл журналу для отримання додаткової інформації.",
|
"DialogNcaExtractionCheckLogErrorMessage": "Помилка видобування. Прочитайте файл журналу для отримання додаткової інформації.",
|
||||||
"DialogNcaExtractionSuccessMessage": "Видобування успішно завершено.",
|
"DialogNcaExtractionSuccessMessage": "Видобування успішно завершено.",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "设置背景色",
|
"AvatarSetBackgroundColor": "设置背景色",
|
||||||
"AvatarClose": "关闭",
|
"AvatarClose": "关闭",
|
||||||
"ControllerSettingsLoadProfileToolTip": "加载配置文件",
|
"ControllerSettingsLoadProfileToolTip": "加载配置文件",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "新增配置文件",
|
"ControllerSettingsAddProfileToolTip": "新增配置文件",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "删除配置文件",
|
"ControllerSettingsRemoveProfileToolTip": "删除配置文件",
|
||||||
"ControllerSettingsSaveProfileToolTip": "保存配置文件",
|
"ControllerSettingsSaveProfileToolTip": "保存配置文件",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "查找指定存档时出错:{0}",
|
"DialogMessageFindSaveErrorMessage": "查找指定存档时出错:{0}",
|
||||||
"FolderDialogExtractTitle": "选择要提取到的文件夹",
|
"FolderDialogExtractTitle": "选择要提取到的文件夹",
|
||||||
"DialogNcaExtractionMessage": "提取 {1} 的 {0} 分区...",
|
"DialogNcaExtractionMessage": "提取 {1} 的 {0} 分区...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA 分区提取",
|
"DialogNcaExtractionTitle": "NCA 分区提取",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失败,所选文件中没有 NCA 文件",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失败,所选文件中没有 NCA 文件",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "提取失败,请查看日志文件获取详情",
|
"DialogNcaExtractionCheckLogErrorMessage": "提取失败,请查看日志文件获取详情",
|
||||||
"DialogNcaExtractionSuccessMessage": "提取成功!",
|
"DialogNcaExtractionSuccessMessage": "提取成功!",
|
||||||
|
@@ -407,6 +407,7 @@
|
|||||||
"AvatarSetBackgroundColor": "設定背景顏色",
|
"AvatarSetBackgroundColor": "設定背景顏色",
|
||||||
"AvatarClose": "關閉",
|
"AvatarClose": "關閉",
|
||||||
"ControllerSettingsLoadProfileToolTip": "載入設定檔",
|
"ControllerSettingsLoadProfileToolTip": "載入設定檔",
|
||||||
|
"ControllerSettingsViewProfileToolTip": "View Profile",
|
||||||
"ControllerSettingsAddProfileToolTip": "新增設定檔",
|
"ControllerSettingsAddProfileToolTip": "新增設定檔",
|
||||||
"ControllerSettingsRemoveProfileToolTip": "刪除設定檔",
|
"ControllerSettingsRemoveProfileToolTip": "刪除設定檔",
|
||||||
"ControllerSettingsSaveProfileToolTip": "儲存設定檔",
|
"ControllerSettingsSaveProfileToolTip": "儲存設定檔",
|
||||||
@@ -437,7 +438,7 @@
|
|||||||
"DialogMessageFindSaveErrorMessage": "尋找指定的存檔時出現錯誤: {0}",
|
"DialogMessageFindSaveErrorMessage": "尋找指定的存檔時出現錯誤: {0}",
|
||||||
"FolderDialogExtractTitle": "選擇要解壓到的資料夾",
|
"FolderDialogExtractTitle": "選擇要解壓到的資料夾",
|
||||||
"DialogNcaExtractionMessage": "從 {1} 提取 {0} 分區...",
|
"DialogNcaExtractionMessage": "從 {1} 提取 {0} 分區...",
|
||||||
"DialogNcaExtractionTitle": "Ryujinx - NCA 分區提取器",
|
"DialogNcaExtractionTitle": "NCA 分區提取器",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失敗。所選檔案中不存在主 NCA 檔案。",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失敗。所選檔案中不存在主 NCA 檔案。",
|
||||||
"DialogNcaExtractionCheckLogErrorMessage": "提取失敗。請閱讀日誌檔案了解更多資訊。",
|
"DialogNcaExtractionCheckLogErrorMessage": "提取失敗。請閱讀日誌檔案了解更多資訊。",
|
||||||
"DialogNcaExtractionSuccessMessage": "提取成功。",
|
"DialogNcaExtractionSuccessMessage": "提取成功。",
|
||||||
|
@@ -146,7 +146,7 @@ namespace Ryujinx.Ava.Common
|
|||||||
var cancellationToken = new CancellationTokenSource();
|
var cancellationToken = new CancellationTokenSource();
|
||||||
|
|
||||||
UpdateWaitWindow waitingDialog = new(
|
UpdateWaitWindow waitingDialog = new(
|
||||||
LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle],
|
App.FormatTitle(LocaleKeys.DialogNcaExtractionTitle),
|
||||||
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(titleFilePath)),
|
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(titleFilePath)),
|
||||||
cancellationToken);
|
cancellationToken);
|
||||||
|
|
||||||
@@ -269,7 +269,7 @@ namespace Ryujinx.Ava.Common
|
|||||||
Dispatcher.UIThread.Post(waitingDialog.Close);
|
Dispatcher.UIThread.Post(waitingDialog.Close);
|
||||||
|
|
||||||
NotificationHelper.Show(
|
NotificationHelper.Show(
|
||||||
LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle],
|
App.FormatTitle(LocaleKeys.DialogNcaExtractionTitle),
|
||||||
$"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}",
|
$"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}",
|
||||||
NotificationType.Information);
|
NotificationType.Information);
|
||||||
}
|
}
|
||||||
|
@@ -30,7 +30,6 @@ namespace Ryujinx.Ava
|
|||||||
{
|
{
|
||||||
internal partial class Program
|
internal partial class Program
|
||||||
{
|
{
|
||||||
//
|
|
||||||
public static double WindowScaleFactor { get; set; }
|
public static double WindowScaleFactor { get; set; }
|
||||||
public static double DesktopScaleFactor { get; set; } = 1.0;
|
public static double DesktopScaleFactor { get; set; } = 1.0;
|
||||||
public static string Version { get; private set; }
|
public static string Version { get; private set; }
|
||||||
@@ -101,7 +100,7 @@ namespace Ryujinx.Ava
|
|||||||
// Delete backup files after updating.
|
// Delete backup files after updating.
|
||||||
Task.Run(Updater.CleanupUpdate);
|
Task.Run(Updater.CleanupUpdate);
|
||||||
|
|
||||||
Console.Title = $"Ryujinx Console {Version}";
|
Console.Title = $"{App.FullAppName} Console {Version}";
|
||||||
|
|
||||||
// Hook unhandled exception and process exit events.
|
// Hook unhandled exception and process exit events.
|
||||||
AppDomain.CurrentDomain.UnhandledException += (sender, e)
|
AppDomain.CurrentDomain.UnhandledException += (sender, e)
|
||||||
|
@@ -226,11 +226,11 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
(int)Symbol.Help,
|
(int)Symbol.Help,
|
||||||
primaryButtonResult);
|
primaryButtonResult);
|
||||||
|
|
||||||
internal static async Task<UserResult> CreateConfirmationDialogExtended(
|
internal static async Task<UserResult> CreateDeniableConfirmationDialog(
|
||||||
string primaryText,
|
string primaryText,
|
||||||
string secondaryText,
|
string secondaryText,
|
||||||
string acceptButtonText,
|
string acceptButtonText,
|
||||||
string noacceptButtonText,
|
string noAcceptButtonText,
|
||||||
string cancelButtonText,
|
string cancelButtonText,
|
||||||
string title,
|
string title,
|
||||||
UserResult primaryButtonResult = UserResult.Yes)
|
UserResult primaryButtonResult = UserResult.Yes)
|
||||||
@@ -239,7 +239,7 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
primaryText,
|
primaryText,
|
||||||
secondaryText,
|
secondaryText,
|
||||||
acceptButtonText,
|
acceptButtonText,
|
||||||
noacceptButtonText,
|
noAcceptButtonText,
|
||||||
cancelButtonText,
|
cancelButtonText,
|
||||||
(int)Symbol.Help,
|
(int)Symbol.Help,
|
||||||
primaryButtonResult);
|
primaryButtonResult);
|
||||||
|
@@ -802,6 +802,11 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
{
|
{
|
||||||
get => FileAssociationHelper.IsTypeAssociationSupported;
|
get => FileAssociationHelper.IsTypeAssociationSupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool AreMimeTypesRegistered
|
||||||
|
{
|
||||||
|
get => FileAssociationHelper.AreMimeTypesRegistered;
|
||||||
|
}
|
||||||
|
|
||||||
public ObservableCollectionExtended<ApplicationData> Applications
|
public ObservableCollectionExtended<ApplicationData> Applications
|
||||||
{
|
{
|
||||||
|
@@ -26,19 +26,17 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
|
|
||||||
foreach (ILogical visual in SettingButtons.GetLogicalDescendants())
|
foreach (ILogical visual in SettingButtons.GetLogicalDescendants())
|
||||||
{
|
{
|
||||||
if (visual is ToggleButton button and not CheckBox)
|
switch (visual)
|
||||||
{
|
{
|
||||||
button.IsCheckedChanged += Button_IsCheckedChanged;
|
case ToggleButton button and not CheckBox:
|
||||||
}
|
button.IsCheckedChanged += Button_IsCheckedChanged;
|
||||||
|
break;
|
||||||
if (visual is CheckBox check)
|
case CheckBox check:
|
||||||
{
|
check.IsCheckedChanged += CheckBox_IsCheckedChanged;
|
||||||
check.IsCheckedChanged += CheckBox_IsCheckedChanged;
|
break;
|
||||||
}
|
case Slider slider:
|
||||||
|
slider.PropertyChanged += Slider_ValueChanged;
|
||||||
if (visual is Slider slider)
|
break;
|
||||||
{
|
|
||||||
slider.PropertyChanged += Slider_IsCheckedChanged;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,33 +45,28 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
{
|
{
|
||||||
base.OnPointerReleased(e);
|
base.OnPointerReleased(e);
|
||||||
|
|
||||||
if (_currentAssigner != null && _currentAssigner.ToggledButton != null && !_currentAssigner.ToggledButton.IsPointerOver)
|
if (_currentAssigner is { ToggledButton.IsPointerOver: false })
|
||||||
{
|
{
|
||||||
_currentAssigner.Cancel();
|
_currentAssigner.Cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private float _changeSlider = -1.0f;
|
private float _changeSlider = float.NaN;
|
||||||
|
|
||||||
private void Slider_IsCheckedChanged(object sender, AvaloniaPropertyChangedEventArgs e)
|
private void Slider_ValueChanged(object sender, AvaloniaPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is Slider check)
|
if (sender is Slider check)
|
||||||
{
|
{
|
||||||
if ((bool)check.IsPointerOver && _changeSlider == -1.0f)
|
_changeSlider = check.IsPointerOver switch
|
||||||
{
|
{
|
||||||
_changeSlider = (float)check.Value;
|
true when float.IsNaN(_changeSlider) => (float)check.Value,
|
||||||
|
false => float.NaN,
|
||||||
}
|
_ => _changeSlider
|
||||||
else if (!(bool)check.IsPointerOver)
|
};
|
||||||
{
|
|
||||||
_changeSlider = -1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_changeSlider != -1.0f && _changeSlider != (float)check.Value)
|
if (!float.IsNaN(_changeSlider) && _changeSlider != (float)check.Value)
|
||||||
{
|
{
|
||||||
|
(DataContext as ControllerInputViewModel)!.ParentModel.IsModified = true;
|
||||||
var viewModel = (DataContext as ControllerInputViewModel);
|
|
||||||
viewModel.ParentModel.IsModified = true;
|
|
||||||
_changeSlider = (float)check.Value;
|
_changeSlider = (float)check.Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,25 +74,20 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
|
|
||||||
private void CheckBox_IsCheckedChanged(object sender, RoutedEventArgs e)
|
private void CheckBox_IsCheckedChanged(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is CheckBox check)
|
if (sender is CheckBox { IsPointerOver: true })
|
||||||
{
|
{
|
||||||
if ((bool)check.IsPointerOver)
|
(DataContext as ControllerInputViewModel)!.ParentModel.IsModified = true;
|
||||||
{
|
_currentAssigner?.Cancel();
|
||||||
|
_currentAssigner = null;
|
||||||
var viewModel = (DataContext as ControllerInputViewModel);
|
|
||||||
viewModel.ParentModel.IsModified = true;
|
|
||||||
_currentAssigner?.Cancel();
|
|
||||||
_currentAssigner = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Button_IsCheckedChanged(object sender, RoutedEventArgs e)
|
private void Button_IsCheckedChanged(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is ToggleButton button )
|
if (sender is ToggleButton button)
|
||||||
{
|
{
|
||||||
if ((bool)button.IsChecked)
|
if (button.IsChecked is true)
|
||||||
{
|
{
|
||||||
if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
|
if (_currentAssigner != null && button == _currentAssigner.ToggledButton)
|
||||||
{
|
{
|
||||||
@@ -204,7 +192,7 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_currentAssigner != null )
|
if (_currentAssigner != null)
|
||||||
{
|
{
|
||||||
_currentAssigner.Cancel();
|
_currentAssigner.Cancel();
|
||||||
_currentAssigner = null;
|
_currentAssigner = null;
|
||||||
|
@@ -37,7 +37,7 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
{
|
{
|
||||||
_dialogOpen = true;
|
_dialogOpen = true;
|
||||||
|
|
||||||
var result = await ContentDialogHelper.CreateConfirmationDialogExtended(
|
var result = await ContentDialogHelper.CreateDeniableConfirmationDialog(
|
||||||
LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmMessage],
|
LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmMessage],
|
||||||
LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmSubMessage],
|
LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmSubMessage],
|
||||||
LocaleManager.Instance[LocaleKeys.InputDialogYes],
|
LocaleManager.Instance[LocaleKeys.InputDialogYes],
|
||||||
@@ -53,28 +53,19 @@ namespace Ryujinx.Ava.UI.Views.Input
|
|||||||
|
|
||||||
_dialogOpen = false;
|
_dialogOpen = false;
|
||||||
|
|
||||||
if (result == UserResult.Cancel)
|
|
||||||
{
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ViewModel.IsModified = false;
|
|
||||||
|
|
||||||
if (result != UserResult.Cancel)
|
|
||||||
{
|
|
||||||
ViewModel.PlayerId = ViewModel.PlayerIdChoose;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == UserResult.Cancel)
|
if (result == UserResult.Cancel)
|
||||||
{
|
{
|
||||||
if (e.AddedItems.Count > 0)
|
if (e.AddedItems.Count > 0)
|
||||||
{
|
{
|
||||||
ViewModel.IsModified = true;
|
ViewModel.IsModified = true;
|
||||||
var player = (PlayerModel)e.AddedItems[0];
|
ViewModel.PlayerId = ((PlayerModel)e.AddedItems[0])!.Id;
|
||||||
ViewModel.PlayerId = player.Id;
|
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ViewModel.PlayerId = ViewModel.PlayerIdChoose;
|
||||||
|
|
||||||
|
ViewModel.IsModified = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -4,8 +4,10 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup"
|
xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup"
|
||||||
|
xmlns:uih="clr-namespace:Ryujinx.UI.Common.Helper"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||||
|
xmlns:helper="clr-namespace:Ryujinx.UI.Common.Helper;assembly=Ryujinx.UI.Common"
|
||||||
x:DataType="viewModels:MainWindowViewModel"
|
x:DataType="viewModels:MainWindowViewModel"
|
||||||
x:Class="Ryujinx.Ava.UI.Views.Main.MainMenuBarView">
|
x:Class="Ryujinx.Ava.UI.Views.Main.MainMenuBarView">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
@@ -265,11 +267,11 @@
|
|||||||
<MenuItem Command="{Binding InstallFirmwareFromFolder}" Header="{ext:Locale MenuBarFileToolsInstallFirmwareFromDirectory}" Icon="{ext:Icon mdi-folder-cog}" />
|
<MenuItem Command="{Binding InstallFirmwareFromFolder}" Header="{ext:Locale MenuBarFileToolsInstallFirmwareFromDirectory}" Icon="{ext:Icon mdi-folder-cog}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="{ext:Locale MenuBarToolsManageFileTypes}" IsVisible="{Binding ManageFileTypesVisible}">
|
<MenuItem Header="{ext:Locale MenuBarToolsManageFileTypes}" IsVisible="{Binding ManageFileTypesVisible}">
|
||||||
<MenuItem Header="{ext:Locale MenuBarToolsInstallFileTypes}" Click="InstallFileTypes_Click"/>
|
<MenuItem Header="{ext:Locale MenuBarToolsInstallFileTypes}" Click="InstallFileTypes_Click" IsEnabled="{Binding AreMimeTypesRegistered, Converter={x:Static BoolConverters.Not}}" />
|
||||||
<MenuItem Header="{ext:Locale MenuBarToolsUninstallFileTypes}" Click="UninstallFileTypes_Click"/>
|
<MenuItem Header="{ext:Locale MenuBarToolsUninstallFileTypes}" Click="UninstallFileTypes_Click" IsEnabled="{Binding AreMimeTypesRegistered}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<Separator />
|
<Separator />
|
||||||
<MenuItem Header="{ext:Locale MenuBarToolsXCITrimmer}" Click="OpenXCITrimmerWindow" Icon="{ext:Icon fa-solid fa-scissors}" />
|
<MenuItem Header="{ext:Locale MenuBarToolsXCITrimmer}" IsEnabled="{Binding EnableNonGameRunningControls}" Click="OpenXCITrimmerWindow" Icon="{ext:Icon fa-solid fa-scissors}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarView}">
|
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarView}">
|
||||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarViewWindow}">
|
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarViewWindow}">
|
||||||
|
@@ -75,7 +75,7 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
string parentPath = currentCheatFile.Replace(titleModsPath, string.Empty);
|
string parentPath = currentCheatFile.Replace(titleModsPath, string.Empty);
|
||||||
|
|
||||||
buildId = Path.GetFileNameWithoutExtension(currentCheatFile).ToUpper();
|
buildId = Path.GetFileNameWithoutExtension(currentCheatFile).ToUpper();
|
||||||
currentGroup = new CheatNode("", buildId, parentPath, true);
|
currentGroup = new CheatNode(string.Empty, buildId, parentPath, true);
|
||||||
|
|
||||||
LoadedCheats.Add(currentGroup);
|
LoadedCheats.Add(currentGroup);
|
||||||
}
|
}
|
||||||
|
@@ -32,9 +32,9 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
{
|
{
|
||||||
ContentDialog contentDialog = new()
|
ContentDialog contentDialog = new()
|
||||||
{
|
{
|
||||||
PrimaryButtonText = "",
|
PrimaryButtonText = string.Empty,
|
||||||
SecondaryButtonText = "",
|
SecondaryButtonText = string.Empty,
|
||||||
CloseButtonText = "",
|
CloseButtonText = string.Empty,
|
||||||
Content = new XCITrimmerWindow(mainWindowViewModel),
|
Content = new XCITrimmerWindow(mainWindowViewModel),
|
||||||
Title = string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerWindowTitle]),
|
Title = string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerWindowTitle]),
|
||||||
};
|
};
|
||||||
|
@@ -32,7 +32,8 @@ namespace Ryujinx.Ava
|
|||||||
internal static class Updater
|
internal static class Updater
|
||||||
{
|
{
|
||||||
private const string GitHubApiUrl = "https://api.github.com";
|
private const string GitHubApiUrl = "https://api.github.com";
|
||||||
private const string LatestReleaseUrl = $"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest";
|
private const string LatestReleaseUrl =
|
||||||
|
$"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest";
|
||||||
|
|
||||||
private static readonly GithubReleasesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
|
private static readonly GithubReleasesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
|
||||||
|
|
||||||
@@ -83,7 +84,7 @@ namespace Ryujinx.Ava
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
Logger.Error?.Print(LogClass.Application, "Failed to convert the current Ryujinx version!");
|
Logger.Error?.Print(LogClass.Application, $"Failed to convert the current {App.FullAppName} version!");
|
||||||
|
|
||||||
await ContentDialogHelper.CreateWarningDialog(
|
await ContentDialogHelper.CreateWarningDialog(
|
||||||
LocaleManager.Instance[LocaleKeys.DialogUpdaterConvertFailedMessage],
|
LocaleManager.Instance[LocaleKeys.DialogUpdaterConvertFailedMessage],
|
||||||
|
Reference in New Issue
Block a user