mirror of
https://github.com/Radarr/Radarr
synced 2026-05-07 12:51:29 +02:00
Refresh tracked downloads on edit events
This commit is contained in:
parent
8e36c823fc
commit
f446a06cc3
2 changed files with 83 additions and 52 deletions
|
|
@ -89,38 +89,15 @@ private void GivenTrackedDownloadCanBeMapped()
|
|||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_reuse_stable_queued_downloading_tracked_download()
|
||||
[TestCase(DownloadItemStatus.Queued)]
|
||||
[TestCase(DownloadItemStatus.Paused)]
|
||||
public void should_reuse_stable_waiting_downloading_tracked_download(DownloadItemStatus status)
|
||||
{
|
||||
GivenTrackedDownloadCanBeMapped();
|
||||
|
||||
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);
|
||||
|
||||
trackedDownload.State.Should().Be(TrackedDownloadState.Downloading);
|
||||
refreshedTrackedDownload.Should().BeSameAs(trackedDownload);
|
||||
refreshedTrackedDownload.DownloadItem.Should().BeSameAs(updatedItem);
|
||||
|
||||
Mocker.GetMock<IHistoryService>()
|
||||
.Verify(s => s.FindByDownloadId(It.IsAny<string>()), Times.Once());
|
||||
|
||||
Mocker.GetMock<IParsingService>()
|
||||
.Verify(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_reuse_stable_paused_downloading_tracked_download()
|
||||
{
|
||||
GivenTrackedDownloadCanBeMapped();
|
||||
|
||||
var client = CreateDownloadClient();
|
||||
var item = CreateDownloadItem(DownloadItemStatus.Paused);
|
||||
var updatedItem = CreateDownloadItem(DownloadItemStatus.Paused);
|
||||
var item = CreateDownloadItem(status);
|
||||
var updatedItem = CreateDownloadItem(status);
|
||||
updatedItem.RemainingSize = 250;
|
||||
|
||||
var trackedDownload = Subject.TrackDownload(client, item);
|
||||
|
|
@ -409,6 +386,70 @@ public void should_unmap_tracked_download_if_movie_deleted()
|
|||
trackedDownloads.First().RemoteMovie.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_update_tracked_download_when_movie_edited()
|
||||
{
|
||||
var originalMovie = new Movie { Id = 3, TmdbId = 10, Title = "A Movie" };
|
||||
var updatedMovie = new Movie { Id = 3, TmdbId = 10, Title = "A Movie Updated" };
|
||||
|
||||
var remoteMovie = new RemoteMovie
|
||||
{
|
||||
Movie = originalMovie,
|
||||
ParsedMovieInfo = new ParsedMovieInfo
|
||||
{
|
||||
MovieTitles = { "A Movie" },
|
||||
Year = 1998
|
||||
}
|
||||
};
|
||||
|
||||
var updatedRemoteMovie = new RemoteMovie
|
||||
{
|
||||
Movie = updatedMovie,
|
||||
ParsedMovieInfo = new ParsedMovieInfo
|
||||
{
|
||||
MovieTitles = { "A Movie" },
|
||||
Year = 1998
|
||||
}
|
||||
};
|
||||
|
||||
Mocker.GetMock<IParsingService>()
|
||||
.SetupSequence(s => s.Map(It.IsAny<ParsedMovieInfo>(), It.IsAny<string>(), It.IsAny<int>(), null))
|
||||
.Returns(remoteMovie)
|
||||
.Returns(updatedRemoteMovie);
|
||||
|
||||
Mocker.GetMock<IHistoryService>()
|
||||
.Setup(s => s.FindByDownloadId(It.IsAny<string>()))
|
||||
.Returns(new List<MovieHistory>());
|
||||
|
||||
var client = new DownloadClientDefinition
|
||||
{
|
||||
Id = 1,
|
||||
Protocol = DownloadProtocol.Torrent
|
||||
};
|
||||
|
||||
var item = new DownloadClientItem
|
||||
{
|
||||
Title = "A Movie 1998",
|
||||
DownloadId = "12345",
|
||||
DownloadClientInfo = new DownloadClientItemClientInfo
|
||||
{
|
||||
Id = 1,
|
||||
Type = "Blackhole",
|
||||
Name = "Blackhole Client",
|
||||
Protocol = DownloadProtocol.Torrent
|
||||
}
|
||||
};
|
||||
|
||||
Subject.TrackDownload(client, item);
|
||||
|
||||
Subject.Handle(new MovieEditedEvent(updatedMovie, originalMovie));
|
||||
|
||||
var trackedDownloads = Subject.GetTrackedDownloads();
|
||||
trackedDownloads.Should().HaveCount(1);
|
||||
trackedDownloads.First().RemoteMovie.Should().BeSameAs(updatedRemoteMovie);
|
||||
trackedDownloads.First().RemoteMovie.Movie.Title.Should().Be("A Movie Updated");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_throw_when_processing_deleted_movie()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -263,6 +263,16 @@ private void UpdateCachedItem(TrackedDownload trackedDownload)
|
|||
_aggregationService.Augment(trackedDownload.RemoteMovie);
|
||||
}
|
||||
|
||||
private void RefreshCachedItems(List<TrackedDownload> cachedItems)
|
||||
{
|
||||
if (cachedItems.Any())
|
||||
{
|
||||
cachedItems.ForEach(UpdateCachedItem);
|
||||
|
||||
_eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads()));
|
||||
}
|
||||
}
|
||||
|
||||
private static TrackedDownloadState GetStateFromHistory(DownloadHistoryEventType eventType)
|
||||
{
|
||||
switch (eventType)
|
||||
|
|
@ -304,12 +314,7 @@ public void Handle(MovieAddedEvent message)
|
|||
message.Movie?.TmdbId == t.RemoteMovie.Movie.TmdbId)
|
||||
.ToList();
|
||||
|
||||
if (cachedItems.Any())
|
||||
{
|
||||
cachedItems.ForEach(UpdateCachedItem);
|
||||
|
||||
_eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads()));
|
||||
}
|
||||
RefreshCachedItems(cachedItems);
|
||||
}
|
||||
|
||||
public void Handle(MovieEditedEvent message)
|
||||
|
|
@ -320,12 +325,7 @@ public void Handle(MovieEditedEvent message)
|
|||
(t.RemoteMovie.Movie.Id == message.Movie?.Id || t.RemoteMovie.Movie.TmdbId == message.Movie?.TmdbId))
|
||||
.ToList();
|
||||
|
||||
if (cachedItems.Any())
|
||||
{
|
||||
cachedItems.ForEach(UpdateCachedItem);
|
||||
|
||||
_eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads()));
|
||||
}
|
||||
RefreshCachedItems(cachedItems);
|
||||
}
|
||||
|
||||
public void Handle(MoviesBulkEditedEvent message)
|
||||
|
|
@ -336,12 +336,7 @@ public void Handle(MoviesBulkEditedEvent message)
|
|||
message.Movies.Any(m => m.Id == t.RemoteMovie.Movie.Id || m.TmdbId == t.RemoteMovie.Movie.TmdbId))
|
||||
.ToList();
|
||||
|
||||
if (cachedItems.Any())
|
||||
{
|
||||
cachedItems.ForEach(UpdateCachedItem);
|
||||
|
||||
_eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads()));
|
||||
}
|
||||
RefreshCachedItems(cachedItems);
|
||||
}
|
||||
|
||||
public void Handle(MoviesDeletedEvent message)
|
||||
|
|
@ -352,12 +347,7 @@ public void Handle(MoviesDeletedEvent message)
|
|||
message.Movies.Any(m => m.Id == t.RemoteMovie.Movie.Id || m.TmdbId == t.RemoteMovie.Movie.TmdbId))
|
||||
.ToList();
|
||||
|
||||
if (cachedItems.Any())
|
||||
{
|
||||
cachedItems.ForEach(UpdateCachedItem);
|
||||
|
||||
_eventAggregator.PublishEvent(new TrackedDownloadRefreshedEvent(GetTrackedDownloads()));
|
||||
}
|
||||
RefreshCachedItems(cachedItems);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue