Refactor tracker status string mappings

Should fix #9195

(cherry picked from commit 47a2d066821d0f65680255f5ce6442fd0af55382)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/data/track/TrackManager.kt
This commit is contained in:
arkon 2023-03-10 23:01:10 -05:00 committed by Jobobby04
parent 98e4ca4804
commit 5269ad3b87
16 changed files with 117 additions and 117 deletions

View File

@ -1,5 +1,6 @@
package eu.kanade.presentation.track
import androidx.annotation.StringRes
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@ -125,7 +126,7 @@ fun TrackInfoDialogHome(
private fun TrackInfoItem(
title: String,
service: TrackService,
status: String,
@StringRes status: Int?,
onStatusClick: () -> Unit,
chapters: String,
onChaptersClick: () -> Unit,
@ -187,7 +188,7 @@ private fun TrackInfoItem(
Row(modifier = Modifier.height(IntrinsicSize.Min)) {
TrackDetailsItem(
modifier = Modifier.weight(1f),
text = status,
text = status?.let { stringResource(it) } ?: "",
onClick = onStatusClick,
)
VerticalDivider()

View File

@ -41,7 +41,7 @@ import tachiyomi.presentation.core.util.isScrolledToStart
fun TrackStatusSelector(
selection: Int,
onSelectionChange: (Int) -> Unit,
selections: Map<Int, String>,
selections: Map<Int, Int?>,
onConfirm: () -> Unit,
onDismissRequest: () -> Unit,
) {
@ -69,7 +69,7 @@ fun TrackStatusSelector(
onClick = null,
)
Text(
text = value,
text = value?.let { stringResource(it) } ?: "",
style = MaterialTheme.typography.bodyLarge.merge(),
modifier = Modifier.padding(start = 24.dp),
)

View File

@ -30,17 +30,17 @@ class TrackManager(context: Context) {
// SY <--
}
val mdList = MdList(context, MDLIST)
val mdList = MdList(MDLIST)
val myAnimeList = MyAnimeList(context, MYANIMELIST)
val aniList = Anilist(context, ANILIST)
val kitsu = Kitsu(context, KITSU)
val shikimori = Shikimori(context, SHIKIMORI)
val bangumi = Bangumi(context, BANGUMI)
val myAnimeList = MyAnimeList(MYANIMELIST)
val aniList = Anilist(ANILIST)
val kitsu = Kitsu(KITSU)
val shikimori = Shikimori(SHIKIMORI)
val bangumi = Bangumi(BANGUMI)
val komga = Komga(context, KOMGA)
val mangaUpdates = MangaUpdates(context, MANGA_UPDATES)
val mangaUpdates = MangaUpdates(MANGA_UPDATES)
val kavita = Kavita(context, KAVITA)
val suwayomi = Suwayomi(context, SUWAYOMI)
val suwayomi = Suwayomi(SUWAYOMI)
val services = listOf(mdList, myAnimeList, aniList, kitsu, shikimori, bangumi, komga, mangaUpdates, kavita, suwayomi)

View File

@ -50,7 +50,8 @@ abstract class TrackService(val id: Long) {
abstract fun getStatusList(): List<Int>
abstract fun getStatus(status: Int): String
@StringRes
abstract fun getStatus(status: Int): Int?
abstract fun getReadingStatus(): Int

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.anilist
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -13,7 +12,7 @@ import kotlinx.serialization.json.Json
import uy.kohesive.injekt.injectLazy
import tachiyomi.domain.track.model.Track as DomainTrack
class Anilist(private val context: Context, id: Long) : TrackService(id) {
class Anilist(id: Long) : TrackService(id) {
companion object {
const val READING = 1
@ -61,16 +60,15 @@ class Anilist(private val context: Context, id: Long) : TrackService(id) {
return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING)
}
override fun getStatus(status: Int): String = with(context) {
when (status) {
READING -> getString(R.string.reading)
PLAN_TO_READ -> getString(R.string.plan_to_read)
COMPLETED -> getString(R.string.completed)
ON_HOLD -> getString(R.string.on_hold)
DROPPED -> getString(R.string.dropped)
REREADING -> getString(R.string.repeating)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
READING -> R.string.reading
PLAN_TO_READ -> R.string.plan_to_read
COMPLETED -> R.string.completed
ON_HOLD -> R.string.on_hold
DROPPED -> R.string.dropped
REREADING -> R.string.repeating
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.bangumi
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -12,7 +11,7 @@ import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import uy.kohesive.injekt.injectLazy
class Bangumi(private val context: Context, id: Long) : TrackService(id) {
class Bangumi(id: Long) : TrackService(id) {
private val json: Json by injectLazy()
@ -94,15 +93,14 @@ class Bangumi(private val context: Context, id: Long) : TrackService(id) {
return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ)
}
override fun getStatus(status: Int): String = with(context) {
when (status) {
READING -> getString(R.string.reading)
PLAN_TO_READ -> getString(R.string.plan_to_read)
COMPLETED -> getString(R.string.completed)
ON_HOLD -> getString(R.string.on_hold)
DROPPED -> getString(R.string.dropped)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
READING -> R.string.reading
PLAN_TO_READ -> R.string.plan_to_read
COMPLETED -> R.string.completed
ON_HOLD -> R.string.on_hold
DROPPED -> R.string.dropped
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -36,13 +36,12 @@ class Kavita(private val context: Context, id: Long) : TrackService(id), Enhance
override fun getStatusList() = listOf(UNREAD, READING, COMPLETED)
override fun getStatus(status: Int): String = with(context) {
when (status) {
UNREAD -> getString(R.string.unread)
READING -> getString(R.string.reading)
COMPLETED -> getString(R.string.completed)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
UNREAD -> R.string.unread
READING -> R.string.reading
COMPLETED -> R.string.completed
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.kitsu
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -13,7 +12,7 @@ import kotlinx.serialization.json.Json
import uy.kohesive.injekt.injectLazy
import java.text.DecimalFormat
class Kitsu(private val context: Context, id: Long) : TrackService(id) {
class Kitsu(id: Long) : TrackService(id) {
companion object {
const val READING = 1
@ -42,15 +41,14 @@ class Kitsu(private val context: Context, id: Long) : TrackService(id) {
return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ)
}
override fun getStatus(status: Int): String = with(context) {
when (status) {
READING -> getString(R.string.reading)
PLAN_TO_READ -> getString(R.string.plan_to_read)
COMPLETED -> getString(R.string.completed)
ON_HOLD -> getString(R.string.on_hold)
DROPPED -> getString(R.string.dropped)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
READING -> R.string.reading
PLAN_TO_READ -> R.string.plan_to_read
COMPLETED -> R.string.completed
ON_HOLD -> R.string.on_hold
DROPPED -> R.string.dropped
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -38,13 +38,12 @@ class Komga(private val context: Context, id: Long) : TrackService(id), Enhanced
override fun getStatusList() = listOf(UNREAD, READING, COMPLETED)
override fun getStatus(status: Int): String = with(context) {
when (status) {
UNREAD -> getString(R.string.unread)
READING -> getString(R.string.reading)
COMPLETED -> getString(R.string.completed)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
UNREAD -> R.string.unread
READING -> R.string.reading
COMPLETED -> R.string.completed
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.mangaupdates
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -10,7 +9,7 @@ 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
class MangaUpdates(private val context: Context, id: Long) : TrackService(id) {
class MangaUpdates(id: Long) : TrackService(id) {
companion object {
const val READING_LIST = 0
@ -35,15 +34,14 @@ class MangaUpdates(private val context: Context, id: Long) : TrackService(id) {
return listOf(READING_LIST, COMPLETE_LIST, ON_HOLD_LIST, UNFINISHED_LIST, WISH_LIST)
}
override fun getStatus(status: Int): String = with(context) {
when (status) {
READING_LIST -> getString(R.string.reading_list)
WISH_LIST -> getString(R.string.wish_list)
COMPLETE_LIST -> getString(R.string.complete_list)
ON_HOLD_LIST -> getString(R.string.on_hold_list)
UNFINISHED_LIST -> getString(R.string.unfinished_list)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
READING_LIST -> R.string.reading_list
WISH_LIST -> R.string.wish_list
COMPLETE_LIST -> R.string.complete_list
ON_HOLD_LIST -> R.string.on_hold_list
UNFINISHED_LIST -> R.string.unfinished_list
else -> null
}
override fun getReadingStatus(): Int = READING_LIST

View File

@ -20,7 +20,7 @@ import tachiyomi.domain.manga.model.Manga
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
class MdList(private val context: Context, id: Long) : TrackService(id) {
class MdList(id: Long) : TrackService(id) {
private val mdex by lazy { MdUtil.getEnabledMangaDex(Injekt.get()) }
@ -41,8 +41,17 @@ class MdList(private val context: Context, id: Long) : TrackService(id) {
return FollowStatus.values().map { it.int }
}
override fun getStatus(status: Int): String =
context.resources.getStringArray(R.array.md_follows_options).asList()[status]
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
0 -> R.string.md_follows_unfollowed
1 -> R.string.reading
2 -> R.string.completed
3 -> R.string.on_hold
4 -> R.string.plan_to_read
5 -> R.string.dropped
6 -> R.string.repeating
else -> null
}
override fun getScoreList() = IntRange(0, 10).map(Int::toString)

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.myanimelist
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -12,7 +11,7 @@ import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import uy.kohesive.injekt.injectLazy
class MyAnimeList(private val context: Context, id: Long) : TrackService(id) {
class MyAnimeList(id: Long) : TrackService(id) {
companion object {
const val READING = 1
@ -44,16 +43,15 @@ class MyAnimeList(private val context: Context, id: Long) : TrackService(id) {
return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING)
}
override fun getStatus(status: Int): String = with(context) {
when (status) {
READING -> getString(R.string.reading)
PLAN_TO_READ -> getString(R.string.plan_to_read)
COMPLETED -> getString(R.string.completed)
ON_HOLD -> getString(R.string.on_hold)
DROPPED -> getString(R.string.dropped)
REREADING -> getString(R.string.repeating)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
READING -> R.string.reading
PLAN_TO_READ -> R.string.plan_to_read
COMPLETED -> R.string.completed
ON_HOLD -> R.string.on_hold
DROPPED -> R.string.dropped
REREADING -> R.string.repeating
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.shikimori
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -12,7 +11,7 @@ import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import uy.kohesive.injekt.injectLazy
class Shikimori(private val context: Context, id: Long) : TrackService(id) {
class Shikimori(id: Long) : TrackService(id) {
companion object {
const val READING = 1
@ -98,16 +97,15 @@ class Shikimori(private val context: Context, id: Long) : TrackService(id) {
return listOf(READING, COMPLETED, ON_HOLD, DROPPED, PLAN_TO_READ, REREADING)
}
override fun getStatus(status: Int): String = with(context) {
when (status) {
READING -> getString(R.string.reading)
PLAN_TO_READ -> getString(R.string.plan_to_read)
COMPLETED -> getString(R.string.completed)
ON_HOLD -> getString(R.string.on_hold)
DROPPED -> getString(R.string.dropped)
REREADING -> getString(R.string.repeating)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
READING -> R.string.reading
PLAN_TO_READ -> R.string.plan_to_read
COMPLETED -> R.string.completed
ON_HOLD -> R.string.on_hold
DROPPED -> R.string.dropped
REREADING -> R.string.repeating
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -1,6 +1,5 @@
package eu.kanade.tachiyomi.data.track.suwayomi
import android.content.Context
import android.graphics.Color
import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R
@ -12,7 +11,8 @@ import eu.kanade.tachiyomi.source.Source
import tachiyomi.domain.manga.model.Manga as DomainManga
import tachiyomi.domain.track.model.Track as DomainTrack
class Suwayomi(private val context: Context, id: Long) : TrackService(id), EnhancedTrackService {
class Suwayomi(id: Long) : TrackService(id), EnhancedTrackService {
val api by lazy { TachideskApi() }
@StringRes
@ -30,13 +30,12 @@ class Suwayomi(private val context: Context, id: Long) : TrackService(id), Enhan
override fun getStatusList() = listOf(UNREAD, READING, COMPLETED)
override fun getStatus(status: Int): String = with(context) {
when (status) {
UNREAD -> getString(R.string.unread)
READING -> getString(R.string.reading)
COMPLETED -> getString(R.string.completed)
else -> ""
}
@StringRes
override fun getStatus(status: Int): Int? = when (status) {
UNREAD -> R.string.unread
READING -> R.string.reading
COMPLETED -> R.string.completed
else -> null
}
override fun getReadingStatus(): Int = READING

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.ui.library
import android.app.Application
import android.content.Context
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.getValue
@ -903,6 +904,7 @@ class LibraryScreenModel(
val manga = libraryManga.manga
val sourceIdString = manga.source.takeUnless { it == LocalSource.ID }?.toString()
val genre = if (checkGenre) manga.genre.orEmpty() else emptyList()
val context = Injekt.get<Application>()
return queries.all { queryComponent ->
when (queryComponent.excluded) {
false -> when (queryComponent) {
@ -914,7 +916,7 @@ class LibraryScreenModel(
(manga.description?.contains(query, true) == true) ||
(source?.name?.contains(query, true) == true) ||
(sourceIdString != null && sourceIdString == query) ||
(loggedInTrackServices.isNotEmpty() && tracks != null && filterTracks(query, tracks)) ||
(loggedInTrackServices.isNotEmpty() && tracks != null && filterTracks(query, tracks, context)) ||
(genre.fastAny { it.contains(query, true) }) ||
(searchTags?.fastAny { it.name.contains(query, true) } == true) ||
(searchTitles?.fastAny { it.title.contains(query, true) } == true)
@ -938,7 +940,7 @@ class LibraryScreenModel(
(manga.description?.contains(query, true) != true) &&
(source?.name?.contains(query, true) != true) &&
(sourceIdString != null && sourceIdString != query) &&
(loggedInTrackServices.isEmpty() || tracks == null || !filterTracks(query, tracks)) &&
(loggedInTrackServices.isEmpty() || tracks == null || !filterTracks(query, tracks, context)) &&
(!genre.fastAny { it.contains(query, true) }) &&
(searchTags?.fastAny { it.name.contains(query, true) } != true) &&
(searchTitles?.fastAny { it.title.contains(query, true) } != true)
@ -964,13 +966,15 @@ class LibraryScreenModel(
}
}
private fun filterTracks(constraint: String, tracks: List<Track>): Boolean {
return tracks.fastAny {
val trackService = trackManager.getService(it.syncId)
private fun filterTracks(constraint: String, tracks: List<Track>, context: Context): Boolean {
return tracks.fastAny { track ->
val trackService = trackManager.getService(track.syncId)
if (trackService != null) {
val status = trackService.getStatus(it.status.toInt())
val name = services[it.syncId]
status.contains(constraint, true) || name?.contains(constraint, true) == true
val status = trackService.getStatus(track.status.toInt())?.let {
context.getString(it)
}
val name = services[track.syncId]
status?.contains(constraint, true) == true || name?.contains(constraint, true) == true
} else {
false
}

View File

@ -293,7 +293,7 @@ private data class TrackStatusSelectorScreen(
private val service: TrackService,
) : StateScreenModel<Model.State>(State(track.status)) {
fun getSelections(): Map<Int, String> {
fun getSelections(): Map<Int, Int?> {
return service.getStatusList().associateWith { service.getStatus(it) }
}