From 2a1d13ea5f66556ba15ed620167eaf91a54ddfaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartu=20=C3=96zen?= Date: Mon, 11 Dec 2023 15:44:47 +0300 Subject: [PATCH] Fix incorrect subcategory sorting --- .../deserializers/MainDataDeserializer.kt | 18 +++++++++++++++++- .../ui/torrentlist/CategoryTagAdapter.kt | 2 +- .../ui/torrentlist/TorrentListFragment.kt | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/dev/bartuzen/qbitcontroller/model/deserializers/MainDataDeserializer.kt b/app/src/main/java/dev/bartuzen/qbitcontroller/model/deserializers/MainDataDeserializer.kt index 61a2ea1b..6f9adb90 100644 --- a/app/src/main/java/dev/bartuzen/qbitcontroller/model/deserializers/MainDataDeserializer.kt +++ b/app/src/main/java/dev/bartuzen/qbitcontroller/model/deserializers/MainDataDeserializer.kt @@ -11,6 +11,7 @@ import dev.bartuzen.qbitcontroller.model.MainData import dev.bartuzen.qbitcontroller.model.ServerState import dev.bartuzen.qbitcontroller.model.Torrent import dev.bartuzen.qbitcontroller.utils.formatUri +import kotlin.math.min class MainDataDeserializer : JsonDeserializer() { override fun deserialize(parser: JsonParser, context: DeserializationContext): MainData { @@ -29,7 +30,22 @@ class MainDataDeserializer : JsonDeserializer() { codec.readValue(codec.treeAsTokens(categories), object : TypeReference>() {}) .values .toList() - .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, Category::name)) + .sortedWith( + Comparator { category1, category2 -> + val category1Name = category1.name + val category2Name = category2.name + + for (i in 0.. return@Comparator -1 + category1Name[i] != '/' && category2Name[i] == '/' -> return@Comparator 1 + category1Name[i] != category2Name[i] -> + return@Comparator category1Name[i].compareTo(category2Name[i]) + } + } + category1Name.length - category2Name.length + } + ) } ?: emptyList() val tags = node["tags"]?.let { tags -> diff --git a/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/CategoryTagAdapter.kt b/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/CategoryTagAdapter.kt index 40a977ae..454a76d2 100644 --- a/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/CategoryTagAdapter.kt +++ b/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/CategoryTagAdapter.kt @@ -90,7 +90,7 @@ class CategoryTagAdapter( @SuppressLint("NotifyDataSetChanged") fun submitList(items: Map, allCount: Int, uncategorizedCount: Int) { - this.items = items.toSortedMap().toList() + this.items = items.toList() this.allCount = allCount this.uncategorizedCount = uncategorizedCount diff --git a/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/TorrentListFragment.kt b/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/TorrentListFragment.kt index 44a2b5bd..3bc8a4dc 100755 --- a/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/TorrentListFragment.kt +++ b/app/src/main/java/dev/bartuzen/qbitcontroller/ui/torrentlist/TorrentListFragment.kt @@ -569,7 +569,7 @@ class TorrentListFragment() : Fragment(R.layout.fragment_torrent_list) { ) val stateCountMap = mutableMapOf() - val categoryMap = mainData.categories.associateBy({ it.name }, { 0 }).toSortedMap() + val categoryMap = mainData.categories.associateBy({ it.name }, { 0 }).toMutableMap() val tagMap = mainData.tags.associateBy({ it }, { 0 }).toMutableMap() var uncategorizedCount = 0