Update types of legacy tracker model to match to domain one (#245)

* `score` to Double

* `tracker_id` to Long

* `last_chapter_read` to Double

* `total_chapters` to Long

* `status` to Long

Additional changes for Komikku/TachiyomiSY version

* `score` to Double

* `tracker_id` to Long

* `last_chapter_read` to Double

* `total_chapters` to Long

* `status` to Long
This commit is contained in:
Cuong M. Tran 2024-02-08 01:43:01 +07:00
parent 581868905e
commit 946e6d0b59
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
12 changed files with 61 additions and 63 deletions

View file

@ -34,7 +34,7 @@ class TrackChapter(
service == null ||
!service.isLoggedIn ||
chapterNumber <= track.lastChapterRead /* SY --> */ ||
(service is MdList && track.status == FollowStatus.UNFOLLOWED.int.toLong())/* SY <-- */
(service is MdList && track.status == FollowStatus.UNFOLLOWED.long.toLong())/* SY <-- */
) {
return@mapNotNull null
}

View file

@ -102,7 +102,7 @@ private fun BrowseSourceComfortableGridItem(
.let {
remember {
it.getStringArray(R.array.md_follows_options)
.getOrNull(followStatus)
.getOrNull(followStatus.toInt())
}
}
?: return@let

View file

@ -102,7 +102,7 @@ private fun BrowseSourceCompactGridItem(
.let {
remember {
it.getStringArray(R.array.md_follows_options)
.getOrNull(followStatus)
.getOrNull(followStatus.toInt())
}
}
?: return@let

View file

@ -93,7 +93,7 @@ private fun BrowseSourceListItem(
.let {
remember {
it.getStringArray(R.array.md_follows_options)
.getOrNull(followStatus)
.getOrNull(followStatus.toInt())
}
}
?: return@let

View file

@ -27,7 +27,6 @@ import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.data.track.TrackStatus
import eu.kanade.tachiyomi.data.track.TrackerManager
import eu.kanade.tachiyomi.source.UnmeteredSource
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.model.UpdateStrategy
import eu.kanade.tachiyomi.source.online.all.MergedSource
@ -236,14 +235,14 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
} else {
when (group) {
LibraryGroup.BY_TRACK_STATUS -> {
val trackingExtra = groupExtra?.toIntOrNull() ?: -1
val trackingExtra = groupExtra?.toLongOrNull() ?: -1L
val tracks = getTracks.await().groupBy { it.mangaId }
libraryManga.filter { (manga) ->
val status = tracks[manga.id]?.firstNotNullOfOrNull { track ->
TrackStatus.parseTrackerStatus(trackerManager, track.trackerId, track.status)
} ?: TrackStatus.OTHER
status.int == trackingExtra
status.long == trackingExtra
}
}
LibraryGroup.BY_SOURCE -> {
@ -553,12 +552,12 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
var count = 0
val mangaDex = MdUtil.getEnabledMangaDex(preferences, sourceManager = sourceManager)
?: return@coroutineScope
val syncFollowStatusInts = preferences.mangadexSyncToLibraryIndexes().get().map { it.toInt() }
val syncFollowStatusLongs = preferences.mangadexSyncToLibraryIndexes().get().map { it.toLong() }
val size: Int
mangaDex.fetchAllFollows()
.filter { (_, metadata) ->
syncFollowStatusInts.contains(metadata.followStatus)
syncFollowStatusLongs.contains(metadata.followStatus)
}
.also { size = it.size }
.forEach { (networkManga, metadata) ->
@ -615,9 +614,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
var tracker = dbTracks.firstOrNull { it.trackerId == TrackerManager.MDLIST }
?: mdList.createInitialTracker(manga).toDomainTrack(idRequired = false)
if (tracker?.status == FollowStatus.UNFOLLOWED.int.toLong()) {
if (tracker?.status == FollowStatus.UNFOLLOWED.long) {
tracker = tracker.copy(
status = FollowStatus.READING.int.toLong(),
status = FollowStatus.READING.long,
)
val updatedTrack = mdList.update(tracker.toDbTrack())
insertTrack.await(updatedTrack.toDomainTrack(false)!!)

View file

@ -12,22 +12,21 @@ import exh.md.utils.FollowStatus
import tachiyomi.i18n.MR
import tachiyomi.i18n.sy.SYMR
enum class TrackStatus(val int: Int, val res: StringResource) {
READING(1, MR.strings.reading),
REPEATING(2, MR.strings.repeating),
PLAN_TO_READ(3, MR.strings.plan_to_read),
PAUSED(4, MR.strings.on_hold),
COMPLETED(5, MR.strings.completed),
DROPPED(6, MR.strings.dropped),
OTHER(7, SYMR.strings.not_tracked),
enum class TrackStatus(val long: Long, val res: StringResource) {
READING(1L, MR.strings.reading),
REPEATING(2L, MR.strings.repeating),
PLAN_TO_READ(3L, MR.strings.plan_to_read),
PAUSED(4L, MR.strings.on_hold),
COMPLETED(5L, MR.strings.completed),
DROPPED(6L, MR.strings.dropped),
OTHER(7L, SYMR.strings.not_tracked),
;
companion object {
fun parseTrackerStatus(trackerManager: TrackerManager, tracker: Long, statusLong: Long): TrackStatus? {
val status = statusLong.toInt()
fun parseTrackerStatus(trackerManager: TrackerManager, tracker: Long, status: Long): TrackStatus? {
return when (tracker) {
trackerManager.mdList.id -> {
when (FollowStatus.fromInt(status)) {
when (FollowStatus.fromLong(status)) {
FollowStatus.UNFOLLOWED -> null
FollowStatus.READING -> READING
FollowStatus.COMPLETED -> COMPLETED

View file

@ -40,18 +40,18 @@ class MdList(id: Long) : BaseTracker(id, "MDList") {
return Color.rgb(43, 48, 53)
}
override fun getStatusList(): List<Int> {
return FollowStatus.entries.map { it.int }
override fun getStatusList(): List<Long> {
return FollowStatus.entries.map { it.long }
}
override fun getStatus(status: Int): StringResource? = when (status) {
0 -> SYMR.strings.md_follows_unfollowed
1 -> MR.strings.reading
2 -> MR.strings.completed
3 -> MR.strings.on_hold
4 -> MR.strings.plan_to_read
5 -> MR.strings.dropped
6 -> MR.strings.repeating
override fun getStatus(status: Long): StringResource? = when (status) {
0L -> SYMR.strings.md_follows_unfollowed
1L -> MR.strings.reading
2L -> MR.strings.completed
3L -> MR.strings.on_hold
4L -> MR.strings.plan_to_read
5L -> MR.strings.dropped
6L -> MR.strings.repeating
else -> null
}
@ -64,13 +64,13 @@ class MdList(id: Long) : BaseTracker(id, "MDList") {
val mdex = mdex ?: throw MangaDexNotFoundException()
val remoteTrack = mdex.fetchTrackingInfo(track.tracking_url)
val followStatus = FollowStatus.fromInt(track.status)
val followStatus = FollowStatus.fromLong(track.status)
// this updates the follow status in the metadata
// allow follow status to update
if (remoteTrack.status != followStatus.int) {
if (remoteTrack.status != followStatus.long) {
if (mdex.updateFollowStatus(MdUtil.getMangaId(track.tracking_url), followStatus)) {
remoteTrack.status = followStatus.int
remoteTrack.status = followStatus.long
} else {
track.status = remoteTrack.status
}
@ -103,19 +103,19 @@ class MdList(id: Long) : BaseTracker(id, "MDList") {
}
}
override fun getCompletionStatus(): Int = FollowStatus.COMPLETED.int
override fun getCompletionStatus(): Long = FollowStatus.COMPLETED.long
override fun getReadingStatus(): Int = FollowStatus.READING.int
override fun getReadingStatus(): Long = FollowStatus.READING.long
override fun getRereadingStatus(): Int = FollowStatus.RE_READING.int
override fun getRereadingStatus(): Long = FollowStatus.RE_READING.long
override suspend fun bind(track: Track, hasReadChapters: Boolean): Track = update(
refresh(track).also {
if (it.status == FollowStatus.UNFOLLOWED.int) {
if (it.status == FollowStatus.UNFOLLOWED.long) {
it.status = if (hasReadChapters) {
FollowStatus.READING.int
FollowStatus.READING.long
} else {
FollowStatus.PLAN_TO_READ.int
FollowStatus.PLAN_TO_READ.long
}
}
},
@ -136,7 +136,7 @@ class MdList(id: Long) : BaseTracker(id, "MDList") {
fun createInitialTracker(dbManga: Manga, mdManga: Manga = dbManga): Track {
return Track.create(id).apply {
manga_id = dbManga.id
status = FollowStatus.UNFOLLOWED.int
status = FollowStatus.UNFOLLOWED.long
tracking_url = MdUtil.baseUrl + mdManga.url
title = mdManga.title
}

View file

@ -877,7 +877,7 @@ class LibraryScreenModel(
categoryName
}
LibraryGroup.BY_TRACK_STATUS -> TrackStatus.entries
.find { it.int.toLong() == category?.id }
.find { it.long.toLong() == category?.id }
.let { it ?: TrackStatus.OTHER }
.let { context.stringResource(it.res) }
LibraryGroup.UNGROUPED -> context.stringResource(SYMR.strings.ungrouped)
@ -1020,7 +1020,7 @@ class LibraryScreenModel(
return tracks.fastAny { track ->
val trackService = trackerManager.get(track.trackerId)
if (trackService != null) {
val status = trackService.getStatus(track.status.toInt())?.let {
val status = trackService.getStatus(track.status)?.let {
context.stringResource(it)
}
val name = trackerManager.get(track.trackerId)?.name
@ -1183,16 +1183,16 @@ class LibraryScreenModel(
TrackStatus.parseTrackerStatus(trackerManager, track.trackerId, track.status)
} ?: TrackStatus.OTHER
status.int
status.long
}.mapKeys { (id) ->
Category(
id = id.toLong(),
name = TrackStatus.entries
.find { it.int == id }
.find { it.long == id }
.let { it ?: TrackStatus.OTHER }
.let { context.stringResource(it.res) },
order = TrackStatus.entries.indexOfFirst {
it.int == id
it.long == id
}.takeUnless { it == -1 }?.toLong() ?: TrackStatus.OTHER.ordinal.toLong(),
flags = 0,
)

View file

@ -1674,7 +1674,7 @@ class MangaScreenModel(
val trackingCount: Int
get() = trackItems.count {
it.track != null && ((it.tracker is MdList && it.track.status != FollowStatus.UNFOLLOWED.int.toLong()) || it.tracker !is MdList)
it.track != null && ((it.tracker is MdList && it.track.status != FollowStatus.UNFOLLOWED.long.toLong()) || it.tracker !is MdList)
}
/**

View file

@ -57,7 +57,7 @@ class FollowsHandler(
it,
lang,
) to MangaDexSearchMetadata().apply {
followStatus = FollowStatus.fromDex(statuses[it.id]).int
followStatus = FollowStatus.fromDex(statuses[it.id]).long
}
}.sortedWith(comparator)
}
@ -116,7 +116,7 @@ class FollowsHandler(
return withIOContext {
val mangaId = MdUtil.getMangaId(track.tracking_url)
val result = runCatching {
if (track.score == 0f) {
if (track.score == 0.0) {
service.deleteMangaRating(mangaId)
} else {
service.updateMangaRating(mangaId, track.score.toInt())
@ -155,9 +155,9 @@ class FollowsHandler(
val (followStatus, rating) = followStatusDef.await() to ratingDef.await()
Track.create(TrackerManager.MDLIST).apply {
title = ""
status = followStatus.int
status = followStatus.long
tracking_url = url
score = rating?.rating?.toFloat() ?: 0F
score = rating?.rating?.toDouble() ?: 0.0
}
}
}

View file

@ -2,14 +2,14 @@ package exh.md.utils
import java.util.Locale
enum class FollowStatus(val int: Int) {
UNFOLLOWED(0),
READING(1),
COMPLETED(2),
ON_HOLD(3),
PLAN_TO_READ(4),
DROPPED(5),
RE_READING(6),
enum class FollowStatus(val long: Long) {
UNFOLLOWED(0L),
READING(1L),
COMPLETED(2L),
ON_HOLD(3L),
PLAN_TO_READ(4L),
DROPPED(5L),
RE_READING(6L),
;
fun toDex(): String = this.name.lowercase(Locale.US)
@ -17,7 +17,7 @@ enum class FollowStatus(val int: Int) {
companion object {
fun fromDex(
value: String?,
): FollowStatus = values().firstOrNull { it.name.lowercase(Locale.US) == value } ?: UNFOLLOWED
fun fromInt(value: Int): FollowStatus = values().firstOrNull { it.int == value } ?: UNFOLLOWED
): FollowStatus = entries.firstOrNull { it.name.lowercase(Locale.US) == value } ?: UNFOLLOWED
fun fromLong(value: Long): FollowStatus = entries.firstOrNull { it.long == value } ?: UNFOLLOWED
}
}

View file

@ -41,7 +41,7 @@ class MangaDexSearchMetadata : RaisedSearchMetadata() {
// var missing_chapters: String? = null
var followStatus: Int? = null
var followStatus: Long? = null
var relation: MangaDexRelation? = null
// var maxChapterNumber: Int? = null