diff options
author | sr55 <[email protected]> | 2016-12-26 15:21:20 +0000 |
---|---|---|
committer | sr55 <[email protected]> | 2016-12-26 15:21:20 +0000 |
commit | d1376abc6678ab2b53b9b682493523263525b108 (patch) | |
tree | c8d5578b5089b1714253b880146646775e582eb5 /win/CS/HandBrakeWPF/Utilities/Portable.cs | |
parent | 6b633b8f6b3f19433ca8a3d42affd737ca726f5d (diff) |
WinGui: Add support to make the windows UI more portable friendly. Configurable via portable.ini file. All temp, presets, settings, logs etc can be stored in a specific or current directory.
Diffstat (limited to 'win/CS/HandBrakeWPF/Utilities/Portable.cs')
-rw-r--r-- | win/CS/HandBrakeWPF/Utilities/Portable.cs | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/win/CS/HandBrakeWPF/Utilities/Portable.cs b/win/CS/HandBrakeWPF/Utilities/Portable.cs new file mode 100644 index 000000000..9b5981675 --- /dev/null +++ b/win/CS/HandBrakeWPF/Utilities/Portable.cs @@ -0,0 +1,147 @@ +// -------------------------------------------------------------------------------------------------------------------- +// <copyright file="Portable.cs" company="HandBrake Project (http://handbrake.fr)"> +// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. +// </copyright> +// <summary> +// Defines the Portable type. +// </summary> +// -------------------------------------------------------------------------------------------------------------------- + +namespace HandBrakeWPF.Utilities +{ + using System.Collections.Generic; + using System; + using System.IO; + + /// <summary> + /// This class is responsible for reading the Portable.ini file that allows HandBrake to be run out of a directory. + /// </summary> + public class Portable + { + private static readonly string portableFile = Path.Combine(Environment.CurrentDirectory, "portable.ini"); + private static Dictionary<string, string> keyPairs = new Dictionary<string, string>(); + + /// <summary> + /// Initializes a new instance of the <see cref="Portable"/> class. + /// </summary> + public static void Initialise() + { + if (!IsPortable()) + { + return; // Nothing to do. + } + + // Read the INI file + if (File.Exists(portableFile)) + { + using (StreamReader fileReader = new StreamReader(portableFile)) + { + string line; + while ((line = fileReader.ReadLine()) != null) + { + line = line.Trim(); + + if (line.StartsWith("#")) + { + continue; // Ignore Comments + } + + string[] setting = line.Split('='); + if (setting.Length == 2) + { + keyPairs.Add(setting[0].Trim(), setting[1].Trim()); + } + } + } + } + + // Create any missing directories + if (!Directory.Exists(GetTempDirectory())) + { + Directory.CreateDirectory(GetTempDirectory()); + } + + if (!Directory.Exists(GetStorageDirectory())) + { + Directory.CreateDirectory(GetStorageDirectory()); + } + + // Setup enviroment variables for this instance. + Environment.SetEnvironmentVariable("TMP", GetTempDirectory()); + } + + /// <summary> + /// The is portable. + /// </summary> + /// <returns> + /// The <see cref="bool"/>. + /// </returns> + public static bool IsPortable() + { + if (!File.Exists(portableFile)) + { + return false; + } + + return true; + } + + /// <summary> + /// The get config directory. + /// </summary> + /// <returns> + /// The <see cref="string"/>. + /// </returns> + public static string GetStorageDirectory() + { + // Default to App Data + string storagePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + if (keyPairs.ContainsKey("storage.dir")) + { + string directory = keyPairs["storage.dir"]; + + // If "cwd", then treat that as Current Working Directory. + if (directory == "cwd") + { + storagePath = Path.Combine(Environment.CurrentDirectory, "storage"); + } + + // Otherwise, the users set directory. + if (!string.IsNullOrEmpty(directory) && directory != "cwd") + { + storagePath = directory; + } + } + + // Return what path we figured out to use. + return storagePath; + } + + /// <summary> + /// The get temp directory. + /// </summary> + /// <returns> + /// The <see cref="string"/>. + /// </returns> + private static string GetTempDirectory() + { + if (keyPairs.ContainsKey("tmp.dir")) + { + string directory = keyPairs["tmp.dir"]; + if (directory == "cwd") + { + return Path.Combine(Environment.CurrentDirectory, "tmp"); + } + + if (!string.IsNullOrEmpty(directory) && directory != "cwd") + { + return directory; + } + + return null; + } + + return null; + } + } +}
\ No newline at end of file |