mirror of
https://git.mihon.tech/mihonapp/mihon
synced 2024-12-18 11:12:00 +03:00
use chapter_number instead of ordinal index for syncChaptersWithTrackServiceTwoWay (#5846)
use v2 api for Komga tracker for series
This commit is contained in:
parent
b45c322729
commit
6151318ac1
3 changed files with 38 additions and 18 deletions
|
@ -38,9 +38,11 @@ class KomgaApi(private val client: OkHttpClient) {
|
||||||
}
|
}
|
||||||
|
|
||||||
val progress = client
|
val progress = client
|
||||||
.newCall(GET("$url/read-progress/tachiyomi"))
|
.newCall(GET("${url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi"))
|
||||||
.await()
|
.await().let {
|
||||||
.parseAs<ReadProgressDto>()
|
if (url.contains("/api/v1/series/")) it.parseAs<ReadProgressV2Dto>()
|
||||||
|
else it.parseAs<ReadProgressDto>().toV2()
|
||||||
|
}
|
||||||
|
|
||||||
track.apply {
|
track.apply {
|
||||||
cover_url = "$url/thumbnail"
|
cover_url = "$url/thumbnail"
|
||||||
|
@ -51,7 +53,7 @@ class KomgaApi(private val client: OkHttpClient) {
|
||||||
progress.booksReadCount -> Komga.COMPLETED
|
progress.booksReadCount -> Komga.COMPLETED
|
||||||
else -> Komga.READING
|
else -> Komga.READING
|
||||||
}
|
}
|
||||||
last_chapter_read = progress.lastReadContinuousIndex.toFloat()
|
last_chapter_read = progress.lastReadContinuousNumberSort
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.w(e, "Could not get item: $url")
|
Timber.w(e, "Could not get item: $url")
|
||||||
|
@ -60,11 +62,14 @@ class KomgaApi(private val client: OkHttpClient) {
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun updateProgress(track: Track): Track {
|
suspend fun updateProgress(track: Track): Track {
|
||||||
val progress = ReadProgressUpdateDto(track.last_chapter_read.toInt())
|
val payload = if (track.tracking_url.contains("/api/v1/series/")) {
|
||||||
val payload = json.encodeToString(progress)
|
json.encodeToString(ReadProgressUpdateV2Dto(track.last_chapter_read))
|
||||||
|
} else {
|
||||||
|
json.encodeToString(ReadProgressUpdateDto(track.last_chapter_read.toInt()))
|
||||||
|
}
|
||||||
client.newCall(
|
client.newCall(
|
||||||
Request.Builder()
|
Request.Builder()
|
||||||
.url("${track.tracking_url}/read-progress/tachiyomi")
|
.url("${track.tracking_url.replace("/api/v1/series/", "/api/v2/series/")}/read-progress/tachiyomi")
|
||||||
.put(payload.toRequestBody("application/json".toMediaType()))
|
.put(payload.toRequestBody("application/json".toMediaType()))
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
|
|
|
@ -63,6 +63,11 @@ data class ReadProgressUpdateDto(
|
||||||
val lastBookRead: Int,
|
val lastBookRead: Int,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class ReadProgressUpdateV2Dto(
|
||||||
|
val lastBookNumberSortRead: Float,
|
||||||
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class ReadListDto(
|
data class ReadListDto(
|
||||||
val id: String,
|
val id: String,
|
||||||
|
@ -80,4 +85,21 @@ data class ReadProgressDto(
|
||||||
val booksUnreadCount: Int,
|
val booksUnreadCount: Int,
|
||||||
val booksInProgressCount: Int,
|
val booksInProgressCount: Int,
|
||||||
val lastReadContinuousIndex: Int,
|
val lastReadContinuousIndex: Int,
|
||||||
|
) {
|
||||||
|
fun toV2() = ReadProgressV2Dto(
|
||||||
|
booksCount,
|
||||||
|
booksReadCount,
|
||||||
|
booksUnreadCount,
|
||||||
|
booksInProgressCount,
|
||||||
|
lastReadContinuousIndex.toFloat()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class ReadProgressV2Dto(
|
||||||
|
val booksCount: Int,
|
||||||
|
val booksReadCount: Int,
|
||||||
|
val booksUnreadCount: Int,
|
||||||
|
val booksInProgressCount: Int,
|
||||||
|
val lastReadContinuousNumberSort: Float,
|
||||||
)
|
)
|
||||||
|
|
|
@ -18,22 +18,15 @@ import timber.log.Timber
|
||||||
fun syncChaptersWithTrackServiceTwoWay(db: DatabaseHelper, chapters: List<Chapter>, remoteTrack: Track, service: TrackService) {
|
fun syncChaptersWithTrackServiceTwoWay(db: DatabaseHelper, chapters: List<Chapter>, remoteTrack: Track, service: TrackService) {
|
||||||
val sortedChapters = chapters.sortedBy { it.chapter_number }
|
val sortedChapters = chapters.sortedBy { it.chapter_number }
|
||||||
sortedChapters
|
sortedChapters
|
||||||
.filterIndexed { index, chapter -> index < remoteTrack.last_chapter_read && !chapter.read }
|
.filter { chapter -> chapter.chapter_number <= remoteTrack.last_chapter_read && !chapter.read }
|
||||||
.forEach { it.read = true }
|
.forEach { it.read = true }
|
||||||
db.updateChaptersProgress(sortedChapters).executeAsBlocking()
|
db.updateChaptersProgress(sortedChapters).executeAsBlocking()
|
||||||
|
|
||||||
// this uses the ordinal index of chapters instead of the chapter_number
|
// only take into account continuous reading
|
||||||
// it was done that way because Track.last_chapter_read was an Int at the time, and Komga
|
val localLastRead = sortedChapters.takeWhile { it.read }.lastOrNull()?.chapter_number ?: 0F
|
||||||
// could have Float for the chapter number
|
|
||||||
// this will be addressed later on
|
|
||||||
val localLastRead = when {
|
|
||||||
sortedChapters.all { it.read } -> sortedChapters.size
|
|
||||||
sortedChapters.any { !it.read } -> sortedChapters.indexOfFirst { !it.read }
|
|
||||||
else -> 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// update remote
|
// update remote
|
||||||
remoteTrack.last_chapter_read = localLastRead.toFloat()
|
remoteTrack.last_chapter_read = localLastRead
|
||||||
|
|
||||||
launchIO {
|
launchIO {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue