diff --git a/.github/workflows/stable-docker.yml b/.github/workflows/stable-docker.yml index 6dfed1b30..cbf5c14c6 100644 --- a/.github/workflows/stable-docker.yml +++ b/.github/workflows/stable-docker.yml @@ -30,7 +30,7 @@ jobs: rsync -a dist/ ../../API/wwwroot/ cd ../ || exit - + - name: Get csproj Version uses: naminodarie/get-net-sdk-project-versions-action@v1 id: get-version @@ -38,7 +38,15 @@ jobs: proj-path: Kavita.Common/Kavita.Common.csproj - name: Echo csproj version - run: echo "${{steps.get-version.outputs.assembly-version}}" + run: echo "${{steps.get-version.outputs.assembly-version}}" + + - name: Parse Version + run: | + version='${{steps.get-version.outputs.assembly-version}}' + newVersion=${version%.*} + echo $newVersion + echo "::set-output name=VERSION::$newVersion" + id: parse-version - name: Compile dotnet app uses: actions/setup-dotnet@v1 @@ -75,6 +83,15 @@ jobs: push: true tags: kizaing/kavita:latest + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64,linux/arm/v7,linux/arm64 + push: true + tags: kizaing/kavita:${{ steps.parse-version.outputs.VERSION }} + - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index 746d3a6ce..2e0bc0e9d 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -106,8 +106,9 @@ namespace API.Controllers { foreach (var chapter in volume.Chapters) { - var userProgress = user.Progresses.SingleOrDefault(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id); - if (userProgress == null) // I need to get all chapters and generate new user progresses for them? + var userProgress = GetUserProgressForChapter(user, chapter); + + if (userProgress == null) { user.Progresses.Add(new AppUserProgress { @@ -137,6 +138,31 @@ namespace API.Controllers return BadRequest("There was an issue saving progress"); } + private static AppUserProgress GetUserProgressForChapter(AppUser user, Chapter chapter) + { + AppUserProgress userProgress = null; + try + { + userProgress = + user.Progresses.SingleOrDefault(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id); + } + catch (Exception) + { + // There is a very rare chance that user progress will duplicate current row. If that happens delete one with less pages + var progresses = user.Progresses.Where(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id).ToList(); + if (progresses.Count > 1) + { + user.Progresses = new List() + { + user.Progresses.First() + }; + userProgress = user.Progresses.First(); + } + } + + return userProgress; + } + [HttpPost("mark-unread")] public async Task MarkUnread(MarkReadDto markReadDto) { @@ -147,23 +173,12 @@ namespace API.Controllers { foreach (var chapter in volume.Chapters) { - var userProgress = user.Progresses.SingleOrDefault(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id); - if (userProgress == null) - { - user.Progresses.Add(new AppUserProgress - { - PagesRead = 0, - VolumeId = volume.Id, - SeriesId = markReadDto.SeriesId, - ChapterId = chapter.Id - }); - } - else - { - userProgress.PagesRead = 0; - userProgress.SeriesId = markReadDto.SeriesId; - userProgress.VolumeId = volume.Id; - } + var userProgress = GetUserProgressForChapter(user, chapter); + + if (userProgress == null) continue; + userProgress.PagesRead = 0; + userProgress.SeriesId = markReadDto.SeriesId; + userProgress.VolumeId = volume.Id; } } diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index d5b17196c..85e968d75 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -4,7 +4,7 @@ net5.0 kavitareader.com Kavita - 0.4.3.0 + 0.4.3.1 en