diff --git a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.android.kt b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.android.kt index 45e63d432..2d77ab611 100644 --- a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.android.kt +++ b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.android.kt @@ -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) } } diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index eafc76341..4a7626a7d 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1144,6 +1144,7 @@ Rotten Tomatoes TMDB Trakt + MyAnimeList Unknown Amber Crimson diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListMetadataService.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListMetadataService.kt index b1ca1c1e1..1316e3720 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListMetadataService.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListMetadataService.kt @@ -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") diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettings.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettings.kt index e9002303e..31435d398 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettings.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettings.kt @@ -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 } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsRepository.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsRepository.kt index 6f48eb800..4a7f44e27 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsRepository.kt @@ -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, ) } } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.kt index c1a6f51e1..ff9cd57fd 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.kt @@ -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) } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/MdbListSettingsPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/MdbListSettingsPage.kt index 3a7a2c40a..e56d1a0b3 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/MdbListSettingsPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/MdbListSettingsPage.kt @@ -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) -> diff --git a/composeApp/src/iosMain/kotlin/com/nuvio/app/core/storage/PlatformLocalAccountDataCleaner.ios.kt b/composeApp/src/iosMain/kotlin/com/nuvio/app/core/storage/PlatformLocalAccountDataCleaner.ios.kt index c9a439664..b6c5373fb 100644 --- a/composeApp/src/iosMain/kotlin/com/nuvio/app/core/storage/PlatformLocalAccountDataCleaner.ios.kt +++ b/composeApp/src/iosMain/kotlin/com/nuvio/app/core/storage/PlatformLocalAccountDataCleaner.ios.kt @@ -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", diff --git a/composeApp/src/iosMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.ios.kt b/composeApp/src/iosMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.ios.kt index d05e79f14..3c4297207 100644 --- a/composeApp/src/iosMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.ios.kt +++ b/composeApp/src/iosMain/kotlin/com/nuvio/app/features/mdblist/MdbListSettingsStorage.ios.kt @@ -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) } }