فهرست منبع

misc: move Models & Helpers into Common & Avalonia projects

Evan Husted 1 سال پیش
والد
کامیت
6caab1aa37
65فایلهای تغییر یافته به همراه141 افزوده شده و 146 حذف شده
  1. 0 0
      src/Ryujinx.Common/Helpers/CommandLineState.cs
  2. 0 0
      src/Ryujinx.Common/Helpers/ConsoleHelper.cs
  3. 0 0
      src/Ryujinx.Common/Helpers/FileAssociationHelper.cs
  4. 0 0
      src/Ryujinx.Common/Helpers/LinuxHelper.cs
  5. 0 0
      src/Ryujinx.Common/Helpers/ObjectiveC.cs
  6. 0 0
      src/Ryujinx.Common/Helpers/OpenHelper.cs
  7. 0 0
      src/Ryujinx.Common/Helpers/ValueFormatUtils.cs
  8. 0 64
      src/Ryujinx.UI.Common/Helper/AppletMetadata.cs
  9. 0 4
      src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj
  10. 2 1
      src/Ryujinx/AppHost.cs
  11. 1 1
      src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs
  12. 1 1
      src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs
  13. 1 1
      src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs
  14. 1 1
      src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs
  15. 2 4
      src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs
  16. 1 1
      src/Ryujinx/Common/Models/DownloadableContentModel.cs
  17. 1 1
      src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs
  18. 1 1
      src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs
  19. 2 4
      src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs
  20. 1 1
      src/Ryujinx/Common/Models/TitleUpdateModel.cs
  21. 2 2
      src/Ryujinx/Common/Models/XCITrimmerFileModel.cs
  22. 1 1
      src/Ryujinx/DiscordIntegrationModule.cs
  23. 1 1
      src/Ryujinx/Program.cs
  24. 2 1
      src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs
  25. 1 1
      src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs
  26. 1 1
      src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs
  27. 1 1
      src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs
  28. 1 1
      src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs
  29. 1 1
      src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs
  30. 1 1
      src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs
  31. 1 1
      src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs
  32. 1 1
      src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs
  33. 1 1
      src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs
  34. 1 1
      src/Ryujinx/UI/Models/SaveModel.cs
  35. 1 1
      src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs
  36. 1 1
      src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs
  37. 2 2
      src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs
  38. 1 1
      src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs
  39. 2 2
      src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs
  40. 12 2
      src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs
  41. 1 0
      src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs
  42. 1 1
      src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs
  43. 1 1
      src/Ryujinx/UI/Windows/CheatWindow.axaml.cs
  44. 1 1
      src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml
  45. 2 2
      src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs
  46. 1 1
      src/Ryujinx/UI/Windows/MainWindow.axaml.cs
  47. 1 1
      src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml
  48. 2 2
      src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs
  49. 2 3
      src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml
  50. 1 1
      src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs
  51. 1 1
      src/Ryujinx/Updater.cs
  52. 1 1
      src/Ryujinx/Utilities/AppLibrary/ApplicationCountUpdatedEventArgs.cs
  53. 1 1
      src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs
  54. 1 1
      src/Ryujinx/Utilities/AppLibrary/ApplicationJsonSerializerContext.cs
  55. 2 4
      src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs
  56. 1 1
      src/Ryujinx/Utilities/AppLibrary/ApplicationMetadata.cs
  57. 1 1
      src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs
  58. 1 1
      src/Ryujinx/Utilities/AppLibrary/LdnGameDataReceivedEventArgs.cs
  59. 2 5
      src/Ryujinx/Utilities/AppLibrary/LdnGameDataSerializerContext.cs
  60. 60 0
      src/Ryujinx/Utilities/AppletMetadata.cs
  61. 2 2
      src/Ryujinx/Utilities/DownloadableContentsHelper.cs
  62. 1 1
      src/Ryujinx/Utilities/SetupValidator.cs
  63. 2 1
      src/Ryujinx/Utilities/ShortcutHelper.cs
  64. 1 2
      src/Ryujinx/Utilities/TitleHelper.cs
  65. 2 2
      src/Ryujinx/Utilities/TitleUpdatesHelper.cs

