Perform network connectivity checks in the repository

This commit is contained in:
davidoskky 2022-08-17 15:14:58 +02:00
parent 37fa4a1a8e
commit 4f32097821

View File

@ -48,40 +48,65 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> { suspend fun getNewerItems(): ArrayList<SelfossModel.Item> {
// TODO: Check connectivity, use the updatedSince parameter // TODO: Use the updatedSince parameter
val fetchedItems = api.getItems(displayedItems.type, if (isConnectionAvailable.value) {
settings.getString("prefer_api_items_number", "200").toInt(), val fetchedItems = api.getItems(
offset = 0, displayedItems.type,
tagFilter?.tag, settings.getString("prefer_api_items_number", "200").toInt(),
sourceFilter?.id?.toLong(), offset = 0,
searchFilter, tagFilter?.tag,
null) sourceFilter?.id?.toLong(),
searchFilter,
null
)
if (fetchedItems != null) { if (fetchedItems != null) {
items = ArrayList(fetchedItems) items = ArrayList(fetchedItems)
}
} else {
// TODO: Provide an error message if the connection is not available.
// TODO: Get items from the database
} }
return items return items
} }
suspend fun getOlderItems(): ArrayList<SelfossModel.Item> { suspend fun getOlderItems(): ArrayList<SelfossModel.Item> {
// TODO: Check connectivity if (isConnectionAvailable.value) {
val offset = items.size val offset = items.size
val fetchedItems = api.getItems(displayedItems.type, val fetchedItems = api.getItems(
settings.getString("prefer_api_items_number", "200").toInt(), displayedItems.type,
offset, settings.getString("prefer_api_items_number", "200").toInt(),
tagFilter?.tag, offset,
sourceFilter?.id?.toLong(), tagFilter?.tag,
searchFilter, sourceFilter?.id?.toLong(),
null) searchFilter,
null
)
if (fetchedItems != null) { if (fetchedItems != null) {
appendItems(fetchedItems) appendItems(fetchedItems)
}
} else {
// TODO: Provide an error message
} }
return items return items
} }
suspend fun allItems(itemType: ItemType): List<SelfossModel.Item>? = suspend fun allItems(itemType: ItemType): List<SelfossModel.Item>? {
api.getItems(itemType.type, 200, 0, tagFilter?.tag, sourceFilter?.id?.toLong(), searchFilter, null) return if (isConnectionAvailable.value) {
api.getItems(
itemType.type,
200,
0,
tagFilter?.tag,
sourceFilter?.id?.toLong(),
searchFilter,
null
)
} else {
null
}
}
private fun appendItems(fetchedItems: List<SelfossModel.Item>) { private fun appendItems(fetchedItems: List<SelfossModel.Item>) {
// TODO: Store in DB if enabled by user // TODO: Store in DB if enabled by user
@ -97,35 +122,52 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
suspend fun reloadBadges(): Boolean { suspend fun reloadBadges(): Boolean {
// TODO: Check connectivity, calculate from DB
var success = false var success = false
val response = api.stats() if (isConnectionAvailable.value) {
if (response != null) { val response = api.stats()
badgeUnread = response.unread if (response != null) {
badgeAll = response.total badgeUnread = response.unread
badgeStarred = response.starred badgeAll = response.total
success = true badgeStarred = response.starred
success = true
}
} else {
// TODO: Compute badges from database
} }
return success return success
} }
suspend fun getTags(): List<SelfossModel.Tag>? { suspend fun getTags(): List<SelfossModel.Tag>? {
// TODO: Check success, store in DB // TODO: Store in DB
return api.tags() return if (isConnectionAvailable.value) {
api.tags()
} else {
// TODO: Compute from database
null
}
} }
suspend fun getSpouts(): Map<String, SelfossModel.Spout>? { suspend fun getSpouts(): Map<String, SelfossModel.Spout>? {
// TODO: Check success, store in DB // TODO: Store in DB
return api.spouts() return if (isConnectionAvailable.value) {
api.spouts()
} else {
// TODO: Compute from database
null
}
} }
suspend fun getSources(): ArrayList<SelfossModel.Source>? { suspend fun getSources(): ArrayList<SelfossModel.Source>? {
// TODO: Check success // TODO: Store in DB
return api.sources() return if (isConnectionAvailable.value) {
api.sources()
} else {
// TODO: Compute from database
null
}
} }
suspend fun markAsRead(item: SelfossModel.Item): Boolean { suspend fun markAsRead(item: SelfossModel.Item): Boolean {
// TODO: Check internet connection
val success = markAsReadById(item.id) val success = markAsReadById(item.id)
if (success) { if (success) {
@ -135,11 +177,15 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
suspend fun markAsReadById(id: Int): Boolean { suspend fun markAsReadById(id: Int): Boolean {
// TODO: Check internet connection var success = false
return api.markAsRead(id.toString())?.isSuccess == true if (isConnectionAvailable.value) {
success = api.markAsRead(id.toString())?.isSuccess == true
}
return success
} }
suspend fun unmarkAsRead(item: SelfossModel.Item): Boolean { suspend fun unmarkAsRead(item: SelfossModel.Item): Boolean {
// TODO: Check internet connection
val success = unmarkAsReadById(item.id) val success = unmarkAsReadById(item.id)
if (success) { if (success) {
@ -150,7 +196,11 @@ 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
return api.unmarkAsRead(id.toString())?.isSuccess == true var success = false
if (isConnectionAvailable.value) {
success = api.unmarkAsRead(id.toString())?.isSuccess == true
}
return success
} }
suspend fun starr(item: SelfossModel.Item): Boolean { suspend fun starr(item: SelfossModel.Item): Boolean {
@ -163,8 +213,11 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
suspend fun starrById(id: Int): Boolean { suspend fun starrById(id: Int): Boolean {
// TODO: Check success, store in DB var success = false
return api.starr(id.toString())?.isSuccess == true if (isConnectionAvailable.value) {
success = api.starr(id.toString())?.isSuccess == true
}
return success
} }
suspend fun unstarr(item: SelfossModel.Item): Boolean { suspend fun unstarr(item: SelfossModel.Item): Boolean {
@ -177,14 +230,19 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
suspend fun unstarrById(id: Int): Boolean { suspend fun unstarrById(id: Int): Boolean {
// TODO: Check internet connection var success = false
return api.unstarr(id.toString())?.isSuccess == true if (isConnectionAvailable.value) {
success = api.unstarr(id.toString())?.isSuccess == true
}
return success
} }
suspend fun markAllAsRead(items: ArrayList<SelfossModel.Item>): Boolean {
// TODO: Check Internet connectivity, store in DB
val success = api.markAllAsRead(items.map { it.id.toString() })?.isSuccess == true suspend fun markAllAsRead(items: ArrayList<SelfossModel.Item>): Boolean {
var success = false
if (isConnectionAvailable) {
success = api.markAllAsRead(items.map { it.id.toString() })?.isSuccess == true
}
if (success) { if (success) {
for (item in items) { for (item in items) {
@ -233,45 +291,51 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
tags: String, tags: String,
filter: String filter: String
): Boolean { ): Boolean {
// TODO: Check connectivity var response = false
val response = api.createSourceForVersion( if (isConnectionAvailable.value) {
title, response = api.createSourceForVersion(
url, title,
spout, url,
tags, spout,
filter, tags,
apiMajorVersion filter,
) apiMajorVersion
)?.isSuccess == true
}
return response != null return response
} }
suspend fun deleteSource(id: Int): Boolean { suspend fun deleteSource(id: Int): Boolean {
// TODO: Check connectivity, store in DB // TODO: Store in DB
var success = false var success = false
val response = api.deleteSource(id) if (isConnectionAvailable.value) {
if (response != null) { val response = api.deleteSource(id)
success = response.isSuccess if (response != null) {
success = response.isSuccess
}
} }
return success return success
} }
suspend fun updateRemote(): Boolean { suspend fun updateRemote(): Boolean {
// TODO: Handle connectivity issues var response = false
val response = api.update() if (isConnectionAvailable.value) {
return response?.isSuccess ?: false response = api.update()?.isSuccess == true
}
return response
} }
suspend fun login(): Boolean { suspend fun login(): Boolean {
var result = false var result = false
try { if (isConnectionAvailable.value) {
val response = api.login() try {
if (response != null && response.isSuccess) { val response = api.login()
result = true result = response?.isSuccess == true
} catch (cause: Throwable) {
Napier.e(cause.stackTraceToString(), tag = "RepositoryImpl.updateRemote")
} }
} catch (cause: Throwable) {
Napier.e(cause.stackTraceToString(),tag = "RepositoryImpl.updateRemote")
} }
return result return result
} }
@ -290,13 +354,14 @@ class Repository(private val api: SelfossApi, private val apiDetails: ApiDetails
} }
private suspend fun updateApiVersion() { private suspend fun updateApiVersion() {
// TODO: Handle connectivity issues apiMajorVersion = settings.getInt("apiVersionMajor", 0)
val fetchedVersion = api.version()
if (fetchedVersion != null) { if (isConnectionAvailable.value) {
apiMajorVersion = fetchedVersion.getApiMajorVersion() val fetchedVersion = api.version()
settings.putInt("apiVersionMajor", apiMajorVersion) if (fetchedVersion != null) {
} else { apiMajorVersion = fetchedVersion.getApiMajorVersion()
apiMajorVersion = settings.getInt("apiVersionMajor", 0) settings.putInt("apiVersionMajor", apiMajorVersion)
}
} }
} }