Change ExplorerFolder path and refactor

This commit is contained in:
Sinai 2022-04-12 00:26:01 +10:00
parent f19a1dd25e
commit 96451477ee
10 changed files with 90 additions and 36 deletions

View File

@ -123,7 +123,7 @@ namespace UnityExplorer.Config
Default_Output_Path = new ConfigElement<string>("Default Output Path", Default_Output_Path = new ConfigElement<string>("Default Output Path",
"The default output path when exporting things from UnityExplorer.", "The default output path when exporting things from UnityExplorer.",
Path.Combine(ExplorerCore.Loader.ExplorerFolder, "Output")); Path.Combine(ExplorerCore.ExplorerFolder, "Output"));
Startup_Delay_Time = new ConfigElement<float>("Startup Delay Time", Startup_Delay_Time = new ConfigElement<float>("Startup Delay Time",
"The delay on startup before the UI is created.", "The delay on startup before the UI is created.",

View File

@ -16,7 +16,7 @@ namespace UnityExplorer.Config
public override void Init() public override void Init()
{ {
CONFIG_PATH = Path.Combine(ExplorerCore.Loader.ExplorerFolder, "data.cfg"); CONFIG_PATH = Path.Combine(ExplorerCore.ExplorerFolder, "data.cfg");
} }
public override void LoadConfig() public override void LoadConfig()

View File

@ -15,11 +15,13 @@ namespace UnityExplorer
public static class ExplorerCore public static class ExplorerCore
{ {
public const string NAME = "UnityExplorer"; public const string NAME = "UnityExplorer";
public const string VERSION = "4.6.4"; public const string VERSION = "4.7.0";
public const string AUTHOR = "Sinai"; public const string AUTHOR = "Sinai";
public const string GUID = "com.sinai.unityexplorer"; public const string GUID = "com.sinai.unityexplorer";
public static IExplorerLoader Loader { get; private set; } public static IExplorerLoader Loader { get; private set; }
public static string ExplorerFolder => Path.Combine(Loader.ExplorerFolderDestination, Loader.ExplorerFolderName);
public const string DEFAULT_EXPLORER_FOLDER_NAME = "sinai-dev-UnityExplorer";
public static HarmonyLib.Harmony Harmony { get; } = new HarmonyLib.Harmony(GUID); public static HarmonyLib.Harmony Harmony { get; } = new HarmonyLib.Harmony(GUID);
@ -35,7 +37,8 @@ namespace UnityExplorer
Log($"{NAME} {VERSION} initializing..."); Log($"{NAME} {VERSION} initializing...");
Directory.CreateDirectory(Loader.ExplorerFolder); CheckLegacyExplorerFolder();
Directory.CreateDirectory(ExplorerFolder);
ConfigManager.Init(Loader.ConfigHandler); ConfigManager.Init(Loader.ConfigHandler);
UERuntimeHelper.Init(); UERuntimeHelper.Init();
@ -64,8 +67,6 @@ namespace UnityExplorer
UIManager.InitUI(); UIManager.InitUI();
Log($"{NAME} {VERSION} ({Universe.Context}) initialized."); Log($"{NAME} {VERSION} ({Universe.Context}) initialized.");
//InspectorManager.Inspect(typeof(Tests.TestClass));
} }
internal static void Update() internal static void Update()
@ -73,6 +74,63 @@ namespace UnityExplorer
// check master toggle // check master toggle
if (InputManager.GetKeyDown(ConfigManager.Master_Toggle.Value)) if (InputManager.GetKeyDown(ConfigManager.Master_Toggle.Value))
UIManager.ShowMenu = !UIManager.ShowMenu; UIManager.ShowMenu = !UIManager.ShowMenu;
UIManager.Update();
}
// Can be removed eventually. For migration from <4.7.0
static void CheckLegacyExplorerFolder()
{
string legacyPath = Path.Combine(Loader.ExplorerFolderDestination, "UnityExplorer");
if (Directory.Exists(legacyPath))
{
LogWarning($"Attempting to migrate old 'UnityExplorer/' folder to 'sinai-dev-UnityExplorer/'...");
// If new folder doesn't exist yet, let's just use Move().
if (!Directory.Exists(ExplorerFolder))
{
try
{
Directory.Move(legacyPath, ExplorerFolder);
Log("Migrated successfully.");
}
catch (Exception ex)
{
LogWarning($"Exception migrating folder: {ex}");
}
}
else // We have to merge
{
try
{
CopyAll(new(legacyPath), new(ExplorerFolder));
Directory.Delete(legacyPath, true);
Log("Migrated successfully.");
}
catch (Exception ex)
{
LogWarning($"Exception migrating folder: {ex}");
}
}
}
}
public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
// Check if the target directory exists, if not, create it.
if (!Directory.Exists(target.FullName))
Directory.CreateDirectory(target.FullName);
// Copy each file into it's new directory.
foreach (FileInfo fi in source.GetFiles())
fi.MoveTo(Path.Combine(target.ToString(), fi.Name));
// Copy each subdirectory using recursion.
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
} }
#region LOGGING #region LOGGING

