|
|
@ -13,19 +13,14 @@ import io.legado.app.databinding.ActivityImportBookBinding |
|
|
|
import io.legado.app.lib.theme.backgroundColor |
|
|
|
import io.legado.app.lib.theme.backgroundColor |
|
|
|
import io.legado.app.ui.about.AppLogDialog |
|
|
|
import io.legado.app.ui.about.AppLogDialog |
|
|
|
import io.legado.app.ui.book.remote.manager.RemoteBookWebDav |
|
|
|
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.SelectActionBar |
|
|
|
import io.legado.app.ui.widget.dialog.WaitDialog |
|
|
|
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.showDialogFragment |
|
|
|
import io.legado.app.utils.toastOnUi |
|
|
|
|
|
|
|
import io.legado.app.utils.viewbindingdelegate.viewBinding |
|
|
|
import io.legado.app.utils.viewbindingdelegate.viewBinding |
|
|
|
import kotlinx.coroutines.delay |
|
|
|
import kotlinx.coroutines.delay |
|
|
|
import kotlinx.coroutines.flow.conflate |
|
|
|
import kotlinx.coroutines.flow.conflate |
|
|
|
import kotlinx.coroutines.flow.map |
|
|
|
|
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import java.io.File |
|
|
|
import java.io.File |
|
|
|
import java.util.ArrayList |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 展示远程书籍 |
|
|
|
* 展示远程书籍 |
|
|
@ -40,8 +35,6 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV |
|
|
|
private val adapter by lazy { RemoteBookAdapter(this, this) } |
|
|
|
private val adapter by lazy { RemoteBookAdapter(this, this) } |
|
|
|
private val waitDialog by lazy { WaitDialog(this) } |
|
|
|
private val waitDialog by lazy { WaitDialog(this) } |
|
|
|
private var groupMenu: SubMenu? = null |
|
|
|
private var groupMenu: SubMenu? = null |
|
|
|
private var sortKey = Sort.Default |
|
|
|
|
|
|
|
private var sortAscending = false |
|
|
|
|
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) { |
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) { |
|
|
|
binding.titleBar.setTitle(R.string.remote_book) |
|
|
|
binding.titleBar.setTitle(R.string.remote_book) |
|
|
|
initView() |
|
|
|
initView() |
|
|
@ -58,57 +51,18 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun sortCheck(sortKey: Sort) { |
|
|
|
private fun sortCheck(sortKey: Sort) { |
|
|
|
if (this.sortKey == sortKey) { |
|
|
|
if (viewModel.sortKey == sortKey) { |
|
|
|
sortAscending = !sortAscending |
|
|
|
viewModel.sortAscending = !viewModel.sortAscending |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
sortAscending = true |
|
|
|
viewModel.sortAscending = true |
|
|
|
this.sortKey = sortKey |
|
|
|
viewModel.sortKey = sortKey |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun initData() { |
|
|
|
private fun initData() { |
|
|
|
binding.refreshProgressBar.isAutoLoading = true |
|
|
|
binding.refreshProgressBar.isAutoLoading = true |
|
|
|
launch { |
|
|
|
launch { |
|
|
|
viewModel.dataFlow.conflate().map { remoteBooks -> |
|
|
|
viewModel.dataFlow.conflate().collect { sortedRemoteBooks -> |
|
|
|
|
|
|
|
|
|
|
|
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.refreshProgressBar.isAutoLoading = false |
|
|
|
binding.tvEmptyMsg.isGone = sortedRemoteBooks.isNotEmpty() |
|
|
|
binding.tvEmptyMsg.isGone = sortedRemoteBooks.isNotEmpty() |
|
|
|
adapter.setItems(sortedRemoteBooks) |
|
|
|
adapter.setItems(sortedRemoteBooks) |
|
|
@ -120,7 +74,7 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV |
|
|
|
|
|
|
|
|
|
|
|
private fun initEvent() { |
|
|
|
private fun initEvent() { |
|
|
|
binding.tvGoBack.setOnClickListener { |
|
|
|
binding.tvGoBack.setOnClickListener { |
|
|
|
goBackDir() |
|
|
|
goBackDir() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -133,22 +87,14 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV |
|
|
|
when (item.itemId) { |
|
|
|
when (item.itemId) { |
|
|
|
R.id.menu_refresh -> upPath() |
|
|
|
R.id.menu_refresh -> upPath() |
|
|
|
R.id.menu_log -> showDialogFragment<AppLogDialog>() |
|
|
|
R.id.menu_log -> showDialogFragment<AppLogDialog>() |
|
|
|
R.id.menu_sort_auto -> { |
|
|
|
|
|
|
|
item.isChecked = true |
|
|
|
|
|
|
|
toastOnUi("menu_sort_auto") |
|
|
|
|
|
|
|
sortCheck(Sort.Default) |
|
|
|
|
|
|
|
upPath() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
R.id.menu_sort_name -> { |
|
|
|
R.id.menu_sort_name -> { |
|
|
|
item.isChecked = true |
|
|
|
item.isChecked = true |
|
|
|
toastOnUi("menu_sort_name") |
|
|
|
|
|
|
|
sortCheck(Sort.Name) |
|
|
|
sortCheck(Sort.Name) |
|
|
|
upPath() |
|
|
|
upPath() |
|
|
|
} |
|
|
|
} |
|
|
|
R.id.menu_sort_time -> { |
|
|
|
R.id.menu_sort_time -> { |
|
|
|
item.isChecked = true |
|
|
|
item.isChecked = true |
|
|
|
toastOnUi("menu_sort_time") |
|
|
|
sortCheck(Sort.Default) |
|
|
|
sortCheck(Sort.UpdateTime) |
|
|
|
|
|
|
|
upPath() |
|
|
|
upPath() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -158,8 +104,11 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV |
|
|
|
override fun onPrepareOptionsMenu(menu: Menu): Boolean { |
|
|
|
override fun onPrepareOptionsMenu(menu: Menu): Boolean { |
|
|
|
groupMenu = menu.findItem(R.id.menu_sort)?.subMenu |
|
|
|
groupMenu = menu.findItem(R.id.menu_sort)?.subMenu |
|
|
|
groupMenu?.setGroupCheckable(R.id.menu_group_sort, true, true) |
|
|
|
groupMenu?.setGroupCheckable(R.id.menu_group_sort, true, true) |
|
|
|
|
|
|
|
groupMenu?.findItem(R.id.menu_sort_name)?.isChecked = viewModel.sortKey == Sort.Name |
|
|
|
|
|
|
|
groupMenu?.findItem(R.id.menu_sort_time)?.isChecked = viewModel.sortKey == Sort.Default |
|
|
|
return super.onPrepareOptionsMenu(menu) |
|
|
|
return super.onPrepareOptionsMenu(menu) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun revertSelection() { |
|
|
|
override fun revertSelection() { |
|
|
|
adapter.revertSelection() |
|
|
|
adapter.revertSelection() |
|
|
|
} |
|
|
|
} |
|
|
@ -221,7 +170,4 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV |
|
|
|
binding.selectActionBar.upCountView(adapter.selected.size, adapter.checkableCount) |
|
|
|
binding.selectActionBar.upCountView(adapter.selected.size, adapter.checkableCount) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
enum class Sort { |
|
|
|
|
|
|
|
Default, Name, UpdateTime |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |