From aebf11a74954fd82f81b8bce9f8ac4fc89fa6127 Mon Sep 17 00:00:00 2001 From: MajorTanya <39014446+MajorTanya@users.noreply.github.com> Date: Tue, 8 Sep 2026 07:26:21 +0200 Subject: [PATCH] Make tracker utils package-internal (#3908) It gets really annoying to use any of them when they have name collisions. Especially extensions on Track or basic public functions. Also make some same-file extension function in the MangaUpdates package method on the class they extended. I would have done the same for the DTOs themselves but any that are used on method signatures have to be public and then all their members also have to be public. We'd end up with a confusing mess of some internal and some public DTOs, even at the top level (since generics can be internal to the `dto` package (e.g. with parseAs<...>) but return annotations cannot be). --- .../data/track/anilist/AnilistUtils.kt | 4 +-- .../data/track/bangumi/BangumiUtils.kt | 2 +- .../tachiyomi/data/track/hikka/HikkaUtils.kt | 6 ++-- .../tachiyomi/data/track/kitsu/KitsuUtils.kt | 4 +-- .../data/track/mangabaka/MangaBakaUtils.kt | 2 +- .../data/track/mangaupdates/MangaUpdates.kt | 2 -- .../data/track/mangaupdates/dto/MUListItem.kt | 12 +++---- .../data/track/mangaupdates/dto/MURating.kt | 10 +++--- .../data/track/mangaupdates/dto/MURecord.kt | 32 +++++++++---------- .../track/myanimelist/MyAnimeListUtils.kt | 4 +-- .../data/track/shikimori/ShikimoriUtils.kt | 4 +-- 11 files changed, 40 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt index 1a6f02dea..3fc94f144 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt @@ -4,7 +4,7 @@ import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.tachiyomi.data.database.models.Track import tachiyomi.domain.track.model.Track as DomainTrack -fun Track.toApiStatus() = when (status) { +internal fun Track.toApiStatus() = when (status) { Anilist.READING -> "CURRENT" Anilist.COMPLETED -> "COMPLETED" Anilist.ON_HOLD -> "PAUSED" @@ -14,7 +14,7 @@ fun Track.toApiStatus() = when (status) { else -> throw NotImplementedError("Unknown status: $status") } -fun DomainTrack.toApiScore(preferences: TrackPreferences): String = when (preferences.anilistScoreType.get()) { +internal fun DomainTrack.toApiScore(preferences: TrackPreferences): String = when (preferences.anilistScoreType.get()) { // 10 point "POINT_10" -> (score.toInt() / 10).toString() // 100 point diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiUtils.kt index d8b56799f..0405bbf95 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiUtils.kt @@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.bangumi import eu.kanade.tachiyomi.data.database.models.Track -fun Track.toApiStatus() = when (status) { +internal fun Track.toApiStatus() = when (status) { Bangumi.PLAN_TO_READ -> 1 Bangumi.COMPLETED -> 2 Bangumi.READING -> 3 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/hikka/HikkaUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/hikka/HikkaUtils.kt index a31b692c9..e917b6aa8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/hikka/HikkaUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/hikka/HikkaUtils.kt @@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.data.track.hikka import eu.kanade.tachiyomi.data.database.models.Track import java.util.UUID -fun Track.toApiStatus() = when (status) { +internal fun Track.toApiStatus() = when (status) { Hikka.READING -> "reading" Hikka.COMPLETED -> "completed" Hikka.ON_HOLD -> "on_hold" @@ -13,7 +13,7 @@ fun Track.toApiStatus() = when (status) { else -> throw NotImplementedError("Hikka: Unknown status: $status") } -fun toTrackStatus(status: String) = when (status) { +internal fun toTrackStatus(status: String) = when (status) { "reading" -> Hikka.READING "completed" -> Hikka.COMPLETED "on_hold" -> Hikka.ON_HOLD @@ -22,7 +22,7 @@ fun toTrackStatus(status: String) = when (status) { else -> throw NotImplementedError("Hikka: Unknown status: $status") } -fun stringToNumber(input: String): Long { +internal fun stringToNumber(input: String): Long { val uuid = UUID.nameUUIDFromBytes(input.toByteArray()) return uuid.mostSignificantBits and Long.MAX_VALUE } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuUtils.kt index 277624424..401a193e6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/kitsu/KitsuUtils.kt @@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.kitsu import eu.kanade.tachiyomi.data.database.models.Track -fun Track.toKitsuApiStatus() = when (status) { +internal fun Track.toKitsuApiStatus() = when (status) { Kitsu.READING -> "CURRENT" Kitsu.COMPLETED -> "COMPLETED" Kitsu.ON_HOLD -> "ON_HOLD" @@ -11,7 +11,7 @@ fun Track.toKitsuApiStatus() = when (status) { else -> throw Exception("Unknown status: $status") } -fun String.toKitsuLocalStatus() = when (this) { +internal fun String.toKitsuLocalStatus() = when (this) { "CURRENT" -> Kitsu.READING "COMPLETED" -> Kitsu.COMPLETED "ON_HOLD" -> Kitsu.ON_HOLD diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangabaka/MangaBakaUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangabaka/MangaBakaUtils.kt index 74b7df018..db41ac9f9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangabaka/MangaBakaUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangabaka/MangaBakaUtils.kt @@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.mangabaka import eu.kanade.tachiyomi.data.database.models.Track -fun Track.toApiStatus() = when (status) { +internal fun Track.toApiStatus() = when (status) { MangaBaka.CONSIDERING -> "considering" MangaBaka.COMPLETED -> "completed" MangaBaka.DROPPED -> "dropped" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt index 68e7643e2..3e4f23814 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/MangaUpdates.kt @@ -7,8 +7,6 @@ import eu.kanade.tachiyomi.data.track.BaseTracker import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUListItem import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MURating -import eu.kanade.tachiyomi.data.track.mangaupdates.dto.copyTo -import eu.kanade.tachiyomi.data.track.mangaupdates.dto.toTrackSearch import eu.kanade.tachiyomi.data.track.model.TrackSearch import tachiyomi.i18n.MR import tachiyomi.domain.track.model.Track as DomainTrack diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUListItem.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUListItem.kt index b406fd56e..f9fd12090 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUListItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MUListItem.kt @@ -12,11 +12,11 @@ data class MUListItem( val listId: Long? = null, val status: MUStatus? = null, val priority: Int? = null, -) - -fun MUListItem.copyTo(track: Track): Track { - return track.apply { - this.status = listId ?: READING_LIST - this.last_chapter_read = this@copyTo.status?.chapter?.toDouble() ?: 0.0 +) { + fun copyTo(track: Track): Track { + return track.apply { + this.status = listId ?: READING_LIST + this.last_chapter_read = this@MUListItem.status?.chapter?.toDouble() ?: 0.0 + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURating.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURating.kt index eeca1bbb7..ecde6a6be 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURating.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURating.kt @@ -6,10 +6,10 @@ import kotlinx.serialization.Serializable @Serializable data class MURating( val rating: Double? = null, -) - -fun MURating.copyTo(track: Track): Track { - return track.apply { - this.score = rating ?: 0.0 +) { + fun copyTo(track: Track): Track { + return track.apply { + this.score = rating ?: 0.0 + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURecord.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURecord.kt index a7d1e2363..8a4dbf2bb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURecord.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/mangaupdates/dto/MURecord.kt @@ -22,21 +22,21 @@ data class MURecord( @SerialName("latest_chapter") val latestChapter: Int? = null, val authors: List = emptyList(), -) - -fun MURecord.toTrackSearch(id: Long): TrackSearch { - return TrackSearch.create(id).apply { - remote_id = this@toTrackSearch.seriesId ?: 0L - title = this@toTrackSearch.title?.htmlDecode() ?: "" - total_chapters = 0 - cover_url = this@toTrackSearch.image?.url?.original ?: "" - summary = this@toTrackSearch.description?.htmlDecode() ?: "" - tracking_url = this@toTrackSearch.url ?: "" - publishing_status = "" - publishing_type = this@toTrackSearch.type.toString() - start_date = this@toTrackSearch.year.toString() - score = this@toTrackSearch.bayesianRating?.takeIf { it > 0 } ?: -1.0 - authors = this@toTrackSearch.authors.filter { it.type == "Author" }.map { it.name } - artists = this@toTrackSearch.authors.filter { it.type == "Artist" }.map { it.name } +) { + fun toTrackSearch(id: Long): TrackSearch { + return TrackSearch.create(id).apply { + remote_id = this@MURecord.seriesId ?: 0L + title = this@MURecord.title?.htmlDecode() ?: "" + total_chapters = 0 + cover_url = this@MURecord.image?.url?.original ?: "" + summary = this@MURecord.description?.htmlDecode() ?: "" + tracking_url = this@MURecord.url ?: "" + publishing_status = "" + publishing_type = this@MURecord.type.toString() + start_date = this@MURecord.year.toString() + score = this@MURecord.bayesianRating?.takeIf { it > 0 } ?: -1.0 + authors = this@MURecord.authors.filter { it.type == "Author" }.map { it.name } + artists = this@MURecord.authors.filter { it.type == "Artist" }.map { it.name } + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListUtils.kt index 593111a7d..88c053d48 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListUtils.kt @@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.myanimelist import eu.kanade.tachiyomi.data.database.models.Track -fun Track.toMyAnimeListStatus() = when (status) { +internal fun Track.toMyAnimeListStatus() = when (status) { MyAnimeList.READING -> "reading" MyAnimeList.COMPLETED -> "completed" MyAnimeList.ON_HOLD -> "on_hold" @@ -12,7 +12,7 @@ fun Track.toMyAnimeListStatus() = when (status) { else -> null } -fun getStatus(status: String?) = when (status) { +internal fun getStatus(status: String?) = when (status) { "reading" -> MyAnimeList.READING "completed" -> MyAnimeList.COMPLETED "on_hold" -> MyAnimeList.ON_HOLD diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriUtils.kt index fe59f6e80..234af7587 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriUtils.kt @@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.shikimori import eu.kanade.tachiyomi.data.database.models.Track -fun Track.toShikimoriStatus() = when (status) { +internal fun Track.toShikimoriStatus() = when (status) { Shikimori.READING -> "watching" Shikimori.COMPLETED -> "completed" Shikimori.ON_HOLD -> "on_hold" @@ -12,7 +12,7 @@ fun Track.toShikimoriStatus() = when (status) { else -> throw NotImplementedError("Unknown status: $status") } -fun toTrackStatus(status: String) = when (status) { +internal fun toTrackStatus(status: String) = when (status) { "watching" -> Shikimori.READING "completed" -> Shikimori.COMPLETED "on_hold" -> Shikimori.ON_HOLD