View File

@ -44,9 +44,10 @@ namespace UnityExplorer
private BepInExConfigHandler _configHandler; private BepInExConfigHandler _configHandler;
public Harmony HarmonyInstance => s_harmony; public Harmony HarmonyInstance => s_harmony;
private static readonly Harmony s_harmony = new Harmony(ExplorerCore.GUID); private static readonly Harmony s_harmony = new(ExplorerCore.GUID);
public string ExplorerFolder => Path.Combine(Paths.PluginPath, ExplorerCore.NAME); public string ExplorerFolderName => ExplorerCore.DEFAULT_EXPLORER_FOLDER_NAME;
public string ExplorerFolderDestination => Paths.PluginPath;
public Action<object> OnLogMessage => LogSource.LogMessage; public Action<object> OnLogMessage => LogSource.LogMessage;
public Action<object> OnLogWarning => LogSource.LogWarning; public Action<object> OnLogWarning => LogSource.LogWarning;

View File

@ -8,7 +8,8 @@ namespace UnityExplorer
{ {
public interface IExplorerLoader public interface IExplorerLoader
{ {
string ExplorerFolder { get; } string ExplorerFolderDestination { get; }
string ExplorerFolderName { get; }
string UnhollowedModulesFolder { get; } string UnhollowedModulesFolder { get; }
ConfigHandler ConfigHandler { get; } ConfigHandler ConfigHandler { get; }

View File

@ -20,9 +20,8 @@ namespace UnityExplorer
{ {
public class ExplorerMelonMod : MelonMod, IExplorerLoader public class ExplorerMelonMod : MelonMod, IExplorerLoader
{ {
public static ExplorerMelonMod Instance; public string ExplorerFolderName => ExplorerCore.DEFAULT_EXPLORER_FOLDER_NAME;
public string ExplorerFolderDestination => MelonHandler.ModsDirectory;
public string ExplorerFolder => Path.Combine(MelonHandler.ModsDirectory, ExplorerCore.NAME);
public string UnhollowedModulesFolder => Path.Combine( public string UnhollowedModulesFolder => Path.Combine(
Path.GetDirectoryName(MelonHandler.ModsDirectory), Path.GetDirectoryName(MelonHandler.ModsDirectory),
@ -37,9 +36,7 @@ namespace UnityExplorer
public override void OnApplicationStart() public override void OnApplicationStart()
{ {
Instance = this;
_configHandler = new MelonLoaderConfigHandler(); _configHandler = new MelonLoaderConfigHandler();
ExplorerCore.Init(this); ExplorerCore.Init(this);
} }
} }

View File

@ -10,6 +10,8 @@ namespace UnityExplorer.Loader.Standalone
{ {
public class ExplorerEditorLoader : ExplorerStandalone public class ExplorerEditorLoader : ExplorerStandalone
{ {
public new string ExplorerFolderName => $"{ExplorerCore.DEFAULT_EXPLORER_FOLDER_NAME}~";
public static void Initialize() public static void Initialize()
{ {
Instance = new ExplorerEditorLoader(); Instance = new ExplorerEditorLoader();
@ -33,8 +35,8 @@ namespace UnityExplorer.Loader.Standalone
protected override void CheckExplorerFolder() protected override void CheckExplorerFolder()
{ {
if (explorerFolder == null) if (explorerFolderDest == null)
explorerFolder = Path.Combine(Application.dataPath, "UnityExplorer~"); explorerFolderDest = Application.dataPath;
} }
} }
} }

View File

@ -29,15 +29,16 @@ namespace UnityExplorer
public ConfigHandler ConfigHandler => configHandler; public ConfigHandler ConfigHandler => configHandler;
internal StandaloneConfigHandler configHandler; internal StandaloneConfigHandler configHandler;
public string ExplorerFolder public string ExplorerFolderName => ExplorerCore.DEFAULT_EXPLORER_FOLDER_NAME;
public string ExplorerFolderDestination
{ {
get get
{ {
CheckExplorerFolder(); CheckExplorerFolder();
return explorerFolder; return explorerFolderDest;
} }
} }
protected static string explorerFolder; protected static string explorerFolderDest;
Action<object> IExplorerLoader.OnLogMessage => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Log); }; Action<object> IExplorerLoader.OnLogMessage => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Log); };
Action<object> IExplorerLoader.OnLogWarning => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Warning); }; Action<object> IExplorerLoader.OnLogWarning => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Warning); };
@ -45,14 +46,14 @@ namespace UnityExplorer
/// <summary> /// <summary>
/// Call this to initialize UnityExplorer without adding a log listener or Unhollowed modules path. /// Call this to initialize UnityExplorer without adding a log listener or Unhollowed modules path.
/// The default Unhollowed path "UnityExplorer\Modules\" will be used. /// The default Unhollowed path "sinai-dev-UnityExplorer\Modules\" will be used.
/// </summary> /// </summary>
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns> /// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
public static ExplorerStandalone CreateInstance() => CreateInstance(null, null); public static ExplorerStandalone CreateInstance() => CreateInstance(null, null);
/// <summary> /// <summary>
/// Call this to initialize UnityExplorer and add a listener for UnityExplorer's log messages, without specifying an Unhollowed modules path. /// Call this to initialize UnityExplorer and add a listener for UnityExplorer's log messages, without specifying an Unhollowed modules path.
/// The default Unhollowed path "UnityExplorer\Modules\" will be used. /// The default Unhollowed path "sinai-dev-UnityExplorer\Modules\" will be used.
/// </summary> /// </summary>
/// <param name="logListener">Your log listener to handle UnityExplorer logs.</param> /// <param name="logListener">Your log listener to handle UnityExplorer logs.</param>
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns> /// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
@ -77,7 +78,7 @@ namespace UnityExplorer
OnLog += logListener; OnLog += logListener;
if (string.IsNullOrEmpty(unhollowedModulesPath) || !Directory.Exists(unhollowedModulesPath)) if (string.IsNullOrEmpty(unhollowedModulesPath) || !Directory.Exists(unhollowedModulesPath))
instance.unhollowedPath = Path.Combine(instance.ExplorerFolder, "Modules"); instance.unhollowedPath = Path.Combine(ExplorerCore.ExplorerFolder, "Modules");
else else
instance.unhollowedPath = unhollowedModulesPath; instance.unhollowedPath = unhollowedModulesPath;
@ -94,16 +95,10 @@ namespace UnityExplorer
protected virtual void CheckExplorerFolder() protected virtual void CheckExplorerFolder()
{ {
if (explorerFolder == null) if (explorerFolderDest == null)
{ {
explorerFolder = string assemblyLocation = Uri.UnescapeDataString(new Uri(typeof(ExplorerCore).Assembly.CodeBase).AbsolutePath);
Path.Combine( explorerFolderDest = Path.GetDirectoryName(assemblyLocation);
Path.GetDirectoryName(
Uri.UnescapeDataString(new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath)),
"UnityExplorer");
if (!Directory.Exists(explorerFolder))
Directory.CreateDirectory(explorerFolder);
} }
} }
} }

