From acd89bc2d3701a012b88f2f9e3e318105f27d5d3 Mon Sep 17 00:00:00 2001 From: derivator Date: Sun, 1 Mar 2015 02:14:01 +0100 Subject: [PATCH] Linux: store config in ~/.config/Vocaluxe instead of in install dir because we might not have permission to write there if installed as a package If that folder doesn't exist, create it and copy the default profiles there, so they show up but can still be edited or removed --- Vocaluxe/Base/CSettings.cs | 2 ++ Vocaluxe/CProgrammHelper.cs | 20 ++++++++++++++++++++ Vocaluxe/Program.cs | 3 ++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index 0063a2e6..25aa2cd4 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -75,6 +75,8 @@ namespace Vocaluxe.Base #if INSTALLER public static readonly string DataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe"); +#elif LINUX + public static readonly string DataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Vocaluxe"); #else public static readonly string DataFolder = ProgramFolder; #endif diff --git a/Vocaluxe/CProgrammHelper.cs b/Vocaluxe/CProgrammHelper.cs index 9f342c90..d25b138e 100644 --- a/Vocaluxe/CProgrammHelper.cs +++ b/Vocaluxe/CProgrammHelper.cs @@ -96,6 +96,23 @@ namespace Vocaluxe return _IsProgramInstalled("Microsoft Visual C++ 2010"); } + private static void _EnsureDataFolderExists() + { + if (!Directory.Exists(CSettings.DataFolder)) { + Directory.CreateDirectory(CSettings.DataFolder); + // copy default profiles to DataFolder instead of adding ProgramFolder to CConfig.ProfileFolders + // because we want to be able to edit them, but might not have permission to write to ProgramFolder + string profilePath = Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles); + Directory.CreateDirectory(profilePath); + DirectoryInfo defaultProfileDir = new DirectoryInfo(Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameProfiles)); + FileInfo[] files = defaultProfileDir.GetFiles(); + foreach (FileInfo file in files) { + string newPath = Path.Combine(profilePath, file.Name); + file.CopyTo(newPath, false); + } + } + } + public static bool CheckRequirements() { #if WIN @@ -135,6 +152,9 @@ namespace Vocaluxe #endif path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + Path.DirectorySeparatorChar + path; COSFunctions.AddEnvironmentPath(path); +#if LINUX + _EnsureDataFolderExists(); +#endif } } } \ No newline at end of file diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 6bac885c..43964170 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -85,11 +85,12 @@ namespace Vocaluxe { // Init Log CLog.Init(); - CLog.StartBenchmark("Init Program"); + if (!CProgrammHelper.CheckRequirements()) return; CProgrammHelper.Init(); + CLog.StartBenchmark("Init Program"); CMain.Init(); Application.DoEvents();