From 946e6d0b592bcc0f8f176d448fa40754922b16fb Mon Sep 17 00:00:00 2001 From: "Cuong M. Tran" Date: Thu, 8 Feb 2024 01:43:01 +0700 Subject: [PATCH] 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 --- .../domain/track/interactor/TrackChapter.kt | 2 +- .../components/BrowseSourceComfortableGrid.kt | 2 +- .../components/BrowseSourceCompactGrid.kt | 2 +- .../browse/components/BrowseSourceList.kt | 2 +- .../data/library/LibraryUpdateJob.kt | 13 +++--- .../tachiyomi/data/track/TrackStatus.kt | 21 +++++----- .../tachiyomi/data/track/mdlist/MdList.kt | 40 +++++++++---------- .../ui/library/LibraryScreenModel.kt | 10 ++--- .../tachiyomi/ui/manga/MangaScreenModel.kt | 2 +- .../java/exh/md/handlers/FollowsHandler.kt | 8 ++-- .../main/java/exh/md/utils/FollowStatus.kt | 20 +++++----- .../metadata/MangaDexSearchMetadata.kt | 2 +- 12 files changed, 61 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt b/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt index f6ce81246..d634b31e7 100644 --- a/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt +++ b/app/src/main/java/eu/kanade/domain/track/interactor/TrackChapter.kt @@ -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 } diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt index 4eba62822..b5e896480 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt @@ -102,7 +102,7 @@ private fun BrowseSourceComfortableGridItem( .let { remember { it.getStringArray(R.array.md_follows_options) - .getOrNull(followStatus) + .getOrNull(followStatus.toInt()) } } ?: return@let diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt index 99d271025..c141ce67b 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt @@ -102,7 +102,7 @@ private fun BrowseSourceCompactGridItem( .let { remember { it.getStringArray(R.array.md_follows_options) - .getOrNull(followStatus) + .getOrNull(followStatus.toInt()) } } ?: return@let diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt index 234576705..53d1f5816 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt @@ -93,7 +93,7 @@ private fun BrowseSourceListItem( .let { remember { it.getStringArray(R.array.md_follows_options) - .getOrNull(followStatus) + .getOrNull(followStatus.toInt()) } } ?: return@let diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt index af70fcf26..3af129d48 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt @@ -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)!!) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackStatus.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackStatus.kt index aaacedf01..9354131a2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackStatus.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/TrackStatus.kt @@ -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 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt index 59584e817..f5fde746b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mdlist/MdList.kt @@ -40,18 +40,18 @@ class MdList(id: Long) : BaseTracker(id, "MDList") { return Color.rgb(43, 48, 53) } - override fun getStatusList(): List { - return FollowStatus.entries.map { it.int } + override fun getStatusList(): List { + 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 } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 73106beb3..6e6f66369 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -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, ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index 592647e0d..1c61d4379 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -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) } /** diff --git a/app/src/main/java/exh/md/handlers/FollowsHandler.kt b/app/src/main/java/exh/md/handlers/FollowsHandler.kt index 3e2cdbc43..6540711b3 100644 --- a/app/src/main/java/exh/md/handlers/FollowsHandler.kt +++ b/app/src/main/java/exh/md/handlers/FollowsHandler.kt @@ -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 } } } diff --git a/app/src/main/java/exh/md/utils/FollowStatus.kt b/app/src/main/java/exh/md/utils/FollowStatus.kt index a5551d855..ff3e4aa76 100644 --- a/app/src/main/java/exh/md/utils/FollowStatus.kt +++ b/app/src/main/java/exh/md/utils/FollowStatus.kt @@ -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 } } diff --git a/source-api/src/commonMain/kotlin/exh/metadata/metadata/MangaDexSearchMetadata.kt b/source-api/src/commonMain/kotlin/exh/metadata/metadata/MangaDexSearchMetadata.kt index 88c9c9a68..0782b45e6 100644 --- a/source-api/src/commonMain/kotlin/exh/metadata/metadata/MangaDexSearchMetadata.kt +++ b/source-api/src/commonMain/kotlin/exh/metadata/metadata/MangaDexSearchMetadata.kt @@ -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