diff --git a/API/Controllers/KoreaderController.cs b/API/Controllers/KoreaderController.cs index 895419629..1ce5e3202 100644 --- a/API/Controllers/KoreaderController.cs +++ b/API/Controllers/KoreaderController.cs @@ -81,7 +81,12 @@ public class KoreaderController : BaseApiController } } - + /// + /// Gets book progress from Kavita, if not found will return a 400 + /// + /// + /// + /// [HttpGet("{apiKey}/syncs/progress/{ebookHash}")] public async Task> GetProgress(string apiKey, string ebookHash) { diff --git a/API/DTOs/Koreader/KoreaderProgressUpdateDto.cs b/API/DTOs/Koreader/KoreaderProgressUpdateDto.cs index 6472cda10..52a1d6cbd 100644 --- a/API/DTOs/Koreader/KoreaderProgressUpdateDto.cs +++ b/API/DTOs/Koreader/KoreaderProgressUpdateDto.cs @@ -4,6 +4,12 @@ namespace API.DTOs.Koreader; public class KoreaderProgressUpdateDto { + /// + /// This is the Koreader hash of the book. It is used to identify the book. + /// public string Document { get; set; } + /// + /// UTC Timestamp to return to KOReader + /// public DateTime Timestamp { get; set; } } diff --git a/API/Data/Repositories/MangaFileRepository.cs b/API/Data/Repositories/MangaFileRepository.cs index 5c6aae0c8..32a8bfc34 100644 --- a/API/Data/Repositories/MangaFileRepository.cs +++ b/API/Data/Repositories/MangaFileRepository.cs @@ -40,6 +40,6 @@ public class MangaFileRepository : IMangaFileRepository return await _context.MangaFile .FirstOrDefaultAsync(f => f.KoreaderHash != null && - EF.Functions.Like(f.KoreaderHash, hash)); + f.KoreaderHash.Equals(hash.ToUpper())); } } diff --git a/API/Helpers/Builders/KoreaderBookDtoBuilder.cs b/API/Helpers/Builders/KoreaderBookDtoBuilder.cs index fd701b5e2..5a5834adb 100644 --- a/API/Helpers/Builders/KoreaderBookDtoBuilder.cs +++ b/API/Helpers/Builders/KoreaderBookDtoBuilder.cs @@ -38,8 +38,7 @@ public class KoreaderBookDtoBuilder : IEntityBuilder public KoreaderBookDtoBuilder WithDeviceId(string installId, int userId) { - using var sha256 = SHA256.Create(); - var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(installId + userId)); + var hash = SHA256.HashData(Encoding.UTF8.GetBytes(installId + userId)); _dto.Device_id = hash.ToString(); return this; } diff --git a/API/Services/KoreaderService.cs b/API/Services/KoreaderService.cs index a460cff14..69b3948ed 100644 --- a/API/Services/KoreaderService.cs +++ b/API/Services/KoreaderService.cs @@ -74,7 +74,6 @@ public class KoreaderService : IKoreaderService public async Task GetProgress(string bookHash, int userId) { var settingsDto = await _unitOfWork.SettingsRepository.GetSettingsDtoAsync(); - var builder = new KoreaderBookDtoBuilder(bookHash); var file = await _unitOfWork.MangaFileRepository.GetByKoreaderHash(bookHash); @@ -83,7 +82,7 @@ public class KoreaderService : IKoreaderService var progressDto = await _unitOfWork.AppUserProgressRepository.GetUserProgressDtoAsync(file.ChapterId, userId); var koreaderProgress = KoreaderHelper.GetKoreaderPosition(progressDto); - return builder.WithProgress(koreaderProgress) + return new KoreaderBookDtoBuilder(bookHash).WithProgress(koreaderProgress) .WithPercentage(progressDto?.PageNum, file.Pages) .WithDeviceId(settingsDto.InstallId, userId) .Build();