kunfei %!s(int64=4) %!d(string=hai) anos
pai
achega
2a4bd21a2b

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

@@ -45,7 +45,9 @@ import kotlinx.coroutines.*
 import kotlinx.coroutines.flow.catch
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.mapLatest
 
+@ExperimentalCoroutinesApi
 class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceViewModel>(),
     PopupMenu.OnMenuItemClickListener,
     BookSourceAdapter.CallBack,
@@ -207,6 +209,7 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
         searchView.setOnQueryTextListener(this)
     }
 
+
     private fun upBookSource(searchKey: String? = null) {
         sourceFlowJob?.cancel()
         sourceFlowJob = launch {
@@ -232,43 +235,43 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
                 }
             }.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)
-                        }
-                        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
+            }.mapLatest { data ->
+                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)
+                    else -> data.reversed()
+                }
+            }.collectLatest { data ->
+                adapter.setItems(data, adapter.diffItemCallback)
             }
         }
     }