mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-27 22:57:09 -04:00
Delay Profiles
New: Select preferred protocol (usenet/torrent) New: Option to delay grabs from usenet/torrents independently
This commit is contained in:
@@ -5,9 +5,11 @@ using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.DecisionEngine;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Delay;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Tv.Events;
|
||||
@@ -20,8 +22,9 @@ namespace NzbDrone.Core.Download.Pending
|
||||
void RemoveGrabbed(List<DownloadDecision> grabbed);
|
||||
void RemoveRejected(List<DownloadDecision> rejected);
|
||||
List<ReleaseInfo> GetPending();
|
||||
List<RemoteEpisode> GetPendingRemoteEpisodes(Int32 seriesId);
|
||||
List<RemoteEpisode> GetPendingRemoteEpisodes(int seriesId);
|
||||
List<Queue.Queue> GetPendingQueue();
|
||||
RemoteEpisode OldestPendingRelease(int seriesId, IEnumerable<int> episodeIds);
|
||||
}
|
||||
|
||||
public class PendingReleaseService : IPendingReleaseService, IHandle<SeriesDeletedEvent>
|
||||
@@ -29,18 +32,21 @@ namespace NzbDrone.Core.Download.Pending
|
||||
private readonly IPendingReleaseRepository _repository;
|
||||
private readonly ISeriesService _seriesService;
|
||||
private readonly IParsingService _parsingService;
|
||||
private readonly IDelayProfileService _delayProfileService;
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public PendingReleaseService(IPendingReleaseRepository repository,
|
||||
ISeriesService seriesService,
|
||||
IParsingService parsingService,
|
||||
IDelayProfileService delayProfileService,
|
||||
IEventAggregator eventAggregator,
|
||||
Logger logger)
|
||||
{
|
||||
_repository = repository;
|
||||
_seriesService = seriesService;
|
||||
_parsingService = parsingService;
|
||||
_delayProfileService = delayProfileService;
|
||||
_eventAggregator = eventAggregator;
|
||||
_logger = logger;
|
||||
}
|
||||
@@ -138,8 +144,7 @@ namespace NzbDrone.Core.Download.Pending
|
||||
{
|
||||
foreach (var episode in pendingRelease.RemoteEpisode.Episodes)
|
||||
{
|
||||
var ect = pendingRelease.Release.PublishDate.AddHours(
|
||||
pendingRelease.RemoteEpisode.Series.Profile.Value.GrabDelay);
|
||||
var ect = pendingRelease.Release.PublishDate.AddMinutes(GetDelay(pendingRelease.RemoteEpisode));
|
||||
|
||||
var queue = new Queue.Queue
|
||||
{
|
||||
@@ -162,6 +167,14 @@ namespace NzbDrone.Core.Download.Pending
|
||||
return queued;
|
||||
}
|
||||
|
||||
public RemoteEpisode OldestPendingRelease(int seriesId, IEnumerable<int> episodeIds)
|
||||
{
|
||||
return GetPendingRemoteEpisodes(seriesId)
|
||||
.Where(r => r.Episodes.Select(e => e.Id).Intersect(episodeIds).Any())
|
||||
.OrderByDescending(p => p.Release.AgeHours)
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
private List<PendingRelease> GetPendingReleases()
|
||||
{
|
||||
var result = new List<PendingRelease>();
|
||||
@@ -225,6 +238,13 @@ namespace NzbDrone.Core.Download.Pending
|
||||
p.Release.Indexer == decision.RemoteEpisode.Release.Indexer;
|
||||
}
|
||||
|
||||
private int GetDelay(RemoteEpisode remoteEpisode)
|
||||
{
|
||||
var delayProfile = _delayProfileService.AllForTags(remoteEpisode.Series.Tags).OrderBy(d => d.Order).First();
|
||||
|
||||
return delayProfile.GetProtocolDelay(remoteEpisode.Release.DownloadProtocol);
|
||||
}
|
||||
|
||||
public void Handle(SeriesDeletedEvent message)
|
||||
{
|
||||
_repository.DeleteBySeriesId(message.Series.Id);
|
||||
|
||||
Reference in New Issue
Block a user