From ec6cb0abb4b7669895b6e96fd7581c93b5abd691 Mon Sep 17 00:00:00 2001
From: Mary Guillemard <mary@mary.zone>
Date: Sat, 2 Mar 2024 12:51:05 +0100
Subject: infra: Make Avalonia the default UI  (#6375)

* misc: Move Ryujinx project to Ryujinx.Gtk3

This breaks release CI for now but that's fine.

Signed-off-by: Mary Guillemard <mary@mary.zone>

* misc: Move Ryujinx.Ava project to Ryujinx

This breaks CI for now, but it's fine.

Signed-off-by: Mary Guillemard <mary@mary.zone>

* infra: Make Avalonia the default UI

Should fix CI after the previous changes.

GTK3 isn't build by the release job anymore, only by PR CI.

This also ensure that the test-ava update package is still generated to
allow update from the old testing channel.

Signed-off-by: Mary Guillemard <mary@mary.zone>

* Fix missing copy in create_app_bundle.sh

Signed-off-by: Mary Guillemard <mary@mary.zone>

* Fix syntax error

Signed-off-by: Mary Guillemard <mary@mary.zone>

---------

Signed-off-by: Mary Guillemard <mary@mary.zone>
---
 src/Ryujinx/UI/Models/SaveModel.cs | 96 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 96 insertions(+)
 create mode 100644 src/Ryujinx/UI/Models/SaveModel.cs

(limited to 'src/Ryujinx/UI/Models/SaveModel.cs')

diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs
new file mode 100644
index 00000000..d6dea2f6
--- /dev/null
+++ b/src/Ryujinx/UI/Models/SaveModel.cs
@@ -0,0 +1,96 @@
+using LibHac.Fs;
+using LibHac.Ncm;
+using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Ava.UI.Windows;
+using Ryujinx.HLE.FileSystem;
+using Ryujinx.UI.App.Common;
+using Ryujinx.UI.Common.Helper;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Path = System.IO.Path;
+
+namespace Ryujinx.Ava.UI.Models
+{
+    public class SaveModel : BaseModel
+    {
+        private long _size;
+
+        public ulong SaveId { get; }
+        public ProgramId TitleId { get; }
+        public string TitleIdString => $"{TitleId.Value:X16}";
+        public UserId UserId { get; }
+        public bool InGameList { get; }
+        public string Title { get; }
+        public byte[] Icon { get; }
+
+        public long Size
+        {
+            get => _size; set
+            {
+                _size = value;
+                SizeAvailable = true;
+                OnPropertyChanged();
+                OnPropertyChanged(nameof(SizeString));
+                OnPropertyChanged(nameof(SizeAvailable));
+            }
+        }
+
+        public bool SizeAvailable { get; set; }
+
+        public string SizeString => ValueFormatUtils.FormatFileSize(Size);
+
+        public SaveModel(SaveDataInfo info)
+        {
+            SaveId = info.SaveDataId;
+            TitleId = info.ProgramId;
+            UserId = info.UserId;
+
+            var appData = MainWindow.MainWindowViewModel.Applications.FirstOrDefault(x => x.TitleId.ToUpper() == TitleIdString);
+
+            InGameList = appData != null;
+
+            if (InGameList)
+            {
+                Icon = appData.Icon;
+                Title = appData.TitleName;
+            }
+            else
+            {
+                var appMetadata = ApplicationLibrary.LoadAndSaveMetaData(TitleIdString);
+                Title = appMetadata.Title ?? TitleIdString;
+            }
+
+            Task.Run(() =>
+            {
+                var saveRoot = Path.Combine(VirtualFileSystem.GetNandPath(), $"user/save/{info.SaveDataId:x16}");
+
+                long totalSize = GetDirectorySize(saveRoot);
+
+                static long GetDirectorySize(string path)
+                {
+                    long size = 0;
+                    if (Directory.Exists(path))
+                    {
+                        var directories = Directory.GetDirectories(path);
+                        foreach (var directory in directories)
+                        {
+                            size += GetDirectorySize(directory);
+                        }
+
+                        var files = Directory.GetFiles(path);
+                        foreach (var file in files)
+                        {
+                            size += new FileInfo(file).Length;
+                        }
+                    }
+
+                    return size;
+                }
+
+                Size = totalSize;
+            });
+
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2