From 25609af60d64a9afa7a91447c57ff0f73f8cdaf8 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 19 May 2024 00:31:01 +0300 Subject: [PATCH] core: migrate appdata folder on dotnet 8 for OSX --- .../Models/Config/RuntimeSettings.cs | 6 ++--- .../Services/ConfigurationService.cs | 23 +++++++++++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Jackett.Common/Models/Config/RuntimeSettings.cs b/src/Jackett.Common/Models/Config/RuntimeSettings.cs index f98c2e1bb5724..db255a1e8881c 100644 --- a/src/Jackett.Common/Models/Config/RuntimeSettings.cs +++ b/src/Jackett.Common/Models/Config/RuntimeSettings.cs @@ -35,13 +35,13 @@ public string DataFolder return CustomDataFolder; } - if (System.Environment.OSVersion.Platform == PlatformID.Unix) + if (Environment.OSVersion.Platform == PlatformID.Unix) { - return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create), "Jackett"); + return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.DoNotVerify), "Jackett"); } else { - return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Jackett"); + return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData, Environment.SpecialFolderOption.DoNotVerify), "Jackett"); } } } diff --git a/src/Jackett.Common/Services/ConfigurationService.cs b/src/Jackett.Common/Services/ConfigurationService.cs index 657365f16d21b..e5b3a9b550d0b 100644 --- a/src/Jackett.Common/Services/ConfigurationService.cs +++ b/src/Jackett.Common/Services/ConfigurationService.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Runtime.InteropServices; using System.Security.AccessControl; using System.Security.Principal; using Jackett.Common.Models.Config; @@ -11,7 +13,6 @@ namespace Jackett.Common.Services { - public class ConfigurationService : IConfigurationService { private readonly ISerializeService serializeService; @@ -34,10 +35,22 @@ public void CreateOrMigrateSettings() { try { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + var userAppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, Environment.SpecialFolderOption.DoNotVerify), ".config", "Jackett"); + var appDataFolder = GetAppDataFolder(); + + // Check of existing json configuration files due to LogManager creating log.txt early in Program.cs + if (Directory.Exists(userAppDataFolder) && (!Directory.Exists(appDataFolder) || !Directory.EnumerateFiles(appDataFolder, "*.json", SearchOption.AllDirectories).Any())) + { + PerformMigration(userAppDataFolder); + } + } + if (!Directory.Exists(GetAppDataFolder())) { var dir = Directory.CreateDirectory(GetAppDataFolder()); - if (System.Environment.OSVersion.Platform != PlatformID.Unix) + if (Environment.OSVersion.Platform != PlatformID.Unix) { var access = dir.GetAccessControl(); var directorySecurity = new DirectorySecurity(GetAppDataFolder(), AccessControlSections.All); @@ -112,7 +125,7 @@ public void PerformMigration(string oldDirectory) if (!Directory.Exists(destFolder)) { var dir = Directory.CreateDirectory(destFolder); - if (System.Environment.OSVersion.Platform != PlatformID.Unix) + if (Environment.OSVersion.Platform != PlatformID.Unix) { var directorySecurity = new DirectorySecurity(destFolder, AccessControlSections.All); directorySecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow)); @@ -123,7 +136,7 @@ public void PerformMigration(string oldDirectory) { File.Copy(file, destPath); // The old files were created when running as admin so make sure they are editable by normal users / services. - if (System.Environment.OSVersion.Platform != PlatformID.Unix) + if (Environment.OSVersion.Platform != PlatformID.Unix) { var fileInfo = new FileInfo(destFolder); var fileSecurity = new FileSecurity(destPath, AccessControlSections.All); @@ -200,7 +213,7 @@ public List GetCardigannDefinitionsFolders() { var dirs = new List(); - if (System.Environment.OSVersion.Platform == PlatformID.Unix) + if (Environment.OSVersion.Platform == PlatformID.Unix) { dirs.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "cardigann/definitions/")); dirs.Add("/etc/xdg/cardigan/definitions/");