feat: webdav书籍排序

添加 按更新时间排序,按文件名排序的选项。
默认排序规则为按文件更新时间倒序排列
This commit is contained in:
谢意帆
2022-07-03 15:26:21 +08:00
parent 9b1b0af5ff
commit 9897a3ffcf
9 changed files with 79 additions and 12 deletions
@@ -16,12 +16,16 @@ import io.legado.app.ui.book.remote.manager.RemoteBookWebDav
import io.legado.app.ui.book.source.manage.BookSourceActivity
import io.legado.app.ui.widget.SelectActionBar
import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.cnCompare
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import java.io.File
import java.util.ArrayList
/**
* 展示远程书籍
@@ -36,6 +40,8 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
private val adapter by lazy { RemoteBookAdapter(this, this) }
private val waitDialog by lazy { WaitDialog(this) }
private var groupMenu: SubMenu? = null
private var sortKey = Sort.Default
private var sortAscending = false
override fun onActivityCreated(savedInstanceState: Bundle?) {
binding.titleBar.setTitle(R.string.remote_book)
initView()
@@ -51,13 +57,62 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
binding.selectActionBar.setCallBack(this)
}
private fun sortCheck(sortKey: Sort) {
if (this.sortKey == sortKey) {
sortAscending = !sortAscending
} else {
sortAscending = true
this.sortKey = sortKey
}
}
private fun initData() {
binding.refreshProgressBar.isAutoLoading = true
launch {
viewModel.dataFlow.conflate().collect { remoteBooks ->
viewModel.dataFlow.conflate().map { remoteBooks ->
val dirList = ArrayList<RemoteBook>()
val bookList = ArrayList<RemoteBook>()
remoteBooks.forEach {
if (it.isDir)
dirList.add(it)
else
bookList.add(it)
}
//默认情况下,为按修改时间倒序显示
if (sortAscending) when (sortKey) {
Sort.Name -> {
dirList.sortedBy { it.filename } +
bookList.sortedBy { it.filename }
}
Sort.UpdateTime -> {
dirList.sortedBy { it.lastModify } +
bookList.sortedBy { it.lastModify }
}
else -> dirList + bookList
}
else when (sortKey) {
Sort.Name -> {
dirList.sortedByDescending { it.filename } +
bookList.sortedByDescending { it.filename }
}
Sort.UpdateTime -> {
dirList.sortedByDescending { it.lastModify } +
bookList.sortedByDescending { it.lastModify }
}
//按修改时间倒序显示
else -> {
dirList.sortedByDescending { it.lastModify } +
bookList.sortedByDescending { it.lastModify }
}
}
}.conflate().collect { sortedRemoteBooks ->
binding.refreshProgressBar.isAutoLoading = false
binding.tvEmptyMsg.isGone = remoteBooks.isNotEmpty()
adapter.setItems(remoteBooks)
binding.tvEmptyMsg.isGone = sortedRemoteBooks.isNotEmpty()
adapter.setItems(sortedRemoteBooks)
delay(500)
}
}
upPath()
@@ -81,20 +136,20 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
R.id.menu_sort_auto -> {
item.isChecked = true
toastOnUi("menu_sort_auto")
//sortCheck(BookSourceActivity.Sort.Weight)
//upBookSource(searchView.query?.toString())
sortCheck(Sort.Default)
upPath()
}
R.id.menu_sort_name -> {
item.isChecked = true
toastOnUi("menu_sort_name")
//sortCheck(BookSourceActivity.Sort.Name)
//upBookSource(searchView.query?.toString())
sortCheck(Sort.Name)
upPath()
}
R.id.menu_sort_time -> {
item.isChecked = true
toastOnUi("menu_sort_time")
//sortCheck(BookSourceActivity.Sort.Update)
//upBookSource(searchView.query?.toString())
sortCheck(Sort.UpdateTime)
upPath()
}
}
return super.onCompatOptionsItemSelected(item)
@@ -165,4 +220,8 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
override fun upCountView() {
binding.selectActionBar.upCountView(adapter.selected.size, adapter.checkableCount)
}
enum class Sort {
Default, Name, UpdateTime
}
}