Do not scrobble reading updates to Volume 0, Chapter 0
This commit is contained in:
parent
6642f96d8f
commit
1a4aa215d6
2 changed files with 52 additions and 10 deletions
|
|
@ -66,7 +66,7 @@ public class ScrobblingServiceTests : AbstractDbTest
|
|||
Substitute.For<IDirectoryService>(),
|
||||
Substitute.For<IScrobblingService>()); // Do not use the actual one
|
||||
|
||||
_readerService = new ReaderService(UnitOfWork,
|
||||
_hookedUpReaderService = new ReaderService(UnitOfWork,
|
||||
Substitute.For<ILogger<ReaderService>>(),
|
||||
Substitute.For<IEventHub>(),
|
||||
Substitute.For<IImageService>(),
|
||||
|
|
@ -286,6 +286,36 @@ public class ScrobblingServiceTests : AbstractDbTest
|
|||
Assert.Empty(events);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ScrobbleReadingUpdate_RemoveWhenNoProgress()
|
||||
{
|
||||
await ResetDb();
|
||||
await SeedData();
|
||||
|
||||
_licenseService.HasActiveLicense().Returns(true);
|
||||
|
||||
var user = await UnitOfWork.UserRepository.GetUserByIdAsync(1);
|
||||
Assert.NotNull(user);
|
||||
|
||||
await _service.ScrobbleReadingUpdate(1, 1);
|
||||
var events = await UnitOfWork.ScrobbleRepository.GetAllEventsForSeries(1);
|
||||
Assert.Empty(events);
|
||||
|
||||
await _hookedUpReaderService.MarkSeriesAsUnread(user, 1);
|
||||
await UnitOfWork.CommitAsync();
|
||||
|
||||
// Existing event is deleted
|
||||
events = await UnitOfWork.ScrobbleRepository.GetAllEventsForSeries(1);
|
||||
Assert.Empty(events);
|
||||
|
||||
await _hookedUpReaderService.MarkSeriesAsUnread(user, 1);
|
||||
await UnitOfWork.CommitAsync();
|
||||
|
||||
// No new events are added
|
||||
events = await UnitOfWork.ScrobbleRepository.GetAllEventsForSeries(1);
|
||||
Assert.Empty(events);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ScrobbleReadingUpdate_UpdateExistingNotIsProcessed()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -453,19 +453,27 @@ public class ScrobblingService : IScrobblingService
|
|||
_logger.LogInformation("Processing Scrobbling reading event for {AppUserId} on {SeriesName}", userId, series.Name);
|
||||
if (await CheckIfCannotScrobble(userId, seriesId, series)) return;
|
||||
|
||||
var volumeNumber = (int) await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadVolumeForSeries(seriesId, userId);
|
||||
var chapterNumber = await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadChapterForSeries(seriesId, userId);
|
||||
|
||||
// Check if there is an existing not yet processed event, if so update it
|
||||
var existingEvt = await _unitOfWork.ScrobbleRepository.GetEvent(userId, series.Id,
|
||||
ScrobbleEventType.ChapterRead, true);
|
||||
if (existingEvt is {IsProcessed: false})
|
||||
{
|
||||
if (volumeNumber == 0 && chapterNumber == 0)
|
||||
{
|
||||
_unitOfWork.ScrobbleRepository.Remove(existingEvt);
|
||||
await _unitOfWork.CommitAsync();
|
||||
_logger.LogDebug("Removed scrobble event for {Series} as there is no reading progress", series.Name);
|
||||
}
|
||||
|
||||
// We need to just update Volume/Chapter number
|
||||
var prevChapter = $"{existingEvt.ChapterNumber}";
|
||||
var prevVol = $"{existingEvt.VolumeNumber}";
|
||||
|
||||
existingEvt.VolumeNumber =
|
||||
(int) await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadVolumeForSeries(seriesId, userId);
|
||||
existingEvt.ChapterNumber =
|
||||
await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadChapterForSeries(seriesId, userId);
|
||||
existingEvt.VolumeNumber = volumeNumber;
|
||||
existingEvt.ChapterNumber = chapterNumber;
|
||||
|
||||
_unitOfWork.ScrobbleRepository.Update(existingEvt);
|
||||
await _unitOfWork.CommitAsync();
|
||||
|
|
@ -475,9 +483,15 @@ public class ScrobblingService : IScrobblingService
|
|||
return;
|
||||
}
|
||||
|
||||
if (volumeNumber == 0 && chapterNumber == 0)
|
||||
{
|
||||
// Do not create a new scrobble event if there is no progress
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var evt = new ScrobbleEvent()
|
||||
var evt = new ScrobbleEvent
|
||||
{
|
||||
SeriesId = series.Id,
|
||||
LibraryId = series.LibraryId,
|
||||
|
|
@ -485,10 +499,8 @@ public class ScrobblingService : IScrobblingService
|
|||
AniListId = GetAniListId(series),
|
||||
MalId = GetMalId(series),
|
||||
AppUserId = userId,
|
||||
VolumeNumber =
|
||||
(int) await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadVolumeForSeries(seriesId, userId),
|
||||
ChapterNumber =
|
||||
await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadChapterForSeries(seriesId, userId),
|
||||
VolumeNumber = volumeNumber,
|
||||
ChapterNumber = chapterNumber,
|
||||
Format = series.Library.Type.ConvertToPlusMediaFormat(series.Format),
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue