优化
This commit is contained in:
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user