diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index 39ec8bdd9..7f4e3e1fc 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -392,7 +392,17 @@ namespace API.Controllers var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername(), AppUserIncludes.Progress); user.Progresses ??= new List(); - await _readerService.MarkChaptersUntilAsRead(user, seriesId, chapterNumber); + if (chapterNumber < 1.0f) + { + // This is a hack to track volume number. We need to map it back by x100 + var volumeNumber = int.Parse($"{chapterNumber * 100f}"); + await _readerService.MarkVolumesUntilAsRead(user, seriesId, volumeNumber); + } + else + { + await _readerService.MarkChaptersUntilAsRead(user, seriesId, chapterNumber); + } + _unitOfWork.UserRepository.Update(user); diff --git a/API/Services/ReaderService.cs b/API/Services/ReaderService.cs index 05c7860f2..6af585a0c 100644 --- a/API/Services/ReaderService.cs +++ b/API/Services/ReaderService.cs @@ -24,6 +24,7 @@ public interface IReaderService Task GetPrevChapterIdAsync(int seriesId, int volumeId, int currentChapterId, int userId); Task GetContinuePoint(int seriesId, int userId); Task MarkChaptersUntilAsRead(AppUser user, int seriesId, float chapterNumber); + Task MarkVolumesUntilAsRead(AppUser user, int seriesId, int volumeNumber); } public class ReaderService : IReaderService @@ -364,5 +365,12 @@ public class ReaderService : IReaderService } } - + public async Task MarkVolumesUntilAsRead(AppUser user, int seriesId, int volumeNumber) + { + var volumes = await _unitOfWork.VolumeRepository.GetVolumesForSeriesAsync(new List() { seriesId }, true); + foreach (var volume in volumes.OrderBy(v => v.Number).Where(v => v.Number <= volumeNumber)) + { + MarkChaptersAsRead(user, volume.SeriesId, volume.Chapters); + } + } }