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 e110dab..218a67d 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 @@ -937,6 +937,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar ) { fun doGetAccordingToTab() { when (elementsShown) { + // TODO: These three functions are not required, one is enough UNREAD_SHOWN -> getUnRead(appendResults) READ_SHOWN -> getRead(appendResults) FAV_SHOWN -> getStarred(appendResults) @@ -957,11 +958,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar private fun getUnRead(appendResults: Boolean = false) { CoroutineScope(Dispatchers.Main).launch { binding.swipeRefreshLayout.isRefreshing = true - val apiItems = service.getUnreadItems(itemsNumber, offset, applicationContext.isNetworkAvailable()) - if (appendResults) { - apiItems?.let { items.addAll(it) } + repository.selectedType = "unread" + items = if (appendResults) { + repository.getNewerItems() } else { - items = apiItems.orEmpty() as ArrayList + repository.getOlderItems() } binding.swipeRefreshLayout.isRefreshing = false handleListResult() @@ -971,11 +972,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar private fun getRead(appendResults: Boolean = false) { CoroutineScope(Dispatchers.Main).launch { binding.swipeRefreshLayout.isRefreshing = true - val apiItems = service.getReadItems(itemsNumber, offset, applicationContext.isNetworkAvailable()) - if (appendResults) { - apiItems?.let { items.addAll(it) } + repository.selectedType = "all" + items = if (appendResults) { + repository.getNewerItems() } else { - items = apiItems.orEmpty() as ArrayList + repository.getOlderItems() } binding.swipeRefreshLayout.isRefreshing = false handleListResult() @@ -985,11 +986,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar private fun getStarred(appendResults: Boolean = false) { CoroutineScope(Dispatchers.Main).launch { binding.swipeRefreshLayout.isRefreshing = true - val apiItems = service.getStarredItems(itemsNumber, offset, applicationContext.isNetworkAvailable()) - if (appendResults) { - apiItems?.let { items.addAll(it) } + repository.selectedType = "starred" + items = if (appendResults) { + repository.getNewerItems() } else { - items = apiItems.orEmpty() as ArrayList + repository.getOlderItems() } binding.swipeRefreshLayout.isRefreshing = false handleListResult() diff --git a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/Repository.kt b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/Repository.kt index 51abb07..3bc6c95 100644 --- a/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/Repository.kt +++ b/shared/src/commonMain/kotlin/bou/amine/apps/readerforselfossv2/repository/Repository.kt @@ -9,6 +9,8 @@ interface Repository { var selectedItems: ArrayList var baseUrl: String + var selectedType: String + // API var apiMajorVersion: Int 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 a4d9030..f4db7f8 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 @@ -24,7 +24,7 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet override var baseUrl = apiDetails.getBaseUrl() // TODO: Validate the string in the setter - private var selectedType = "new" + override var selectedType = "read" private var selectedTag: SelfossModel.Tag? = null private var selectedSource: SelfossModel.Source? = null private var search: String? = null @@ -41,7 +41,7 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet override suspend fun getNewerItems(): ArrayList { // TODO: Check connectivity val fetchedItems = api.getItems(selectedType, - settings.getInt("prefer_api_items_number", 200), + settings.getString("prefer_api_items_number", "200").toInt(), offset = 0, selectedTag?.tag, selectedSource?.id?.toLong(), @@ -50,14 +50,14 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet if (fetchedItems != null) { storeItems(fetchedItems) } - return selectedItems + return filterSelectedItems(items) } override suspend fun getOlderItems(): ArrayList { // TODO: Check connectivity val offset = selectedItems.size val fetchedItems = api.getItems(selectedType, - settings.getInt("prefer_api_items_number", 200), + settings.getString("prefer_api_items_number", "200").toInt(), offset, selectedTag?.tag, selectedSource?.id?.toLong(), @@ -66,7 +66,7 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet if (fetchedItems != null) { storeItems(fetchedItems) } - return selectedItems + return filterSelectedItems(items) } private fun storeItems(fetchedItems: List) { @@ -81,7 +81,22 @@ class RepositoryImpl(private val api: SelfossApi, private val apiDetails: ApiDet private fun sortItems(items: ArrayList) { val dateUtils = DateUtils(apiMajorVersion) - items.sortBy { dateUtils.parseDate(it.datetime) } + items.sortByDescending { dateUtils.parseDate(it.datetime) } + } + + private fun filterSelectedItems(items: ArrayList): ArrayList { + val tmpItems = ArrayList(items) + if (selectedType == "unread") { + tmpItems.removeAll { !it.unread } + } else if (selectedType == "starred") { + tmpItems.removeAll { !it.starred } + } + + if (selectedTag != null) { + tmpItems.removeAll { !it.tags.contains(selectedTag!!.tag) } + } + + return tmpItems } override fun stats(): SelfossModel.Stats {