From 6fc5e535df479382cf08e5ae1f67291ed39faeb5 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Mon, 10 May 2021 09:50:26 -0500 Subject: [PATCH] Fixed #206 (#207) --- API/Controllers/ReaderController.cs | 62 +++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index 43197248e..383021408 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -254,9 +254,10 @@ namespace API.Controllers var volumes = await _unitOfWork.SeriesRepository.GetVolumesDtoAsync(seriesId, user.Id); var currentVolume = await _unitOfWork.SeriesRepository.GetVolumeAsync(volumeId); - var next = false; + if (currentVolume.Number == 0) { + var next = false; foreach (var chapter in currentVolume.Chapters) { if (next) @@ -265,11 +266,20 @@ namespace API.Controllers } if (currentChapterId == chapter.Id) next = true; } + + var chapterId = GetNextChapterId(currentVolume.Chapters, currentChapterId); + if (chapterId > 0) return Ok(chapterId); } foreach (var volume in volumes) { - if (volume.Number == currentVolume.Number + 1) + if (volume.Number == currentVolume.Number && volume.Chapters.Count > 1) + { + var chapterId = GetNextChapterId(currentVolume.Chapters, currentChapterId); + if (chapterId > 0) return Ok(chapterId); + } + + if (volume.Number == currentVolume.Number) { return Ok(volume.Chapters.FirstOrDefault()?.Id); } @@ -277,6 +287,36 @@ namespace API.Controllers return Ok(-1); } + private int GetNextChapterId(Volume currentVolume, int currentChapterId) + { + var next = false; + foreach (var chapter in currentVolume.Chapters) + { + if (next) + { + return chapter.Id; + } + if (currentChapterId == chapter.Id) next = true; + } + + return -1; + } + + private int GetNextChapterId(IEnumerable chapters, int currentChapterId) + { + var next = false; + foreach (var chapter in chapters) + { + if (next) + { + return chapter.Id; + } + if (currentChapterId == chapter.Id) next = true; + } + + return -1; + } + /// /// Returns the previous logical volume from the series. /// @@ -291,22 +331,20 @@ namespace API.Controllers 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; - } + var chapterId = GetNextChapterId(currentVolume.Chapters.Reverse(), currentChapterId); + if (chapterId > 0) return Ok(chapterId); } foreach (var volume in volumes.Reverse()) { + if (volume.Number == currentVolume.Number) + { + var chapterId = GetNextChapterId(currentVolume.Chapters.Reverse(), currentChapterId); + if (chapterId > 0) return Ok(chapterId); + } if (volume.Number == currentVolume.Number - 1) { return Ok(volume.Chapters.LastOrDefault()?.Id);