New: Migrate appdata folder for .NET 8 on OSX

(cherry picked from commit d62547236a5e506ca9b11bf369683691ed8d253b)
This commit is contained in:
Bogdan
2025-10-02 22:44:10 +03:00
committed by bakerboy448
parent 96328b8d95
commit 1a4c1b6db5
2 changed files with 27 additions and 2 deletions
@@ -18,6 +18,7 @@ namespace NzbDrone.Common.EnvironmentInfo
{ {
private readonly IAppFolderInfo _appFolderInfo; private readonly IAppFolderInfo _appFolderInfo;
private readonly IDiskProvider _diskProvider; private readonly IDiskProvider _diskProvider;
private readonly IDiskTransferService _diskTransferService;
private readonly Logger _logger; private readonly Logger _logger;
public AppFolderFactory(IAppFolderInfo appFolderInfo, public AppFolderFactory(IAppFolderInfo appFolderInfo,
@@ -27,6 +28,7 @@ namespace NzbDrone.Common.EnvironmentInfo
{ {
_appFolderInfo = appFolderInfo; _appFolderInfo = appFolderInfo;
_diskProvider = diskProvider; _diskProvider = diskProvider;
_diskTransferService = diskTransferService;
_logger = NzbDroneLogger.GetLogger(this); _logger = NzbDroneLogger.GetLogger(this);
} }
@@ -34,6 +36,7 @@ namespace NzbDrone.Common.EnvironmentInfo
{ {
try try
{ {
MigrateAppDataFolder();
_diskProvider.EnsureFolder(_appFolderInfo.AppDataFolder); _diskProvider.EnsureFolder(_appFolderInfo.AppDataFolder);
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
@@ -66,6 +69,28 @@ namespace NzbDrone.Common.EnvironmentInfo
} }
} }
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() private void InitializeMonoApplicationData()
{ {
if (OsInfo.IsWindows) if (OsInfo.IsWindows)
@@ -26,9 +26,9 @@ namespace NzbDrone.Common.EnvironmentInfo
_dataSpecialFolder = Environment.SpecialFolder.ApplicationData; _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); Logger.Info("Data directory is being overridden to [{0}]", AppDataFolder);
} }
else else