mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-07-26 22:42:17 +00:00
feat(mdblist): add MyAnimeList (MAL) rating from MDBList API
This commit is contained in:
parent
05a5f9d7d3
commit
a8e64fdfe2
9 changed files with 36 additions and 0 deletions
|
|
@ -22,6 +22,7 @@ actual object MdbListSettingsStorage {
|
|||
private const val useTraktKey = "mdblist_use_trakt"
|
||||
private const val useLetterboxdKey = "mdblist_use_letterboxd"
|
||||
private const val useAudienceKey = "mdblist_use_audience"
|
||||
private const val useMalKey = "mdblist_use_mal"
|
||||
private val syncKeys = listOf(
|
||||
enabledKey,
|
||||
apiKey,
|
||||
|
|
@ -32,6 +33,7 @@ actual object MdbListSettingsStorage {
|
|||
useTraktKey,
|
||||
useLetterboxdKey,
|
||||
useAudienceKey,
|
||||
useMalKey,
|
||||
)
|
||||
|
||||
private var preferences: SharedPreferences? = null
|
||||
|
|
@ -98,6 +100,12 @@ actual object MdbListSettingsStorage {
|
|||
saveBoolean(useAudienceKey, enabled)
|
||||
}
|
||||
|
||||
actual fun loadUseMal(): Boolean? = loadBoolean(useMalKey)
|
||||
|
||||
actual fun saveUseMal(enabled: Boolean) {
|
||||
saveBoolean(useMalKey, enabled)
|
||||
}
|
||||
|
||||
private fun loadBoolean(key: String): Boolean? =
|
||||
preferences?.let { sharedPreferences ->
|
||||
val scopedKey = ProfileScopedKey.of(key)
|
||||
|
|
@ -125,6 +133,7 @@ actual object MdbListSettingsStorage {
|
|||
loadUseTrakt()?.let { put(useTraktKey, encodeSyncBoolean(it)) }
|
||||
loadUseLetterboxd()?.let { put(useLetterboxdKey, encodeSyncBoolean(it)) }
|
||||
loadUseAudience()?.let { put(useAudienceKey, encodeSyncBoolean(it)) }
|
||||
loadUseMal()?.let { put(useMalKey, encodeSyncBoolean(it)) }
|
||||
}
|
||||
|
||||
actual fun replaceFromSyncPayload(payload: JsonObject) {
|
||||
|
|
@ -141,5 +150,6 @@ actual object MdbListSettingsStorage {
|
|||
payload.decodeSyncBoolean(useTraktKey)?.let(::saveUseTrakt)
|
||||
payload.decodeSyncBoolean(useLetterboxdKey)?.let(::saveUseLetterboxd)
|
||||
payload.decodeSyncBoolean(useAudienceKey)?.let(::saveUseAudience)
|
||||
payload.decodeSyncBoolean(useMalKey)?.let(::saveUseMal)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1144,6 +1144,7 @@
|
|||
<string name="source_rotten_tomatoes">Rotten Tomatoes</string>
|
||||
<string name="source_tmdb">TMDB</string>
|
||||
<string name="source_trakt">Trakt</string>
|
||||
<string name="source_mal">MyAnimeList</string>
|
||||
<string name="subtitle_language_unknown">Unknown</string>
|
||||
<string name="theme_amber">Amber</string>
|
||||
<string name="theme_crimson">Crimson</string>
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ object MdbListMetadataService {
|
|||
const val PROVIDER_TRAKT = "trakt"
|
||||
const val PROVIDER_LETTERBOXD = "letterboxd"
|
||||
const val PROVIDER_AUDIENCE = "audience"
|
||||
const val PROVIDER_MAL = "mal"
|
||||
|
||||
val PROVIDER_PRIORITY_ORDER = listOf(
|
||||
PROVIDER_IMDB,
|
||||
|
|
@ -32,6 +33,7 @@ object MdbListMetadataService {
|
|||
PROVIDER_TRAKT,
|
||||
PROVIDER_LETTERBOXD,
|
||||
PROVIDER_AUDIENCE,
|
||||
PROVIDER_MAL,
|
||||
)
|
||||
|
||||
private val log = Logger.withTag("MdbListMetadata")
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ data class MdbListSettings(
|
|||
val useTrakt: Boolean = true,
|
||||
val useLetterboxd: Boolean = true,
|
||||
val useAudience: Boolean = true,
|
||||
val useMal: Boolean = true,
|
||||
) {
|
||||
val hasApiKey: Boolean
|
||||
get() = apiKey.isNotBlank()
|
||||
|
|
@ -23,6 +24,7 @@ data class MdbListSettings(
|
|||
MdbListMetadataService.PROVIDER_TRAKT -> useTrakt
|
||||
MdbListMetadataService.PROVIDER_LETTERBOXD -> useLetterboxd
|
||||
MdbListMetadataService.PROVIDER_AUDIENCE -> useAudience
|
||||
MdbListMetadataService.PROVIDER_MAL -> useMal
|
||||
else -> false
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ object MdbListSettingsRepository {
|
|||
private var useTrakt = true
|
||||
private var useLetterboxd = true
|
||||
private var useAudience = true
|
||||
private var useMal = true
|
||||
|
||||
fun ensureLoaded() {
|
||||
if (hasLoaded) return
|
||||
|
|
@ -88,6 +89,10 @@ object MdbListSettingsRepository {
|
|||
useAudience = value
|
||||
MdbListSettingsStorage.saveUseAudience(value)
|
||||
} else return
|
||||
MdbListMetadataService.PROVIDER_MAL -> if (useMal != value) {
|
||||
useMal = value
|
||||
MdbListSettingsStorage.saveUseMal(value)
|
||||
} else return
|
||||
else -> return
|
||||
}
|
||||
publish()
|
||||
|
|
@ -105,6 +110,7 @@ object MdbListSettingsRepository {
|
|||
useTrakt = MdbListSettingsStorage.loadUseTrakt() ?: true
|
||||
useLetterboxd = MdbListSettingsStorage.loadUseLetterboxd() ?: true
|
||||
useAudience = MdbListSettingsStorage.loadUseAudience() ?: true
|
||||
useMal = MdbListSettingsStorage.loadUseMal() ?: true
|
||||
publish()
|
||||
}
|
||||
|
||||
|
|
@ -119,6 +125,7 @@ object MdbListSettingsRepository {
|
|||
useTrakt = useTrakt,
|
||||
useLetterboxd = useLetterboxd,
|
||||
useAudience = useAudience,
|
||||
useMal = useMal,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ internal expect object MdbListSettingsStorage {
|
|||
fun saveUseLetterboxd(enabled: Boolean)
|
||||
fun loadUseAudience(): Boolean?
|
||||
fun saveUseAudience(enabled: Boolean)
|
||||
fun loadUseMal(): Boolean?
|
||||
fun saveUseMal(enabled: Boolean)
|
||||
fun exportToSyncPayload(): JsonObject
|
||||
fun replaceFromSyncPayload(payload: JsonObject)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ private fun ProviderRows(
|
|||
MdbListMetadataService.PROVIDER_TRAKT to Res.string.source_trakt,
|
||||
MdbListMetadataService.PROVIDER_LETTERBOXD to Res.string.source_letterboxd,
|
||||
MdbListMetadataService.PROVIDER_AUDIENCE to Res.string.source_audience_score,
|
||||
MdbListMetadataService.PROVIDER_MAL to Res.string.source_mal,
|
||||
)
|
||||
|
||||
providers.forEachIndexed { index, (providerId, providerLabelRes) ->
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ internal actual object PlatformLocalAccountDataCleaner {
|
|||
"mdblist_use_trakt",
|
||||
"mdblist_use_letterboxd",
|
||||
"mdblist_use_audience",
|
||||
"mdblist_use_mal",
|
||||
"trakt_auth_payload",
|
||||
"trakt_library_payload",
|
||||
"trakt_settings_payload",
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ actual object MdbListSettingsStorage {
|
|||
private const val useTraktKey = "mdblist_use_trakt"
|
||||
private const val useLetterboxdKey = "mdblist_use_letterboxd"
|
||||
private const val useAudienceKey = "mdblist_use_audience"
|
||||
private const val useMalKey = "mdblist_use_mal"
|
||||
private val syncKeys = listOf(
|
||||
enabledKey,
|
||||
apiKey,
|
||||
|
|
@ -30,6 +31,7 @@ actual object MdbListSettingsStorage {
|
|||
useTraktKey,
|
||||
useLetterboxdKey,
|
||||
useAudienceKey,
|
||||
useMalKey,
|
||||
)
|
||||
|
||||
actual fun loadEnabled(): Boolean? = loadBoolean(enabledKey)
|
||||
|
|
@ -87,6 +89,12 @@ actual object MdbListSettingsStorage {
|
|||
saveBoolean(useAudienceKey, enabled)
|
||||
}
|
||||
|
||||
actual fun loadUseMal(): Boolean? = loadBoolean(useMalKey)
|
||||
|
||||
actual fun saveUseMal(enabled: Boolean) {
|
||||
saveBoolean(useMalKey, enabled)
|
||||
}
|
||||
|
||||
private fun loadBoolean(key: String): Boolean? {
|
||||
val defaults = NSUserDefaults.standardUserDefaults
|
||||
val scopedKey = ProfileScopedKey.of(key)
|
||||
|
|
@ -111,6 +119,7 @@ actual object MdbListSettingsStorage {
|
|||
loadUseTrakt()?.let { put(useTraktKey, encodeSyncBoolean(it)) }
|
||||
loadUseLetterboxd()?.let { put(useLetterboxdKey, encodeSyncBoolean(it)) }
|
||||
loadUseAudience()?.let { put(useAudienceKey, encodeSyncBoolean(it)) }
|
||||
loadUseMal()?.let { put(useMalKey, encodeSyncBoolean(it)) }
|
||||
}
|
||||
|
||||
actual fun replaceFromSyncPayload(payload: JsonObject) {
|
||||
|
|
@ -127,5 +136,6 @@ actual object MdbListSettingsStorage {
|
|||
payload.decodeSyncBoolean(useTraktKey)?.let(::saveUseTrakt)
|
||||
payload.decodeSyncBoolean(useLetterboxdKey)?.let(::saveUseLetterboxd)
|
||||
payload.decodeSyncBoolean(useAudienceKey)?.let(::saveUseAudience)
|
||||
payload.decodeSyncBoolean(useMalKey)?.let(::saveUseMal)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue