private Response Remove(int id) { var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); if (pendingRelease != null) { _pendingReleaseService.RemovePendingQueueItem(id); return(new object().AsResponse()); } var trackedDownload = GetTrackedDownload(id); if (trackedDownload == null) { throw new NotFoundException(); } var downloadClient = _downloadClientProvider.Get(trackedDownload.DownloadClient); if (downloadClient == null) { throw new BadRequestException(); } downloadClient.RemoveItem(trackedDownload.DownloadItem.DownloadId, true); return(new object().AsResponse()); }
private TrackedDownload Remove(int id, bool blacklist, bool skipReDownload) { var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); if (pendingRelease != null) { _pendingReleaseService.RemovePendingQueueItems(pendingRelease.Id); return(null); } var trackedDownload = GetTrackedDownload(id); if (trackedDownload == null) { throw new NotFoundException(); } var downloadClient = _downloadClientProvider.Get(trackedDownload.DownloadClient); if (downloadClient == null) { throw new BadRequestException(); } downloadClient.RemoveItem(trackedDownload.DownloadItem.DownloadId, true); if (blacklist) { _failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId, skipReDownload); } return(trackedDownload); }
private void RemoveFromDownloadClient(TrackedDownload trackedDownload) { var downloadClient = _downloadClientProvider.Get(trackedDownload.DownloadClient); try { _logger.Debug("[{0}] Removing download from {1} history", trackedDownload.DownloadItem.Title, trackedDownload.DownloadItem.DownloadClientInfo.Name); downloadClient.RemoveItem(trackedDownload.DownloadItem, true); trackedDownload.DownloadItem.Removed = true; } catch (NotSupportedException) { _logger.Warn("Removing item not supported by your download client ({0}).", downloadClient.Definition.Name); } catch (Exception e) { _logger.Error(e, "Couldn't remove item {0} from client {1}", trackedDownload.DownloadItem.Title, downloadClient.Name); } }
public void Handle(DownloadFailedEvent message) { var trackedDownload = message.TrackedDownload; if (trackedDownload == null || message.TrackedDownload.DownloadItem.Removed || !trackedDownload.DownloadItem.CanBeRemoved) { return; } var downloadClient = _downloadClientProvider.Get(message.TrackedDownload.DownloadClient); var definition = downloadClient.Definition as DownloadClientDefinition; if (!definition.RemoveFailedDownloads) { return; } RemoveFromDownloadClient(trackedDownload, downloadClient); }
private TrackedDownload Remove(int id, bool removeFromClient, bool blocklist) { var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); if (pendingRelease != null) { if (blocklist) { _blocklistService.Block(pendingRelease.RemoteEpisode, "Pending release manually blocklisted"); } _pendingReleaseService.RemovePendingQueueItems(pendingRelease.Id); return(null); } var trackedDownload = GetTrackedDownload(id); if (trackedDownload == null) { throw new NotFoundException(); } if (removeFromClient) { var downloadClient = _downloadClientProvider.Get(trackedDownload.DownloadClient); if (downloadClient == null) { throw new BadRequestException(); } downloadClient.RemoveItem(trackedDownload.DownloadItem, true); } if (blocklist) { _failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId); } if (!removeFromClient && !blocklist) { if (!_ignoredDownloadService.IgnoreDownload(trackedDownload)) { return(null); } } return(trackedDownload); }
private object Remove(int id) { var blocklist = false; var blocklistQuery = Request.Query.blocklist; // blacklist maintained for backwards compatability, UI uses blocklist. var blacklistQuery = Request.Query.blacklist; if (blocklistQuery.HasValue) { blocklist = Convert.ToBoolean(blocklistQuery.Value); } else if (blacklistQuery.HasValue) { blocklist = Convert.ToBoolean(blacklistQuery.Value); } var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); if (pendingRelease != null) { _pendingReleaseService.RemovePendingQueueItems(pendingRelease.Id); return(new object()); } var trackedDownload = GetTrackedDownload(id); if (trackedDownload == null) { throw new NotFoundException(); } var downloadClient = _downloadClientProvider.Get(trackedDownload.DownloadClient); if (downloadClient == null) { throw new BadRequestException(); } downloadClient.RemoveItem(trackedDownload.DownloadItem, true); if (blocklist) { _failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId); } return(new object()); }
private Response Remove(int id) { var blacklist = false; var blacklistQuery = Request.Query.blacklist; if (blacklistQuery.HasValue) { blacklist = Convert.ToBoolean(blacklistQuery.Value); } var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); if (pendingRelease != null) { _pendingReleaseService.RemovePendingQueueItem(id); return(new object().AsResponse()); } var trackedDownload = GetTrackedDownload(id); if (trackedDownload == null) { throw new NotFoundException(); } var downloadClient = _downloadClientProvider.Get(trackedDownload.DownloadClient); if (downloadClient == null) { throw new BadRequestException(); } downloadClient.RemoveItem(trackedDownload.DownloadItem.DownloadId, true); if (blacklist) { _failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId); } return(new object().AsResponse()); }
public DownloadClientItem ProvideImportItem(DownloadClientItem item, DownloadClientItem previousImportAttempt) { var client = _downloadClientProvider.Get(item.DownloadClientInfo.Id); return(client.GetImportItem(item, previousImportAttempt)); }
public HealthCheck Check(IEvent message) { // We don't care about client folders if we are not handling completed files if (!_configService.EnableCompletedDownloadHandling) { return(new HealthCheck(GetType())); } if (typeof(TrackImportFailedEvent).IsAssignableFrom(message.GetType())) { var failureMessage = (TrackImportFailedEvent)message; // if we can see the file exists but the import failed then likely a permissions issue if (failureMessage.BookInfo != null) { var trackPath = failureMessage.BookInfo.Path; if (_diskProvider.FileExists(trackPath)) { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckDownloadPermissions"), trackPath), "#permissions-error")); } else { // If the file doesn't exist but TrackInfo is not null then the message is coming from // ImportApprovedTracks and the file must have been removed part way through processing return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFileRemoved"), trackPath), "#remote-path-file-removed")); } } // If the previous case did not match then the failure occured in DownloadedTracksImportService, // while trying to locate the files reported by the download client var client = _downloadClientProvider.Get(failureMessage.DownloadClientInfo.Id); try { var status = client.GetStatus(); var dlpath = client?.GetItems().FirstOrDefault(x => x.DownloadId == failureMessage.DownloadId)?.OutputPath.FullPath; // If dlpath is null then there's not much useful we can report. Give a generic message so // that the user realises something is wrong. if (dlpath.IsNullOrWhiteSpace()) { return(new HealthCheck(GetType(), HealthCheckResult.Error, _localizationService.GetLocalizedString("RemotePathMappingCheckImportFailed"), "#remote-path-import-failed")); } if (!dlpath.IsPathValid()) { if (!status.IsLocalhost) { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFilesWrongOSPath"), client.Definition.Name, dlpath, _osInfo.Name), "#bad-remote-path-mapping")); } else if (_osInfo.IsDocker) { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFilesBadDockerPath"), client.Definition.Name, dlpath, _osInfo.Name), "#docker-bad-remote-path-mapping")); } else { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFilesLocalWrongOSPath"), client.Definition.Name, dlpath, _osInfo.Name), "#bad-download-client-settings")); } } if (_diskProvider.FolderExists(dlpath)) { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFolderPermissions"), dlpath), "#permissions-error")); } // if it's a remote client/docker, likely missing path mappings if (_osInfo.IsDocker) { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFolderPermissions"), client.Definition.Name, dlpath), "#docker-bad-remote-path-mapping")); } else if (!status.IsLocalhost) { return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckRemoteDownloadClient"), client.Definition.Name, dlpath), "#bad-remote-path-mapping")); } else { // path mappings shouldn't be needed locally so probably a permissions issue return(new HealthCheck(GetType(), HealthCheckResult.Error, string.Format(_localizationService.GetLocalizedString("RemotePathMappingCheckFilesGenericPermissions"), client.Definition.Name, dlpath), "#permissions-error")); } } catch (DownloadClientException ex) { _logger.Debug(ex, "Unable to communicate with {0}", client.Definition.Name); } catch (Exception ex) { _logger.Error(ex, "Unknown error occured in RemotePathMapping HealthCheck"); } return(new HealthCheck(GetType())); } else { return(Check()); } }