mirror of
https://github.com/Radarr/Radarr
synced 2026-05-08 18:01:48 +02:00
Only reuse healthy waiting tracked downloads
This commit is contained in:
parent
e40cc276b3
commit
8e36c823fc
2 changed files with 67 additions and 1 deletions
|
|
@ -176,6 +176,65 @@ public void should_reprocess_when_waiting_download_identity_changes()
|
||||||
.Verify(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null), Times.Exactly(2));
|
.Verify(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null), Times.Exactly(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_reprocess_when_waiting_download_has_warning_status()
|
||||||
|
{
|
||||||
|
GivenTrackedDownloadCanBeMapped();
|
||||||
|
|
||||||
|
var client = CreateDownloadClient();
|
||||||
|
var item = CreateDownloadItem(DownloadItemStatus.Queued);
|
||||||
|
var updatedItem = CreateDownloadItem(DownloadItemStatus.Queued);
|
||||||
|
updatedItem.RemainingSize = 250;
|
||||||
|
|
||||||
|
var trackedDownload = Subject.TrackDownload(client, item);
|
||||||
|
trackedDownload.Warn("Temporary warning");
|
||||||
|
|
||||||
|
var refreshedTrackedDownload = Subject.TrackDownload(client, updatedItem);
|
||||||
|
|
||||||
|
refreshedTrackedDownload.Should().NotBeSameAs(trackedDownload);
|
||||||
|
|
||||||
|
Mocker.GetMock<IHistoryService>()
|
||||||
|
.Verify(s => s.FindByDownloadId(It.IsAny<string>()), Times.Exactly(2));
|
||||||
|
|
||||||
|
Mocker.GetMock<IParsingService>()
|
||||||
|
.Verify(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null), Times.Exactly(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_reprocess_when_waiting_download_is_not_mapped()
|
||||||
|
{
|
||||||
|
Mocker.GetMock<IHistoryService>()
|
||||||
|
.Setup(s => s.FindByDownloadId(It.IsAny<string>()))
|
||||||
|
.Returns(new List<MovieHistory>());
|
||||||
|
|
||||||
|
Mocker.GetMock<IParsingService>()
|
||||||
|
.Setup(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null))
|
||||||
|
.Returns(new RemoteMovie
|
||||||
|
{
|
||||||
|
ParsedMovieInfo = new ParsedMovieInfo
|
||||||
|
{
|
||||||
|
MovieTitles = new List<string> { "A Movie" },
|
||||||
|
Year = 1998
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var client = CreateDownloadClient();
|
||||||
|
var item = CreateDownloadItem(DownloadItemStatus.Queued);
|
||||||
|
var updatedItem = CreateDownloadItem(DownloadItemStatus.Queued);
|
||||||
|
updatedItem.RemainingSize = 250;
|
||||||
|
|
||||||
|
var trackedDownload = Subject.TrackDownload(client, item);
|
||||||
|
var refreshedTrackedDownload = Subject.TrackDownload(client, updatedItem);
|
||||||
|
|
||||||
|
refreshedTrackedDownload.Should().NotBeSameAs(trackedDownload);
|
||||||
|
|
||||||
|
Mocker.GetMock<IHistoryService>()
|
||||||
|
.Verify(s => s.FindByDownloadId(It.IsAny<string>()), Times.Exactly(2));
|
||||||
|
|
||||||
|
Mocker.GetMock<IParsingService>()
|
||||||
|
.Verify(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null), Times.Exactly(2));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void should_track_downloads_using_the_source_title_if_it_cannot_be_found_using_the_download_title()
|
public void should_track_downloads_using_the_source_title_if_it_cannot_be_found_using_the_download_title()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,8 @@ private static bool CanReuseTrackedDownload(TrackedDownload existingItem, Downlo
|
||||||
}
|
}
|
||||||
|
|
||||||
return IsStableWaitingDownload(downloadItem) &&
|
return IsStableWaitingDownload(downloadItem) &&
|
||||||
HasSameDownloadIdentity(existingItem.DownloadItem, downloadItem);
|
HasSameDownloadIdentity(existingItem.DownloadItem, downloadItem) &&
|
||||||
|
HasHealthyWaitingCache(existingItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsStableWaitingDownload(DownloadClientItem downloadItem)
|
private static bool IsStableWaitingDownload(DownloadClientItem downloadItem)
|
||||||
|
|
@ -238,6 +239,12 @@ private static bool IsStableWaitingDownload(DownloadClientItem downloadItem)
|
||||||
downloadItem.Status == DownloadItemStatus.Paused;
|
downloadItem.Status == DownloadItemStatus.Paused;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool HasHealthyWaitingCache(TrackedDownload existingItem)
|
||||||
|
{
|
||||||
|
return existingItem.Status == TrackedDownloadStatus.Ok &&
|
||||||
|
existingItem.RemoteMovie?.Movie != null;
|
||||||
|
}
|
||||||
|
|
||||||
private static bool HasSameDownloadIdentity(DownloadClientItem existingItem, DownloadClientItem downloadItem)
|
private static bool HasSameDownloadIdentity(DownloadClientItem existingItem, DownloadClientItem downloadItem)
|
||||||
{
|
{
|
||||||
return existingItem.DownloadId == downloadItem.DownloadId &&
|
return existingItem.DownloadId == downloadItem.DownloadId &&
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue