From d92e9e7602b5f989beb9d8f820dd20b4037dc2bb Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Wed, 5 May 2021 16:48:39 -0500 Subject: [PATCH] Implemented the ability to move between volumes (reading) automatically without existing the app. (#198) --- API/Controllers/ReaderController.cs | 75 +++++++++++++++++++++++++++++ API/Controllers/SeriesController.cs | 14 +----- 2 files changed, 77 insertions(+), 12 deletions(-) diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index e3927146b..020e67c0b 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -239,5 +239,80 @@ namespace API.Controllers return BadRequest("Could not save progress"); } + + /// + /// Returns the next logical volume from the series. + /// + /// + /// + /// + /// chapter id for next manga + [HttpGet("next-chapter")] + public async Task> GetNextChapter(int seriesId, int volumeId, int currentChapterId) + { + var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); + var volumes = await _unitOfWork.SeriesRepository.GetVolumesDtoAsync(seriesId, user.Id); + var currentVolume = await _unitOfWork.SeriesRepository.GetVolumeAsync(volumeId); + + var next = false; + if (currentVolume.Number == 0) + { + foreach (var chapter in currentVolume.Chapters) + { + if (next) + { + return Ok(chapter.Id); + } + if (currentChapterId == chapter.Id) next = true; + } + } + + foreach (var volume in volumes) + { + if (volume.Number == currentVolume.Number + 1) + { + return Ok(volume.Chapters.FirstOrDefault()?.Id); + } + } + return Ok(-1); + } + + /// + /// Returns the previous logical volume from the series. + /// + /// + /// + /// chapter id for next manga + [HttpGet("prev-chapter")] + public async Task> GetPreviousChapter(int seriesId, int volumeId, int currentChapterId) + { + var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername()); + var volumes = await _unitOfWork.SeriesRepository.GetVolumesDtoAsync(seriesId, user.Id); + var currentVolume = await _unitOfWork.SeriesRepository.GetVolumeAsync(volumeId); + + var next = false; + if (currentVolume.Number == 0) + { + var chapters = currentVolume.Chapters.Reverse(); + foreach (var chapter in chapters) + { + if (next) + { + return Ok(chapter.Id); + } + if (currentChapterId == chapter.Id) next = true; + } + } + + foreach (var volume in volumes.Reverse()) + { + if (volume.Number == currentVolume.Number - 1) + { + return Ok(volume.Chapters.LastOrDefault()?.Id); + } + } + return Ok(-1); + } + } } \ No newline at end of file diff --git a/API/Controllers/SeriesController.cs b/API/Controllers/SeriesController.cs index 01737dfef..caa69b15f 100644 --- a/API/Controllers/SeriesController.cs +++ b/API/Controllers/SeriesController.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using API.DTOs; using API.Entities; @@ -89,18 +90,7 @@ namespace API.Controllers return Ok(await _unitOfWork.VolumeRepository.GetChapterDtoAsync(chapterId)); } - /// - /// Returns the next logical volume from the series. - /// - /// - /// - /// chapter id for next manga - [HttpGet("next-volume")] - public async Task> GetNextChapter(int seriesId, int volumeId) - { - - return Ok(); - } + [HttpPost("update-rating")]