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