PageRenderTime 61ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/src/Logic/Configuration.cs

https://gitlab.com/minaz922/subtitleedit
C# | 264 lines | 235 code | 25 blank | 4 comment | 41 complexity | 3b472fa18c0cf52545d4e5216f0f9415 MD5 | raw file
  1. using System.IO;
  2. using System;
  3. namespace Nikse.SubtitleEdit.Logic
  4. {
  5. /// <summary>
  6. /// Configuration settings via Singleton pattern
  7. /// </summary>
  8. public class Configuration
  9. {
  10. string _baseDir;
  11. string _dataDir;
  12. Settings _settings;
  13. public static Configuration Instance
  14. {
  15. get { return Nested.instance; }
  16. }
  17. private Configuration()
  18. {
  19. }
  20. private class Nested
  21. {
  22. static Nested() { }
  23. internal static readonly Configuration instance = new Configuration();
  24. }
  25. public static string SettingsFileName
  26. {
  27. get
  28. {
  29. return DataDirectory + "Settings.xml";
  30. }
  31. }
  32. public static string DictionariesFolder
  33. {
  34. get
  35. {
  36. return DataDirectory + "Dictionaries" + Path.DirectorySeparatorChar;
  37. }
  38. }
  39. public static string IconsFolder
  40. {
  41. get
  42. {
  43. return BaseDirectory + "Icons" + Path.DirectorySeparatorChar;
  44. }
  45. }
  46. public static bool IsRunningOnLinux()
  47. {
  48. return Environment.OSVersion.Platform == PlatformID.Unix;
  49. }
  50. public static bool IsRunningOnMac()
  51. {
  52. return Environment.OSVersion.Platform == PlatformID.MacOSX;
  53. }
  54. public static string TesseractDataFolder
  55. {
  56. get
  57. {
  58. if (IsRunningOnLinux() || IsRunningOnMac())
  59. {
  60. if (System.IO.Directory.Exists("/usr/share/tesseract-ocr/tessdata"))
  61. return "/usr/share/tesseract-ocr/tessdata";
  62. else if (System.IO.Directory.Exists("/usr/share/tesseract/tessdata"))
  63. return "/usr/share/tesseract/tessdata";
  64. else if (System.IO.Directory.Exists("/usr/share/tessdata"))
  65. return "/usr/share/tessdata";
  66. }
  67. return TesseractFolder + "tessdata";
  68. }
  69. }
  70. public static string TesseractOriginalFolder
  71. {
  72. get
  73. {
  74. return BaseDirectory + "Tesseract" + Path.DirectorySeparatorChar;
  75. }
  76. }
  77. public static string TesseractFolder
  78. {
  79. get
  80. {
  81. return DataDirectory + "Tesseract" + Path.DirectorySeparatorChar;
  82. }
  83. }
  84. public static string VobSubCompareFolder
  85. {
  86. get
  87. {
  88. return DataDirectory + "VobSub" + Path.DirectorySeparatorChar;
  89. }
  90. }
  91. public static string WaveFormsFolder
  92. {
  93. get
  94. {
  95. return DataDirectory + "WaveForms" + Path.DirectorySeparatorChar;
  96. }
  97. }
  98. public static string SpectrogramsFolder
  99. {
  100. get
  101. {
  102. return DataDirectory + "Spectrograms" + Path.DirectorySeparatorChar;
  103. }
  104. }
  105. public static string AutoBackupFolder
  106. {
  107. get
  108. {
  109. return DataDirectory + "AutoBackup" + Path.DirectorySeparatorChar;
  110. }
  111. }
  112. public static string PluginsDirectory
  113. {
  114. get
  115. {
  116. return Path.Combine(Configuration.DataDirectory, "Plugins");
  117. }
  118. }
  119. public static string DataDirectory
  120. {
  121. get
  122. {
  123. if (Instance._dataDir == null)
  124. {
  125. if (IsRunningOnLinux() || IsRunningOnMac())
  126. {
  127. Instance._dataDir = BaseDirectory;
  128. }
  129. else
  130. {
  131. string installerPath = GetInstallerPath();
  132. string pf = System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles).TrimEnd(Path.DirectorySeparatorChar);
  133. string appDataRoamingPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Subtitle Edit");
  134. if (installerPath != null && BaseDirectory.ToLower().StartsWith(installerPath.ToLower().TrimEnd(Path.DirectorySeparatorChar)))
  135. {
  136. if (Directory.Exists(appDataRoamingPath))
  137. {
  138. Instance._dataDir = appDataRoamingPath + Path.DirectorySeparatorChar;
  139. }
  140. else
  141. {
  142. try
  143. {
  144. System.IO.Directory.CreateDirectory(appDataRoamingPath);
  145. System.IO.Directory.CreateDirectory(Path.Combine(appDataRoamingPath, "Dictionaries"));
  146. Instance._dataDir = appDataRoamingPath + Path.DirectorySeparatorChar;
  147. }
  148. catch
  149. {
  150. Instance._dataDir = BaseDirectory;
  151. System.Windows.Forms.MessageBox.Show("Please re-install Subtitle Edit (installer version)");
  152. System.Windows.Forms.Application.ExitThread();
  153. }
  154. }
  155. }
  156. else if (BaseDirectory.ToLower().StartsWith(pf.ToLower()) && Environment.OSVersion.Version.Major >= 6 ) // 6 == Vista/Win2008Server/Win7
  157. { // windows vista and newer does not like programs writing to PF (nor does WinXp with non admin...)
  158. try
  159. {
  160. System.IO.Directory.CreateDirectory(appDataRoamingPath);
  161. System.IO.Directory.CreateDirectory(Path.Combine(appDataRoamingPath, "Dictionaries"));
  162. Instance._dataDir = appDataRoamingPath + Path.DirectorySeparatorChar;
  163. }
  164. catch
  165. {
  166. Instance._dataDir = BaseDirectory;
  167. System.Windows.Forms.MessageBox.Show("Please do not install portable version in 'Program Files' folder.");
  168. System.Windows.Forms.Application.ExitThread();
  169. }
  170. }
  171. else
  172. {
  173. Instance._dataDir = BaseDirectory;
  174. }
  175. }
  176. }
  177. return Instance._dataDir;
  178. }
  179. }
  180. private static string GetInstallerPath()
  181. {
  182. string installerPath = null;
  183. var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SubtitleEdit_is1");
  184. if (key != null)
  185. {
  186. string temp = (string)key.GetValue("InstallLocation");
  187. if (temp != null && Directory.Exists(temp))
  188. installerPath = temp;
  189. }
  190. if (installerPath == null)
  191. {
  192. key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SubtitleEdit_is1");
  193. if (key != null)
  194. {
  195. string temp = (string)key.GetValue("InstallLocation");
  196. if (temp != null && Directory.Exists(temp))
  197. installerPath = temp;
  198. }
  199. }
  200. return installerPath;
  201. }
  202. public static string BaseDirectory
  203. {
  204. get
  205. {
  206. if (Instance._baseDir == null)
  207. {
  208. System.Reflection.Assembly a = System.Reflection.Assembly.GetEntryAssembly();
  209. if (a != null)
  210. Instance._baseDir = Path.GetDirectoryName(a.Location);
  211. else
  212. Instance._baseDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
  213. // C:\Data\subtitleedit\subtitleedit\src\TestResults
  214. string tag = @"\SubtitleEdit\src\TestResults\";
  215. int start = Instance._baseDir.ToLower().IndexOf(tag.ToLower());
  216. if (start > 0)
  217. {
  218. string s = Instance._baseDir.Substring(0, start + tag.Length - 12) + "bin\\Release";
  219. Instance._baseDir = s;
  220. }
  221. if (Instance._baseDir.EndsWith("Test\\bin\\Release"))
  222. Instance._baseDir = Instance._baseDir.Replace("Test\\bin\\Release", "bin\\Release");
  223. if (!Instance._baseDir.EndsWith(Path.DirectorySeparatorChar.ToString()))
  224. Instance._baseDir += Path.DirectorySeparatorChar;
  225. }
  226. return Instance._baseDir;
  227. }
  228. }
  229. public static Settings Settings
  230. {
  231. get
  232. {
  233. if (Instance._settings == null)
  234. Instance._settings = Settings.GetSettings();
  235. return Instance._settings;
  236. }
  237. }
  238. }
  239. }