Skip to content

Commit

Permalink
core: migrate appdata folder on dotnet 8 for OSX
Browse files Browse the repository at this point in the history
  • Loading branch information
mynameisbogdan committed May 18, 2024
1 parent 47ab9c5 commit 25609af
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
6 changes: 3 additions & 3 deletions src/Jackett.Common/Models/Config/RuntimeSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}
}
Expand Down
23 changes: 18 additions & 5 deletions src/Jackett.Common/Services/ConfigurationService.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -11,7 +13,6 @@

namespace Jackett.Common.Services
{

public class ConfigurationService : IConfigurationService
{
private readonly ISerializeService serializeService;
Expand All @@ -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);
Expand Down Expand Up @@ -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));
Expand All @@ -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);
Expand Down Expand Up @@ -200,7 +213,7 @@ public List<string> GetCardigannDefinitionsFolders()
{
var dirs = new List<string>();

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/");
Expand Down

0 comments on commit 25609af

Please sign in to comment.