HapeLee hai 1 ano
pai
achega
b498deb2d3

+ 34 - 37
app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt

@@ -203,50 +203,47 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
     private fun upRecyclerData() {
     private fun upRecyclerData() {
         booksFlowJob?.cancel()
         booksFlowJob?.cancel()
         booksFlowJob = viewLifecycleOwner.lifecycleScope.launch {
         booksFlowJob = viewLifecycleOwner.lifecycleScope.launch {
-            appDb.bookDao.flowByGroup(groupId).map { list ->
-                //排序
 
 
-                val isDescending = AppConfig.bookshelfSortOrder == 1
+            viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
 
 
-                when (bookSort) {
-                    1 -> if (isDescending) list.sortedByDescending { it.latestChapterTime }
-                    else list.sortedBy { it.latestChapterTime }
+                appDb.bookDao.flowByGroup(groupId)
+                    .map { list ->
+                        val isDescending = AppConfig.bookshelfSortOrder == 1
 
 
-                    2 -> if (isDescending)
-                        list.sortedWith { o1, o2 -> o2.name.cnCompare(o1.name) }
-                    else
-                        list.sortedWith { o1, o2 -> o1.name.cnCompare(o2.name) }
+                        when (bookSort) {
+                            1 -> if (isDescending) list.sortedByDescending { it.latestChapterTime }
+                            else list.sortedBy { it.latestChapterTime }
 
 
-                    3 -> if (isDescending) list.sortedByDescending { it.order }
-                    else list.sortedBy { it.order }
+                            2 -> if (isDescending)
+                                list.sortedWith { o1, o2 -> o2.name.cnCompare(o1.name) }
+                            else
+                                list.sortedWith { o1, o2 -> o1.name.cnCompare(o2.name) }
 
 
-                    4 -> if (isDescending) list.sortedByDescending {
-                        max(
-                            it.latestChapterTime,
-                            it.durChapterTime
-                        )
-                    }
-                    else list.sortedBy { max(it.latestChapterTime, it.durChapterTime) }
+                            3 -> if (isDescending) list.sortedByDescending { it.order }
+                            else list.sortedBy { it.order }
 
 
-                    5 -> if (isDescending)
-                        list.sortedWith { o1, o2 -> o2.author.cnCompare(o1.author) }
-                    else
-                        list.sortedWith { o1, o2 -> o1.author.cnCompare(o2.author) }
+                            4 -> if (isDescending)
+                                list.sortedByDescending { max(it.latestChapterTime, it.durChapterTime) }
+                            else
+                                list.sortedBy { max(it.latestChapterTime, it.durChapterTime) }
 
 
-                    else -> if (isDescending) list.sortedByDescending { it.durChapterTime }
-                    else list.sortedBy { it.durChapterTime }
-                }
-            }.flowWithLifecycleAndDatabaseChangeFirst(
-                viewLifecycleOwner.lifecycle,
-                Lifecycle.State.RESUMED,
-                AppDatabase.BOOK_TABLE_NAME
-            ).catch {
-                AppLog.put("书架更新出错", it)
-            }.conflate().flowOn(Dispatchers.Default).collect { list ->
-                binding.emptyView.isGone = list.isNotEmpty()
-                binding.refreshLayout.isEnabled = enableRefresh && list.isNotEmpty()
-                booksAdapter.setItems(list)
-                delay(500)
+                            5 -> if (isDescending)
+                                list.sortedWith { o1, o2 -> o2.author.cnCompare(o1.author) }
+                            else
+                                list.sortedWith { o1, o2 -> o1.author.cnCompare(o2.author) }
+
+                            else ->
+                                if (isDescending) list.sortedByDescending { it.durChapterTime }
+                                else list.sortedBy { it.durChapterTime }
+                        }
+                    }
+                    .flowOn(Dispatchers.Default)
+                    .catch { AppLog.put("书架更新出错", it) }
+                    .collect { list ->
+                        binding.emptyView.isGone = list.isNotEmpty()
+                        binding.refreshLayout.isEnabled = enableRefresh && list.isNotEmpty()
+                        booksAdapter.setItems(list)
+                    }
             }
             }
         }
         }
     }
     }

+ 46 - 46
app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt

