|
|
|
@ -42,7 +42,9 @@ import io.legado.app.ui.widget.recycler.VerticalDivider |
|
|
|
|
import io.legado.app.utils.* |
|
|
|
|
import io.legado.app.utils.viewbindingdelegate.viewBinding |
|
|
|
|
import kotlinx.coroutines.* |
|
|
|
|
import kotlinx.coroutines.flow.* |
|
|
|
|
import kotlinx.coroutines.flow.catch |
|
|
|
|
import kotlinx.coroutines.flow.collectLatest |
|
|
|
|
import kotlinx.coroutines.flow.flow |
|
|
|
|
|
|
|
|
|
class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceViewModel>(), |
|
|
|
|
PopupMenu.OnMenuItemClickListener, |
|
|
|
@ -208,67 +210,65 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV |
|
|
|
|
private fun upBookSource(searchKey: String? = null) { |
|
|
|
|
sourceFlowJob?.cancel() |
|
|
|
|
sourceFlowJob = launch { |
|
|
|
|
runCatching { |
|
|
|
|
when { |
|
|
|
|
searchKey.isNullOrEmpty() -> { |
|
|
|
|
appDb.bookSourceDao.flowAll() |
|
|
|
|
} |
|
|
|
|
searchKey == getString(R.string.enabled) -> { |
|
|
|
|
appDb.bookSourceDao.flowEnabled() |
|
|
|
|
} |
|
|
|
|
searchKey == getString(R.string.disabled) -> { |
|
|
|
|
appDb.bookSourceDao.flowDisabled() |
|
|
|
|
} |
|
|
|
|
searchKey == getString(R.string.need_login) -> { |
|
|
|
|
appDb.bookSourceDao.flowLogin() |
|
|
|
|
} |
|
|
|
|
searchKey.startsWith("group:") -> { |
|
|
|
|
val key = searchKey.substringAfter("group:") |
|
|
|
|
appDb.bookSourceDao.flowGroupSearch("%$key%") |
|
|
|
|
} |
|
|
|
|
else -> { |
|
|
|
|
appDb.bookSourceDao.flowSearch("%$searchKey%") |
|
|
|
|
} |
|
|
|
|
}.collect { data -> |
|
|
|
|
val sourceList = |
|
|
|
|
if (sortAscending) when (sort) { |
|
|
|
|
Sort.Weight -> data.sortedBy { it.weight } |
|
|
|
|
Sort.Name -> data.sortedWith { o1, o2 -> |
|
|
|
|
o1.bookSourceName.cnCompare(o2.bookSourceName) |
|
|
|
|
} |
|
|
|
|
Sort.Url -> data.sortedBy { it.bookSourceUrl } |
|
|
|
|
Sort.Update -> data.sortedByDescending { it.lastUpdateTime } |
|
|
|
|
Sort.Respond -> data.sortedBy { it.respondTime } |
|
|
|
|
Sort.Enable -> data.sortedWith { o1, o2 -> |
|
|
|
|
var sort = -o1.enabled.compareTo(o2.enabled) |
|
|
|
|
if (sort == 0) { |
|
|
|
|
sort = o1.bookSourceName.cnCompare(o2.bookSourceName) |
|
|
|
|
} |
|
|
|
|
sort |
|
|
|
|
} |
|
|
|
|
else -> data |
|
|
|
|
when { |
|
|
|
|
searchKey.isNullOrEmpty() -> { |
|
|
|
|
appDb.bookSourceDao.flowAll() |
|
|
|
|
} |
|
|
|
|
searchKey == getString(R.string.enabled) -> { |
|
|
|
|
appDb.bookSourceDao.flowEnabled() |
|
|
|
|
} |
|
|
|
|
searchKey == getString(R.string.disabled) -> { |
|
|
|
|
appDb.bookSourceDao.flowDisabled() |
|
|
|
|
} |
|
|
|
|
searchKey == getString(R.string.need_login) -> { |
|
|
|
|
appDb.bookSourceDao.flowLogin() |
|
|
|
|
} |
|
|
|
|
searchKey.startsWith("group:") -> { |
|
|
|
|
val key = searchKey.substringAfter("group:") |
|
|
|
|
appDb.bookSourceDao.flowGroupSearch("%$key%") |
|
|
|
|
} |
|
|
|
|
else -> { |
|
|
|
|
appDb.bookSourceDao.flowSearch("%$searchKey%") |
|
|
|
|
} |
|
|
|
|
}.catch { |
|
|
|
|
AppLog.put("书源界面更新书源出错", it) |
|
|
|
|
}.collectLatest { data -> |
|
|
|
|
val sourceList = |
|
|
|
|
if (sortAscending) when (sort) { |
|
|
|
|
Sort.Weight -> data.sortedBy { it.weight } |
|
|
|
|
Sort.Name -> data.sortedWith { o1, o2 -> |
|
|
|
|
o1.bookSourceName.cnCompare(o2.bookSourceName) |
|
|
|
|
} |
|
|
|
|
else when (sort) { |
|
|
|
|
Sort.Weight -> data.sortedByDescending { it.weight } |
|
|
|
|
Sort.Name -> data.sortedWith { o1, o2 -> |
|
|
|
|
o2.bookSourceName.cnCompare(o1.bookSourceName) |
|
|
|
|
Sort.Url -> data.sortedBy { it.bookSourceUrl } |
|
|
|
|
Sort.Update -> data.sortedByDescending { it.lastUpdateTime } |
|
|
|
|
Sort.Respond -> data.sortedBy { it.respondTime } |
|
|
|
|
Sort.Enable -> data.sortedWith { o1, o2 -> |
|
|
|
|
var sort = -o1.enabled.compareTo(o2.enabled) |
|
|
|
|
if (sort == 0) { |
|
|
|
|
sort = o1.bookSourceName.cnCompare(o2.bookSourceName) |
|
|
|
|
} |
|
|
|
|
Sort.Url -> data.sortedByDescending { it.bookSourceUrl } |
|
|
|
|
Sort.Update -> data.sortedBy { it.lastUpdateTime } |
|
|
|
|
Sort.Respond -> data.sortedByDescending { it.respondTime } |
|
|
|
|
Sort.Enable -> data.sortedWith { o1, o2 -> |
|
|
|
|
var sort = o1.enabled.compareTo(o2.enabled) |
|
|
|
|
if (sort == 0) { |
|
|
|
|
sort = o1.bookSourceName.cnCompare(o2.bookSourceName) |
|
|
|
|
} |
|
|
|
|
sort |
|
|
|
|
sort |
|
|
|
|
} |
|
|
|
|
else -> data |
|
|
|
|
} |
|
|
|
|
else when (sort) { |
|
|
|
|
Sort.Weight -> data.sortedByDescending { it.weight } |
|
|
|
|
Sort.Name -> data.sortedWith { o1, o2 -> |
|
|
|
|
o2.bookSourceName.cnCompare(o1.bookSourceName) |
|
|
|
|
} |
|
|
|
|
Sort.Url -> data.sortedByDescending { it.bookSourceUrl } |
|
|
|
|
Sort.Update -> data.sortedBy { it.lastUpdateTime } |
|
|
|
|
Sort.Respond -> data.sortedByDescending { it.respondTime } |
|
|
|
|
Sort.Enable -> data.sortedWith { o1, o2 -> |
|
|
|
|
var sort = o1.enabled.compareTo(o2.enabled) |
|
|
|
|
if (sort == 0) { |
|
|
|
|
sort = o1.bookSourceName.cnCompare(o2.bookSourceName) |
|
|
|
|
} |
|
|
|
|
else -> data.reversed() |
|
|
|
|
sort |
|
|
|
|
} |
|
|
|
|
adapter.setItems(sourceList, adapter.diffItemCallback) |
|
|
|
|
} |
|
|
|
|
}.onFailure { |
|
|
|
|
AppLog.put("更新书源出错", it) |
|
|
|
|
else -> data.reversed() |
|
|
|
|
} |
|
|
|
|
adapter.setItems(sourceList, adapter.diffItemCallback) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|