View File

@ -17,7 +17,7 @@ namespace UnityExplorer.Loader.Standalone
public override void Init() public override void Init()
{ {
CONFIG_PATH = Path.Combine(ExplorerCore.Loader.ExplorerFolder, "config.cfg"); CONFIG_PATH = Path.Combine(ExplorerCore.ExplorerFolder, "config.cfg");
} }
public override void LoadConfig() public override void LoadConfig()
@ -92,8 +92,8 @@ namespace UnityExplorer.Loader.Standalone
foreach (var config in ConfigManager.ConfigElements) foreach (var config in ConfigManager.ConfigElements)
document.Put(config.Key, config.Value.BoxedValue.ToString()); document.Put(config.Key, config.Value.BoxedValue.ToString());
if (!Directory.Exists(ExplorerCore.Loader.ExplorerFolder)) if (!Directory.Exists(ExplorerCore.ExplorerFolder))
Directory.CreateDirectory(ExplorerCore.Loader.ExplorerFolder); Directory.CreateDirectory(ExplorerCore.ExplorerFolder);
File.WriteAllText(CONFIG_PATH, document.SerializedValue); File.WriteAllText(CONFIG_PATH, document.SerializedValue);
} }

View File

@ -69,7 +69,7 @@ namespace UnityExplorer.UI.Panels
{ {
var fileName = $"UnityExplorer {DateTime.Now:u}.txt"; var fileName = $"UnityExplorer {DateTime.Now:u}.txt";
fileName = IOUtility.EnsureValidFilename(fileName); fileName = IOUtility.EnsureValidFilename(fileName);
var path = Path.Combine(ExplorerCore.Loader.ExplorerFolder, "Logs"); var path = Path.Combine(ExplorerCore.ExplorerFolder, "Logs");
CurrentStreamPath = IOUtility.EnsureValidFilePath(Path.Combine(path, fileName)); CurrentStreamPath = IOUtility.EnsureValidFilePath(Path.Combine(path, fileName));
// clean old log(s) // clean old log(s)