@@ -14,6 +14,7 @@ import androidx.core.view.WindowInsetsCompat
 import androidx.core.view.isGone
 import androidx.core.view.isGone
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
 import androidx.recyclerview.widget.DefaultItemAnimator
 import androidx.recyclerview.widget.DefaultItemAnimator
 import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -246,16 +247,14 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
     }
     }
 
 
     private fun initBooksData() {
     private fun initBooksData() {
-        if (groupId == BookGroup.Companion.IdRoot) {
+        if (groupId == BookGroup.IdRoot) {
             if (isAdded) {
             if (isAdded) {
                 binding.collTopBar.title = getString(R.string.bookshelf)
                 binding.collTopBar.title = getString(R.string.bookshelf)
                 binding.refreshLayout.isEnabled = true
                 binding.refreshLayout.isEnabled = true
                 enableRefresh = true
                 enableRefresh = true
             }
             }
         } else {
         } else {
-            bookGroups.firstOrNull {
-                groupId == it.groupId
-            }?.let {
+            bookGroups.firstOrNull { groupId == it.groupId }?.let {
                 binding.collTopBar.title = it.groupName
                 binding.collTopBar.title = it.groupName
                 binding.refreshLayout.isEnabled = it.enableRefresh
                 binding.refreshLayout.isEnabled = it.enableRefresh
                 enableRefresh = it.enableRefresh
                 enableRefresh = it.enableRefresh
@@ -263,48 +262,49 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
         }
         }
         booksFlowJob?.cancel()
         booksFlowJob?.cancel()
         booksFlowJob = viewLifecycleOwner.lifecycleScope.launch {
         booksFlowJob = viewLifecycleOwner.lifecycleScope.launch {
-            appDb.bookDao.flowByGroup(groupId).map { list ->
-                //排序
-                val isDescending = AppConfig.bookshelfSortOrder == 1
-
-                val sortType = AppConfig.getBookSortByGroupId(groupId)
-                when (sortType) {
-                    1 -> if (isDescending) list.sortedByDescending { it.latestChapterTime }
-                    else list.sortedBy { it.latestChapterTime }
-
-                    2 -> if (isDescending)
-                        list.sortedWith { o1, o2 -> o2.name.cnCompare(o1.name) }
-                    else
-                        list.sortedWith { o1, o2 -> o1.name.cnCompare(o2.name) }
-
-                    3 -> if (isDescending) list.sortedByDescending { it.order }
-                    else list.sortedBy { it.order }
-
-                    4 -> if (isDescending) list.sortedByDescending {
-                        max(it.latestChapterTime, it.durChapterTime)
-                    } else list.sortedBy { max(it.latestChapterTime, it.durChapterTime) }
-
-                    5 -> if (isDescending)
-                        list.sortedWith { o1, o2 -> o2.author.cnCompare(o1.author) }
-                    else
-                        list.sortedWith { o1, o2 -> o1.author.cnCompare(o2.author) }
-
-                    else -> if (isDescending) list.sortedByDescending { it.durChapterTime }
-                    else list.sortedBy { it.durChapterTime }
-                }
-
-            }.flowWithLifecycleAndDatabaseChangeFirst(
-                viewLifecycleOwner.lifecycle,
-                Lifecycle.State.RESUMED,
-                AppDatabase.Companion.BOOK_TABLE_NAME
-            ).catch {
-                AppLog.put("书架更新出错", it)
-            }.conflate().flowOn(Dispatchers.Default).collect { list ->
-                books = list
-                booksAdapter.updateItems()
-                binding.emptyView.isGone = getItemCount() > 0
-                binding.refreshLayout.isEnabled = enableRefresh && getItemCount() > 0
-                delay(500)
+            viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+                appDb.bookDao.flowByGroup(groupId)
+                    .map { list ->
+                        val isDescending = AppConfig.bookshelfSortOrder == 1
+                        val sortType = AppConfig.getBookSortByGroupId(groupId)
+
+                        when (sortType) {
+                            1 -> if (isDescending) list.sortedByDescending { it.latestChapterTime }
+                            else list.sortedBy { it.latestChapterTime }
+
+                            2 -> if (isDescending)
+                                list.sortedWith { o1, o2 -> o2.name.cnCompare(o1.name) }
+                            else
+                                list.sortedWith { o1, o2 -> o1.name.cnCompare(o2.name) }
+
+                            3 -> if (isDescending) list.sortedByDescending { it.order }
+                            else list.sortedBy { it.order }
+
+                            4 -> if (isDescending)
+                                list.sortedByDescending { max(it.latestChapterTime, it.durChapterTime) }
+                            else
+                                list.sortedBy { max(it.latestChapterTime, it.durChapterTime) }
+
+                            5 -> if (isDescending)
+                                list.sortedWith { o1, o2 -> o2.author.cnCompare(o1.author) }
+                            else
+                                list.sortedWith { o1, o2 -> o1.author.cnCompare(o2.author) }
+
+                            else ->
+                                if (isDescending) list.sortedByDescending { it.durChapterTime }
+                                else list.sortedBy { it.durChapterTime }
+                        }
+                    }
+                    .flowOn(Dispatchers.Default)
+                    .catch { AppLog.put("书架更新出错", it) }
+                    .collect { list ->
+
+                        books = list
+                        booksAdapter.updateItems()
+                        val empty = getItemCount() > 0
+                        binding.emptyView.isGone = empty
+                        binding.refreshLayout.isEnabled = enableRefresh && empty
+                    }
             }
             }
         }
         }
     }
     }