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