From 63b24b4af2804f173764c98586a19c39db04ad4d Mon Sep 17 00:00:00 2001
From: Alex Barney <thealexbarney@gmail.com>
Date: Sun, 5 Jan 2020 04:49:44 -0700
Subject: Rename "RyuFs" directory to "Ryujinx" and use the same savedata
 system the Switch uses (#801)

* Use savedata FS commands from LibHac

* Add EnsureSaveData. Use ApplicationControlProperty struct

* Add a function to migrate to the new directory layout

* LibHac update

* Change backup structure

* Don't create UI files in the save path

* Update RyuFs paths

* Add GetProgramIndexForAccessLog

Ryujinx only runs one program at a time, so always return values reflecting that

* Load control NCA when loading from an NSP

* Skip over UI stats when exiting

* Set TitleName and TitleId in more cases. Fix TitleID naming style

* Completely comment out GUI play stats code

* rebase

* Update LibHac

* Update LibHac

* Revert UI changes

* Do migration automatically at startup

* Rename RyuFs directory to Ryujinx

* Update RyuFs text

* Store savedata paths in the GUI

* Make "Open Save Directory" work

* Use a dummy NACP in EnsureSaveData if one is not loaded

* Remove manual migration button

* Respond to feedback

* Don't read the installer config to get a version string

* Delete nuget.config

* Exclude 'sdcard' and 'bis' during migration

Co-authored-by: Thog <thog@protonmail.com>
---
 .../Fs/FileSystemProxy/FileSystemProxyHelper.cs    | 52 +++++-----------------
 1 file changed, 10 insertions(+), 42 deletions(-)

(limited to 'Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs')

diff --git a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
index 2b0f06dd..1dd5fb86 100644
--- a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
+++ b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
@@ -3,54 +3,12 @@ using LibHac.Fs;
 using LibHac.FsSystem;
 using LibHac.FsSystem.NcaUtils;
 using LibHac.Spl;
-using Ryujinx.Common;
-using Ryujinx.HLE.FileSystem;
-using Ryujinx.HLE.Utilities;
 using System.IO;
 
 namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
 {
     static class FileSystemProxyHelper
     {
-        public static ResultCode LoadSaveDataFileSystem(ServiceCtx context, bool readOnly, out IFileSystem loadedFileSystem)
-        {
-            loadedFileSystem = null;
-
-            SaveSpaceId  saveSpaceId  = (SaveSpaceId)context.RequestData.ReadInt64();
-            ulong        titleId      = context.RequestData.ReadUInt64();
-            UInt128      userId       = context.RequestData.ReadStruct<UInt128>();
-            long         saveId       = context.RequestData.ReadInt64();
-            SaveDataType saveDataType = (SaveDataType)context.RequestData.ReadByte();
-            SaveInfo     saveInfo     = new SaveInfo(titleId, saveId, saveDataType, saveSpaceId, userId);
-            string       savePath     = context.Device.FileSystem.GetSavePath(context, saveInfo);
-
-            try
-            {
-                LocalFileSystem       fileSystem     = new LocalFileSystem(savePath);
-
-                Result result = DirectorySaveDataFileSystem.CreateNew(out DirectorySaveDataFileSystem dirFileSystem, fileSystem);
-                if (result.IsFailure())
-                {
-                    return (ResultCode)result.Value;
-                }
-
-                LibHac.Fs.IFileSystem saveFileSystem = dirFileSystem;
-
-                if (readOnly)
-                {
-                    saveFileSystem = new ReadOnlyFileSystem(saveFileSystem);
-                }
-
-                loadedFileSystem = new IFileSystem(saveFileSystem);
-            }
-            catch (HorizonResultException ex)
-            {
-                return (ResultCode)ex.ResultValue.Value;
-            }
-
-            return ResultCode.Success;
-        }
-
         public static ResultCode OpenNsp(ServiceCtx context, string pfsPath, out IFileSystem openedFileSystem)
         {
             openedFileSystem = null;
@@ -154,5 +112,15 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
                 }
             }
         }
+
+        public static Result ReadFsPath(out FsPath path, ServiceCtx context, int index = 0)
+        {
+            long position = context.Request.SendBuff[index].Position;
+            long size     = context.Request.SendBuff[index].Size;
+
+            byte[] pathBytes = context.Memory.ReadBytes(position, size);
+
+            return FsPath.FromSpan(out path, pathBytes);
+        }
     }
 }
-- 
cgit v1.2.3-70-g09d2