kunfei 4 ani în urmă
părinte
comite
161dee5797

+ 58 - 58
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt

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