This commit is contained in:
kunfei
2023-03-16 19:35:00 +08:00
parent 1ef1359b28
commit 95a32d6761
5 changed files with 11 additions and 53 deletions
@@ -2,6 +2,7 @@ package io.legado.app.data.dao
import androidx.room.*
import io.legado.app.data.entities.Bookmark
import kotlinx.coroutines.flow.Flow
@Dao
@@ -14,6 +15,9 @@ interface BookmarkDao {
)
val all: List<Bookmark>
@Query("select * from bookmarks order by bookName collate localized, bookAuthor collate localized, chapterIndex, chapterPos")
fun flowAll(): Flow<List<Bookmark>>
@Query(
"""select * from bookmarks
where bookName = :bookName and bookAuthor = :bookAuthor
@@ -6,16 +6,17 @@ import android.view.MenuItem
import androidx.activity.viewModels
import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.data.appDb
import io.legado.app.data.entities.Bookmark
import io.legado.app.databinding.ActivityAllBookmarkBinding
import io.legado.app.ui.document.HandleFileContract
import io.legado.app.utils.launch
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.launch
class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookmarkViewModel>(),
BookmarkAdapter.Callback,
BookmarkDialog.Callback {
BookmarkAdapter.Callback {
override val viewModel by viewModels<AllBookmarkViewModel>()
override val binding by viewBinding(ActivityAllBookmarkBinding::inflate)
@@ -30,8 +31,10 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
override fun onActivityCreated(savedInstanceState: Bundle?) {
initView()
viewModel.initData {
adapter.setItems(it)
launch {
appDb.bookmarkDao.flowAll().collect {
adapter.setItems(it)
}
}
}
@@ -56,15 +59,4 @@ class AllBookmarkActivity : VMBaseActivity<ActivityAllBookmarkBinding, AllBookma
showDialogFragment(BookmarkDialog(bookmark, position))
}
override fun upBookmark(pos: Int, bookmark: Bookmark) {
adapter.setItem(pos, bookmark)
}
override fun deleteBookmark(pos: Int) {
adapter.getItem(pos)?.let {
viewModel.deleteBookmark(it)
}
adapter.removeItem(pos)
}
}
@@ -6,7 +6,6 @@ import android.net.Uri
import androidx.documentfile.provider.DocumentFile
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.Bookmark
import io.legado.app.utils.*
import java.io.File
import java.io.FileOutputStream
@@ -16,20 +15,6 @@ import java.util.*
class AllBookmarkViewModel(application: Application) : BaseViewModel(application) {
fun initData(onSuccess: (bookmarks: List<Bookmark>) -> Unit) {
execute {
appDb.bookmarkDao.all
}.onSuccess {
onSuccess.invoke(it)
}
}
fun deleteBookmark(bookmark: Bookmark) {
execute {
appDb.bookmarkDao.delete(bookmark)
}
}
@Suppress("BlockingMethodInNonBlockingContext")
@SuppressLint("SimpleDateFormat")
fun saveToFile(treeUri: Uri) {
@@ -61,7 +61,6 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
withContext(IO) {
appDb.bookmarkDao.insert(bookmark)
}
getCallback()?.upBookmark(editPos, bookmark)
dismiss()
}
}
@@ -70,24 +69,10 @@ class BookmarkDialog() : BaseDialogFragment(R.layout.dialog_bookmark, true) {
withContext(IO) {
appDb.bookmarkDao.delete(bookmark)
}
getCallback()?.deleteBookmark(editPos)
dismiss()
}
}
}
}
private fun getCallback(): Callback? {
return (parentFragment as? Callback)
?: activity as? Callback
}
interface Callback {
fun upBookmark(pos: Int, bookmark: Bookmark)
fun deleteBookmark(pos: Int)
}
}
@@ -25,7 +25,6 @@ import kotlinx.coroutines.withContext
class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark),
BookmarkAdapter.Callback,
BookmarkDialog.Callback,
TocViewModel.BookmarkCallBack {
override val viewModel by activityViewModels<TocViewModel>()
private val binding by viewBinding(FragmentBookmarkBinding::bind)
@@ -88,11 +87,4 @@ class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark
showDialogFragment(BookmarkDialog(bookmark, pos))
}
override fun upBookmark(pos: Int, bookmark: Bookmark) {
adapter.setItem(pos, bookmark)
}
override fun deleteBookmark(pos: Int) {
adapter.removeItem(pos)
}
}