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<IDirectoryService>(),
|
||||||
Substitute.For<IScrobblingService>()); // Do not use the actual one
|
Substitute.For<IScrobblingService>()); // Do not use the actual one
|
||||||
|
|
||||||
_readerService = new ReaderService(UnitOfWork,
|
_hookedUpReaderService = new ReaderService(UnitOfWork,
|
||||||
Substitute.For<ILogger<ReaderService>>(),
|
Substitute.For<ILogger<ReaderService>>(),
|
||||||
Substitute.For<IEventHub>(),
|
Substitute.For<IEventHub>(),
|
||||||
Substitute.For<IImageService>(),
|
Substitute.For<IImageService>(),
|
||||||
|
|
@ -286,6 +286,36 @@ public class ScrobblingServiceTests : AbstractDbTest
|
||||||
Assert.Empty(events);
|
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]
|
[Fact]
|
||||||
public async Task ScrobbleReadingUpdate_UpdateExistingNotIsProcessed()
|
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);
|
_logger.LogInformation("Processing Scrobbling reading event for {AppUserId} on {SeriesName}", userId, series.Name);
|
||||||
if (await CheckIfCannotScrobble(userId, seriesId, series)) return;
|
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
|
// Check if there is an existing not yet processed event, if so update it
|
||||||
var existingEvt = await _unitOfWork.ScrobbleRepository.GetEvent(userId, series.Id,
|
var existingEvt = await _unitOfWork.ScrobbleRepository.GetEvent(userId, series.Id,
|
||||||
ScrobbleEventType.ChapterRead, true);
|
ScrobbleEventType.ChapterRead, true);
|
||||||
if (existingEvt is {IsProcessed: false})
|
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
|
// We need to just update Volume/Chapter number
|
||||||
var prevChapter = $"{existingEvt.ChapterNumber}";
|
var prevChapter = $"{existingEvt.ChapterNumber}";
|
||||||
var prevVol = $"{existingEvt.VolumeNumber}";
|
var prevVol = $"{existingEvt.VolumeNumber}";
|
||||||
|
|
||||||
existingEvt.VolumeNumber =
|
existingEvt.VolumeNumber = volumeNumber;
|
||||||
(int) await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadVolumeForSeries(seriesId, userId);
|
existingEvt.ChapterNumber = chapterNumber;
|
||||||
existingEvt.ChapterNumber =
|
|
||||||
await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadChapterForSeries(seriesId, userId);
|
|
||||||
|
|
||||||
_unitOfWork.ScrobbleRepository.Update(existingEvt);
|
_unitOfWork.ScrobbleRepository.Update(existingEvt);
|
||||||
await _unitOfWork.CommitAsync();
|
await _unitOfWork.CommitAsync();
|
||||||
|
|
@ -475,9 +483,15 @@ public class ScrobblingService : IScrobblingService
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (volumeNumber == 0 && chapterNumber == 0)
|
||||||
|
{
|
||||||
|
// Do not create a new scrobble event if there is no progress
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var evt = new ScrobbleEvent()
|
var evt = new ScrobbleEvent
|
||||||
{
|
{
|
||||||
SeriesId = series.Id,
|
SeriesId = series.Id,
|
||||||
LibraryId = series.LibraryId,
|
LibraryId = series.LibraryId,
|
||||||
|
|
@ -485,10 +499,8 @@ public class ScrobblingService : IScrobblingService
|
||||||
AniListId = GetAniListId(series),
|
AniListId = GetAniListId(series),
|
||||||
MalId = GetMalId(series),
|
MalId = GetMalId(series),
|
||||||
AppUserId = userId,
|
AppUserId = userId,
|
||||||
VolumeNumber =
|
VolumeNumber = volumeNumber,
|
||||||
(int) await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadVolumeForSeries(seriesId, userId),
|
ChapterNumber = chapterNumber,
|
||||||
ChapterNumber =
|
|
||||||
await _unitOfWork.AppUserProgressRepository.GetHighestFullyReadChapterForSeries(seriesId, userId),
|
|
||||||
Format = series.Library.Type.ConvertToPlusMediaFormat(series.Format),
|
Format = series.Library.Type.ConvertToPlusMediaFormat(series.Format),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue