Switch to the new folder structure.

Nits.
This commit is contained in:
LDj3SNuD 2020-01-13 01:45:19 +01:00
commit 76123878b0
2 changed files with 40 additions and 22 deletions

View file

@ -13,7 +13,10 @@ namespace ARMeilleure.Translation.AOT
{ {
public static class Aot public static class Aot
{ {
private const string WorkDir = "RyuAot"; private const string BaseDir = "Ryujinx";
private const string TitleIdTextDefault = "0000000000000000";
private const string DisplayVersionDefault = "0";
private const int SaveInterval = 30; // Seconds. private const int SaveInterval = 30; // Seconds.
@ -29,28 +32,28 @@ namespace ARMeilleure.Translation.AOT
private static readonly Timer _timer; private static readonly Timer _timer;
private static readonly string _basePath;
private static readonly object _locker; private static readonly object _locker;
private static bool _disposed; private static bool _disposed;
public static string WorkPath { get; } public static string WorkPath { get; private set; }
public static string TitleId { get; private set; } public static string TitleIdText { get; private set; }
public static string DisplayVersion { get; private set; }
public static bool Enabled { get; private set; } public static bool Enabled { get; private set; }
public static bool ReadOnlyMode { get; private set; } public static bool ReadOnlyMode { get; private set; }
static Aot() static Aot()
{ {
string basePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
WorkPath = Path.Combine(basePath, WorkDir); _basePath = Path.Combine(appDataPath, BaseDir);
if (!Directory.Exists(WorkPath)) WorkPath = String.Empty;
{ TitleIdText = TitleIdTextDefault;
Directory.CreateDirectory(WorkPath); DisplayVersion = DisplayVersionDefault;
}
TitleId = String.Empty;
Enabled = false; Enabled = false;
ReadOnlyMode = true; ReadOnlyMode = true;
@ -69,11 +72,25 @@ namespace ARMeilleure.Translation.AOT
_disposed = false; _disposed = false;
} }
public static void Init(string titleId, bool enabled = true, bool readOnlyMode = false) public static void Init(string titleIdText, string displayVersion, bool enabled = true, bool readOnlyMode = false)
{ {
if (!String.IsNullOrEmpty(titleId)) if (String.IsNullOrEmpty(titleIdText) || titleIdText == TitleIdTextDefault)
{ {
TitleId = titleId.ToUpper(); return;
}
TitleIdText = titleIdText;
if (!String.IsNullOrEmpty(displayVersion))
{
DisplayVersion = displayVersion;
}
WorkPath = Path.Combine(_basePath, "games", TitleIdText, "cpu", "cache");
if (!Directory.Exists(WorkPath))
{
Directory.CreateDirectory(WorkPath);
} }
Enabled = enabled; Enabled = enabled;
@ -92,7 +109,7 @@ namespace ARMeilleure.Translation.AOT
private static void LoadAndSplit() private static void LoadAndSplit()
{ {
string cachePath = Path.Combine(WorkPath, TitleId); string cachePath = Path.Combine(WorkPath, DisplayVersion);
FileInfo cacheInfo = new FileInfo(cachePath); FileInfo cacheInfo = new FileInfo(cachePath);
@ -254,7 +271,7 @@ namespace ARMeilleure.Translation.AOT
cacheStream.Seek(0L, SeekOrigin.Begin); cacheStream.Seek(0L, SeekOrigin.Begin);
cacheStream.Write(hash, 0, hashSize); cacheStream.Write(hash, 0, hashSize);
string cachePath = Path.Combine(WorkPath, TitleId); string cachePath = Path.Combine(WorkPath, DisplayVersion);
using (FileStream compressedCacheStream = new FileStream(cachePath, FileMode.OpenOrCreate)) using (FileStream compressedCacheStream = new FileStream(cachePath, FileMode.OpenOrCreate))
{ {

View file

@ -113,6 +113,7 @@ namespace Ryujinx.HLE.HOS
public BlitStruct<ApplicationControlProperty> ControlData { get; set; } public BlitStruct<ApplicationControlProperty> ControlData { get; set; }
public string TitleName { get; private set; } public string TitleName { get; private set; }
public string DisplayVersion { get; private set; }
public ulong TitleId { get; private set; } public ulong TitleId { get; private set; }
public string TitleIdText => TitleId.ToString("x16"); public string TitleIdText => TitleId.ToString("x16");
@ -298,7 +299,7 @@ namespace Ryujinx.HLE.HOS
} }
} }
private (Nca Main, Nca patch, Nca Control) GetXciGameData(Xci xci) private (Nca main, Nca patch, Nca control) GetXciGameData(Xci xci)
{ {
if (!xci.HasPartition(XciPartitionType.Secure)) if (!xci.HasPartition(XciPartitionType.Secure))
{ {
@ -389,6 +390,8 @@ namespace Ryujinx.HLE.HOS
TitleName = ControlData.Value.Titles.ToArray() TitleName = ControlData.Value.Titles.ToArray()
.FirstOrDefault(x => x.Name[0] != 0).Name.ToString(); .FirstOrDefault(x => x.Name[0] != 0).Name.ToString();
} }
DisplayVersion = ControlData.Value.DisplayVersion.ToString();
} }
} }
else else
@ -517,10 +520,6 @@ namespace Ryujinx.HLE.HOS
Device.FileSystem.SetRomFs(dataStorage.AsStream(FileAccess.Read)); Device.FileSystem.SetRomFs(dataStorage.AsStream(FileAccess.Read));
} }
LoadExeFs(codeFs, out Npdm metaData);
TitleId = metaData.Aci0.TitleId;
if (controlNca != null) if (controlNca != null)
{ {
ReadControlData(controlNca); ReadControlData(controlNca);
@ -530,6 +529,8 @@ namespace Ryujinx.HLE.HOS
ControlData.ByteSpan.Clear(); ControlData.ByteSpan.Clear();
} }
LoadExeFs(codeFs, out _);
if (TitleId != 0) if (TitleId != 0)
{ {
EnsureSaveData(new TitleId(TitleId)); EnsureSaveData(new TitleId(TitleId));
@ -583,7 +584,7 @@ namespace Ryujinx.HLE.HOS
Logger.PrintInfo(LogClass.Loader, "AOT Init..."); Logger.PrintInfo(LogClass.Loader, "AOT Init...");
Aot.Init(TitleId); Aot.Init(TitleIdText, DisplayVersion);
ProgramLoader.LoadStaticObjects(this, metaData, staticObjects.ToArray()); ProgramLoader.LoadStaticObjects(this, metaData, staticObjects.ToArray());
} }