From 0f3c48dd8e4102472708f7b74b90b1358fe4f52a Mon Sep 17 00:00:00 2001 From: davidoskky Date: Wed, 17 Aug 2022 20:04:31 +0200 Subject: [PATCH] Handle the offline override in the repository --- .../android/HomeActivity.kt | 4 +-- .../repository/RepositoryImpl.kt | 35 ++++++++++--------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt index c77bbfe..69dde5c 100644 --- a/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt +++ b/androidApp/src/main/java/bou/amine/apps/readerforselfossv2/android/HomeActivity.kt @@ -153,7 +153,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar val view = binding.root fromTabShortcut = intent.getIntExtra("shortcutTab", -1) != -1 - offlineShortcut = intent.getBooleanExtra("startOffline", false) + repository.offlineOverride = intent.getBooleanExtra("startOffline", false) if (fromTabShortcut) { elementsShown = ItemType.fromInt(intent.getIntExtra("shortcutTab", ItemType.UNREAD.position)) @@ -197,7 +197,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar R.color.refresh_progress_3 ) binding.swipeRefreshLayout.setOnRefreshListener { - offlineShortcut = false + repository.offlineOverride = false lastFetchDone = false handleDrawerItems() CoroutineScope(Dispatchers.Main).launch { diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt index fc92c4e..2ab5bf7 100644 --- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt +++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/RepositoryImpl.kt @@ -28,6 +28,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails var searchFilter: String? = null var itemsCaching = settings.getBoolean("items_caching", false) + var offlineOverride = false var apiMajorVersion = 0 var badgeUnread = 0 @@ -49,7 +50,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun getNewerItems(): ArrayList { // TODO: Use the updatedSince parameter - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { val fetchedItems = api.getItems( displayedItems.type, settings.getString("prefer_api_items_number", "200").toInt(), @@ -71,7 +72,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails } suspend fun getOlderItems(): ArrayList { - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { val offset = items.size val fetchedItems = api.getItems( displayedItems.type, @@ -93,7 +94,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails } suspend fun allItems(itemType: ItemType): List? { - return if (isConnectionAvailable.value) { + return if (isConnectionAvailable.value && !offlineOverride) { api.getItems( itemType.type, 200, @@ -123,7 +124,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun reloadBadges(): Boolean { var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { val response = api.stats() if (response != null) { badgeUnread = response.unread @@ -139,7 +140,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun getTags(): List? { // TODO: Store in DB - return if (isConnectionAvailable.value) { + return if (isConnectionAvailable.value && !offlineOverride) { api.tags() } else { // TODO: Compute from database @@ -149,7 +150,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun getSpouts(): Map? { // TODO: Store in DB - return if (isConnectionAvailable.value) { + return if (isConnectionAvailable.value && !offlineOverride) { api.spouts() } else { // TODO: Compute from database @@ -159,7 +160,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun getSources(): ArrayList? { // TODO: Store in DB - return if (isConnectionAvailable.value) { + return if (isConnectionAvailable.value && !offlineOverride) { api.sources() } else { // TODO: Compute from database @@ -178,7 +179,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun markAsReadById(id: Int): Boolean { var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { success = api.markAsRead(id.toString())?.isSuccess == true } return success @@ -197,7 +198,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun unmarkAsReadById(id: Int): Boolean { // TODO: Check internet connection var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { success = api.unmarkAsRead(id.toString())?.isSuccess == true } return success @@ -214,7 +215,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun starrById(id: Int): Boolean { var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { success = api.starr(id.toString())?.isSuccess == true } return success @@ -231,7 +232,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun unstarrById(id: Int): Boolean { var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { success = api.unstarr(id.toString())?.isSuccess == true } return success @@ -240,7 +241,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun markAllAsRead(items: ArrayList): Boolean { var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { success = api.markAllAsRead(items.map { it.id.toString() })?.isSuccess == true } @@ -292,7 +293,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails filter: String ): Boolean { var response = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { response = api.createSourceForVersion( title, url, @@ -309,7 +310,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun deleteSource(id: Int): Boolean { // TODO: Store in DB var success = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { val response = api.deleteSource(id) if (response != null) { success = response.isSuccess @@ -321,7 +322,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun updateRemote(): Boolean { var response = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { response = api.update()?.isSuccess == true } return response @@ -329,7 +330,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails suspend fun login(): Boolean { var result = false - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { try { val response = api.login() result = response?.isSuccess == true @@ -356,7 +357,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails private suspend fun updateApiVersion() { apiMajorVersion = settings.getInt("apiVersionMajor", 0) - if (isConnectionAvailable.value) { + if (isConnectionAvailable.value && !offlineOverride) { val fetchedVersion = api.version() if (fetchedVersion != null) { apiMajorVersion = fetchedVersion.getApiMajorVersion()