Remove Selfoss Service from Home Activity

Initial implementation of the missing functions in the repository
This commit is contained in:
davide 2022-07-24 14:32:40 +02:00
parent 11eac7b141
commit 924f4da1ec
3 changed files with 36 additions and 16 deletions

View File

@ -34,7 +34,6 @@ import bou.amine.apps.readerforselfossv2.android.persistence.AndroidDeviceDataba
import bou.amine.apps.readerforselfossv2.android.persistence.AndroidDeviceDatabaseService import bou.amine.apps.readerforselfossv2.android.persistence.AndroidDeviceDatabaseService
import bou.amine.apps.readerforselfossv2.android.persistence.database.AppDatabase import bou.amine.apps.readerforselfossv2.android.persistence.database.AppDatabase
import bou.amine.apps.readerforselfossv2.android.persistence.entities.ActionEntity import bou.amine.apps.readerforselfossv2.android.persistence.entities.ActionEntity
import bou.amine.apps.readerforselfossv2.android.persistence.entities.AndroidItemEntity
import bou.amine.apps.readerforselfossv2.android.persistence.migrations.MIGRATION_1_2 import bou.amine.apps.readerforselfossv2.android.persistence.migrations.MIGRATION_1_2
import bou.amine.apps.readerforselfossv2.android.persistence.migrations.MIGRATION_2_3 import bou.amine.apps.readerforselfossv2.android.persistence.migrations.MIGRATION_2_3
import bou.amine.apps.readerforselfossv2.android.persistence.migrations.MIGRATION_3_4 import bou.amine.apps.readerforselfossv2.android.persistence.migrations.MIGRATION_3_4
@ -49,13 +48,11 @@ import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailabl
import bou.amine.apps.readerforselfossv2.android.utils.persistence.toEntity import bou.amine.apps.readerforselfossv2.android.utils.persistence.toEntity
import bou.amine.apps.readerforselfossv2.android.utils.persistence.toView import bou.amine.apps.readerforselfossv2.android.utils.persistence.toView
import bou.amine.apps.readerforselfossv2.repository.Repository import bou.amine.apps.readerforselfossv2.repository.Repository
import bou.amine.apps.readerforselfossv2.utils.DateUtils
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
import bou.amine.apps.readerforselfossv2.rest.SelfossModel import bou.amine.apps.readerforselfossv2.rest.SelfossModel
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
import bou.amine.apps.readerforselfossv2.service.SearchService import bou.amine.apps.readerforselfossv2.service.SearchService
import bou.amine.apps.readerforselfossv2.service.SelfossService import bou.amine.apps.readerforselfossv2.utils.DateUtils
import bou.amine.apps.readerforselfossv2.utils.longHash import bou.amine.apps.readerforselfossv2.utils.longHash
import com.ashokvarma.bottomnavigation.BottomNavigationBar import com.ashokvarma.bottomnavigation.BottomNavigationBar
import com.ashokvarma.bottomnavigation.BottomNavigationItem import com.ashokvarma.bottomnavigation.BottomNavigationItem
@ -92,7 +89,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
private lateinit var dataBase: AndroidDeviceDatabase private lateinit var dataBase: AndroidDeviceDatabase
private lateinit var dbService: AndroidDeviceDatabaseService private lateinit var dbService: AndroidDeviceDatabaseService
private lateinit var searchService: SearchService private lateinit var searchService: SearchService
private lateinit var service: SelfossService<AndroidItemEntity>
private val MENU_PREFERENCES = 12302 private val MENU_PREFERENCES = 12302
private val DRAWER_ID_TAGS = 100101L private val DRAWER_ID_TAGS = 100101L
private val DRAWER_ID_HIDDEN_TAGS = 101100L private val DRAWER_ID_HIDDEN_TAGS = 101100L
@ -204,7 +200,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
dataBase = AndroidDeviceDatabase(applicationContext) dataBase = AndroidDeviceDatabase(applicationContext)
searchService = SearchService(DateUtils(repository.apiMajorVersion)) searchService = SearchService(DateUtils(repository.apiMajorVersion))
dbService = AndroidDeviceDatabaseService(dataBase, searchService) dbService = AndroidDeviceDatabaseService(dataBase, searchService)
service = SelfossService(api, dbService, searchService)
handleBottomBar() handleBottomBar()
handleDrawer() handleDrawer()
@ -1154,7 +1149,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
if (this@HomeActivity.isNetworkAvailable(null, offlineShortcut)) { if (this@HomeActivity.isNetworkAvailable(null, offlineShortcut)) {
CoroutineScope(Dispatchers.Main).launch { CoroutineScope(Dispatchers.Main).launch {
val success = service.readAll(items.map { it.id.toString() }, applicationContext.isNetworkAvailable()) val success = repository.markAllAsRead(items.map { it.id })
if (success) { if (success) {
Toast.makeText( Toast.makeText(
this@HomeActivity, this@HomeActivity,

View File

@ -19,14 +19,14 @@ interface Repository {
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> suspend fun getNewerItems(): ArrayList<SelfossModel.Item>
suspend fun getOlderItems(): ArrayList<SelfossModel.Item> suspend fun getOlderItems(): ArrayList<SelfossModel.Item>
suspend fun reloadBadges(): Boolean suspend fun reloadBadges(): Boolean
fun getTags(): List<SelfossModel.Tag> suspend fun getTags(): List<SelfossModel.Tag>?
suspend fun getSpouts(): Map<String, SelfossModel.Spout>? suspend fun getSpouts(): Map<String, SelfossModel.Spout>?
suspend fun getSources(): ArrayList<SelfossModel.Source>? suspend fun getSources(): ArrayList<SelfossModel.Source>?
suspend fun markAsRead(id: Int): Boolean suspend fun markAsRead(id: Int): Boolean
suspend fun unmarkAsRead(id: Int): Boolean suspend fun unmarkAsRead(id: Int): Boolean
suspend fun starr(id: Int): Boolean suspend fun starr(id: Int): Boolean
suspend fun unstarr(id: Int): Boolean suspend fun unstarr(id: Int): Boolean
fun markAllAsRead(ids: List<Int>): Boolean suspend fun markAllAsRead(ids: List<Int>): Boolean
suspend fun createSource(title: String, suspend fun createSource(title: String,
url: String, url: String,
spout: String, spout: String,

View File

@ -36,8 +36,11 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet
override var apiMajorVersion = 0 override var apiMajorVersion = 0
override var badgeUnread = 0 override var badgeUnread = 0
set(value) {field = if (value < 0) { 0 } else { value } }
override var badgeAll = 0 override var badgeAll = 0
set(value) {field = if (value < 0) { 0 } else { value } }
override var badgeStarred = 0 override var badgeStarred = 0
set(value) {field = if (value < 0) { 0 } else { value } }
init { init {
// TODO: Dispatchers.IO not available in KMM, an alternative solution should be found // TODO: Dispatchers.IO not available in KMM, an alternative solution should be found
@ -121,8 +124,9 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet
return success return success
} }
override fun getTags(): List<SelfossModel.Tag> { override suspend fun getTags(): List<SelfossModel.Tag>? {
TODO("Not yet implemented") // TODO: Check success, store in DB
return api.tags()
} }
override suspend fun getSpouts(): Map<String, SelfossModel.Spout>? { override suspend fun getSpouts(): Map<String, SelfossModel.Spout>? {
@ -144,9 +148,13 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet
override suspend fun unmarkAsRead(id: Int): Boolean { override suspend fun unmarkAsRead(id: Int): Boolean {
// TODO: Check success, store in DB // TODO: Check success, store in DB
api.unmarkAsRead(id.toString()) val success = api.unmarkAsRead(id.toString())?.isSuccess == true
badgeUnread += 1
return true } if (success) {
markAsReadLocally(id)
}
return success
}
override suspend fun starr(id: Int): Boolean { override suspend fun starr(id: Int): Boolean {
// TODO: Check success, store in DB // TODO: Check success, store in DB
@ -162,8 +170,25 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet
return true return true
} }
override fun markAllAsRead(ids: List<Int>): Boolean { override suspend fun markAllAsRead(ids: List<Int>): Boolean {
TODO("Not yet implemented") // TODO: Check Internet connectivity, store in DB
val success = api.markAllAsRead(ids.map { it.toString() })?.isSuccess == true
if (success) {
for (id in ids) {
markAsReadLocally(id)
}
}
return success
}
private fun markAsReadLocally(id: Int) {
// TODO: Mark also in the database
if (items.first {it.id == id}.unread) {
items.first {it.id == id}.unread = false
badgeUnread -= 1
}
} }
override suspend fun createSource( override suspend fun createSource(