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