feat: clear cw cache

This commit is contained in:
tapframe 2026-06-06 23:31:32 +05:30
parent d7e1da6b47
commit ab5415f477
7 changed files with 65 additions and 0 deletions

View file

@ -21,4 +21,11 @@ actual object ContinueWatchingEnrichmentStorage {
?.putString(key, payload)
?.apply()
}
actual fun removePayload(key: String) {
preferences
?.edit()
?.remove(key)
?.apply()
}
}

View file

@ -445,8 +445,12 @@
<string name="settings_search_placeholder">Search settings...</string>
<string name="settings_search_results_section">RESULTS</string>
<string name="settings_advanced_section_startup">STARTUP</string>
<string name="settings_advanced_section_cache">CACHE</string>
<string name="settings_advanced_remember_last_profile">Remember Last Profile</string>
<string name="settings_advanced_remember_last_profile_description">Remember last selected profile at startup</string>
<string name="settings_advanced_clear_cw_cache">Clear Continue Watching Cache</string>
<string name="settings_advanced_clear_cw_cache_subtitle">Remove cached thumbnails, titles, and enrichment data for Continue Watching</string>
<string name="settings_advanced_clear_cw_cache_done">Cache cleared</string>
<string name="settings_licenses_attributions_section_app">APP LICENSE</string>
<string name="settings_licenses_attributions_section_data">DATA &amp; SERVICES</string>
<string name="settings_licenses_attributions_section_playback">PLAYBACK LICENSE</string>

View file

@ -1,10 +1,19 @@
package com.nuvio.app.features.settings
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import com.nuvio.app.features.profiles.ProfileRepository
import com.nuvio.app.features.watchprogress.ContinueWatchingEnrichmentCache
import nuvio.composeapp.generated.resources.Res
import nuvio.composeapp.generated.resources.settings_advanced_clear_cw_cache
import nuvio.composeapp.generated.resources.settings_advanced_clear_cw_cache_done
import nuvio.composeapp.generated.resources.settings_advanced_clear_cw_cache_subtitle
import nuvio.composeapp.generated.resources.settings_advanced_remember_last_profile
import nuvio.composeapp.generated.resources.settings_advanced_remember_last_profile_description
import nuvio.composeapp.generated.resources.settings_advanced_section_cache
import nuvio.composeapp.generated.resources.settings_advanced_section_startup
import org.jetbrains.compose.resources.stringResource
@ -28,4 +37,29 @@ internal fun LazyListScope.advancedSettingsContent(
}
}
}
item {
SettingsSection(
title = stringResource(Res.string.settings_advanced_section_cache),
isTablet = isTablet,
) {
SettingsGroup(isTablet = isTablet) {
var cleared by rememberSaveable { mutableStateOf(false) }
SettingsNavigationRow(
title = stringResource(Res.string.settings_advanced_clear_cw_cache),
description = if (cleared) {
stringResource(Res.string.settings_advanced_clear_cw_cache_done)
} else {
stringResource(Res.string.settings_advanced_clear_cw_cache_subtitle)
},
isTablet = isTablet,
onClick = {
if (!cleared) {
ContinueWatchingEnrichmentCache.clearAll()
cleared = true
}
},
)
}
}
}
}

View file

@ -388,6 +388,16 @@ internal fun settingsSearchEntries(
category = advancedCategory,
icon = Icons.Rounded.Tune,
)
addRow(
page = SettingsPage.Advanced,
key = "clear-cw-cache",
title = stringResource(Res.string.settings_advanced_clear_cw_cache),
description = stringResource(Res.string.settings_advanced_clear_cw_cache_subtitle),
pageLabel = advancedPage,
section = stringResource(Res.string.settings_advanced_section_cache),
category = advancedCategory,
icon = Icons.Rounded.Tune,
)
addPage(
page = SettingsPage.ContinueWatching,
key = "continue-watching",

View file

@ -95,6 +95,11 @@ internal object ContinueWatchingEnrichmentCache {
lastPayloadHash = payloadHash
}
fun clearAll() {
ContinueWatchingEnrichmentStorage.removePayload(ProfileScopedKey.of(storageKey))
lastPayloadHash = null
}
private fun loadPayload(): CachedEnrichmentPayload? {
val raw = ContinueWatchingEnrichmentStorage.loadPayload(ProfileScopedKey.of(storageKey))
?: return null

View file

@ -3,4 +3,5 @@ package com.nuvio.app.features.watchprogress
internal expect object ContinueWatchingEnrichmentStorage {
fun loadPayload(key: String): String?
fun savePayload(key: String, payload: String)
fun removePayload(key: String)
}

View file

@ -9,4 +9,8 @@ actual object ContinueWatchingEnrichmentStorage {
actual fun savePayload(key: String, payload: String) {
NSUserDefaults.standardUserDefaults.setObject(payload, forKey = key)
}
actual fun removePayload(key: String) {
NSUserDefaults.standardUserDefaults.removeObjectForKey(key)
}
}