Delete sources from DB and reload items on source deletion.
This commit is contained in:
parent
8c83a9408b
commit
27eafe4ff4
@ -78,9 +78,9 @@ class SourcesListAdapter(
|
|||||||
val deleteBtn: Button = mView.findViewById(R.id.deleteBtn)
|
val deleteBtn: Button = mView.findViewById(R.id.deleteBtn)
|
||||||
|
|
||||||
deleteBtn.setOnClickListener {
|
deleteBtn.setOnClickListener {
|
||||||
val (id) = items[bindingAdapterPosition]
|
val (id, title) = items[bindingAdapterPosition]
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val successfullyDeletedSource = repository.deleteSource(id)
|
val successfullyDeletedSource = repository.deleteSource(id, title)
|
||||||
if (successfullyDeletedSource) {
|
if (successfullyDeletedSource) {
|
||||||
items.removeAt(bindingAdapterPosition)
|
items.removeAt(bindingAdapterPosition)
|
||||||
notifyItemRemoved(bindingAdapterPosition)
|
notifyItemRemoved(bindingAdapterPosition)
|
||||||
|
@ -58,6 +58,7 @@ class RepositoryTest {
|
|||||||
data = SelfossModel.Stats(NUMBER_ARTICLES, NUMBER_UNREAD, NUMBER_STARRED)
|
data = SelfossModel.Stats(NUMBER_ARTICLES, NUMBER_UNREAD, NUMBER_STARRED)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
every { db.itemsQueries.deleteItemsWhereSource(any()) } returns Unit
|
||||||
every { db.itemsQueries.items().executeAsList() } returns generateTestDBItems()
|
every { db.itemsQueries.items().executeAsList() } returns generateTestDBItems()
|
||||||
every { db.tagsQueries.deleteAllTags() } returns Unit
|
every { db.tagsQueries.deleteAllTags() } returns Unit
|
||||||
every { db.tagsQueries.transaction(any(), any()) } returns Unit
|
every { db.tagsQueries.transaction(any(), any()) } returns Unit
|
||||||
@ -798,10 +799,11 @@ class RepositoryTest {
|
|||||||
initializeRepository()
|
initializeRepository()
|
||||||
var response: Boolean
|
var response: Boolean
|
||||||
runBlocking {
|
runBlocking {
|
||||||
response = repository.deleteSource(5)
|
response = repository.deleteSource(5, "src")
|
||||||
}
|
}
|
||||||
|
|
||||||
coVerify(exactly = 1) { api.deleteSource(5) }
|
coVerify(exactly = 1) { api.deleteSource(5) }
|
||||||
|
coVerify(exactly = 1) { db.itemsQueries.deleteItemsWhereSource("src") }
|
||||||
assertSame(true, response)
|
assertSame(true, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -812,10 +814,11 @@ class RepositoryTest {
|
|||||||
initializeRepository()
|
initializeRepository()
|
||||||
var response: Boolean
|
var response: Boolean
|
||||||
runBlocking {
|
runBlocking {
|
||||||
response = repository.deleteSource(5)
|
response = repository.deleteSource(5, "src")
|
||||||
}
|
}
|
||||||
|
|
||||||
coVerify(exactly = 1) { api.deleteSource(5) }
|
coVerify(exactly = 1) { api.deleteSource(5) }
|
||||||
|
coVerify(exactly = 0) { db.itemsQueries.deleteItemsWhereSource("src") }
|
||||||
assertSame(false, response)
|
assertSame(false, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -826,10 +829,11 @@ class RepositoryTest {
|
|||||||
initializeRepository(MutableStateFlow(false))
|
initializeRepository(MutableStateFlow(false))
|
||||||
var response: Boolean
|
var response: Boolean
|
||||||
runBlocking {
|
runBlocking {
|
||||||
response = repository.deleteSource(5)
|
response = repository.deleteSource(5, "src")
|
||||||
}
|
}
|
||||||
|
|
||||||
coVerify(exactly = 0) { api.deleteSource(5) }
|
coVerify(exactly = 0) { api.deleteSource(5) }
|
||||||
|
coVerify(exactly = 1) { db.itemsQueries.deleteItemsWhereSource("src") }
|
||||||
assertSame(false, response)
|
assertSame(false, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,13 +359,20 @@ class Repository(
|
|||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun deleteSource(id: Int): Boolean {
|
suspend fun deleteSource(id: Int, title: String): Boolean {
|
||||||
var success = false
|
var success = false
|
||||||
if (isNetworkAvailable()) {
|
if (isNetworkAvailable()) {
|
||||||
val response = api.deleteSource(id)
|
val response = api.deleteSource(id)
|
||||||
success = response.isSuccess
|
success = response.isSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We filter on success or if the network isn't available
|
||||||
|
if (success || !isNetworkAvailable()) {
|
||||||
|
items = ArrayList(items.filter { it.sourcetitle != title })
|
||||||
|
setReaderItems(items)
|
||||||
|
db.itemsQueries.deleteItemsWhereSource(title)
|
||||||
|
}
|
||||||
|
|
||||||
return success
|
return success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,5 +27,8 @@ INSERT OR REPLACE INTO ITEM VALUES ?;
|
|||||||
deleteItem:
|
deleteItem:
|
||||||
DELETE FROM ITEM WHERE `id` = ?;
|
DELETE FROM ITEM WHERE `id` = ?;
|
||||||
|
|
||||||
|
deleteItemsWhereSource:
|
||||||
|
DELETE FROM ITEM WHERE `sourcetitle` = ?;
|
||||||
|
|
||||||
updateItem:
|
updateItem:
|
||||||
UPDATE ITEM SET `datetime` = ?, `title` = ?, `content` = ?, `unread` = ?, `starred` = ?, `thumbnail` = ?, `icon` = ?, `link` = ?, `sourcetitle` = ?, `tags` = ? WHERE `id` = ?;
|
UPDATE ITEM SET `datetime` = ?, `title` = ?, `content` = ?, `unread` = ?, `starred` = ?, `thumbnail` = ?, `icon` = ?, `link` = ?, `sourcetitle` = ?, `tags` = ? WHERE `id` = ?;
|
Loading…
Reference in New Issue
Block a user