Cleanup group by code a bit

This commit is contained in:
Jobobby04 2022-02-22 21:34:24 -05:00
parent b1f7165ad7
commit b0f5d4d1ce
2 changed files with 68 additions and 60 deletions

View File

@ -310,20 +310,16 @@ class LibraryUpdateService(
when (group) { when (group) {
LibraryGroup.BY_TRACK_STATUS -> { LibraryGroup.BY_TRACK_STATUS -> {
val trackingExtra = groupExtra?.toIntOrNull() ?: -1 val trackingExtra = groupExtra?.toIntOrNull() ?: -1
libraryManga.filter { val loggedServices = trackManager.services.filter { it.isLogged }
val loggedServices = trackManager.services.filter { it.isLogged } val tracks = db.getTracks().executeAsBlocking().groupBy { it.manga_id }
val status: String = run { val statuses = loggedServices.associate {
val tracks = db.getTracks(it).executeAsBlocking() it.id to it.getStatusList().associateWith(it::getStatus)
val track = tracks.find { track -> }
loggedServices.any { it.id == track?.sync_id }
} libraryManga.filter { manga ->
val service = loggedServices.find { it.id == track?.sync_id } val status = tracks[manga.id]?.firstNotNullOfOrNull { track ->
if (track != null && service != null) { statuses[track.sync_id]?.get(track.status)
service.getStatus(track.status) } ?: "not tracked"
} else {
"not tracked"
}
}
(trackManager.trackMap[status] ?: TrackManager.OTHER) == trackingExtra (trackManager.trackMap[status] ?: TrackManager.OTHER) == trackingExtra
} }
} }

View File

@ -821,76 +821,88 @@ class LibraryPresenter(
} }
private fun getGroupedMangaItems(libraryManga: List<LibraryItem>): Pair<LibraryMap, List<Category>> { private fun getGroupedMangaItems(libraryManga: List<LibraryItem>): Pair<LibraryMap, List<Category>> {
val grouping: MutableList<Triple<String, Int, String>> = mutableListOf() val grouping: MutableMap<Number, Pair<Int, String>> = mutableMapOf()
when (groupType) { when (groupType) {
LibraryGroup.BY_STATUS -> { LibraryGroup.BY_STATUS -> {
grouping += Triple(SManga.ONGOING.toString(), SManga.ONGOING, context.getString(R.string.ongoing)) grouping.putAll(
grouping += Triple(SManga.LICENSED.toString(), SManga.LICENSED, context.getString(R.string.licensed)) listOf(
grouping += Triple(SManga.CANCELLED.toString(), SManga.CANCELLED, context.getString(R.string.cancelled)) SManga.ONGOING to context.getString(R.string.ongoing),
grouping += Triple(SManga.ON_HIATUS.toString(), SManga.ON_HIATUS, context.getString(R.string.on_hiatus)) SManga.LICENSED to context.getString(R.string.licensed),
grouping += Triple(SManga.PUBLISHING_FINISHED.toString(), SManga.PUBLISHING_FINISHED, context.getString(R.string.publishing_finished)) SManga.CANCELLED to context.getString(R.string.cancelled),
grouping += Triple(SManga.COMPLETED.toString(), SManga.COMPLETED, context.getString(R.string.completed)) SManga.ON_HIATUS to context.getString(R.string.ongoing),
grouping += Triple(SManga.UNKNOWN.toString(), SManga.UNKNOWN, context.getString(R.string.unknown)) SManga.PUBLISHING_FINISHED to context.getString(R.string.publishing_finished),
SManga.COMPLETED to context.getString(R.string.completed),
SManga.UNKNOWN to context.getString(R.string.unknown)
).associateBy(Pair<Int, *>::first)
)
} }
LibraryGroup.BY_SOURCE -> LibraryGroup.BY_SOURCE ->
libraryManga libraryManga
.map { it.manga.source } .map { it.manga.source }
.distinct() .distinct()
.sorted() .sorted()
.forEachIndexed { index, sourceLong -> .mapIndexed { index, sourceLong ->
grouping += Triple(sourceLong.toString(), index, sourceManager.getOrStub(sourceLong).name) sourceLong to (index to sourceManager.getOrStub(sourceLong).name)
} }
.let(grouping::putAll)
LibraryGroup.BY_TRACK_STATUS -> { LibraryGroup.BY_TRACK_STATUS -> {
grouping += Triple("1", 1, context.getString(R.string.reading)) grouping.putAll(
grouping += Triple("2", 2, context.getString(R.string.repeating)) listOf(
grouping += Triple("3", 3, context.getString(R.string.plan_to_read)) TrackManager.READING to context.getString(R.string.reading),
grouping += Triple("4", 4, context.getString(R.string.on_hold)) TrackManager.REPEATING to context.getString(R.string.repeating),
grouping += Triple("5", 5, context.getString(R.string.completed)) TrackManager.PLAN_TO_READ to context.getString(R.string.plan_to_read),
grouping += Triple("6", 6, context.getString(R.string.dropped)) TrackManager.PAUSED to context.getString(R.string.on_hold),
grouping += Triple("7", 7, context.getString(R.string.not_tracked)) TrackManager.COMPLETED to context.getString(R.string.completed),
TrackManager.DROPPED to context.getString(R.string.dropped),
TrackManager.OTHER to context.getString(R.string.not_tracked)
).associateBy(Pair<Int, *>::first)
)
} }
} }
val map: MutableMap<Int, MutableList<LibraryItem>> = mutableMapOf() val map: MutableMap<Int, MutableList<LibraryItem>> = mutableMapOf()
libraryManga.forEach { libraryItem -> when (groupType) {
when (groupType) { LibraryGroup.BY_TRACK_STATUS -> {
LibraryGroup.BY_TRACK_STATUS -> { val tracks = db.getTracks().executeAsBlocking().groupBy { it.manga_id }
val status: String = run { val statuses = loggedServices.associate {
val tracks = db.getTracks(libraryItem.manga).executeAsBlocking() it.id to it.getStatusList().associateWith(it::getStatus)
val track = tracks.find { track -> }
loggedServices.any { it.id == track?.sync_id } libraryManga.forEach { libraryItem ->
} val status = tracks[libraryItem.manga.id]?.firstNotNullOfOrNull { track ->
val service = loggedServices.find { it.id == track?.sync_id } statuses[track.sync_id]?.get(track.status)
if (track != null && service != null) { } ?: "not tracked"
service.getStatus(track.status) val group = grouping.values.find { (statusInt) ->
} else {
"not tracked"
}
}
val group = grouping.find { (_, statusInt) ->
statusInt == (trackManager.trackMap[status] ?: TrackManager.OTHER) statusInt == (trackManager.trackMap[status] ?: TrackManager.OTHER)
} }
if (group != null) { if (group != null) {
map.getOrPut(group.second) { mutableListOf() } += libraryItem map.getOrPut(group.first) { mutableListOf() } += libraryItem
} else { } else {
map.getOrPut(7) { mutableListOf() } += libraryItem map.getOrPut(7) { mutableListOf() } += libraryItem
} }
} }
LibraryGroup.BY_SOURCE -> { }
val group = grouping.find { it.first.toLongOrNull() == libraryItem.manga.source } LibraryGroup.BY_SOURCE -> {
libraryManga.forEach { libraryItem ->
val group = grouping[libraryItem.manga.source]
if (group != null) { if (group != null) {
map.getOrPut(group.second) { mutableListOf() } += libraryItem map.getOrPut(group.first) { mutableListOf() } += libraryItem
} else { } else {
if (grouping.all { it.second != Int.MAX_VALUE }) grouping += Triple(Int.MAX_VALUE.toString(), Int.MAX_VALUE, context.getString(R.string.unknown)) grouping.getOrPut(Int.MAX_VALUE) {
Int.MAX_VALUE to context.getString(R.string.unknown)
}
map.getOrPut(Int.MAX_VALUE) { mutableListOf() } += libraryItem map.getOrPut(Int.MAX_VALUE) { mutableListOf() } += libraryItem
} }
} }
else -> { }
val group = grouping.find { it.second == libraryItem.manga.status } else -> {
libraryManga.forEach { libraryItem ->
val group = grouping[libraryItem.manga.status]
if (group != null) { if (group != null) {
map.getOrPut(group.second) { mutableListOf() } += libraryItem map.getOrPut(group.first) { mutableListOf() } += libraryItem
} else { } else {
if (grouping.all { it.second != Int.MAX_VALUE }) grouping += Triple(Int.MAX_VALUE.toString(), Int.MAX_VALUE, context.getString(R.string.unknown)) grouping.getOrPut(Int.MAX_VALUE) {
Int.MAX_VALUE to context.getString(R.string.unknown)
}
map.getOrPut(Int.MAX_VALUE) { mutableListOf() } += libraryItem map.getOrPut(Int.MAX_VALUE) { mutableListOf() } += libraryItem
} }
} }
@ -898,10 +910,10 @@ class LibraryPresenter(
} }
val categories = when (groupType) { val categories = when (groupType) {
LibraryGroup.BY_SOURCE -> grouping.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.third })) LibraryGroup.BY_SOURCE -> grouping.values.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, Pair<*, String>::second))
LibraryGroup.BY_TRACK_STATUS, LibraryGroup.BY_STATUS -> grouping.filter { it.second in map.keys } LibraryGroup.BY_TRACK_STATUS, LibraryGroup.BY_STATUS -> grouping.values.filter { it.first in map.keys }
else -> grouping else -> grouping.values
}.map { (_, id, name) -> }.map { (id, name) ->
Category.create(name).also { it.id = id } Category.create(name).also { it.id = id }
} }