diff --git a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt index 9043f679a..5ef66fbe5 100644 --- a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt +++ b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt @@ -321,7 +321,7 @@ abstract class RecyclerAdapter(protected val context: Co fun getItemByLayoutPosition(position: Int) = items.getOrNull(getActualPosition(position)) - fun getItems(): List = items + fun getItems(): List = items.toList() protected open fun getItemViewType(item: ITEM, position: Int) = 0 diff --git a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt index 35b384120..66d0ebe0c 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookSourceDao.kt @@ -158,9 +158,6 @@ interface BookSourceDao { @get:Query("select max(customOrder) from book_sources") val maxOrder: Int - @Query("select count(*) from (select customOrder, count(customOrder) from book_sources group by customOrder having count(customOrder) > 1)") - fun sameSortNumberSize(): Int - private fun dealGroups(list: List): List { val groups = linkedSetOf() list.forEach { diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 1f56d664f..f2ec893bb 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -596,8 +596,8 @@ class BookSourceActivity : VMBaseActivity) { + viewModel.upOrder(items) } override fun toTop(bookSource: BookSource) { diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt index 745aa0996..d17c19b09 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt @@ -263,15 +263,11 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : val srcItem = getItem(srcPosition) val targetItem = getItem(targetPosition) if (srcItem != null && targetItem != null) { - if (srcItem.customOrder == targetItem.customOrder) { - callBack.upOrder() - } else { - val srcOrder = srcItem.customOrder - srcItem.customOrder = targetItem.customOrder - targetItem.customOrder = srcOrder - movedItems.add(srcItem) - movedItems.add(targetItem) - } + val srcOrder = srcItem.customOrder + srcItem.customOrder = targetItem.customOrder + targetItem.customOrder = srcOrder + movedItems.add(srcItem) + movedItems.add(targetItem) } swapItem(srcPosition, targetPosition) return true @@ -281,7 +277,15 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : override fun onClearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) { if (movedItems.isNotEmpty()) { - callBack.update(*movedItems.toTypedArray()) + val sortNumberSet = hashSetOf() + movedItems.forEach { + sortNumberSet.add(it.customOrder) + } + if (movedItems.size > sortNumberSet.size) { + callBack.upOrder(getItems()) + } else { + callBack.update(*movedItems.toTypedArray()) + } movedItems.clear() } } @@ -319,7 +323,7 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : fun toBottom(bookSource: BookSource) fun searchBook(bookSource: BookSource) fun debug(bookSource: BookSource) - fun upOrder() + fun upOrder(items: List) fun upCountView() } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt index a4b1870df..c95bfa331 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt @@ -16,19 +16,6 @@ import java.io.FileOutputStream */ class BookSourceViewModel(application: Application) : BaseViewModel(application) { - init { - execute { - val sameSortNumberSize = appDb.bookSourceDao.sameSortNumberSize() - if (sameSortNumberSize > 0) { - val sources = appDb.bookSourceDao.all - sources.forEachIndexed { index, bookSource -> - bookSource.customOrder = index - appDb.bookSourceDao.update(bookSource) - } - } - } - } - fun topSource(vararg sources: BookSource) { execute { sources.sortBy { it.customOrder } @@ -64,13 +51,14 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) execute { appDb.bookSourceDao.update(*bookSource) } } - fun upOrder() { + fun upOrder(items: List) { + if (items.isEmpty()) return execute { - val sources = appDb.bookSourceDao.all - for ((index: Int, source: BookSource) in sources.withIndex()) { - source.customOrder = index + 1 + val firstSortNumber = items[0].customOrder + items.forEachIndexed { index, bookSource -> + bookSource.customOrder = firstSortNumber + index + appDb.bookSourceDao.update(bookSource) } - appDb.bookSourceDao.update(*sources.toTypedArray()) } }