From 502b769d9c9b9464e0e7969f5289b847777426d9 Mon Sep 17 00:00:00 2001 From: Flipper Date: Sun, 1 Feb 2026 21:19:23 +0100 Subject: [PATCH] use the xdg lib --- src/Models/AvatarManager.cs | 2 +- src/Models/IpcChannel.cs | 2 +- src/Native/OS.cs | 49 +++++++++++++++++++++++++++++++++---- src/SourceGit.csproj | 1 + 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/Models/AvatarManager.cs b/src/Models/AvatarManager.cs index e9811846a..f51d74181 100644 --- a/src/Models/AvatarManager.cs +++ b/src/Models/AvatarManager.cs @@ -44,7 +44,7 @@ public static AvatarManager Instance public void Start() { - _storePath = Path.Combine(Native.OS.DataDir, "avatars"); + _storePath = Path.Combine(Native.OS.CacheDir, "avatars"); if (!Directory.Exists(_storePath)) Directory.CreateDirectory(_storePath); diff --git a/src/Models/IpcChannel.cs b/src/Models/IpcChannel.cs index 702f0630b..75c4c7418 100644 --- a/src/Models/IpcChannel.cs +++ b/src/Models/IpcChannel.cs @@ -16,7 +16,7 @@ public IpcChannel() { try { - _singletonLock = File.Open(Path.Combine(Native.OS.DataDir, "process.lock"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); + _singletonLock = File.Open(Path.Combine(Native.OS.RuntimeDir, "process.lock"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); IsFirstInstance = true; _server = new NamedPipeServerStream( "SourceGitIPCChannel" + Environment.UserName, diff --git a/src/Native/OS.cs b/src/Native/OS.cs index 1fd4b34d9..96103bc51 100644 --- a/src/Native/OS.cs +++ b/src/Native/OS.cs @@ -33,6 +33,18 @@ public static string DataDir private set; } = string.Empty; + public static string CacheDir + { + get; + private set; + } = string.Empty; + + public static string RuntimeDir + { + get; + private set; + } = string.Empty; + public static string GitExecutable { get => _gitExecutable; @@ -150,14 +162,41 @@ public static void SetupDataDir() } } - var osAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); - if (string.IsNullOrEmpty(osAppDataDir)) - DataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".sourcegit"); - else - DataDir = Path.Combine(osAppDataDir, "SourceGit"); + DataDir = Path.Combine(Xdg.Directories.BaseDirectory.ConfigHome, "SourceGit"); + CacheDir = Path.Combine(Xdg.Directories.BaseDirectory.CacheHome, "SourceGit"); + RuntimeDir = Path.Combine(Xdg.Directories.BaseDirectory.RuntimeDir, "SourceGit"); if (!Directory.Exists(DataDir)) + { Directory.CreateDirectory(DataDir); + } + + if (!Directory.Exists(CacheDir)) + { + Directory.CreateDirectory(CacheDir); + } + + if (!Directory.Exists(RuntimeDir)) + { + Directory.CreateDirectory(RuntimeDir); + } + + var osAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + var oldDir = string.IsNullOrEmpty(osAppDataDir) ? + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".sourcegit") : + Path.Combine(osAppDataDir, "SourceGit"); + + + if (Directory.Exists(oldDir) && oldDir != DataDir) + { + foreach (var file in Directory.GetFiles(oldDir)) + { + var fileName = Path.GetFileName(file); + File.Move(file, Path.Combine(DataDir, fileName)); + } + + Directory.Delete(oldDir, true); + } } public static void SetupExternalTools() diff --git a/src/SourceGit.csproj b/src/SourceGit.csproj index e62cdd204..b671e2abf 100644 --- a/src/SourceGit.csproj +++ b/src/SourceGit.csproj @@ -63,6 +63,7 @@ +