From 1a4c1b6db50f4a26336345b06712e5b9432853cf Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 2 Oct 2025 22:44:10 +0300 Subject: [PATCH] New: Migrate appdata folder for .NET 8 on OSX (cherry picked from commit d62547236a5e506ca9b11bf369683691ed8d253b) --- .../EnvironmentInfo/AppFolderFactory.cs | 25 +++++++++++++++++++ .../EnvironmentInfo/AppFolderInfo.cs | 4 +-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs b/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs index cfaa1ddff..df49284a0 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/AppFolderFactory.cs @@ -18,6 +18,7 @@ public class AppFolderFactory : IAppFolderFactory { private readonly IAppFolderInfo _appFolderInfo; private readonly IDiskProvider _diskProvider; + private readonly IDiskTransferService _diskTransferService; private readonly Logger _logger; public AppFolderFactory(IAppFolderInfo appFolderInfo, @@ -27,6 +28,7 @@ public AppFolderFactory(IAppFolderInfo appFolderInfo, { _appFolderInfo = appFolderInfo; _diskProvider = diskProvider; + _diskTransferService = diskTransferService; _logger = NzbDroneLogger.GetLogger(this); } @@ -34,6 +36,7 @@ public void Register() { try { + MigrateAppDataFolder(); _diskProvider.EnsureFolder(_appFolderInfo.AppDataFolder); } catch (UnauthorizedAccessException) @@ -66,6 +69,28 @@ public void SetPermissions() } } + private void MigrateAppDataFolder() + { + try + { + if (OsInfo.IsOsx) + { + var userAppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile, Environment.SpecialFolderOption.DoNotVerify), ".config", "Lidarr"); + + if (_diskProvider.FolderExists(userAppDataFolder) && !_diskProvider.FileExists(_appFolderInfo.GetConfigPath())) + { + _diskTransferService.MirrorFolder(userAppDataFolder, _appFolderInfo.AppDataFolder); + _diskProvider.DeleteFolder(userAppDataFolder, true); + } + } + } + catch (Exception ex) + { + _logger.Debug(ex, ex.Message); + throw new LidarrStartupException(ex, "Unable to migrate configuration folder to {0}. Migrate manually", _appFolderInfo.AppDataFolder); + } + } + private void InitializeMonoApplicationData() { if (OsInfo.IsWindows) diff --git a/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs index 0f54f2ae8..964162bb1 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/AppFolderInfo.cs @@ -26,9 +26,9 @@ public AppFolderInfo(IStartupContext startupContext) _dataSpecialFolder = Environment.SpecialFolder.ApplicationData; } - if (startupContext.Args.ContainsKey(StartupContext.APPDATA)) + if (startupContext.Args.TryGetValue(StartupContext.APPDATA, out var argsAppDataFolder)) { - AppDataFolder = startupContext.Args[StartupContext.APPDATA]; + AppDataFolder = argsAppDataFolder; Logger.Info("Data directory is being overridden to [{0}]", AppDataFolder); } else