feat(library): Optimize library grouping
This commit is contained in:
parent
ea06631670
commit
379d36e586
1 changed files with 33 additions and 26 deletions
|
|
@ -1395,13 +1395,20 @@ class LibraryScreenModel(
|
||||||
return when (groupType) {
|
return when (groupType) {
|
||||||
LibraryGroup.BY_TRACK_STATUS -> {
|
LibraryGroup.BY_TRACK_STATUS -> {
|
||||||
val tracks = runBlocking { getTracks.await() }.groupBy { it.mangaId }
|
val tracks = runBlocking { getTracks.await() }.groupBy { it.mangaId }
|
||||||
groupBy { item ->
|
// KMK -->
|
||||||
val status = tracks[item.libraryManga.manga.id]?.firstNotNullOfOrNull { track ->
|
val groupCache = mutableMapOf</* Track.status */ Int, MutableList</* LibraryItem */ Long>>()
|
||||||
|
forEach { item ->
|
||||||
|
val statuses = tracks[item.libraryManga.manga.id]?.mapNotNull { track ->
|
||||||
TrackStatus.parseTrackerStatus(trackerManager, track.trackerId, track.status)
|
TrackStatus.parseTrackerStatus(trackerManager, track.trackerId, track.status)
|
||||||
} ?: TrackStatus.OTHER
|
}
|
||||||
|
?.takeIf { it.isNotEmpty() }
|
||||||
status.int
|
?: listOf(TrackStatus.OTHER)
|
||||||
}.mapKeys { (id) ->
|
statuses.forEach { status ->
|
||||||
|
groupCache.getOrPut(status.int) { mutableListOf() }.add(item.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// KMK <--
|
||||||
|
groupCache.mapKeys { (id) ->
|
||||||
Category(
|
Category(
|
||||||
id = id.toLong(),
|
id = id.toLong(),
|
||||||
name = TrackStatus.entries
|
name = TrackStatus.entries
|
||||||
|
|
@ -1419,32 +1426,32 @@ class LibraryScreenModel(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LibraryGroup.BY_SOURCE -> {
|
LibraryGroup.BY_SOURCE -> {
|
||||||
val sources: List<Long>
|
// KMK -->
|
||||||
groupBy { item ->
|
val groupCache = mutableMapOf</* Source.id */ Long, MutableList</* LibraryItem */ Long>>()
|
||||||
item.libraryManga.manga.source
|
forEach { item ->
|
||||||
}.also {
|
groupCache.getOrPut(item.libraryManga.manga.source) { mutableListOf() }.add(item.id)
|
||||||
sources = it.keys
|
}
|
||||||
.map {
|
val sources = groupCache.keys
|
||||||
sourceManager.getOrStub(it)
|
.map { sourceManager.getOrStub(it) }
|
||||||
}
|
.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name.ifBlank { it.id.toString() } })
|
||||||
.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name.ifBlank { it.id.toString() } })
|
|
||||||
.map { it.id }
|
sources.associate {
|
||||||
}.mapKeys {
|
val category = Category(
|
||||||
Category(
|
id = it.id,
|
||||||
id = it.key,
|
name = if (it.id == LocalSource.ID) {
|
||||||
name = if (it.key == LocalSource.ID) {
|
|
||||||
context.stringResource(MR.strings.local_source)
|
context.stringResource(MR.strings.local_source)
|
||||||
} else {
|
} else {
|
||||||
val source = sourceManager.getOrStub(it.key)
|
it.name.ifBlank { it.id.toString() }
|
||||||
source.name.ifBlank { source.id.toString() }
|
|
||||||
},
|
},
|
||||||
order = sources.indexOf(it.key).takeUnless { it == -1 }?.toLong() ?: Long.MAX_VALUE,
|
order = sources.indexOf(it).toLong(),
|
||||||
flags = 0,
|
flags = 0,
|
||||||
// KMK -->
|
// KMK -->
|
||||||
hidden = false,
|
hidden = false,
|
||||||
// KMK <--
|
// KMK <--
|
||||||
)
|
)
|
||||||
|
category to groupCache[it.id]?.distinct().orEmpty()
|
||||||
}
|
}
|
||||||
|
// KMK <--
|
||||||
}
|
}
|
||||||
LibraryGroup.BY_STATUS -> {
|
LibraryGroup.BY_STATUS -> {
|
||||||
groupBy { item ->
|
groupBy { item ->
|
||||||
|
|
@ -1476,12 +1483,12 @@ class LibraryScreenModel(
|
||||||
// KMK <--
|
// KMK <--
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
// KMK -->
|
||||||
|
.mapValues { (_, libraryItem) -> libraryItem.fastMap { it.id } }
|
||||||
|
// KMK <--
|
||||||
}
|
}
|
||||||
else -> emptyMap()
|
else -> emptyMap()
|
||||||
}.toSortedMap(compareBy { it.order })
|
}.toSortedMap(compareBy { it.order })
|
||||||
// KMK -->
|
|
||||||
.mapValues { (_, libraryItem) -> libraryItem.fastMap { it.id } }
|
|
||||||
// KMK <--
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun runRecommendationSearch(selection: List<Manga>) {
|
fun runRecommendationSearch(selection: List<Manga>) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue