mirror of
https://github.com/lidarr/Lidarr
synced 2025-01-03 05:25:10 +00:00
Fixed: Don't lock command queue if updating is disabled
This commit is contained in:
parent
3cccbdecb7
commit
1a2cd6af54
3 changed files with 58 additions and 27 deletions
|
@ -63,7 +63,7 @@ public void Handle(ApplicationStartedEvent message)
|
|||
{
|
||||
new ScheduledTask { Interval = 1, TypeName = typeof(CheckForFinishedDownloadCommand).FullName },
|
||||
new ScheduledTask { Interval = 5, TypeName = typeof(MessagingCleanupCommand).FullName },
|
||||
new ScheduledTask { Interval = 6 * 60, TypeName = typeof(ApplicationUpdateCommand).FullName },
|
||||
new ScheduledTask { Interval = 6 * 60, TypeName = typeof(ApplicationUpdateCheckCommand).FullName },
|
||||
new ScheduledTask { Interval = 6 * 60, TypeName = typeof(CheckHealthCommand).FullName },
|
||||
new ScheduledTask { Interval = 24 * 60, TypeName = typeof(RefreshArtistCommand).FullName },
|
||||
new ScheduledTask { Interval = 24 * 60, TypeName = typeof(RescanFoldersCommand).FullName },
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
using NzbDrone.Core.Messaging.Commands;
|
||||
|
||||
namespace NzbDrone.Core.Update.Commands
|
||||
{
|
||||
public class ApplicationUpdateCheckCommand : Command
|
||||
{
|
||||
public override bool SendUpdatesToClient => true;
|
||||
|
||||
public override string CompletionMessage => null;
|
||||
}
|
||||
}
|
|
@ -16,12 +16,12 @@
|
|||
|
||||
namespace NzbDrone.Core.Update
|
||||
{
|
||||
public class InstallUpdateService : IExecute<ApplicationUpdateCommand>
|
||||
public class InstallUpdateService : IExecute<ApplicationUpdateCheckCommand>, IExecute<ApplicationUpdateCommand>
|
||||
{
|
||||
private readonly ICheckUpdateService _checkUpdateService;
|
||||
private readonly Logger _logger;
|
||||
private readonly IAppFolderInfo _appFolderInfo;
|
||||
|
||||
private readonly IManageCommandQueue _commandQueueManager;
|
||||
private readonly IDiskProvider _diskProvider;
|
||||
private readonly IDiskTransferService _diskTransferService;
|
||||
private readonly IHttpClient _httpClient;
|
||||
|
@ -37,6 +37,7 @@ public class InstallUpdateService : IExecute<ApplicationUpdateCommand>
|
|||
|
||||
public InstallUpdateService(ICheckUpdateService checkUpdateService,
|
||||
IAppFolderInfo appFolderInfo,
|
||||
IManageCommandQueue commandQueueManager,
|
||||
IDiskProvider diskProvider,
|
||||
IDiskTransferService diskTransferService,
|
||||
IHttpClient httpClient,
|
||||
|
@ -58,6 +59,7 @@ public InstallUpdateService(ICheckUpdateService checkUpdateService,
|
|||
|
||||
_checkUpdateService = checkUpdateService;
|
||||
_appFolderInfo = appFolderInfo;
|
||||
_commandQueueManager = commandQueueManager;
|
||||
_diskProvider = diskProvider;
|
||||
_diskTransferService = diskTransferService;
|
||||
_httpClient = httpClient;
|
||||
|
@ -204,7 +206,7 @@ private void EnsureAppDataSafety()
|
|||
}
|
||||
}
|
||||
|
||||
public void Execute(ApplicationUpdateCommand message)
|
||||
private UpdatePackage GetUpdatePackage(CommandTrigger updateTrigger)
|
||||
{
|
||||
_logger.ProgressDebug("Checking for updates");
|
||||
|
||||
|
@ -213,52 +215,70 @@ public void Execute(ApplicationUpdateCommand message)
|
|||
if (latestAvailable == null)
|
||||
{
|
||||
_logger.ProgressDebug("No update available");
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (_osInfo.IsDocker)
|
||||
{
|
||||
_logger.ProgressDebug("Updating is disabled inside a docker container. Please update the container image.");
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (OsInfo.IsNotWindows && !_configFileProvider.UpdateAutomatically && message.Trigger != CommandTrigger.Manual)
|
||||
if (OsInfo.IsNotWindows && !_configFileProvider.UpdateAutomatically && updateTrigger != CommandTrigger.Manual)
|
||||
{
|
||||
_logger.ProgressDebug("Auto-update not enabled, not installing available update");
|
||||
return;
|
||||
_logger.ProgressDebug("Auto-update not enabled, not installing available update.");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Safety net, ConfigureUpdateMechanism should take care of invalid settings
|
||||
if (_configFileProvider.UpdateMechanism == UpdateMechanism.BuiltIn && _deploymentInfoProvider.IsExternalUpdateMechanism)
|
||||
{
|
||||
_logger.ProgressDebug("Built-In updater disabled, please use {0} to install", _deploymentInfoProvider.PackageUpdateMechanism);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
else if (_configFileProvider.UpdateMechanism != UpdateMechanism.Script && _deploymentInfoProvider.IsExternalUpdateMechanism)
|
||||
{
|
||||
_logger.ProgressDebug("Update available, please use {0} to install", _deploymentInfoProvider.PackageUpdateMechanism);
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
return latestAvailable;
|
||||
}
|
||||
|
||||
public void Execute(ApplicationUpdateCheckCommand message)
|
||||
{
|
||||
if (GetUpdatePackage(message.Trigger) != null)
|
||||
{
|
||||
InstallUpdate(latestAvailable);
|
||||
_logger.ProgressDebug("Restarting Lidarr to apply updates");
|
||||
_commandQueueManager.Push(new ApplicationUpdateCommand(), trigger: message.Trigger);
|
||||
}
|
||||
catch (UpdateFolderNotWritableException ex)
|
||||
}
|
||||
|
||||
public void Execute(ApplicationUpdateCommand message)
|
||||
{
|
||||
var latestAvailable = GetUpdatePackage(message.Trigger);
|
||||
|
||||
if (latestAvailable != null)
|
||||
{
|
||||
_logger.Error(ex, "Update process failed");
|
||||
throw new CommandFailedException("Startup folder not writable by user '{0}'", ex, Environment.UserName);
|
||||
}
|
||||
catch (UpdateVerificationFailedException ex)
|
||||
{
|
||||
_logger.Error(ex, "Update process failed");
|
||||
throw new CommandFailedException("Downloaded update package is corrupt", ex);
|
||||
}
|
||||
catch (UpdateFailedException ex)
|
||||
{
|
||||
_logger.Error(ex, "Update process failed");
|
||||
throw new CommandFailedException(ex);
|
||||
try
|
||||
{
|
||||
InstallUpdate(latestAvailable);
|
||||
_logger.ProgressDebug("Restarting Lidarr to apply updates");
|
||||
}
|
||||
catch (UpdateFolderNotWritableException ex)
|
||||
{
|
||||
_logger.Error(ex, "Update process failed");
|
||||
throw new CommandFailedException("Startup folder not writable by user '{0}'", ex, Environment.UserName);
|
||||
}
|
||||
catch (UpdateVerificationFailedException ex)
|
||||
{
|
||||
_logger.Error(ex, "Update process failed");
|
||||
throw new CommandFailedException("Downloaded update package is corrupt", ex);
|
||||
}
|
||||
catch (UpdateFailedException ex)
|
||||
{
|
||||
_logger.Error(ex, "Update process failed");
|
||||
throw new CommandFailedException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue