diff options
| author | william341 <[email protected]> | 2017-05-28 12:37:00 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-05-28 12:37:00 -0700 |
| commit | 771c20cfb3a703e0f1550fdcf9eb07b78298c944 (patch) | |
| tree | 59cb532e15ebff313fdba2be264d78ec0033f407 /ShiftOS_TheReturn/Paths.cs | |
| parent | 496b0cbf8659c99203f48210fd39c572400ae623 (diff) | |
| parent | c7ba7d733c756d196f98dd4533289a1ef4db715f (diff) | |
| download | shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.gz shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.tar.bz2 shiftos_thereturn-771c20cfb3a703e0f1550fdcf9eb07b78298c944.zip | |
Merge pull request #1 from shiftos-game/master
welp, no longer a dev.
Diffstat (limited to 'ShiftOS_TheReturn/Paths.cs')
| -rw-r--r-- | ShiftOS_TheReturn/Paths.cs | 118 |
1 files changed, 113 insertions, 5 deletions
diff --git a/ShiftOS_TheReturn/Paths.cs b/ShiftOS_TheReturn/Paths.cs index 4f535d6..5b75ae6 100644 --- a/ShiftOS_TheReturn/Paths.cs +++ b/ShiftOS_TheReturn/Paths.cs @@ -35,12 +35,17 @@ using System.Threading; namespace ShiftOS.Engine { + /// <summary> + /// Management class for ShiftFS path variables. + /// </summary> public static class Paths { + /// <summary> + /// Initiate the path system. + /// </summary> public static void Init() { Locations = new Dictionary<string, string>(); - Locations.Add("classic", "C:\\ShiftOS"); Locations.Add("root", "0:"); AddPath("root", "system"); @@ -61,6 +66,7 @@ namespace ShiftOS.Engine AddPath("data", "user.dat"); AddPath("data", "notifications.dat"); AddPath("data", "skin"); + AddPath("skin", "widgets.dat"); AddPath("system", "programs"); AddPath("system", "kernel.sft"); AddPath("system", "conf.sft"); @@ -88,6 +94,10 @@ namespace ShiftOS.Engine } + /// <summary> + /// Gets all full paths without their keynames. + /// </summary> + /// <returns>A string array representing all paths.</returns> public static string[] GetAllWithoutKey() { List<string> strings = new List<string>(); @@ -99,11 +109,19 @@ namespace ShiftOS.Engine } + /// <summary> + /// Get the full path using a path key. + /// </summary> + /// <param name="id">The path key (folder/filename) for the path.</param> + /// <returns>The full path.</returns> public static string GetPath(string id) { return Locations[id]; } + /// <summary> + /// Checks all directories in the path system to see if they exist, and if not, creates them. + /// </summary> private static void CheckPathExistence() { foreach(var path in Locations) @@ -119,8 +137,14 @@ namespace ShiftOS.Engine } } + /// <summary> + /// Gets or sets a <see cref="Dictionary{string, string}"/> representing all paths in the system. + /// </summary> private static Dictionary<string, string> Locations { get; set; } + /// <summary> + /// Mounts the ShiftOS shared directory to 1:/, creating the directory if it does not exist. + /// </summary> public static void CreateAndMountSharedFolder() { if (!System.IO.Directory.Exists(SharedFolder)) @@ -132,29 +156,113 @@ namespace ShiftOS.Engine mount.Name = "Shared"; Utils.Mount(JsonConvert.SerializeObject(mount)); ScanForDirectories(SharedFolder, 1); - } + //This event-based system allows us to sync the ramdisk from ShiftOS to the host OS. + Utils.DirectoryCreated += (dir) => + { + try + { + if (dir.StartsWith("1:/")) + { + string real = dir.Replace("/", "\\").Replace("1:", SharedFolder); + if (!System.IO.Directory.Exists(real)) + System.IO.Directory.CreateDirectory(real); + } + } + catch { } + }; + Utils.DirectoryDeleted += (dir) => + { + try + { + if (dir.StartsWith("1:/")) + { + string real = dir.Replace("/", "\\").Replace("1:", SharedFolder); + if (System.IO.Directory.Exists(real)) + System.IO.Directory.Delete(real, true); + } + } + catch { } + }; + Utils.FileWritten += (dir) => + { + try + { + if (dir.StartsWith("1:/")) + { + string real = dir.Replace("/", "\\").Replace("1:", SharedFolder); + System.IO.File.WriteAllBytes(real, ReadAllBytes(dir)); + } + } + catch { } + }; + + Utils.FileDeleted += (dir) => + { + try + { + if (dir.StartsWith("1:/")) + { + string real = dir.Replace("/", "\\").Replace("1:", SharedFolder); + if (System.IO.File.Exists(real)) + System.IO.File.Delete(real); + } + } + catch { } + }; + + //This thread will sync the ramdisk from the host OS to ShiftOS. + var t = new Thread(() => + { + while (!SaveSystem.ShuttingDown) + { + Thread.Sleep(15000); + ScanForDirectories(SharedFolder, 1); + } + }); + t.IsBackground = true; + t.Start(); + } - public static void ScanForDirectories(string folder, int mount) + private static void ScanForDirectories(string folder, int mount) { foreach (var file in System.IO.Directory.GetFiles(folder)) { string mfsDir = file.Replace(SharedFolder, $"{mount}:").Replace("\\", "/"); - WriteAllBytes(mfsDir, System.IO.File.ReadAllBytes(file)); + if (!FileExists(mfsDir)) + WriteAllBytes(mfsDir, System.IO.File.ReadAllBytes(file)); } foreach (var directory in System.IO.Directory.GetDirectories(folder)) { string mfsDir = directory.Replace(SharedFolder, $"{mount}:").Replace("\\", "/"); - CreateDirectory(mfsDir); + if(!DirectoryExists(mfsDir)) + CreateDirectory(mfsDir); ScanForDirectories(directory, mount); } } + /// <summary> + /// Gets the ShiftOS shared folder. + /// </summary> public static string SharedFolder { get { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\ShiftOS_Shared"; } } + + /// <summary> + /// Gets the location of the ShiftOS.mfs file. + /// </summary> public static string SaveFile { get { return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\ShiftOS.mfs"; } } + + /// <summary> + /// Gets the path of the inner save file. + /// </summary> + [Obsolete("Not used.")] public static string SaveFileInner { get { return Locations["save.json"]; } } + /// <summary> + /// Add a path to the system. + /// </summary> + /// <param name="parent">The path's parent directory.</param> + /// <param name="path">The filename for the path.</param> public static void AddPath(string parent, string path) { Locations.Add(path, Locations[parent] + "/" + path); |
