mirror of https://github.com/lidarr/Lidarr
New: Show error message for pending queue items without albums
(cherry picked from commit 5ca868b4b2d34ba65ba3d40144ed889ccf55343d) Closes #3512
This commit is contained in:
parent
5f9c616bff
commit
56d9dc4c7c
|
@ -181,63 +181,28 @@ namespace NzbDrone.Core.Download.Pending
|
||||||
var nextRssSync = new Lazy<DateTime>(() => _taskManager.GetNextExecution(typeof(RssSyncCommand)));
|
var nextRssSync = new Lazy<DateTime>(() => _taskManager.GetNextExecution(typeof(RssSyncCommand)));
|
||||||
|
|
||||||
var pendingReleases = IncludeRemoteAlbums(_repository.WithoutFallback());
|
var pendingReleases = IncludeRemoteAlbums(_repository.WithoutFallback());
|
||||||
|
|
||||||
foreach (var pendingRelease in pendingReleases)
|
foreach (var pendingRelease in pendingReleases)
|
||||||
{
|
{
|
||||||
|
if (pendingRelease.RemoteAlbum.Albums.Empty())
|
||||||
|
{
|
||||||
|
var noAlbumItem = GetQueueItem(pendingRelease, nextRssSync, null);
|
||||||
|
|
||||||
|
noAlbumItem.ErrorMessage = "Unable to find matching album(s)";
|
||||||
|
|
||||||
|
queued.Add(noAlbumItem);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var album in pendingRelease.RemoteAlbum.Albums)
|
foreach (var album in pendingRelease.RemoteAlbum.Albums)
|
||||||
{
|
{
|
||||||
var ect = pendingRelease.Release.PublishDate.AddMinutes(GetDelay(pendingRelease.RemoteAlbum));
|
queued.Add(GetQueueItem(pendingRelease, nextRssSync, album));
|
||||||
|
|
||||||
if (ect < nextRssSync.Value)
|
|
||||||
{
|
|
||||||
ect = nextRssSync.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ect = ect.AddMinutes(_configService.RssSyncInterval);
|
|
||||||
}
|
|
||||||
|
|
||||||
var timeleft = ect.Subtract(DateTime.UtcNow);
|
|
||||||
|
|
||||||
if (timeleft.TotalSeconds < 0)
|
|
||||||
{
|
|
||||||
timeleft = TimeSpan.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
string downloadClientName = null;
|
|
||||||
var indexer = _indexerFactory.Find(pendingRelease.Release.IndexerId);
|
|
||||||
|
|
||||||
if (indexer is { DownloadClientId: > 0 })
|
|
||||||
{
|
|
||||||
var downloadClient = _downloadClientFactory.Find(indexer.DownloadClientId);
|
|
||||||
|
|
||||||
downloadClientName = downloadClient?.Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
var queue = new Queue.Queue
|
|
||||||
{
|
|
||||||
Id = GetQueueId(pendingRelease, album),
|
|
||||||
Artist = pendingRelease.RemoteAlbum.Artist,
|
|
||||||
Album = album,
|
|
||||||
Quality = pendingRelease.RemoteAlbum.ParsedAlbumInfo.Quality,
|
|
||||||
Title = pendingRelease.Title,
|
|
||||||
Size = pendingRelease.RemoteAlbum.Release.Size,
|
|
||||||
Sizeleft = pendingRelease.RemoteAlbum.Release.Size,
|
|
||||||
RemoteAlbum = pendingRelease.RemoteAlbum,
|
|
||||||
Timeleft = timeleft,
|
|
||||||
EstimatedCompletionTime = ect,
|
|
||||||
Added = pendingRelease.Added,
|
|
||||||
Status = pendingRelease.Reason.ToString(),
|
|
||||||
Protocol = pendingRelease.RemoteAlbum.Release.DownloadProtocol,
|
|
||||||
Indexer = pendingRelease.RemoteAlbum.Release.Indexer,
|
|
||||||
DownloadClient = downloadClientName
|
|
||||||
};
|
|
||||||
|
|
||||||
queued.Add(queue);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return best quality release for each album
|
// Return best quality release for each album
|
||||||
var deduped = queued.GroupBy(q => q.Album.Id).Select(g =>
|
var deduped = queued.Where(q => q.Album != null).GroupBy(q => q.Album.Id).Select(g =>
|
||||||
{
|
{
|
||||||
var artist = g.First().Artist;
|
var artist = g.First().Artist;
|
||||||
|
|
||||||
|
@ -330,26 +295,34 @@ namespace NzbDrone.Core.Download.Pending
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Album> albums;
|
|
||||||
|
|
||||||
if (knownRemoteAlbums != null && knownRemoteAlbums.TryGetValue(release.Release.Title, out var knownRemoteAlbum))
|
|
||||||
{
|
|
||||||
albums = knownRemoteAlbum.Albums;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
albums = _parsingService.GetAlbums(release.ParsedAlbumInfo, artist);
|
|
||||||
}
|
|
||||||
|
|
||||||
release.RemoteAlbum = new RemoteAlbum
|
release.RemoteAlbum = new RemoteAlbum
|
||||||
{
|
{
|
||||||
Artist = artist,
|
Artist = artist,
|
||||||
Albums = albums,
|
|
||||||
ReleaseSource = release.AdditionalInfo?.ReleaseSource ?? ReleaseSourceType.Unknown,
|
ReleaseSource = release.AdditionalInfo?.ReleaseSource ?? ReleaseSourceType.Unknown,
|
||||||
ParsedAlbumInfo = release.ParsedAlbumInfo,
|
ParsedAlbumInfo = release.ParsedAlbumInfo,
|
||||||
Release = release.Release
|
Release = release.Release
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (knownRemoteAlbums != null && knownRemoteAlbums.TryGetValue(release.Release.Title, out var knownRemoteAlbum))
|
||||||
|
{
|
||||||
|
release.RemoteAlbum.Albums = knownRemoteAlbum.Albums;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var remoteAlbums = _parsingService.GetAlbums(release.ParsedAlbumInfo, artist);
|
||||||
|
|
||||||
|
release.RemoteAlbum.Albums = remoteAlbums;
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
|
{
|
||||||
|
_logger.Debug(ex, ex.Message);
|
||||||
|
|
||||||
|
release.RemoteAlbum.Albums = new List<Album>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_aggregationService.Augment(release.RemoteAlbum);
|
_aggregationService.Augment(release.RemoteAlbum);
|
||||||
release.RemoteAlbum.CustomFormats = _formatCalculator.ParseCustomFormat(release.RemoteAlbum, release.Release.Size);
|
release.RemoteAlbum.CustomFormats = _formatCalculator.ParseCustomFormat(release.RemoteAlbum, release.Release.Size);
|
||||||
|
|
||||||
|
@ -359,6 +332,58 @@ namespace NzbDrone.Core.Download.Pending
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Queue.Queue GetQueueItem(PendingRelease pendingRelease, Lazy<DateTime> nextRssSync, Album album)
|
||||||
|
{
|
||||||
|
var ect = pendingRelease.Release.PublishDate.AddMinutes(GetDelay(pendingRelease.RemoteAlbum));
|
||||||
|
|
||||||
|
if (ect < nextRssSync.Value)
|
||||||
|
{
|
||||||
|
ect = nextRssSync.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ect = ect.AddMinutes(_configService.RssSyncInterval);
|
||||||
|
}
|
||||||
|
|
||||||
|
var timeleft = ect.Subtract(DateTime.UtcNow);
|
||||||
|
|
||||||
|
if (timeleft.TotalSeconds < 0)
|
||||||
|
{
|
||||||
|
timeleft = TimeSpan.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
string downloadClientName = null;
|
||||||
|
var indexer = _indexerFactory.Find(pendingRelease.Release.IndexerId);
|
||||||
|
|
||||||
|
if (indexer is { DownloadClientId: > 0 })
|
||||||
|
{
|
||||||
|
var downloadClient = _downloadClientFactory.Find(indexer.DownloadClientId);
|
||||||
|
|
||||||
|
downloadClientName = downloadClient?.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
var queue = new Queue.Queue
|
||||||
|
{
|
||||||
|
Id = GetQueueId(pendingRelease, album),
|
||||||
|
Artist = pendingRelease.RemoteAlbum.Artist,
|
||||||
|
Album = album,
|
||||||
|
Quality = pendingRelease.RemoteAlbum.ParsedAlbumInfo.Quality,
|
||||||
|
Title = pendingRelease.Title,
|
||||||
|
Size = pendingRelease.RemoteAlbum.Release.Size,
|
||||||
|
Sizeleft = pendingRelease.RemoteAlbum.Release.Size,
|
||||||
|
RemoteAlbum = pendingRelease.RemoteAlbum,
|
||||||
|
Timeleft = timeleft,
|
||||||
|
EstimatedCompletionTime = ect,
|
||||||
|
Added = pendingRelease.Added,
|
||||||
|
Status = pendingRelease.Reason.ToString(),
|
||||||
|
Protocol = pendingRelease.RemoteAlbum.Release.DownloadProtocol,
|
||||||
|
Indexer = pendingRelease.RemoteAlbum.Release.Indexer,
|
||||||
|
DownloadClient = downloadClientName
|
||||||
|
};
|
||||||
|
|
||||||
|
return queue;
|
||||||
|
}
|
||||||
|
|
||||||
private void Insert(DownloadDecision decision, PendingReleaseReason reason)
|
private void Insert(DownloadDecision decision, PendingReleaseReason reason)
|
||||||
{
|
{
|
||||||
_repository.Insert(new PendingRelease
|
_repository.Insert(new PendingRelease
|
||||||
|
@ -449,7 +474,7 @@ namespace NzbDrone.Core.Download.Pending
|
||||||
|
|
||||||
private int GetQueueId(PendingRelease pendingRelease, Album album)
|
private int GetQueueId(PendingRelease pendingRelease, Album album)
|
||||||
{
|
{
|
||||||
return HashConverter.GetHashInt31(string.Format("pending-{0}-album{1}", pendingRelease.Id, album.Id));
|
return HashConverter.GetHashInt31(string.Format("pending-{0}-album{1}", pendingRelease.Id, album?.Id ?? 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
private int PrioritizeDownloadProtocol(Artist artist, DownloadProtocol downloadProtocol)
|
private int PrioritizeDownloadProtocol(Artist artist, DownloadProtocol downloadProtocol)
|
||||||
|
|
Loading…
Reference in New Issue