From ddc645c32332679d2a1e8fbfdc2a2f2e515fd81e Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 5 Oct 2025 17:13:11 +0800 Subject: [PATCH] Speed up sorting download list by page count --- .../com/hippo/ehviewer/download/SortMode.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt index ffce3a409..dd2185359 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/SortMode.kt @@ -11,7 +11,6 @@ data class SortMode(val field: Field, val order: Order, val groupByDownloadLabel GID(0), TITLE(1), TIME(2), - LABEL(3), PAGES(4), } @@ -23,13 +22,16 @@ data class SortMode(val field: Field, val order: Order, val groupByDownloadLabel fun comparator(): Comparator { var comparator = when (field) { Field.GID -> compareBy { it.gid } - Field.TITLE, Field.LABEL -> compareBy { EhUtils.getSuitableTitle(it) } + Field.TITLE -> compareBy { EhUtils.getSuitableTitle(it) } Field.TIME -> compareBy { it.time } - Field.PAGES -> compareBy { it.pages }.thenBy { EhUtils.getSuitableTitle(it) } + Field.PAGES -> compareBy { it.pages } } if (order == Order.DESC) { comparator = comparator.reversed() } + if (field == Field.PAGES) { + comparator = comparator.thenByDescending { it.time } + } if (groupByDownloadLabel) { comparator = compareBy { it.label }.then(comparator) } @@ -38,15 +40,16 @@ data class SortMode(val field: Field, val order: Order, val groupByDownloadLabel companion object { fun from(flag: Int): SortMode { - val field = flag and 0xF shr 1 - val order = flag and 0x1 + val fieldValue = flag and 0xF shr 1 + val orderValue = flag and 0x1 val groupByDownloadLabel = flag shr 4 == 1 - require(field in Field.entries.indices && order in Order.entries.indices) - return SortMode(Field.entries[field], Order.entries[order], groupByDownloadLabel) + val field = Field.entries.find { it.value == fieldValue } ?: Default.field + val order = Order.entries.find { it.value == orderValue } ?: Default.order + return SortMode(field, order, groupByDownloadLabel) } val Default = SortMode(Field.TIME, Order.DESC) val All = listOf( - SortMode(Field.TIME, Order.DESC), + Default, SortMode(Field.TIME, Order.ASC), SortMode(Field.GID, Order.DESC), SortMode(Field.GID, Order.ASC),