Allow offline filtering #75

Merged
AmineL merged 6 commits from davidoskky/ReaderForSelfoss-multiplatform:offline_filters into master 2022-10-14 07:18:43 +00:00
3 changed files with 69 additions and 8 deletions

View File

@ -66,12 +66,19 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
} else {
if (appSettingsService.isItemCachingEnabled()) {
fromDB = true
var dbItems = getDBItems().filter {
displayedItems == ItemType.ALL ||
(it.unread && displayedItems == ItemType.UNREAD) ||

This should be something like this.

                    val dbItems = getDBItems().filter {
                        displayedItems == ItemType.ALL ||
                                (it.unread && displayedItems == ItemType.UNREAD) ||
                                (it.starred && displayedItems == ItemType.STARRED)
                    }
                    if (tagFilter != null) {
                        dbItems = dbItems.filter {
                            tagFilter == null || it.tags.contains(tagFilter!!.tag)
                        }
                    }
                    if (sourceFilter!= null) {
                        dbItems = dbItems.filter {
                            sourceFilter == null || it.sourcetitle == sourceFilter!!.title
                        }
                    }
                    return dbItems.map { it.toView() }
This should be something like this. ``` val dbItems = getDBItems().filter { displayedItems == ItemType.ALL || (it.unread && displayedItems == ItemType.UNREAD) || (it.starred && displayedItems == ItemType.STARRED) } if (tagFilter != null) { dbItems = dbItems.filter { tagFilter == null || it.tags.contains(tagFilter!!.tag) } } if (sourceFilter!= null) { dbItems = dbItems.filter { sourceFilter == null || it.sourcetitle == sourceFilter!!.title } } return dbItems.map { it.toView() } ```
(it.starred && displayedItems == ItemType.STARRED)
}
if (tagFilter != null) {
dbItems = dbItems.filter { it.tags.split(',').contains(tagFilter!!.tag) }

This should be dbItems = dbItems.filter { it.tags.contains(tagFilter!!.tag) } (with dbItems being a var). Else, it does not filter anything.

This should be `dbItems = dbItems.filter { it.tags.contains(tagFilter!!.tag) }` (with `dbItems` being a var). Else, it does not filter anything.
}
if (sourceFilter != null) {
dbItems = dbItems.filter { it.sourcetitle == sourceFilter!!.title }

This should be dbItems = dbItems.filter { it.tags.contains(tagFilter!!.tag) } (with dbItems being a var). Else, it does not filter anything.

This should be `dbItems = dbItems.filter { it.tags.contains(tagFilter!!.tag) }` (with `dbItems` being a var). Else, it does not filter anything.

Right... I didn't write the tests correctly and assumed that worked...

Right... I didn't write the tests correctly and assumed that worked...
}
fetchedItems = SelfossModel.StatusAndData.succes(
getDBItems().filter {
displayedItems == ItemType.ALL ||
(it.unread && displayedItems == ItemType.UNREAD) ||
(it.starred && displayedItems == ItemType.STARRED)
}.map { it.toView() }
dbItems.map { it.toView() }
)
}
}

View File

@ -65,6 +65,6 @@ fun SelfossModel.Item.toEntity(): ITEM =
this.thumbnail,
this.icon,
this.link,
this.title.getHtmlDecoded(),
this.sourcetitle.getHtmlDecoded(),
this.tags.joinToString(",")
)

View File

@ -173,6 +173,60 @@ class RepositoryTest() {
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
}
@Test
fun `Get newer items without connectivity and tag filter`() {
val itemParameter1 = FakeItemParameters()
val itemParameter2 = FakeItemParameters()
val itemParameter3 = FakeItemParameters()
itemParameter2.tags = "Test, Stuff"
itemParameter2.id = "2"
itemParameter3.tags = "Other, Tag"
itemParameter3.id = "3"
coEvery { db.itemsQueries.items().executeAsList() } returns generateTestDBItems(itemParameter1) +
generateTestDBItems(itemParameter2) +
generateTestDBItems(itemParameter3)
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
every { appSettingsService.isItemCachingEnabled() } returns true
val repository = Repository(api, appSettingsService, connectivityStatus, db)
repository.tagFilter = SelfossModel.Tag("Test", "red", 3)
runBlocking {
repository.getNewerItems()
}
assertSame(repository.items.size, 1)
coVerify(exactly = 0) { api.getItems("unread", 0, null, null, null, null, any()) }
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
}
@Test
fun `Get newer items without connectivity and source filter`() {
val itemParameter1 = FakeItemParameters()
val itemParameter2 = FakeItemParameters()
val itemParameter3 = FakeItemParameters()
itemParameter2.sourcetitle = "Test"
itemParameter2.id = "2"
itemParameter3.sourcetitle = "Other"
itemParameter3.id = "3"
coEvery { db.itemsQueries.items().executeAsList() } returns generateTestDBItems(itemParameter1) +
generateTestDBItems(itemParameter2) +
generateTestDBItems(itemParameter3)
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
every { appSettingsService.isItemCachingEnabled() } returns true
val repository = Repository(api, appSettingsService, connectivityStatus, db)
repository.sourceFilter = SelfossModel.Source(1, "Test", listOf("tags"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png")
runBlocking {
repository.getNewerItems()
}
assertSame(repository.items.size, 1)
coVerify(exactly = 0) { api.getItems("unread", 0, null, null, null, null, any()) }
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
}
@Test
fun `Get older items`() {
coEvery { api.getItems(any(), any(), any(), any(), any(), any(), any()) } returns
@ -998,6 +1052,6 @@ class FakeItemParameters() {
val thumbnail = null
val icon = "ba79e238383ce83c23a169929c8906ef.png"
val link = "https://ilblogdellasci.wordpress.com/2022/09/09/etica-della-ricerca-sotto-i-riflettori/"
val sourcetitle = "La Chimica e la Società"
val tags = "Chimica, Testing"
var sourcetitle = "La Chimica e la Società"
var tags = "Chimica, Testing"
}