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).
This commit is contained in:
MajorTanya
2026-09-08 07:26:21 +02:00
committed by GitHub
parent 3a64c8d65c
commit aebf11a749
11 changed files with 40 additions and 42 deletions
@@ -4,7 +4,7 @@ import eu.kanade.domain.track.service.TrackPreferences
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
import tachiyomi.domain.track.model.Track as DomainTrack import tachiyomi.domain.track.model.Track as DomainTrack
fun Track.toApiStatus() = when (status) { internal fun Track.toApiStatus() = when (status) {
Anilist.READING -> "CURRENT" Anilist.READING -> "CURRENT"
Anilist.COMPLETED -> "COMPLETED" Anilist.COMPLETED -> "COMPLETED"
Anilist.ON_HOLD -> "PAUSED" Anilist.ON_HOLD -> "PAUSED"
@@ -14,7 +14,7 @@ fun Track.toApiStatus() = when (status) {
else -> throw NotImplementedError("Unknown status: $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 // 10 point
"POINT_10" -> (score.toInt() / 10).toString() "POINT_10" -> (score.toInt() / 10).toString()
// 100 point // 100 point
@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.bangumi
import eu.kanade.tachiyomi.data.database.models.Track 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.PLAN_TO_READ -> 1
Bangumi.COMPLETED -> 2 Bangumi.COMPLETED -> 2
Bangumi.READING -> 3 Bangumi.READING -> 3
@@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.data.track.hikka
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
import java.util.UUID import java.util.UUID
fun Track.toApiStatus() = when (status) { internal fun Track.toApiStatus() = when (status) {
Hikka.READING -> "reading" Hikka.READING -> "reading"
Hikka.COMPLETED -> "completed" Hikka.COMPLETED -> "completed"
Hikka.ON_HOLD -> "on_hold" Hikka.ON_HOLD -> "on_hold"
@@ -13,7 +13,7 @@ fun Track.toApiStatus() = when (status) {
else -> throw NotImplementedError("Hikka: Unknown status: $status") else -> throw NotImplementedError("Hikka: Unknown status: $status")
} }
fun toTrackStatus(status: String) = when (status) { internal fun toTrackStatus(status: String) = when (status) {
"reading" -> Hikka.READING "reading" -> Hikka.READING
"completed" -> Hikka.COMPLETED "completed" -> Hikka.COMPLETED
"on_hold" -> Hikka.ON_HOLD "on_hold" -> Hikka.ON_HOLD
@@ -22,7 +22,7 @@ fun toTrackStatus(status: String) = when (status) {
else -> throw NotImplementedError("Hikka: Unknown status: $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()) val uuid = UUID.nameUUIDFromBytes(input.toByteArray())
return uuid.mostSignificantBits and Long.MAX_VALUE return uuid.mostSignificantBits and Long.MAX_VALUE
} }
@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.kitsu
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
fun Track.toKitsuApiStatus() = when (status) { internal fun Track.toKitsuApiStatus() = when (status) {
Kitsu.READING -> "CURRENT" Kitsu.READING -> "CURRENT"
Kitsu.COMPLETED -> "COMPLETED" Kitsu.COMPLETED -> "COMPLETED"
Kitsu.ON_HOLD -> "ON_HOLD" Kitsu.ON_HOLD -> "ON_HOLD"
@@ -11,7 +11,7 @@ fun Track.toKitsuApiStatus() = when (status) {
else -> throw Exception("Unknown status: $status") else -> throw Exception("Unknown status: $status")
} }
fun String.toKitsuLocalStatus() = when (this) { internal fun String.toKitsuLocalStatus() = when (this) {
"CURRENT" -> Kitsu.READING "CURRENT" -> Kitsu.READING
"COMPLETED" -> Kitsu.COMPLETED "COMPLETED" -> Kitsu.COMPLETED
"ON_HOLD" -> Kitsu.ON_HOLD "ON_HOLD" -> Kitsu.ON_HOLD
@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.mangabaka
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
fun Track.toApiStatus() = when (status) { internal fun Track.toApiStatus() = when (status) {
MangaBaka.CONSIDERING -> "considering" MangaBaka.CONSIDERING -> "considering"
MangaBaka.COMPLETED -> "completed" MangaBaka.COMPLETED -> "completed"
MangaBaka.DROPPED -> "dropped" MangaBaka.DROPPED -> "dropped"
@@ -7,8 +7,6 @@ import eu.kanade.tachiyomi.data.track.BaseTracker
import eu.kanade.tachiyomi.data.track.DeletableTracker import eu.kanade.tachiyomi.data.track.DeletableTracker
import eu.kanade.tachiyomi.data.track.mangaupdates.dto.MUListItem 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.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 eu.kanade.tachiyomi.data.track.model.TrackSearch
import tachiyomi.i18n.MR import tachiyomi.i18n.MR
import tachiyomi.domain.track.model.Track as DomainTrack import tachiyomi.domain.track.model.Track as DomainTrack
@@ -12,11 +12,11 @@ data class MUListItem(
val listId: Long? = null, val listId: Long? = null,
val status: MUStatus? = null, val status: MUStatus? = null,
val priority: Int? = null, val priority: Int? = null,
) ) {
fun copyTo(track: Track): Track {
fun MUListItem.copyTo(track: Track): Track {
return track.apply { return track.apply {
this.status = listId ?: READING_LIST this.status = listId ?: READING_LIST
this.last_chapter_read = this@copyTo.status?.chapter?.toDouble() ?: 0.0 this.last_chapter_read = this@MUListItem.status?.chapter?.toDouble() ?: 0.0
}
} }
} }
@@ -6,10 +6,10 @@ import kotlinx.serialization.Serializable
@Serializable @Serializable
data class MURating( data class MURating(
val rating: Double? = null, val rating: Double? = null,
) ) {
fun copyTo(track: Track): Track {
fun MURating.copyTo(track: Track): Track {
return track.apply { return track.apply {
this.score = rating ?: 0.0 this.score = rating ?: 0.0
} }
}
} }
@@ -22,21 +22,21 @@ data class MURecord(
@SerialName("latest_chapter") @SerialName("latest_chapter")
val latestChapter: Int? = null, val latestChapter: Int? = null,
val authors: List<MUAuthor> = emptyList(), val authors: List<MUAuthor> = emptyList(),
) ) {
fun toTrackSearch(id: Long): TrackSearch {
fun MURecord.toTrackSearch(id: Long): TrackSearch {
return TrackSearch.create(id).apply { return TrackSearch.create(id).apply {
remote_id = this@toTrackSearch.seriesId ?: 0L remote_id = this@MURecord.seriesId ?: 0L
title = this@toTrackSearch.title?.htmlDecode() ?: "" title = this@MURecord.title?.htmlDecode() ?: ""
total_chapters = 0 total_chapters = 0
cover_url = this@toTrackSearch.image?.url?.original ?: "" cover_url = this@MURecord.image?.url?.original ?: ""
summary = this@toTrackSearch.description?.htmlDecode() ?: "" summary = this@MURecord.description?.htmlDecode() ?: ""
tracking_url = this@toTrackSearch.url ?: "" tracking_url = this@MURecord.url ?: ""
publishing_status = "" publishing_status = ""
publishing_type = this@toTrackSearch.type.toString() publishing_type = this@MURecord.type.toString()
start_date = this@toTrackSearch.year.toString() start_date = this@MURecord.year.toString()
score = this@toTrackSearch.bayesianRating?.takeIf { it > 0 } ?: -1.0 score = this@MURecord.bayesianRating?.takeIf { it > 0 } ?: -1.0
authors = this@toTrackSearch.authors.filter { it.type == "Author" }.map { it.name } authors = this@MURecord.authors.filter { it.type == "Author" }.map { it.name }
artists = this@toTrackSearch.authors.filter { it.type == "Artist" }.map { it.name } artists = this@MURecord.authors.filter { it.type == "Artist" }.map { it.name }
}
} }
} }
@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.myanimelist
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
fun Track.toMyAnimeListStatus() = when (status) { internal fun Track.toMyAnimeListStatus() = when (status) {
MyAnimeList.READING -> "reading" MyAnimeList.READING -> "reading"
MyAnimeList.COMPLETED -> "completed" MyAnimeList.COMPLETED -> "completed"
MyAnimeList.ON_HOLD -> "on_hold" MyAnimeList.ON_HOLD -> "on_hold"
@@ -12,7 +12,7 @@ fun Track.toMyAnimeListStatus() = when (status) {
else -> null else -> null
} }
fun getStatus(status: String?) = when (status) { internal fun getStatus(status: String?) = when (status) {
"reading" -> MyAnimeList.READING "reading" -> MyAnimeList.READING
"completed" -> MyAnimeList.COMPLETED "completed" -> MyAnimeList.COMPLETED
"on_hold" -> MyAnimeList.ON_HOLD "on_hold" -> MyAnimeList.ON_HOLD
@@ -2,7 +2,7 @@ package eu.kanade.tachiyomi.data.track.shikimori
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
fun Track.toShikimoriStatus() = when (status) { internal fun Track.toShikimoriStatus() = when (status) {
Shikimori.READING -> "watching" Shikimori.READING -> "watching"
Shikimori.COMPLETED -> "completed" Shikimori.COMPLETED -> "completed"
Shikimori.ON_HOLD -> "on_hold" Shikimori.ON_HOLD -> "on_hold"
@@ -12,7 +12,7 @@ fun Track.toShikimoriStatus() = when (status) {
else -> throw NotImplementedError("Unknown status: $status") else -> throw NotImplementedError("Unknown status: $status")
} }
fun toTrackStatus(status: String) = when (status) { internal fun toTrackStatus(status: String) = when (status) {
"watching" -> Shikimori.READING "watching" -> Shikimori.READING
"completed" -> Shikimori.COMPLETED "completed" -> Shikimori.COMPLETED
"on_hold" -> Shikimori.ON_HOLD "on_hold" -> Shikimori.ON_HOLD