Handle the offline override in the repository

This commit is contained in:
davidoskky 2022-08-17 20:04:31 +02:00
parent d4c2373bac
commit 0f3c48dd8e
2 changed files with 20 additions and 19 deletions

View File

@ -153,7 +153,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
val view = binding.root val view = binding.root
fromTabShortcut = intent.getIntExtra("shortcutTab", -1) != -1 fromTabShortcut = intent.getIntExtra("shortcutTab", -1) != -1
offlineShortcut = intent.getBooleanExtra("startOffline", false) repository.offlineOverride = intent.getBooleanExtra("startOffline", false)
if (fromTabShortcut) { if (fromTabShortcut) {
elementsShown = ItemType.fromInt(intent.getIntExtra("shortcutTab", ItemType.UNREAD.position)) elementsShown = ItemType.fromInt(intent.getIntExtra("shortcutTab", ItemType.UNREAD.position))
@ -197,7 +197,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
R.color.refresh_progress_3 R.color.refresh_progress_3
) )
binding.swipeRefreshLayout.setOnRefreshListener { binding.swipeRefreshLayout.setOnRefreshListener {
offlineShortcut = false repository.offlineOverride = false
lastFetchDone = false lastFetchDone = false
handleDrawerItems() handleDrawerItems()
CoroutineScope(Dispatchers.Main).launch { CoroutineScope(Dispatchers.Main).launch {

View File

@ -28,6 +28,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
var searchFilter: String? = null var searchFilter: String? = null
var itemsCaching = settings.getBoolean("items_caching", false) var itemsCaching = settings.getBoolean("items_caching", false)
var offlineOverride = false
var apiMajorVersion = 0 var apiMajorVersion = 0
var badgeUnread = 0 var badgeUnread = 0
@ -49,7 +50,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> { suspend fun getNewerItems(): ArrayList<SelfossModel.Item> {
// TODO: Use the updatedSince parameter // TODO: Use the updatedSince parameter
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
val fetchedItems = api.getItems( val fetchedItems = api.getItems(
displayedItems.type, displayedItems.type,
settings.getString("prefer_api_items_number", "200").toInt(), 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<SelfossModel.Item> { suspend fun getOlderItems(): ArrayList<SelfossModel.Item> {
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
val offset = items.size val offset = items.size
val fetchedItems = api.getItems( val fetchedItems = api.getItems(
displayedItems.type, displayedItems.type,
@ -93,7 +94,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
suspend fun allItems(itemType: ItemType): List<SelfossModel.Item>? { suspend fun allItems(itemType: ItemType): List<SelfossModel.Item>? {
return if (isConnectionAvailable.value) { return if (isConnectionAvailable.value && !offlineOverride) {
api.getItems( api.getItems(
itemType.type, itemType.type,
200, 200,
@ -123,7 +124,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun reloadBadges(): Boolean { suspend fun reloadBadges(): Boolean {
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
val response = api.stats() val response = api.stats()
if (response != null) { if (response != null) {
badgeUnread = response.unread badgeUnread = response.unread
@ -139,7 +140,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun getTags(): List<SelfossModel.Tag>? { suspend fun getTags(): List<SelfossModel.Tag>? {
// TODO: Store in DB // TODO: Store in DB
return if (isConnectionAvailable.value) { return if (isConnectionAvailable.value && !offlineOverride) {
api.tags() api.tags()
} else { } else {
// TODO: Compute from database // TODO: Compute from database
@ -149,7 +150,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun getSpouts(): Map<String, SelfossModel.Spout>? { suspend fun getSpouts(): Map<String, SelfossModel.Spout>? {
// TODO: Store in DB // TODO: Store in DB
return if (isConnectionAvailable.value) { return if (isConnectionAvailable.value && !offlineOverride) {
api.spouts() api.spouts()
} else { } else {
// TODO: Compute from database // TODO: Compute from database
@ -159,7 +160,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun getSources(): ArrayList<SelfossModel.Source>? { suspend fun getSources(): ArrayList<SelfossModel.Source>? {
// TODO: Store in DB // TODO: Store in DB
return if (isConnectionAvailable.value) { return if (isConnectionAvailable.value && !offlineOverride) {
api.sources() api.sources()
} else { } else {
// TODO: Compute from database // TODO: Compute from database
@ -178,7 +179,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun markAsReadById(id: Int): Boolean { suspend fun markAsReadById(id: Int): Boolean {
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
success = api.markAsRead(id.toString())?.isSuccess == true success = api.markAsRead(id.toString())?.isSuccess == true
} }
return success return success
@ -197,7 +198,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun unmarkAsReadById(id: Int): Boolean { suspend fun unmarkAsReadById(id: Int): Boolean {
// TODO: Check internet connection // TODO: Check internet connection
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
success = api.unmarkAsRead(id.toString())?.isSuccess == true success = api.unmarkAsRead(id.toString())?.isSuccess == true
} }
return success return success
@ -214,7 +215,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun starrById(id: Int): Boolean { suspend fun starrById(id: Int): Boolean {
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
success = api.starr(id.toString())?.isSuccess == true success = api.starr(id.toString())?.isSuccess == true
} }
return success return success
@ -231,7 +232,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun unstarrById(id: Int): Boolean { suspend fun unstarrById(id: Int): Boolean {
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
success = api.unstarr(id.toString())?.isSuccess == true success = api.unstarr(id.toString())?.isSuccess == true
} }
return success return success
@ -240,7 +241,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun markAllAsRead(items: ArrayList<SelfossModel.Item>): Boolean { suspend fun markAllAsRead(items: ArrayList<SelfossModel.Item>): Boolean {
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
success = api.markAllAsRead(items.map { it.id.toString() })?.isSuccess == true 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 filter: String
): Boolean { ): Boolean {
var response = false var response = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
response = api.createSourceForVersion( response = api.createSourceForVersion(
title, title,
url, url,
@ -309,7 +310,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun deleteSource(id: Int): Boolean { suspend fun deleteSource(id: Int): Boolean {
// TODO: Store in DB // TODO: Store in DB
var success = false var success = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
val response = api.deleteSource(id) val response = api.deleteSource(id)
if (response != null) { if (response != null) {
success = response.isSuccess success = response.isSuccess
@ -321,7 +322,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun updateRemote(): Boolean { suspend fun updateRemote(): Boolean {
var response = false var response = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
response = api.update()?.isSuccess == true response = api.update()?.isSuccess == true
} }
return response return response
@ -329,7 +330,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
suspend fun login(): Boolean { suspend fun login(): Boolean {
var result = false var result = false
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
try { try {
val response = api.login() val response = api.login()
result = response?.isSuccess == true result = response?.isSuccess == true
@ -356,7 +357,7 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
private suspend fun updateApiVersion() { private suspend fun updateApiVersion() {
apiMajorVersion = settings.getInt("apiVersionMajor", 0) apiMajorVersion = settings.getInt("apiVersionMajor", 0)
if (isConnectionAvailable.value) { if (isConnectionAvailable.value && !offlineOverride) {
val fetchedVersion = api.version() val fetchedVersion = api.version()
if (fetchedVersion != null) { if (fetchedVersion != null) {
apiMajorVersion = fetchedVersion.getApiMajorVersion() apiMajorVersion = fetchedVersion.getApiMajorVersion()