+ 0 - 0
src/Ryujinx.UI.Common/Helper/CommandLineState.cs → src/Ryujinx.Common/Helpers/CommandLineState.cs


+ 0 - 0
src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs → src/Ryujinx.Common/Helpers/ConsoleHelper.cs


+ 0 - 0
src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs → src/Ryujinx.Common/Helpers/FileAssociationHelper.cs


+ 0 - 0
src/Ryujinx.UI.Common/Helper/LinuxHelper.cs → src/Ryujinx.Common/Helpers/LinuxHelper.cs


+ 0 - 0
src/Ryujinx.UI.Common/Helper/ObjectiveC.cs → src/Ryujinx.Common/Helpers/ObjectiveC.cs


+ 0 - 0
src/Ryujinx.UI.Common/Helper/OpenHelper.cs → src/Ryujinx.Common/Helpers/OpenHelper.cs


+ 0 - 0
src/Ryujinx.UI.Common/Helper/ValueFormatUtils.cs → src/Ryujinx.Common/Helpers/ValueFormatUtils.cs


+ 0 - 64
src/Ryujinx.UI.Common/Helper/AppletMetadata.cs

@@ -1,64 +0,0 @@
-using LibHac.Common;
-using LibHac.Ncm;
-using LibHac.Ns;
-using LibHac.Tools.FsSystem.NcaUtils;
-using Ryujinx.HLE;
-using Ryujinx.HLE.FileSystem;
-using Ryujinx.UI.App.Common;
-
-namespace Ryujinx.UI.Common.Helper
-{
-        public readonly struct AppletMetadata
-        {
-            private readonly ContentManager _contentManager;
-            
-            public string Name { get; }
-            public ulong ProgramId { get; }
-            
-            public string Version { get; }
-
-            public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0") 
-                : this(name, programId, version)
-            {
-                _contentManager = contentManager;
-            }
-            
-            public AppletMetadata(string name, ulong programId, string version = "1.0.0")
-            {
-                Name = name;
-                ProgramId = programId;
-                Version = version;
-            }
-            
-            public string GetContentPath(ContentManager contentManager)
-                => (contentManager ?? _contentManager)
-                    .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program);
-
-            public bool CanStart(ContentManager contentManager, out ApplicationData appData, out BlitStruct<ApplicationControlProperty> appControl)
-            {
-                contentManager ??= _contentManager;
-                if (contentManager == null)
-                {
-                    appData = null;
-                    appControl = new BlitStruct<ApplicationControlProperty>(0);
-                    return false;
-                }
-                
-                appData = new()
-                {
-                    Name = Name,
-                    Id = ProgramId,
-                    Path = GetContentPath(contentManager)
-                };
-
-                if (string.IsNullOrEmpty(appData.Path))
-                {
-                    appControl = new BlitStruct<ApplicationControlProperty>(0);
-                    return false;
-                }
-
-                appControl = StructHelpers.CreateCustomNacpData(Name, Version);
-                return true;
-            }
-        }
-}

+ 0 - 4
src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj

@@ -42,8 +42,4 @@
     <ProjectReference Include="..\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Resources\" />
-  </ItemGroup>
-
 </Project>

+ 2 - 1
src/Ryujinx/AppHost.cs

@@ -20,6 +20,8 @@ using Ryujinx.Ava.UI.Models;
 using Ryujinx.Ava.UI.Renderer;
 using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Ava.Utilities;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Configuration.Multiplayer;
@@ -40,7 +42,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc;
 using Ryujinx.HLE.HOS.SystemState;
 using Ryujinx.Input;
 using Ryujinx.Input.HLE;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common;
 using Ryujinx.UI.Common.Configuration;
 using Ryujinx.UI.Common.Helper;

+ 1 - 1
src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs → src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs

