diff --git a/Directory.Packages.props b/Directory.Packages.props index 4c3d5bcd3..b2a838496 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -14,10 +14,10 @@ - - + + - + @@ -40,11 +40,11 @@ - + - + @@ -59,4 +59,4 @@ - + \ No newline at end of file diff --git a/distribution/macos/Info.plist b/distribution/macos/Info.plist index 2602f9905..7f7fe0dd4 100644 --- a/distribution/macos/Info.plist +++ b/distribution/macos/Info.plist @@ -34,7 +34,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - %%RYUJINX_BUILD_VERSION%%-%%RYUJINX_BUILD_GIT_HASH%%" + %%RYUJINX_BUILD_VERSION%%-%%RYUJINX_BUILD_GIT_HASH%% CFBundleName Ryujinx CFBundlePackageType @@ -44,13 +44,13 @@ CFBundleSignature ???? CFBundleVersion - 1.2.0 + %%RYUJINX_BUILD_VERSION%% NSHighResolutionCapable CSResourcesFileMapped NSHumanReadableCopyright - Copyright © 2018 - 2023 Ryujinx Team and Contributors. + Copyright © 2018 - 2024 Ryujinx Team and Contributors. Copyright © 2024 - 2025 Ryubing and Contributors. LSApplicationCategoryType public.app-category.games LSMinimumSystemVersion diff --git a/src/ARMeilleure/CodeGen/X86/AssemblerTable.cs b/src/ARMeilleure/CodeGen/X86/AssemblerTable.cs index 4b226803b..ddceae057 100644 --- a/src/ARMeilleure/CodeGen/X86/AssemblerTable.cs +++ b/src/ARMeilleure/CodeGen/X86/AssemblerTable.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics.CodeAnalysis; namespace ARMeilleure.CodeGen.X86 { diff --git a/src/ARMeilleure/CodeGen/X86/CodeGenContext.cs b/src/ARMeilleure/CodeGen/X86/CodeGenContext.cs index afae3211f..6d72e0aff 100644 --- a/src/ARMeilleure/CodeGen/X86/CodeGenContext.cs +++ b/src/ARMeilleure/CodeGen/X86/CodeGenContext.cs @@ -2,7 +2,6 @@ using ARMeilleure.CodeGen.RegisterAllocators; using ARMeilleure.IntermediateRepresentation; using Microsoft.IO; using Ryujinx.Common.Memory; -using System.IO; using System.Numerics; namespace ARMeilleure.CodeGen.X86 diff --git a/src/ARMeilleure/CodeGen/X86/X86Register.cs b/src/ARMeilleure/CodeGen/X86/X86Register.cs index bcce4f974..d1394deaa 100644 --- a/src/ARMeilleure/CodeGen/X86/X86Register.cs +++ b/src/ARMeilleure/CodeGen/X86/X86Register.cs @@ -1,5 +1,3 @@ -using System.Diagnostics.CodeAnalysis; - namespace ARMeilleure.CodeGen.X86 { enum X86Register diff --git a/src/ARMeilleure/Instructions/InstEmitMul.cs b/src/ARMeilleure/Instructions/InstEmitMul.cs index cb48deb03..bd2ac8d64 100644 --- a/src/ARMeilleure/Instructions/InstEmitMul.cs +++ b/src/ARMeilleure/Instructions/InstEmitMul.cs @@ -2,7 +2,6 @@ using ARMeilleure.Decoders; using ARMeilleure.IntermediateRepresentation; using ARMeilleure.Translation; using System; -using System.Diagnostics.CodeAnalysis; using static ARMeilleure.Instructions.InstEmitHelper; namespace ARMeilleure.Instructions diff --git a/src/ARMeilleure/IntermediateRepresentation/Intrinsic.cs b/src/ARMeilleure/IntermediateRepresentation/Intrinsic.cs index 9d87c13b3..31dc97bd6 100644 --- a/src/ARMeilleure/IntermediateRepresentation/Intrinsic.cs +++ b/src/ARMeilleure/IntermediateRepresentation/Intrinsic.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics.CodeAnalysis; namespace ARMeilleure.IntermediateRepresentation { diff --git a/src/Ryujinx.Audio/Renderer/Dsp/Command/DataSourceVersion2Command.cs b/src/Ryujinx.Audio/Renderer/Dsp/Command/DataSourceVersion2Command.cs index 8b72687da..10723b3db 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/Command/DataSourceVersion2Command.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/Command/DataSourceVersion2Command.cs @@ -3,7 +3,6 @@ using Ryujinx.Audio.Renderer.Common; using Ryujinx.Audio.Renderer.Server.Voice; using System; using Ryujinx.Audio.Renderer.Parameter; -using Ryujinx.Memory; using WaveBuffer = Ryujinx.Audio.Renderer.Common.WaveBuffer; namespace Ryujinx.Audio.Renderer.Dsp.Command diff --git a/src/Ryujinx.Audio/Renderer/Dsp/Command/FillBufferCommand.cs b/src/Ryujinx.Audio/Renderer/Dsp/Command/FillBufferCommand.cs index 15ccd5239..c14eeac2b 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/Command/FillBufferCommand.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/Command/FillBufferCommand.cs @@ -1,5 +1,4 @@ using Ryujinx.Audio.Renderer.Server.Splitter; -using System; using System.Runtime.CompilerServices; namespace Ryujinx.Audio.Renderer.Dsp.Command diff --git a/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter2.cs b/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter2.cs index 78e47b69a..bc047759b 100644 --- a/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter2.cs +++ b/src/Ryujinx.Audio/Renderer/Parameter/VoiceInParameter2.cs @@ -1,9 +1,6 @@ using Ryujinx.Audio.Common; using Ryujinx.Audio.Renderer.Common; -using Ryujinx.Audio.Renderer.Dsp; using Ryujinx.Common.Memory; -using System; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace Ryujinx.Audio.Renderer.Parameter diff --git a/src/Ryujinx.Audio/Renderer/Server/CommandBuffer.cs b/src/Ryujinx.Audio/Renderer/Server/CommandBuffer.cs index 70564ace9..a2901baf0 100644 --- a/src/Ryujinx.Audio/Renderer/Server/CommandBuffer.cs +++ b/src/Ryujinx.Audio/Renderer/Server/CommandBuffer.cs @@ -10,7 +10,6 @@ using Ryujinx.Audio.Renderer.Server.Upsampler; using Ryujinx.Audio.Renderer.Server.Voice; using Ryujinx.Common; using System; -using System.Runtime.CompilerServices; using CpuAddress = System.UInt64; namespace Ryujinx.Audio.Renderer.Server diff --git a/src/Ryujinx.Audio/Renderer/Server/CommandGenerator.cs b/src/Ryujinx.Audio/Renderer/Server/CommandGenerator.cs index 600f51576..9651d204f 100644 --- a/src/Ryujinx.Audio/Renderer/Server/CommandGenerator.cs +++ b/src/Ryujinx.Audio/Renderer/Server/CommandGenerator.cs @@ -1,6 +1,5 @@ using Ryujinx.Audio.Common; using Ryujinx.Audio.Renderer.Common; -using Ryujinx.Audio.Renderer.Dsp; using Ryujinx.Audio.Renderer.Dsp.Command; using Ryujinx.Audio.Renderer.Dsp.State; using Ryujinx.Audio.Renderer.Parameter; diff --git a/src/Ryujinx.Audio/Renderer/Server/Splitter/SplitterDestinationVersion2.cs b/src/Ryujinx.Audio/Renderer/Server/Splitter/SplitterDestinationVersion2.cs index 7fb455241..cc4cf4466 100644 --- a/src/Ryujinx.Audio/Renderer/Server/Splitter/SplitterDestinationVersion2.cs +++ b/src/Ryujinx.Audio/Renderer/Server/Splitter/SplitterDestinationVersion2.cs @@ -1,4 +1,3 @@ -using Ryujinx.Audio.Renderer.Dsp; using Ryujinx.Audio.Renderer.Parameter; using Ryujinx.Common.Memory; using Ryujinx.Common.Utilities; diff --git a/src/Ryujinx.Audio/Renderer/Server/Voice/VoiceInfo.cs b/src/Ryujinx.Audio/Renderer/Server/Voice/VoiceInfo.cs index c6a4149f8..558a66baa 100644 --- a/src/Ryujinx.Audio/Renderer/Server/Voice/VoiceInfo.cs +++ b/src/Ryujinx.Audio/Renderer/Server/Voice/VoiceInfo.cs @@ -12,7 +12,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using static Ryujinx.Audio.Renderer.Common.BehaviourParameter; -using static Ryujinx.Audio.Renderer.Parameter.VoiceInParameter1; using PlayState = Ryujinx.Audio.Renderer.Server.Types.PlayState; namespace Ryujinx.Audio.Renderer.Server.Voice diff --git a/src/Ryujinx.Common/Logging/LogEventArgsJson.cs b/src/Ryujinx.Common/Logging/LogEventArgsJson.cs deleted file mode 100644 index 7c745d63e..000000000 --- a/src/Ryujinx.Common/Logging/LogEventArgsJson.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Ryujinx.Common.Logging.Formatters; -using System; -using System.Text.Json.Serialization; - -namespace Ryujinx.Common.Logging -{ - internal class LogEventArgsJson - { - public LogLevel Level { get; } - public TimeSpan Time { get; } - public string ThreadName { get; } - - public string Message { get; } - public string Data { get; } - - [JsonConstructor] - public LogEventArgsJson(LogLevel level, TimeSpan time, string threadName, string message, string data = null) - { - Level = level; - Time = time; - ThreadName = threadName; - Message = message; - Data = data; - } - - public static LogEventArgsJson FromLogEventArgs(LogEventArgs args) - { - return new LogEventArgsJson(args.Level, args.Time, args.ThreadName, args.Message, DynamicObjectFormatter.Format(args.Data)); - } - } -} diff --git a/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs b/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs deleted file mode 100644 index ac63d9a10..000000000 --- a/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Ryujinx.Common.Logging -{ - [JsonSerializable(typeof(LogEventArgsJson))] - internal partial class LogEventJsonSerializerContext : JsonSerializerContext - { - } -} diff --git a/src/Ryujinx.Common/Logging/Logger.cs b/src/Ryujinx.Common/Logging/Logger.cs index 0d8bd3ac3..64a76a3e4 100644 --- a/src/Ryujinx.Common/Logging/Logger.cs +++ b/src/Ryujinx.Common/Logging/Logger.cs @@ -230,14 +230,14 @@ namespace Ryujinx.Common.Logging switch (logLevel) { #pragma warning disable IDE0055 // Disable formatting - case LogLevel.Debug : Debug = enabled ? new Log(LogLevel.Debug) : new Log?(); break; - case LogLevel.Info : Info = enabled ? new Log(LogLevel.Info) : new Log?(); break; - case LogLevel.Warning : Warning = enabled ? new Log(LogLevel.Warning) : new Log?(); break; - case LogLevel.Error : Error = enabled ? new Log(LogLevel.Error) : new Log?(); break; - case LogLevel.Guest : Guest = enabled ? new Log(LogLevel.Guest) : new Log?(); break; - case LogLevel.AccessLog : AccessLog = enabled ? new Log(LogLevel.AccessLog) : new Log?(); break; - case LogLevel.Stub : Stub = enabled ? new Log(LogLevel.Stub) : new Log?(); break; - case LogLevel.Trace : Trace = enabled ? new Log(LogLevel.Trace) : new Log?(); break; + case LogLevel.Debug : Debug = enabled ? new Log(LogLevel.Debug) : null; break; + case LogLevel.Info : Info = enabled ? new Log(LogLevel.Info) : null; break; + case LogLevel.Warning : Warning = enabled ? new Log(LogLevel.Warning) : null; break; + case LogLevel.Error : Error = enabled ? new Log(LogLevel.Error) : null; break; + case LogLevel.Guest : Guest = enabled ? new Log(LogLevel.Guest) : null; break; + case LogLevel.AccessLog : AccessLog = enabled ? new Log(LogLevel.AccessLog) : null; break; + case LogLevel.Stub : Stub = enabled ? new Log(LogLevel.Stub) : null; break; + case LogLevel.Trace : Trace = enabled ? new Log(LogLevel.Trace) : null; break; case LogLevel.Notice : break; default: throw new ArgumentException("Unknown Log Level", nameof(logLevel)); #pragma warning restore IDE0055 diff --git a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs deleted file mode 100644 index 88b324a36..000000000 --- a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Ryujinx.Common.Utilities; -using System; -using System.IO; - -namespace Ryujinx.Common.Logging.Targets -{ - public class JsonLogTarget : ILogTarget - { - private readonly Stream _stream; - private readonly bool _leaveOpen; - private readonly string _name; - - string ILogTarget.Name { get => _name; } - - public JsonLogTarget(Stream stream, string name) - { - _stream = stream; - _name = name; - } - - public JsonLogTarget(Stream stream, bool leaveOpen) - { - _stream = stream; - _leaveOpen = leaveOpen; - } - - public void Log(object sender, LogEventArgs e) - { - LogEventArgsJson logEventArgsJson = LogEventArgsJson.FromLogEventArgs(e); - JsonHelper.SerializeToStream(_stream, logEventArgsJson, LogEventJsonSerializerContext.Default.LogEventArgsJson); - } - - public void Dispose() - { - GC.SuppressFinalize(this); - if (!_leaveOpen) - { - _stream.Dispose(); - } - } - } -} diff --git a/src/Ryujinx.Common/Pools/ObjectPool.cs b/src/Ryujinx.Common/Pools/ObjectPool.cs index 65baa00f9..ad56a04a2 100644 --- a/src/Ryujinx.Common/Pools/ObjectPool.cs +++ b/src/Ryujinx.Common/Pools/ObjectPool.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Concurrent; -using System.Threading; namespace Ryujinx.Common { diff --git a/src/Ryujinx.Common/ReferenceEqualityComparer.cs b/src/Ryujinx.Common/ReferenceEqualityComparer.cs deleted file mode 100644 index 714a967a4..000000000 --- a/src/Ryujinx.Common/ReferenceEqualityComparer.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace Ryujinx.Common -{ - public class ReferenceEqualityComparer : IEqualityComparer - where T : class - { - public bool Equals(T x, T y) - { - return x == y; - } - - public int GetHashCode([DisallowNull] T obj) - { - return obj.GetHashCode(); - } - } -} diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index a5beb1009..530dc369e 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -1,10 +1,5 @@ -using Ryujinx.Common.Utilities; using System; -using System.Net.Http; -using System.Net.Http.Json; using System.Reflection; -using System.Text.Json.Serialization; -using System.Threading.Tasks; namespace Ryujinx.Common { diff --git a/src/Ryujinx.Cpu/IExecutionContext.cs b/src/Ryujinx.Cpu/IExecutionContext.cs index c3ebe5aa5..004451f6d 100644 --- a/src/Ryujinx.Cpu/IExecutionContext.cs +++ b/src/Ryujinx.Cpu/IExecutionContext.cs @@ -1,6 +1,5 @@ using ARMeilleure.State; using System; -using System.Threading; namespace Ryujinx.Cpu { diff --git a/src/Ryujinx.Cpu/LightningJit/State/ExecutionContext.cs b/src/Ryujinx.Cpu/LightningJit/State/ExecutionContext.cs index a1ba0002e..27ce0c4a8 100644 --- a/src/Ryujinx.Cpu/LightningJit/State/ExecutionContext.cs +++ b/src/Ryujinx.Cpu/LightningJit/State/ExecutionContext.cs @@ -1,4 +1,3 @@ -using ARMeilleure; using ARMeilleure.Memory; using ARMeilleure.State; using System; diff --git a/src/Ryujinx.Graphics.GAL/ViewportSwizzle.cs b/src/Ryujinx.Graphics.GAL/ViewportSwizzle.cs index 69de93ad5..79fed54e7 100644 --- a/src/Ryujinx.Graphics.GAL/ViewportSwizzle.cs +++ b/src/Ryujinx.Graphics.GAL/ViewportSwizzle.cs @@ -1,5 +1,3 @@ -using System.Diagnostics.CodeAnalysis; - namespace Ryujinx.Graphics.GAL { public enum ViewportSwizzle diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs index 402e3ff80..5260c9233 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/IndirectDrawType.cs @@ -1,5 +1,3 @@ -using System.Diagnostics.CodeAnalysis; - namespace Ryujinx.Graphics.Gpu.Engine.Threed { /// diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs index db8bde751..2fb8de920 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs @@ -1,4 +1,3 @@ -using Ryujinx.Common.Memory; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Engine.Types; using Ryujinx.Graphics.Gpu.Shader; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs index 409dbab41..99cd0c2b2 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs @@ -1,4 +1,3 @@ -using Ryujinx.Common.Memory; using Ryujinx.Graphics.Device; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Engine.GPFifo; diff --git a/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs b/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs index 8d8b00719..8bfebe8a1 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs @@ -1,6 +1,5 @@ using Ryujinx.Graphics.GAL; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; namespace Ryujinx.Graphics.Gpu.Image { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs index 186bea77b..a81e7e98f 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs @@ -1,7 +1,6 @@ using Ryujinx.Graphics.GAL; using Ryujinx.Memory.Range; using System; -using System.Collections.Generic; namespace Ryujinx.Graphics.Gpu.Memory { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs index cd9043059..fee4b11c0 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs @@ -1,6 +1,5 @@ using Ryujinx.Memory.Range; using System; -using System.Collections.Generic; using System.Linq; namespace Ryujinx.Graphics.Gpu.Memory diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstType.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstType.cs index 43ff12168..217c6ae73 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstType.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstType.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics.CodeAnalysis; namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions { diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureFlags.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureFlags.cs index 61e6ecf5a..3b0e38542 100644 --- a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureFlags.cs +++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/TextureFlags.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics.CodeAnalysis; namespace Ryujinx.Graphics.Shader.IntermediateRepresentation { diff --git a/src/Ryujinx.Graphics.Shader/Translation/AggregateType.cs b/src/Ryujinx.Graphics.Shader/Translation/AggregateType.cs index 496fbc235..85d58bb0a 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/AggregateType.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/AggregateType.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics.CodeAnalysis; namespace Ryujinx.Graphics.Shader.Translation { diff --git a/src/Ryujinx.Graphics.Vic/Image/SurfaceReader.cs b/src/Ryujinx.Graphics.Vic/Image/SurfaceReader.cs index 2747ae805..1411ec939 100644 --- a/src/Ryujinx.Graphics.Vic/Image/SurfaceReader.cs +++ b/src/Ryujinx.Graphics.Vic/Image/SurfaceReader.cs @@ -1,5 +1,4 @@ using Ryujinx.Common.Logging; -using Ryujinx.Common.Memory; using Ryujinx.Graphics.Texture; using Ryujinx.Graphics.Vic.Types; using System; diff --git a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs index c75561690..a60e060c0 100644 --- a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs +++ b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs @@ -4,7 +4,6 @@ using Ryujinx.Graphics.Shader; using Ryujinx.Graphics.Shader.Translation; using Silk.NET.Vulkan; using System; -using System.Collections.Generic; using System.Numerics; using Buffer = Silk.NET.Vulkan.Buffer; using CompareOp = Ryujinx.Graphics.GAL.CompareOp; diff --git a/src/Ryujinx.Graphics.Vulkan/IndexBufferPattern.cs b/src/Ryujinx.Graphics.Vulkan/IndexBufferPattern.cs index 9054b2e71..852634513 100644 --- a/src/Ryujinx.Graphics.Vulkan/IndexBufferPattern.cs +++ b/src/Ryujinx.Graphics.Vulkan/IndexBufferPattern.cs @@ -1,6 +1,5 @@ using Ryujinx.Graphics.GAL; using System; -using System.Collections.Generic; using System.Runtime.InteropServices; namespace Ryujinx.Graphics.Vulkan diff --git a/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs b/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs index 1dcc0a622..d3094d842 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.Rcmd.cs @@ -1,12 +1,8 @@ using Gommon; -using JetBrains.Annotations; using Ryujinx.Common.Logging; -using Ryujinx.HLE.HOS.Kernel.Process; -using Ryujinx.HLE.HOS.Kernel.Threading; using System; using System.Collections.Generic; using System.Linq; -using System.Text; namespace Ryujinx.HLE.Debugger { diff --git a/src/Ryujinx.HLE/Debugger/Debugger.cs b/src/Ryujinx.HLE/Debugger/Debugger.cs index 5ffb71ca8..ff928aa90 100644 --- a/src/Ryujinx.HLE/Debugger/Debugger.cs +++ b/src/Ryujinx.HLE/Debugger/Debugger.cs @@ -5,7 +5,6 @@ using Ryujinx.HLE.HOS.Kernel.Process; using Ryujinx.HLE.HOS.Kernel.Threading; using System; using System.Collections.Concurrent; -using System.Diagnostics; using System.Linq; using System.Net.Sockets; using System.Threading; diff --git a/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs b/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs index a1f29bd13..d9699ce5c 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs @@ -49,7 +49,7 @@ namespace Ryujinx.HLE.FileSystem string ncaId = Convert.ToHexStringLower(entry.NcaId).Replace("-", null); Nca nca = _pfs.GetNca(keySet, $"/{ncaId}.nca"); - if (nca.GetProgramIndex() == programIndex) + if (nca.ProgramIndex == programIndex) { return nca; } diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index b043f29ef..7373e2f45 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -36,7 +36,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static ProcessResult Load(this IFileSystem exeFs, Switch device, BlitStruct nacpData, MetaLoader metaLoader, byte programIndex, bool isHomebrew = false) { - ulong programId = metaLoader.GetProgramId(); + ulong programId = metaLoader.ProgramId; // Replace the whole ExeFs partition by the modded one. if (device.Configuration.VirtualFileSystem.ModLoader.ReplaceExefsPartition(programId, ref exeFs)) @@ -118,13 +118,13 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions modLoadResult.Hash, true, programName, - metaLoader.GetProgramId(), + programId, programIndex, null, nsoExecutables); // TODO: This should be stored using ProcessId instead. - device.System.LibHacHorizonManager.ArpIReader.ApplicationId = new LibHac.ApplicationId(metaLoader.GetProgramId()); + device.System.LibHacHorizonManager.ArpIReader.ApplicationId = new LibHac.ApplicationId(programId); return processResult; } diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs index 140be91b5..94a76e12b 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs @@ -13,7 +13,7 @@ namespace Ryujinx.HLE.Loaders.Processes { MetaLoader metaLoader = exeFs.GetNpdm(); BlitStruct nacpData = new(1); - ulong programId = metaLoader.GetProgramId(); + ulong programId = metaLoader.ProgramId; device.Configuration.VirtualFileSystem.ModLoader.CollectMods([programId]); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs index f6dab1583..87713a2f7 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs @@ -1,61 +1,15 @@ -using LibHac.Common; -using LibHac.Fs; -using LibHac.Fs.Fsa; using LibHac.Loader; -using LibHac.Util; using Ryujinx.Common; -using System; namespace Ryujinx.HLE.Loaders.Processes.Extensions { public static class MetaLoaderExtensions { - public static ulong GetProgramId(this MetaLoader metaLoader) - { - metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm).ThrowIfFailure(); - - return npdm.Aci.ProgramId.Value; - } - - public static string GetProgramName(this MetaLoader metaLoader) - { - metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm).ThrowIfFailure(); - - return StringUtils.Utf8ZToString(npdm.Meta.ProgramName); - } - - public static bool IsProgram64Bit(this MetaLoader metaLoader) - { - metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm).ThrowIfFailure(); - - return (npdm.Meta.Flags & 1) != 0; - } - public static void LoadDefault(this MetaLoader metaLoader) { byte[] npdmBuffer = EmbeddedResources.Read("Ryujinx.HLE/Homebrew.npdm"); metaLoader.Load(npdmBuffer).ThrowIfFailure(); } - - public static void LoadFromFile(this MetaLoader metaLoader, IFileSystem fileSystem, string path = "") - { - if (string.IsNullOrEmpty(path)) - { - path = ProcessConst.MainNpdmPath; - } - - using UniqueRef npdmFile = new(); - - fileSystem.OpenFile(ref npdmFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure(); - - npdmFile.Get.GetSize(out long fileSize).ThrowIfFailure(); - - Span npdmBuffer = new byte[fileSize]; - - npdmFile.Get.Read(out _, 0, npdmBuffer).ThrowIfFailure(); - - metaLoader.Load(npdmBuffer).ThrowIfFailure(); - } } } diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs index be37078f5..f2dddc866 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs @@ -44,7 +44,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions // Collecting mods related to AocTitleIds and ProgramId. device.Configuration.VirtualFileSystem.ModLoader.CollectMods( - device.Configuration.ContentManager.GetAocTitleIds().Prepend(metaLoader.GetProgramId()), + device.Configuration.ContentManager.GetAocTitleIds().Prepend(metaLoader.ProgramId), ModLoader.GetModsBasePath(), ModLoader.GetSdModsBasePath()); @@ -74,7 +74,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions */ - ProcessResult processResult = exeFs.Load(device, nacpData, metaLoader, (byte)nca.GetProgramIndex()); + ProcessResult processResult = exeFs.Load(device, nacpData, metaLoader, (byte)nca.ProgramIndex); // Load RomFS. if (romFs == null) @@ -99,38 +99,6 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions return processResult; } - public static ulong GetProgramIdBase(this Nca nca) - { - return nca.Header.TitleId & ~0x1FFFUL; - } - - public static int GetProgramIndex(this Nca nca) - { - return (int)(nca.Header.TitleId & 0xF); - } - - public static bool IsProgram(this Nca nca) - { - return nca.Header.ContentType == NcaContentType.Program; - } - - public static bool IsMain(this Nca nca) - { - return nca.IsProgram() && !nca.IsPatch(); - } - - public static bool IsPatch(this Nca nca) - { - int dataIndex = Nca.GetSectionIndexFromType(NcaSectionType.Data, NcaContentType.Program); - - return nca.IsProgram() && nca.SectionExists(NcaSectionType.Data) && nca.Header.GetFsHeader(dataIndex).IsPatchSection(); - } - - public static bool IsControl(this Nca nca) - { - return nca.Header.ContentType == NcaContentType.Control; - } - public static (Nca, Nca) GetUpdateData(this Nca mainNca, VirtualFileSystem fileSystem, IntegrityCheckLevel checkLevel, int programIndex, out string updatePath) { updatePath = null; @@ -140,7 +108,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions Nca updateControlNca = null; // Clear the program index part. - ulong titleIdBase = mainNca.GetProgramIdBase(); + ulong titleIdBase = mainNca.ProgramIdBase; // Load update information if exists. string titleUpdateMetadataPath = Path.Combine(AppDataManager.GamesDirPath, titleIdBase.ToString("x16"), "updates.json"); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs index 798b1f86f..3e7408194 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs @@ -118,7 +118,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions device.Configuration.ContentManager.ClearAocData(); // Load DownloadableContents. - string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.GetProgramIdBase().ToString("x16"), "dlc.json"); + string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.ProgramIdBase.ToString("x16"), "dlc.json"); if (File.Exists(addOnContentMetadataPath)) { List dlcContainerList = JsonHelper.DeserializeFromFile(addOnContentMetadataPath, _contentSerializerContext.ListDownloadableContentContainer); @@ -149,14 +149,5 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions return (false, ProcessResult.Failed); } - - public static Nca GetNca(this IFileSystem fileSystem, KeySet keySet, string path) - { - using UniqueRef ncaFile = new(); - - fileSystem.OpenFile(ref ncaFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure(); - - return new Nca(keySet, ncaFile.Release().AsStorage()); - } } } diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs index 7f0c6b3f5..afd8ebffc 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs @@ -17,7 +17,6 @@ using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.HOS.Kernel.Process; using Ryujinx.HLE.Loaders.Executables; -using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Arp; using System; @@ -44,12 +43,12 @@ namespace Ryujinx.HLE.Loaders.Processes { Nca nca = partitionFileSystem.GetNca(device.FileSystem.KeySet, fileEntry.FullPath); - if (!nca.IsProgram()) + if (!nca.IsProgram) { continue; } - ulong currentMainProgramId = nca.GetProgramIdBase(); + ulong currentMainProgramId = nca.ProgramIdBase; if (applicationId == 0 && currentMainProgramId != 0) { @@ -66,7 +65,7 @@ namespace Ryujinx.HLE.Loaders.Processes break; } - hasIndex[nca.GetProgramIndex()] = true; + hasIndex[nca.ProgramIndex] = true; } if (programCount == 0) @@ -365,7 +364,7 @@ namespace Ryujinx.HLE.Loaders.Processes string displayVersion; - if (metaLoader.GetProgramId() > 0x0100000000007FFF) + if (metaLoader.ProgramId > 0x0100000000007FFF) { displayVersion = applicationControlProperties.Value.DisplayVersionString.ToString(); } diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs index 18b2b78d1..d6e492317 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs @@ -52,7 +52,7 @@ namespace Ryujinx.HLE.Loaders.Processes if (metaLoader is not null) { - ulong programId = metaLoader.GetProgramId(); + ulong programId = metaLoader.ProgramId; Name = ApplicationControlProperties.Title[(int)titleLanguage].NameString.ToString(); @@ -70,7 +70,7 @@ namespace Ryujinx.HLE.Loaders.Processes DisplayVersion = ApplicationControlProperties.DisplayVersionString.ToString(); ProgramId = programId; ProgramIdText = $"{programId:x16}"; - Is64Bit = metaLoader.IsProgram64Bit(); + Is64Bit = metaLoader.IsProgram64Bit; } DiskCacheEnabled = diskCacheEnabled; diff --git a/src/Ryujinx.Input.SDL2/SDL2JoyConPair.cs b/src/Ryujinx.Input.SDL2/SDL2JoyConPair.cs index be70cc4f9..dce767523 100644 --- a/src/Ryujinx.Input.SDL2/SDL2JoyConPair.cs +++ b/src/Ryujinx.Input.SDL2/SDL2JoyConPair.cs @@ -1,6 +1,4 @@ using Ryujinx.Common.Configuration.Hid; -using Ryujinx.Common.Configuration.Hid.Controller; -using System; using System.Collections.Generic; using System.Linq; using System.Numerics; diff --git a/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs b/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs index 6ae540178..344a48be6 100644 --- a/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs +++ b/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs @@ -2,7 +2,6 @@ using Ryujinx.Common; using Ryujinx.Common.Collections; using Ryujinx.Common.Memory.PartialUnmaps; using System; -using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.Versioning; diff --git a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs index 1a01a36bc..73a7f7dfc 100644 --- a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs +++ b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs @@ -11,7 +11,6 @@ using Ryujinx.Memory; using Ryujinx.Memory.Tracking; using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 509a9f18e..f0e0c2ec3 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -119,7 +119,6 @@ namespace Ryujinx.Ava => ProcessUnhandledException(sender, e.Exception, false); AppDomain.CurrentDomain.ProcessExit += (_, _) => Exit(); - // Setup base data directory. AppDataManager.Initialize(CommandLineState.BaseDirPathArg); diff --git a/src/Ryujinx/Systems/AppHost.cs b/src/Ryujinx/Systems/AppHost.cs index da2b5c80c..0aca8d3a4 100644 --- a/src/Ryujinx/Systems/AppHost.cs +++ b/src/Ryujinx/Systems/AppHost.cs @@ -4,7 +4,6 @@ using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; using DiscordRPC; -using Gommon; using LibHac.Common; using LibHac.Ns; using Ryujinx.Audio.Backends.Dummy; @@ -480,10 +479,7 @@ namespace Ryujinx.Ava.Systems Dispatcher.UIThread.InvokeAsync(() => { - if (ConfigurationState.Instance.ShowOldUI) - { - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI); - } + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI); }); _viewModel.SetUiProgressHandlers(Device); @@ -903,10 +899,7 @@ namespace Ryujinx.Ava.Systems _viewModel.IsPaused = false; _playTimer.Start(); - if (ConfigurationState.Instance.ShowOldUI) - { - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI); - } + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI); Logger.Info?.Print(LogClass.Emulation, "Emulation was resumed"); } @@ -916,10 +909,7 @@ namespace Ryujinx.Ava.Systems _viewModel.IsPaused = true; _playTimer.Stop(); - if (ConfigurationState.Instance.ShowOldUI) - { - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI, LocaleManager.Instance[LocaleKeys.Paused]); - } + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI, LocaleManager.Instance[LocaleKeys.Paused]); Logger.Info?.Print(LogClass.Emulation, "Emulation was paused"); } diff --git a/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs index 7cf111017..2831802fe 100644 --- a/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs @@ -1,7 +1,6 @@ using DynamicData; using DynamicData.Kernel; using Gommon; -using LibHac; using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; @@ -469,7 +468,7 @@ namespace Ryujinx.Ava.Systems.AppLibrary Nca nca = new(_virtualFileSystem.KeySet, new FileStream(applicationPath, FileMode.Open, FileAccess.Read).AsStorage()); - if (!nca.IsProgram() || nca.IsPatch()) + if (!nca.IsProgram || nca.IsPatch) { return false; } diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 7f12a6119..e2aaf60af 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1861,14 +1861,14 @@ namespace Ryujinx.Ava.UI.ViewModels /// public static void PreLaunchNotification() { - if (ConfigurationState.Instance.Debug.DebuggerSuspendOnStart.Value) + if (ConfigurationState.Instance.Debug.DebuggerSuspendOnStart) { NotificationHelper.ShowInformation( LocaleManager.Instance[LocaleKeys.NotificationLaunchCheckSuspendOnStartTitle], LocaleManager.Instance[LocaleKeys.NotificationLaunchCheckSuspendOnStartMessage]); } - if (ConfigurationState.Instance.Debug.EnableGdbStub.Value) + if (ConfigurationState.Instance.Debug.EnableGdbStub) { NotificationHelper.ShowInformation( LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.NotificationLaunchCheckGdbStubTitle, ConfigurationState.Instance.Debug.GdbStubPort.Value), @@ -1877,7 +1877,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (ConfigurationState.Instance.System.DramSize.Value != MemoryConfiguration.MemoryConfiguration4GiB) { - var MemoryConfigurationLocaleKey = ConfigurationState.Instance.System.DramSize.Value switch + var memoryConfigurationLocaleKey = ConfigurationState.Instance.System.DramSize.Value switch { MemoryConfiguration.MemoryConfiguration4GiB or MemoryConfiguration.MemoryConfiguration4GiBAppletDev or @@ -1889,10 +1889,11 @@ namespace Ryujinx.Ava.UI.ViewModels _ => LocaleKeys.SettingsTabSystemDramSize4GiB, }; - var MemoryConfigurationLocale = LocaleManager.Instance[MemoryConfigurationLocaleKey]; - NotificationHelper.ShowWarning( - LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.NotificationLaunchCheckDramSizeTitle, MemoryConfigurationLocale), + LocaleManager.Instance.UpdateAndGetDynamicValue( + LocaleKeys.NotificationLaunchCheckDramSizeTitle, + LocaleManager.Instance[memoryConfigurationLocaleKey] + ), LocaleManager.Instance[LocaleKeys.NotificationLaunchCheckDramSizeMessage]); } } @@ -2348,24 +2349,23 @@ namespace Ryujinx.Ava.UI.ViewModels Commands.CreateConditional(vm => vm?.SelectedApplication != null, async viewModel => { - IReadOnlyList result = await viewModel.StorageProvider.OpenFolderPickerAsync( + Optional resOpt = await viewModel.StorageProvider.OpenSingleFolderPickerAsync( new FolderPickerOpenOptions { - Title = LocaleManager.Instance[LocaleKeys.FolderDialogExtractTitle], - AllowMultiple = false, + Title = LocaleManager.Instance[LocaleKeys.FolderDialogExtractTitle] }); - if (result.Count == 0) + if (!resOpt.TryGet(out IStorageFolder result)) return; ApplicationHelper.ExtractSection( - result[0].Path.LocalPath, + result.Path.LocalPath, NcaSectionType.Logo, viewModel.SelectedApplication.Path, viewModel.SelectedApplication.Name); IStorageFile iconFile = - await result[0].CreateFileAsync($"{viewModel.SelectedApplication.IdString}.png"); + await result.CreateFileAsync($"{viewModel.SelectedApplication.IdString}.png"); await using Stream fileStream = await iconFile.OpenWriteAsync(); using SKBitmap bitmap = SKBitmap.Decode(viewModel.SelectedApplication.Icon) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 2a7bfa8ef..e363ee2cd 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -139,15 +139,13 @@ namespace Ryujinx.Ava.UI.Windows Executor.ExecuteBackgroundAsync(async () => { await ShowIntelMacWarningAsync(); - FilePath firmwarePath = CommandLineState.FirmwareToInstallPathArg; - if (firmwarePath is not null) + if (CommandLineState.FirmwareToInstallPathArg.TryGet(out FilePath fwPath)) { - if ((firmwarePath.ExistsAsFile && firmwarePath.Extension is "xci" or "zip") || - firmwarePath.ExistsAsDirectory) + if (fwPath is { ExistsAsFile: true, Extension: "xci" or "zip" } || fwPath.ExistsAsDirectory) { await Dispatcher.UIThread.InvokeAsync(() => - ViewModel.HandleFirmwareInstallation(firmwarePath)); - CommandLineState.FirmwareToInstallPathArg = null; + ViewModel.HandleFirmwareInstallation(fwPath)); + CommandLineState.FirmwareToInstallPathArg = default; } else Logger.Notice.Print(LogClass.UI, "Invalid firmware type provided. Path must be a directory, or a .zip or .xci file."); diff --git a/src/Ryujinx/Utilities/CommandLineState.cs b/src/Ryujinx/Utilities/CommandLineState.cs index f156792a1..28f302e9d 100644 --- a/src/Ryujinx/Utilities/CommandLineState.cs +++ b/src/Ryujinx/Utilities/CommandLineState.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Ava.Utilities public static string OverrideSystemLanguage { get; private set; } public static string OverrideHideCursor { get; private set; } public static string BaseDirPathArg { get; private set; } - public static FilePath FirmwareToInstallPathArg { get; set; } + public static Optional FirmwareToInstallPathArg { get; set; } public static string Profile { get; private set; } public static string LaunchPathArg { get; private set; } public static string LaunchApplicationId { get; private set; }