diff --git a/AppApi.cs b/AppApi.cs index c6a85798..f7f0bf99 100644 --- a/AppApi.cs +++ b/AppApi.cs @@ -231,7 +231,7 @@ namespace VRCX public void CacheImage(string Base64File) { - String Icon = Path.Combine(Program.BaseDirectory, "cache\\toast"); + String Icon = Path.Combine(Program.AppDataDirectory, "cache\\toast"); File.WriteAllBytes(Icon, Convert.FromBase64String(Base64File)); } @@ -242,7 +242,7 @@ namespace VRCX String imagePath = Path.Combine(Program.BaseDirectory, "VRCX.ico"); if (Image) { - imagePath = Path.Combine(Program.BaseDirectory, "cache\\toast"); + imagePath = Path.Combine(Program.AppDataDirectory, "cache\\toast"); } stringElements[0].AppendChild(toastXml.CreateTextNode(BoldText)); stringElements[1].AppendChild(toastXml.CreateTextNode(Text)); @@ -275,7 +275,7 @@ namespace VRCX if (Image) { UseBase64Icon = false; - Icon = Path.Combine(Program.BaseDirectory, "cache\\toast"); + Icon = Path.Combine(Program.AppDataDirectory, "cache\\toast"); } IPAddress broadcastIP = IPAddress.Parse("127.0.0.1"); diff --git a/CefService.cs b/CefService.cs index d27af646..acb7dbbe 100644 --- a/CefService.cs +++ b/CefService.cs @@ -18,8 +18,8 @@ namespace VRCX { var cefSettings = new CefSettings { - CachePath = Path.Combine(Program.BaseDirectory, "cache"), - UserDataPath = Path.Combine(Program.BaseDirectory, "userdata"), + CachePath = Path.Combine(Program.AppDataDirectory, "cache"), + UserDataPath = Path.Combine(Program.AppDataDirectory, "userdata"), IgnoreCertificateErrors = true, LogSeverity = LogSeverity.Disable, WindowlessRenderingEnabled = true, diff --git a/Program.cs b/Program.cs index 954d72af..ce912213 100644 --- a/Program.cs +++ b/Program.cs @@ -4,6 +4,7 @@ // For a copy, see . using System; +using System.IO; using System.Windows.Forms; namespace VRCX @@ -11,10 +12,29 @@ namespace VRCX public class Program { public static string BaseDirectory { get; private set; } + public static string AppDataDirectory { get; private set; } static Program() { BaseDirectory = AppDomain.CurrentDomain.BaseDirectory; + AppDataDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VRCX"); + + if (!Directory.Exists(AppDataDirectory)) + { + Directory.CreateDirectory(AppDataDirectory); + + // Migrate config to AppData + if (File.Exists(Path.Combine(BaseDirectory, "VRCX.json"))) + { + File.Move(Path.Combine(BaseDirectory, "VRCX.json"), Path.Combine(AppDataDirectory, "VRCX.json")); + File.Copy(Path.Combine(AppDataDirectory, "VRCX.json"), Path.Combine(AppDataDirectory, "VRCX-backup.json")); + } + if (File.Exists(Path.Combine(BaseDirectory, "VRCX.sqlite3"))) + { + File.Move(Path.Combine(BaseDirectory, "VRCX.sqlite3"), Path.Combine(AppDataDirectory, "VRCX.sqlite3")); + File.Copy(Path.Combine(AppDataDirectory, "VRCX.sqlite3"), Path.Combine(AppDataDirectory, "VRCX-backup.sqlite3")); + } + } } [STAThread] diff --git a/SQLite.cs b/SQLite.cs index 12a63b7d..98b2c6d5 100644 --- a/SQLite.cs +++ b/SQLite.cs @@ -1,4 +1,4 @@ -using CefSharp; +using CefSharp; using System; using System.Collections.Generic; using System.Data.SQLite; @@ -22,7 +22,7 @@ namespace VRCX { m_ConnectionLock = new ReaderWriterLockSlim(); - var dataSource = Path.Combine(Program.BaseDirectory, "VRCX.sqlite3"); + var dataSource = Path.Combine(Program.AppDataDirectory, "VRCX.sqlite3"); m_Connection = new SQLiteConnection($"Data Source=\"{dataSource}\";Version=3;PRAGMA locking_mode=NORMAL;PRAGMA busy_timeout=5000", true); } diff --git a/VRCXStorage.cs b/VRCXStorage.cs index 07a0f9f1..61946784 100644 --- a/VRCXStorage.cs +++ b/VRCXStorage.cs @@ -15,7 +15,7 @@ namespace VRCX public static readonly VRCXStorage Instance; private static readonly ReaderWriterLockSlim m_Lock = new ReaderWriterLockSlim(); private static Dictionary m_Storage = new Dictionary(); - private static string m_JsonPath = Path.Combine(Program.BaseDirectory, "VRCX.json"); + private static string m_JsonPath = Path.Combine(Program.AppDataDirectory, "VRCX.json"); private static bool m_Dirty; static VRCXStorage()