@@ -2,7 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.Common.Models.Amiibo
+namespace Ryujinx.Ava.Common.Models.Amiibo
 {
     public struct AmiiboApi : IEquatable<AmiiboApi>
     {

+ 1 - 1
src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs → src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs

@@ -1,7 +1,7 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.Common.Models.Amiibo
+namespace Ryujinx.Ava.Common.Models.Amiibo
 {
     public class AmiiboApiGamesSwitch
     {

+ 1 - 1
src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs → src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs

@@ -1,6 +1,6 @@
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.Common.Models.Amiibo
+namespace Ryujinx.Ava.Common.Models.Amiibo
 {
     public class AmiiboApiUsage
     {

+ 1 - 1
src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs → src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs

@@ -2,7 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.Common.Models.Amiibo
+namespace Ryujinx.Ava.Common.Models.Amiibo
 {
     public struct AmiiboJson
     {

+ 2 - 4
src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs → src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs

@@ -1,9 +1,7 @@
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.Common.Models.Amiibo
+namespace Ryujinx.Ava.Common.Models.Amiibo
 {
     [JsonSerializable(typeof(AmiiboJson))]
-    public partial class AmiiboJsonSerializerContext : JsonSerializerContext
-    {
-    }
+    public partial class AmiiboJsonSerializerContext : JsonSerializerContext;
 }

+ 1 - 1
src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs → src/Ryujinx/Common/Models/DownloadableContentModel.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.UI.Common.Models
+namespace Ryujinx.Ava.Common.Models
 {
     // NOTE: most consuming code relies on this model being value-comparable
     public record DownloadableContentModel(ulong TitleId, string ContainerPath, string FullPath)

+ 1 - 1
src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs → src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.UI.Common.Models.Github
+namespace Ryujinx.Ava.Common.Models.Github
 {
     public class GithubReleaseAssetJsonResponse
     {

+ 1 - 1
src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs → src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs

@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 
-namespace Ryujinx.UI.Common.Models.Github
+namespace Ryujinx.Ava.Common.Models.Github
 {
     public class GithubReleasesJsonResponse
     {

+ 2 - 4
src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs → src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs

@@ -1,9 +1,7 @@
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.Common.Models.Github
+namespace Ryujinx.Ava.Common.Models.Github
 {
     [JsonSerializable(typeof(GithubReleasesJsonResponse), GenerationMode = JsonSourceGenerationMode.Metadata)]
-    public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext
-    {
-    }
+    public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext;
 }

+ 1 - 1
src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs → src/Ryujinx/Common/Models/TitleUpdateModel.cs

@@ -1,4 +1,4 @@
-namespace Ryujinx.UI.Common.Models
+namespace Ryujinx.Ava.Common.Models
 {
     // NOTE: most consuming code relies on this model being value-comparable
     public record TitleUpdateModel(ulong TitleId, ulong Version, string DisplayVersion, string Path)

+ 2 - 2
src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs → src/Ryujinx/Common/Models/XCITrimmerFileModel.cs

@@ -1,8 +1,8 @@
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.Utilities;
-using Ryujinx.UI.App.Common;
 
-namespace Ryujinx.UI.Common.Models
+namespace Ryujinx.Ava.Common.Models
 {
     public record XCITrimmerFileModel(
         string Name,

+ 1 - 1
src/Ryujinx/DiscordIntegrationModule.cs

@@ -1,10 +1,10 @@
 using DiscordRPC;
 using Humanizer;
 using Humanizer.Localisation;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common;
 using Ryujinx.HLE;
 using Ryujinx.HLE.Loaders.Processes;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common.Configuration;
 using System.Text;
 

+ 1 - 1
src/Ryujinx/Program.cs

@@ -8,6 +8,7 @@ using Projektanker.Icons.Avalonia.MaterialDesign;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Ava.Utilities.SystemInfo;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
@@ -17,7 +18,6 @@ using Ryujinx.Common.SystemInterop;
 using Ryujinx.Graphics.Vulkan.MoltenVK;
 using Ryujinx.Headless;
 using Ryujinx.SDL2.Common;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common;
 using Ryujinx.UI.Common.Configuration;
 using Ryujinx.UI.Common.Helper;

+ 2 - 1
src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs

@@ -10,9 +10,10 @@ using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Ava.Utilities;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common.Configuration;
 using Ryujinx.HLE.HOS;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common.Helper;
 using SkiaSharp;
 using System;

+ 1 - 1
src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs

@@ -3,7 +3,7 @@ using Avalonia.Input;
 using Avalonia.Interactivity;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using System;
 
 namespace Ryujinx.Ava.UI.Controls

+ 1 - 1
src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs

@@ -5,7 +5,7 @@ using Avalonia.Interactivity;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using System;
 using System.Linq;
 

+ 1 - 1
src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs

@@ -1,5 +1,5 @@
 using Avalonia.Interactivity;
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 
 namespace Ryujinx.Ava.UI.Helpers
 {

+ 1 - 1
src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs

@@ -1,7 +1,7 @@
 using Avalonia.Data.Converters;
 using Avalonia.Markup.Xaml;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.UI.Common.Helper;
 using System;
 using System.Globalization;

+ 1 - 1
src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs

@@ -3,7 +3,7 @@ using Avalonia.Data;
 using Avalonia.Data.Converters;
 using Gommon;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.UI.Common.Models;
+using Ryujinx.Ava.Common.Models;
 using System;
 using System.Globalization;
 

+ 1 - 1
src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs

@@ -2,7 +2,7 @@ using Avalonia;
 using Avalonia.Data;
 using Avalonia.Data.Converters;
 using Ryujinx.Ava.Common.Locale;
-using Ryujinx.UI.Common.Models;
+using Ryujinx.Ava.Common.Models;
 using System;
 using System.Globalization;
 using static Ryujinx.Common.Utilities.XCIFileTrimmer;

+ 1 - 1
src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs

@@ -1,7 +1,7 @@
 using Avalonia;
 using Avalonia.Data;
 using Avalonia.Data.Converters;
-using Ryujinx.UI.Common.Models;
+using Ryujinx.Ava.Common.Models;
 using System;
 using System.Globalization;
 using static Ryujinx.Common.Utilities.XCIFileTrimmer;

+ 1 - 1
src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs

@@ -1,4 +1,4 @@
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using System;
 using System.Collections.Generic;
 

+ 1 - 1
src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs

@@ -1,4 +1,4 @@
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using System;
 using System.Collections.Generic;
 

+ 1 - 1
src/Ryujinx/UI/Models/SaveModel.cs

@@ -3,8 +3,8 @@ using LibHac.Fs;
 using LibHac.Ncm;
 using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.HLE.FileSystem;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common.Helper;
 using System;
 using System.IO;

+ 1 - 1
src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs

@@ -3,13 +3,13 @@ using Avalonia.Collections;
 using Avalonia.Media.Imaging;
 using Avalonia.Threading;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models.Amiibo;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.Windows;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.Utilities;
-using Ryujinx.UI.Common.Models.Amiibo;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;

+ 1 - 1
src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs

@@ -1,4 +1,4 @@
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using System;
 
 namespace Ryujinx.Ava.UI.ViewModels

+ 2 - 2
src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs

@@ -5,10 +5,10 @@ using Avalonia.Threading;
 using DynamicData;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.HLE.FileSystem;
-using Ryujinx.UI.App.Common;
-using Ryujinx.UI.Common.Models;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;

+ 1 - 1
src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs

@@ -21,6 +21,7 @@ using Ryujinx.Ava.UI.Models;
 using Ryujinx.Ava.UI.Models.Generic;
 using Ryujinx.Ava.UI.Renderer;
 using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
@@ -34,7 +35,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc;
 using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption;
 using Ryujinx.HLE.UI;
 using Ryujinx.Input.HLE;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common;
 using Ryujinx.UI.Common.Configuration;
 using Ryujinx.UI.Common.Helper;

+ 2 - 2
src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs

@@ -4,10 +4,10 @@ using Avalonia.Platform.Storage;
 using Avalonia.Threading;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.HLE.FileSystem;
-using Ryujinx.UI.App.Common;
-using Ryujinx.UI.Common.Models;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;

+ 12 - 2
src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs

@@ -4,10 +4,10 @@ using Gommon;
 using Avalonia.Threading;
 using Ryujinx.Ava.Common;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common.Utilities;
-using Ryujinx.UI.App.Common;
-using Ryujinx.UI.Common.Models;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
@@ -371,6 +371,16 @@ namespace Ryujinx.Ava.UI.ViewModels
             }
         }
 
+        public XCITrimmerFileModel NullableProcessingApplication
+        {
+            get => _processingApplication.OrDefault();
+            set
+            {
+                _processingApplication = value;
+                OnPropertyChanged();
+            }
+        }
+
         public bool Processing
         {
             get => _cancellationTokenSource != null;

+ 1 - 0
src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs

@@ -7,6 +7,7 @@ using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.ViewModels;
 using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Ava.Utilities;
 using Ryujinx.Common;
 using Ryujinx.Common.Utilities;
 using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption;

+ 1 - 1
src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs

@@ -1,7 +1,7 @@
 using Avalonia.Interactivity;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models.Amiibo;
 using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.UI.Common.Models.Amiibo;
 
 namespace Ryujinx.Ava.UI.Windows
 {

+ 1 - 1
src/Ryujinx/UI/Windows/CheatWindow.axaml.cs

@@ -2,9 +2,9 @@ using Avalonia.Collections;
 using LibHac.Tools.FsSystem;
 using Ryujinx.Ava.Common.Locale;
 using Ryujinx.Ava.UI.Models;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.HLE.HOS;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common.Configuration;
 using System.Globalization;
 using System.IO;

+ 1 - 1
src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml

@@ -6,9 +6,9 @@
     xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
-    xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
     xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
+    xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models"
     Width="500"
     Height="380"
     mc:Ignorable="d"

+ 2 - 2
src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs

@@ -3,10 +3,10 @@ using Avalonia.Interactivity;
 using Avalonia.Styling;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.UI.Common.Helper;
-using Ryujinx.UI.Common.Models;
 using System.Threading.Tasks;
 
 namespace Ryujinx.Ava.UI.Windows

+ 1 - 1
src/Ryujinx/UI/Windows/MainWindow.axaml.cs

@@ -15,6 +15,7 @@ using Ryujinx.Ava.Input;
 using Ryujinx.Ava.UI.Applet;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.Common;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.UI;
@@ -24,7 +25,6 @@ using Ryujinx.HLE.HOS;
 using Ryujinx.HLE.HOS.Services.Account.Acc;
 using Ryujinx.Input.HLE;
 using Ryujinx.Input.SDL2;
-using Ryujinx.UI.App.Common;
 using Ryujinx.UI.Common;
 using Ryujinx.UI.Common.Configuration;
 using Ryujinx.UI.Common.Helper;

+ 1 - 1
src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml

@@ -6,9 +6,9 @@
     xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
-    xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common"
     xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
     xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
+    xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models"
     Width="500"
     Height="300"
     mc:Ignorable="d"

+ 2 - 2
src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs

@@ -3,10 +3,10 @@ using Avalonia.Interactivity;
 using Avalonia.Styling;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.UI.App.Common;
+using Ryujinx.Ava.Utilities.AppLibrary;
 using Ryujinx.UI.Common.Helper;
-using Ryujinx.UI.Common.Models;
 using System.Threading.Tasks;
 
 namespace Ryujinx.Ava.UI.Windows

+ 2 - 3
src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml

@@ -6,9 +6,8 @@
     xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
-    xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common"
-    xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
     xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
+    xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models"
     Width="700"
     Height="600"
     x:DataType="viewModels:XCITrimmerViewModel"
@@ -140,7 +139,7 @@
             Padding="2.5">
             <ListBox
                 AutoScrollToSelectedItem="{Binding Processing}"
-                SelectedItem="{Binding ProcessingApplication.Value}"
+                SelectedItem="{Binding NullableProcessingApplication}"
                 SelectionMode="Multiple, Toggle"
                 Background="Transparent"
                 SelectionChanged="OnSelectionChanged"

+ 1 - 1
src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs

@@ -3,8 +3,8 @@ using Avalonia.Interactivity;
 using Avalonia.Styling;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.UI.Common.Models;
 using System;
 using System.Threading.Tasks;
 

+ 1 - 1
src/Ryujinx/Updater.cs

@@ -5,12 +5,12 @@ using ICSharpCode.SharpZipLib.GZip;
 using ICSharpCode.SharpZipLib.Tar;
 using ICSharpCode.SharpZipLib.Zip;
 using Ryujinx.Ava.Common.Locale;
+using Ryujinx.Ava.Common.Models.Github;
 using Ryujinx.Ava.UI.Helpers;
 using Ryujinx.Common;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.Utilities;
 using Ryujinx.UI.Common.Helper;
-using Ryujinx.UI.Common.Models.Github;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;

+ 1 - 1
src/Ryujinx.UI.Common/App/ApplicationCountUpdatedEventArgs.cs → src/Ryujinx/Utilities/AppLibrary/ApplicationCountUpdatedEventArgs.cs

@@ -1,6 +1,6 @@
 using System;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     public class ApplicationCountUpdatedEventArgs : EventArgs
     {

+ 1 - 1
src/Ryujinx.UI.Common/App/ApplicationData.cs → src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs

@@ -15,7 +15,7 @@ using System;
 using System.IO;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     public class ApplicationData
     {

+ 1 - 1
src/Ryujinx.UI.Common/App/ApplicationJsonSerializerContext.cs → src/Ryujinx/Utilities/AppLibrary/ApplicationJsonSerializerContext.cs

@@ -1,6 +1,6 @@
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     [JsonSourceGenerationOptions(WriteIndented = true)]
     [JsonSerializable(typeof(ApplicationMetadata))]

+ 2 - 4
src/Ryujinx.UI.Common/App/ApplicationLibrary.cs → src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs

@@ -10,6 +10,7 @@ using LibHac.Ns;
 using LibHac.Tools.Fs;
 using LibHac.Tools.FsSystem;
 using LibHac.Tools.FsSystem.NcaUtils;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Configuration.Multiplayer;
@@ -22,14 +23,11 @@ using Ryujinx.HLE.Loaders.Processes.Extensions;
 using Ryujinx.HLE.Utilities;
 using Ryujinx.UI.Common.Configuration;
 using Ryujinx.UI.Common.Configuration.System;
-using Ryujinx.UI.Common.Helper;
-using Ryujinx.UI.Common.Models;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Net.Http;
-using System.Reflection;
 using System.Text;
 using System.Text.Json;
 using System.Threading;
@@ -39,7 +37,7 @@ using MissingKeyException = LibHac.Common.Keys.MissingKeyException;
 using Path = System.IO.Path;
 using TimeSpan = System.TimeSpan;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     public class ApplicationLibrary
     {

+ 1 - 1
src/Ryujinx.UI.Common/App/ApplicationMetadata.cs → src/Ryujinx/Utilities/AppLibrary/ApplicationMetadata.cs

@@ -1,7 +1,7 @@
 using System;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     public class ApplicationMetadata
     {

+ 1 - 1
src/Ryujinx.UI.Common/App/LdnGameData.cs → src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs

@@ -3,7 +3,7 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     public struct LdnGameData
     {

+ 1 - 1
src/Ryujinx.UI.Common/App/LdnGameDataReceivedEventArgs.cs → src/Ryujinx/Utilities/AppLibrary/LdnGameDataReceivedEventArgs.cs

@@ -1,7 +1,7 @@
 using System;
 using System.Collections.Generic;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     public class LdnGameDataReceivedEventArgs : EventArgs
     {

+ 2 - 5
src/Ryujinx.UI.Common/App/LdnGameDataSerializerContext.cs → src/Ryujinx/Utilities/AppLibrary/LdnGameDataSerializerContext.cs

@@ -1,11 +1,8 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
-namespace Ryujinx.UI.App.Common
+namespace Ryujinx.Ava.Utilities.AppLibrary
 {
     [JsonSerializable(typeof(IEnumerable<LdnGameData>))]
-    internal partial class LdnGameDataSerializerContext : JsonSerializerContext
-    {
-
-    }
+    internal partial class LdnGameDataSerializerContext : JsonSerializerContext;
 }

+ 60 - 0
src/Ryujinx/Utilities/AppletMetadata.cs

@@ -0,0 +1,60 @@
+using LibHac.Common;
+using LibHac.Ncm;
+using LibHac.Ns;
+using LibHac.Tools.FsSystem.NcaUtils;
+using Ryujinx.Ava.Utilities.AppLibrary;
+using Ryujinx.HLE;
+using Ryujinx.HLE.FileSystem;
+
+namespace Ryujinx.Ava.Utilities
+{
+    public readonly struct AppletMetadata
+    {
+        private readonly ContentManager _contentManager;
+
+        public string Name { get; }
+        public ulong ProgramId { get; }
+
+        public string Version { get; }
+
+        public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0")
+            : this(name, programId, version)
+        {
+            _contentManager = contentManager;
+        }
+
+        public AppletMetadata(string name, ulong programId, string version = "1.0.0")
+        {
+            Name = name;
+            ProgramId = programId;
+            Version = version;
+        }
+
+        public string GetContentPath(ContentManager contentManager)
+            => (contentManager ?? _contentManager)
+                .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program);
+
+        public bool CanStart(ContentManager contentManager, out ApplicationData appData,
+            out BlitStruct<ApplicationControlProperty> appControl)
+        {
+            contentManager ??= _contentManager;
+            if (contentManager == null)
+            {
+                appData = null;
+                appControl = new BlitStruct<ApplicationControlProperty>(0);
+                return false;
+            }
+
+            appData = new() { Name = Name, Id = ProgramId, Path = GetContentPath(contentManager) };
+
+            if (string.IsNullOrEmpty(appData.Path))
+            {
+                appControl = new BlitStruct<ApplicationControlProperty>(0);
+                return false;
+            }
+
+            appControl = StructHelpers.CreateCustomNacpData(Name, Version);
+            return true;
+        }
+    }
+}

+ 2 - 2
src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs → src/Ryujinx/Utilities/DownloadableContentsHelper.cs

@@ -3,18 +3,18 @@ using LibHac.Fs;
 using LibHac.Fs.Fsa;
 using LibHac.Tools.FsSystem;
 using LibHac.Tools.FsSystem.NcaUtils;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.Utilities;
 using Ryujinx.HLE.FileSystem;
 using Ryujinx.HLE.Utilities;
-using Ryujinx.UI.Common.Models;
 using System;
 using System.Collections.Generic;
 using System.IO;
 using Path = System.IO.Path;
 
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Ava.Utilities
 {
     public static class DownloadableContentsHelper
     {

+ 1 - 1
src/Ryujinx.UI.Common/Helper/SetupValidator.cs → src/Ryujinx/Utilities/SetupValidator.cs

@@ -4,7 +4,7 @@ using Ryujinx.HLE.FileSystem;
 using System;
 using System.IO;
 
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Ava.Utilities
 {
     /// <summary>
     /// Ensure installation validity

+ 2 - 1
src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs → src/Ryujinx/Utilities/ShortcutHelper.cs

@@ -1,5 +1,6 @@
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
+using Ryujinx.UI.Common.Helper;
 using ShellLink;
 using SkiaSharp;
 using System;
@@ -7,7 +8,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Runtime.Versioning;
 
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Ava.Utilities
 {
     public static class ShortcutHelper
     {

+ 1 - 2
src/Ryujinx.UI.Common/Helper/TitleHelper.cs → src/Ryujinx/Utilities/TitleHelper.cs

@@ -1,7 +1,6 @@
 using Ryujinx.HLE.Loaders.Processes;
-using System;
 
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Ava.Utilities
 {
     public static class TitleHelper
     {

+ 2 - 2
src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs → src/Ryujinx/Utilities/TitleUpdatesHelper.cs

@@ -6,6 +6,7 @@ using LibHac.Ncm;
 using LibHac.Ns;
 using LibHac.Tools.FsSystem;
 using LibHac.Tools.FsSystem.NcaUtils;
+using Ryujinx.Ava.Common.Models;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.Utilities;
@@ -13,7 +14,6 @@ using Ryujinx.HLE.FileSystem;
 using Ryujinx.HLE.Loaders.Processes.Extensions;
 using Ryujinx.HLE.Utilities;
 using Ryujinx.UI.Common.Configuration;
-using Ryujinx.UI.Common.Models;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -22,7 +22,7 @@ using Path = System.IO.Path;
 using SpanHelpers = LibHac.Common.SpanHelpers;
 using TitleUpdateMetadata = Ryujinx.Common.Configuration.TitleUpdateMetadata;
 
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Ava.Utilities
 {
     public static class TitleUpdatesHelper
     {