From fc863e132df1a112fc94f3c789ef51ac74723223 Mon Sep 17 00:00:00 2001 From: Atte149 Date: Sat, 27 Jun 2026 21:16:10 +0300 Subject: [PATCH] fix(settings): pre-populate ServerSettings with homelab defaults + clear cache on save - ServerSettings init: pre-populate bookshelf_url, abs_url, abs_token with homelab defaults if not already set (books.dueattendant149.org + ABS token). - ServerSettingsViewModel.save(): clear BookshelfApiClientFactory and AudiobookshelfApiClientFactory caches after save so new URL takes effect. - Defaults also returned from getters if value is blank. - ':app:assembleOssDebug' passes, APK deployed. --- .../bookreader/ServerSettingsViewModel.kt | 4 +++ .../data/settings/ServerSettings.kt | 33 +++++++++++++------ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/dueattendant149/bookreader/ServerSettingsViewModel.kt b/app/src/main/java/org/dueattendant149/bookreader/ServerSettingsViewModel.kt index eaaf09a..ecc6ba5 100644 --- a/app/src/main/java/org/dueattendant149/bookreader/ServerSettingsViewModel.kt +++ b/app/src/main/java/org/dueattendant149/bookreader/ServerSettingsViewModel.kt @@ -22,6 +22,8 @@ class ServerSettingsViewModel @Inject constructor( private val serverSettings: ServerSettings, + private val bookshelfClientFactory: org.dueattendant149.bookreader.data.remote.bookshelfapi.BookshelfApiClientFactory, + private val absClientFactory: org.dueattendant149.bookreader.data.remote.audiobookshelf.AudiobookshelfApiClientFactory, ) : ViewModel() { private val _uiState = MutableStateFlow(ServerSettingsUiState()) @@ -52,6 +54,8 @@ class ServerSettingsViewModel serverSettings.setBookshelfUrl(_uiState.value.bookshelfUrl.trim()) serverSettings.setAbsUrl(_uiState.value.absUrl.trim()) serverSettings.setAbsToken(_uiState.value.absToken.trim()) + bookshelfClientFactory.clearCache() + absClientFactory.clearCache() _uiState.value = _uiState.value.copy(saved = true) } } diff --git a/app/src/main/java/org/dueattendant149/bookreader/data/settings/ServerSettings.kt b/app/src/main/java/org/dueattendant149/bookreader/data/settings/ServerSettings.kt index 4bb5b4e..535c1ae 100644 --- a/app/src/main/java/org/dueattendant149/bookreader/data/settings/ServerSettings.kt +++ b/app/src/main/java/org/dueattendant149/bookreader/data/settings/ServerSettings.kt @@ -12,10 +12,10 @@ private const val KEY_BOOKSHELF_URL = "bookshelf_url" private const val KEY_ABS_URL = "abs_url" private const val KEY_ABS_TOKEN = "abs_token" -/** - * Minimal server URL/token storage. Replaces the full DataStore-based settings - * from Book's Story for Phase 2 backend scaffolding. - */ +private const val DEFAULT_BOOKSHELF_URL = "https://books.dueattendant149.org/" +private const val DEFAULT_ABS_URL = "https://books.dueattendant149.org/" +private const val DEFAULT_ABS_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI5ZmFhZTFiYS1mYTdiLTQwNjgtYWY1NC05YmZmZmQ1MzE1MTAiLCJ1c2VybmFtZSI6InZsYWRpayIsImlhdCI6MTc4MDI2OTY0NH0.bf7XvvcKQnnr0PCj8hSa-5n4PrsW4POTns_pj5TkncU" + @Singleton class ServerSettings @Inject @@ -24,21 +24,34 @@ class ServerSettings ) { private val prefs: SharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) - fun getBookshelfUrl(): String? = prefs.getString(KEY_BOOKSHELF_URL, null) + init { + // Pre-populate defaults for homelab if not set + if (!prefs.contains(KEY_BOOKSHELF_URL)) { + prefs.edit { putString(KEY_BOOKSHELF_URL, DEFAULT_BOOKSHELF_URL) } + } + if (!prefs.contains(KEY_ABS_URL)) { + prefs.edit { putString(KEY_ABS_URL, DEFAULT_ABS_URL) } + } + if (!prefs.contains(KEY_ABS_TOKEN)) { + prefs.edit { putString(KEY_ABS_TOKEN, DEFAULT_ABS_TOKEN) } + } + } + + fun getBookshelfUrl(): String? = prefs.getString(KEY_BOOKSHELF_URL, DEFAULT_BOOKSHELF_URL) fun setBookshelfUrl(url: String) { - prefs.edit { putString(KEY_BOOKSHELF_URL, url) } + prefs.edit { putString(KEY_BOOKSHELF_URL, url.ifBlank { DEFAULT_BOOKSHELF_URL }) } } - fun getAbsUrl(): String? = prefs.getString(KEY_ABS_URL, null) + fun getAbsUrl(): String? = prefs.getString(KEY_ABS_URL, DEFAULT_ABS_URL) fun setAbsUrl(url: String) { - prefs.edit { putString(KEY_ABS_URL, url) } + prefs.edit { putString(KEY_ABS_URL, url.ifBlank { DEFAULT_ABS_URL }) } } - fun getAbsToken(): String? = prefs.getString(KEY_ABS_TOKEN, null) + fun getAbsToken(): String? = prefs.getString(KEY_ABS_TOKEN, DEFAULT_ABS_TOKEN) fun setAbsToken(token: String) { prefs.edit { putString(KEY_ABS_TOKEN, token) } } - } + } \ No newline at end of file