mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
use db to save archive status changes and handle deletion from web reader
This commit is contained in:
parent
8aec8005ce
commit
89099d4431
4 changed files with 73 additions and 10 deletions
|
|
@ -0,0 +1,56 @@
|
|||
package app.omnivore.omnivore.dataService
|
||||
|
||||
import app.omnivore.omnivore.models.ServerSyncStatus
|
||||
import app.omnivore.omnivore.networking.archiveSavedItem
|
||||
import app.omnivore.omnivore.networking.deleteSavedItem
|
||||
import app.omnivore.omnivore.networking.unarchiveSavedItem
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
suspend fun DataService.deleteSavedItem(itemID: String) {
|
||||
withContext(Dispatchers.IO) {
|
||||
val savedItem = db.savedItemDao().findById(itemID = itemID) ?: return@withContext
|
||||
savedItem.serverSyncStatus = ServerSyncStatus.NEEDS_DELETION.rawValue
|
||||
db.savedItemDao().update(savedItem)
|
||||
|
||||
val isUpdatedOnServer = networker.deleteSavedItem(itemID)
|
||||
|
||||
if (isUpdatedOnServer) {
|
||||
db.savedItemDao().deleteById(itemID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun DataService.archiveSavedItem(itemID: String) {
|
||||
withContext(Dispatchers.IO) {
|
||||
val savedItem = db.savedItemDao().findById(itemID = itemID) ?: return@withContext
|
||||
|
||||
savedItem.serverSyncStatus = ServerSyncStatus.NEEDS_UPDATE.rawValue
|
||||
savedItem.isArchived = true
|
||||
db.savedItemDao().update(savedItem)
|
||||
|
||||
val isUpdatedOnServer = networker.archiveSavedItem(itemID)
|
||||
|
||||
if (isUpdatedOnServer) {
|
||||
savedItem.serverSyncStatus = ServerSyncStatus.IS_SYNCED.rawValue
|
||||
db.savedItemDao().update(savedItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun DataService.unarchiveSavedItem(itemID: String) {
|
||||
withContext(Dispatchers.IO) {
|
||||
val savedItem = db.savedItemDao().findById(itemID = itemID) ?: return@withContext
|
||||
|
||||
savedItem.serverSyncStatus = ServerSyncStatus.NEEDS_UPDATE.rawValue
|
||||
savedItem.isArchived = false
|
||||
db.savedItemDao().update(savedItem)
|
||||
|
||||
val isUpdatedOnServer = networker.unarchiveSavedItem(itemID)
|
||||
|
||||
if (isUpdatedOnServer) {
|
||||
savedItem.serverSyncStatus = ServerSyncStatus.IS_SYNCED.rawValue
|
||||
db.savedItemDao().update(savedItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ data class SavedItem(
|
|||
val author: String?,
|
||||
val publishDate: String?,
|
||||
val slug: String,
|
||||
val isArchived: Boolean,
|
||||
var isArchived: Boolean,
|
||||
val contentReader: String? = null,
|
||||
val content: String? = null,
|
||||
val createdId: String? = null,
|
||||
|
|
@ -92,6 +92,9 @@ interface SavedItemDao {
|
|||
@Query("SELECT * FROM savedItem")
|
||||
fun getAll(): List<SavedItem>
|
||||
|
||||
@Query("SELECT * FROM savedItem WHERE savedItemId = :itemID")
|
||||
fun findById(itemID: String): SavedItem?
|
||||
|
||||
@Query("SELECT * FROM savedItem WHERE serverSyncStatus != 0")
|
||||
fun getUnSynced(): List<SavedItem>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.*
|
|||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.TopAppBar
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Menu
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
|
|
@ -97,12 +98,12 @@ fun WebReaderLoadingContainer(slug: String, webReaderViewModel: WebReaderViewMod
|
|||
title = {},
|
||||
actions = {
|
||||
// Disabling menu until we implement local persistence
|
||||
// IconButton(onClick = { isMenuExpanded = true }) {
|
||||
// Icon(
|
||||
// imageVector = Icons.Filled.Menu,
|
||||
// contentDescription = null
|
||||
// )
|
||||
// }
|
||||
IconButton(onClick = { isMenuExpanded = true }) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Menu,
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
IconButton(onClick = { showWebPreferencesDialog = true }) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Settings, // TODO: set a better icon
|
||||
|
|
|
|||
|
|
@ -8,6 +8,9 @@ import androidx.lifecycle.viewModelScope
|
|||
import app.omnivore.omnivore.DatastoreKeys
|
||||
import app.omnivore.omnivore.DatastoreRepository
|
||||
import app.omnivore.omnivore.dataService.DataService
|
||||
import app.omnivore.omnivore.dataService.archiveSavedItem
|
||||
import app.omnivore.omnivore.dataService.deleteSavedItem
|
||||
import app.omnivore.omnivore.dataService.unarchiveSavedItem
|
||||
import app.omnivore.omnivore.persistence.entities.SavedItem
|
||||
import app.omnivore.omnivore.networking.*
|
||||
import app.omnivore.omnivore.ui.library.SavedItemAction
|
||||
|
|
@ -91,19 +94,19 @@ class WebReaderViewModel @Inject constructor(
|
|||
when (action) {
|
||||
SavedItemAction.Delete -> {
|
||||
viewModelScope.launch {
|
||||
networker.deleteSavedItem(itemID)
|
||||
dataService.deleteSavedItem(itemID)
|
||||
popToLibraryView(itemID)
|
||||
}
|
||||
}
|
||||
SavedItemAction.Archive -> {
|
||||
viewModelScope.launch {
|
||||
networker.archiveSavedItem(itemID)
|
||||
dataService.archiveSavedItem(itemID)
|
||||
popToLibraryView(itemID)
|
||||
}
|
||||
}
|
||||
SavedItemAction.Unarchive -> {
|
||||
viewModelScope.launch {
|
||||
networker.unarchiveSavedItem(itemID)
|
||||
dataService.unarchiveSavedItem(itemID)
|
||||
popToLibraryView(itemID)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue