Cleanup group by code a bit
This commit is contained in:
parent
b1f7165ad7
commit
b0f5d4d1ce
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user