summaryrefslogtreecommitdiffstats
path: root/win/CS/HandBrakeWPF/Utilities/Portable.cs
diff options
context:
space:
mode:
authorsr55 <[email protected]>2016-12-26 15:21:20 +0000
committersr55 <[email protected]>2016-12-26 15:21:20 +0000
commitd1376abc6678ab2b53b9b682493523263525b108 (patch)
treec8d5578b5089b1714253b880146646775e582eb5 /win/CS/HandBrakeWPF/Utilities/Portable.cs
parent6b633b8f6b3f19433ca8a3d42affd737ca726f5d (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.cs147
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