mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-07-09 03:04:19 -04:00
API for Tachiyomi Progress Sync (#996)
* Added a stub for an api * Added code to Parser to get MaximumNumberFromRange. Added new API for Tachiyomi Progress tracking "mark-chapter-until-as-read"
This commit is contained in:
parent
81ee26f126
commit
480cd94ab5
@ -133,6 +133,19 @@ namespace API.Tests.Parser
|
|||||||
Assert.Equal(expected, MinimumNumberFromRange(input));
|
Assert.Equal(expected, MinimumNumberFromRange(input));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("12-14", 14)]
|
||||||
|
[InlineData("24", 24)]
|
||||||
|
[InlineData("18-04", 18)]
|
||||||
|
[InlineData("18-04.5", 18)]
|
||||||
|
[InlineData("40", 40)]
|
||||||
|
[InlineData("40a-040b", 0)]
|
||||||
|
[InlineData("40.1_a", 0)]
|
||||||
|
public void MaximumNumberFromRangeTest(string input, float expected)
|
||||||
|
{
|
||||||
|
Assert.Equal(expected, MaximumNumberFromRange(input));
|
||||||
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("Darker Than Black", "darkerthanblack")]
|
[InlineData("Darker Than Black", "darkerthanblack")]
|
||||||
[InlineData("Darker Than Black - Something", "darkerthanblacksomething")]
|
[InlineData("Darker Than Black - Something", "darkerthanblacksomething")]
|
||||||
|
@ -365,6 +365,7 @@ namespace API.Controllers
|
|||||||
public async Task<ActionResult<ChapterDto>> GetContinuePoint(int seriesId)
|
public async Task<ActionResult<ChapterDto>> GetContinuePoint(int seriesId)
|
||||||
{
|
{
|
||||||
var userId = await _unitOfWork.UserRepository.GetUserIdByUsernameAsync(User.GetUsername());
|
var userId = await _unitOfWork.UserRepository.GetUserIdByUsernameAsync(User.GetUsername());
|
||||||
|
|
||||||
return Ok(await _readerService.GetContinuePoint(seriesId, userId));
|
return Ok(await _readerService.GetContinuePoint(seriesId, userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,6 +381,60 @@ namespace API.Controllers
|
|||||||
return Ok(await _unitOfWork.AppUserProgressRepository.HasAnyProgressOnSeriesAsync(seriesId, userId));
|
return Ok(await _unitOfWork.AppUserProgressRepository.HasAnyProgressOnSeriesAsync(seriesId, userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Marks every chapter that is sorted below the passed number as Read. This will not mark any specials as read.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>This is built for Tachiyomi and is not expected to be called by any other place</remarks>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("mark-chapter-until-as-read")]
|
||||||
|
public async Task<ActionResult<bool>> MarkChaptersUntilAsRead(int seriesId, float chapterNumber)
|
||||||
|
{
|
||||||
|
var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername(), AppUserIncludes.Progress);
|
||||||
|
user.Progresses ??= new List<AppUserProgress>();
|
||||||
|
|
||||||
|
var volumes = await _unitOfWork.VolumeRepository.GetVolumesForSeriesAsync(new List<int>() { seriesId }, true);
|
||||||
|
foreach (var volume in volumes.OrderBy(v => v.Number))
|
||||||
|
{
|
||||||
|
var chapters = volume.Chapters.OrderBy(c => float.Parse(c.Number)).Where(c => !c.IsSpecial && Parser.Parser.MaximumNumberFromRange(c.Range) <= chapterNumber);
|
||||||
|
_readerService.MarkChaptersAsRead(user, volume.SeriesId, chapters);
|
||||||
|
}
|
||||||
|
|
||||||
|
_unitOfWork.UserRepository.Update(user);
|
||||||
|
|
||||||
|
if (!_unitOfWork.HasChanges()) return Ok(true);
|
||||||
|
if (await _unitOfWork.CommitAsync()) return Ok(true);
|
||||||
|
|
||||||
|
await _unitOfWork.RollbackAsync();
|
||||||
|
return Ok(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Marks every chapter that is sorted below the passed number as Read. This will not mark any specials as read.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>This is built for Tachiyomi and is not expected to be called by any other place</remarks>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("mark-chapter-until-as-read")]
|
||||||
|
public async Task<ActionResult<bool>> MarkChaptersUntilAsRead(int seriesId, float chapterNumber)
|
||||||
|
{
|
||||||
|
var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername(), AppUserIncludes.Progress);
|
||||||
|
user.Progresses ??= new List<AppUserProgress>();
|
||||||
|
|
||||||
|
var volumes = await _unitOfWork.VolumeRepository.GetVolumesForSeriesAsync(new List<int>() { seriesId }, true);
|
||||||
|
foreach (var volume in volumes.OrderBy(v => v.Number))
|
||||||
|
{
|
||||||
|
var chapters = volume.Chapters.OrderBy(c => float.Parse(c.Number)).Where(c => !c.IsSpecial && Parser.Parser.MaximumNumberFromRange(c.Range) <= chapterNumber);
|
||||||
|
_readerService.MarkChaptersAsRead(user, volume.SeriesId, chapters);
|
||||||
|
}
|
||||||
|
|
||||||
|
_unitOfWork.UserRepository.Update(user);
|
||||||
|
|
||||||
|
if (!_unitOfWork.HasChanges()) return Ok(true);
|
||||||
|
if (await _unitOfWork.CommitAsync()) return Ok(true);
|
||||||
|
|
||||||
|
await _unitOfWork.RollbackAsync();
|
||||||
|
return Ok(false);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a list of bookmarked pages for a given Chapter
|
/// Returns a list of bookmarked pages for a given Chapter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -926,6 +926,25 @@ namespace API.Parser
|
|||||||
return XmlRegex.IsMatch(Path.GetExtension(filePath));
|
return XmlRegex.IsMatch(Path.GetExtension(filePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static float MaximumNumberFromRange(string range)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Regex.IsMatch(range, @"^[\d-.]+$"))
|
||||||
|
{
|
||||||
|
return (float) 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tokens = range.Replace("_", string.Empty).Split("-");
|
||||||
|
return tokens.Max(float.Parse);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return (float) 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static float MinimumNumberFromRange(string range)
|
public static float MinimumNumberFromRange(string range)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
Loading…
x
Reference in New Issue
Block a user