|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|
} |