mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
refactor: Store hidden items on LibraryManga
Not sure why we need it tbh, but J2K store it for some reason
This commit is contained in:
parent
1e7d6cbebe
commit
31c253f724
2 changed files with 69 additions and 50 deletions
|
@ -1,5 +1,6 @@
|
||||||
package eu.kanade.tachiyomi.data.database.models
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
import eu.kanade.tachiyomi.ui.library.LibraryItem
|
||||||
import yokai.data.updateStrategyAdapter
|
import yokai.data.updateStrategyAdapter
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
@ -15,15 +16,23 @@ data class LibraryManga(
|
||||||
) : MangaImpl() {
|
) : MangaImpl() {
|
||||||
|
|
||||||
var realMangaCount = 0
|
var realMangaCount = 0
|
||||||
get() = if (isBlank()) field else throw IllegalStateException("realMangaCount is only accessible for placeholders")
|
get() = if (isBlank()) field else throw IllegalStateException("realMangaCount is only accessible by placeholders")
|
||||||
set(value) {
|
set(value) {
|
||||||
if (!isBlank()) throw IllegalStateException("realMangaCount can only be set for placeholders")
|
if (!isBlank()) throw IllegalStateException("realMangaCount can only be set by placeholders")
|
||||||
field = value
|
field = value
|
||||||
}
|
}
|
||||||
|
|
||||||
val hasRead
|
val hasRead
|
||||||
get() = read > 0
|
get() = read > 0
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
var items: List<LibraryItem>? = null
|
||||||
|
get() = if (isHidden()) field else throw IllegalStateException("items only accessible by placeholders")
|
||||||
|
set(value) {
|
||||||
|
if (!isHidden()) throw IllegalStateException("items can only be set by placeholders")
|
||||||
|
field = value
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun createBlank(categoryId: Int): LibraryManga = LibraryManga().apply {
|
fun createBlank(categoryId: Int): LibraryManga = LibraryManga().apply {
|
||||||
title = ""
|
title = ""
|
||||||
|
@ -31,11 +40,12 @@ data class LibraryManga(
|
||||||
category = categoryId
|
category = categoryId
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createHide(categoryId: Int, title: String, hideCount: Int): LibraryManga =
|
fun createHide(categoryId: Int, title: String, hiddenItems: List<LibraryItem>): LibraryManga =
|
||||||
createBlank(categoryId).apply {
|
createBlank(categoryId).apply {
|
||||||
this.title = title
|
this.title = title
|
||||||
this.status = -1
|
this.status = -1
|
||||||
this.read = hideCount
|
this.read = hiddenItems.size
|
||||||
|
this.items = hiddenItems
|
||||||
}
|
}
|
||||||
|
|
||||||
fun mapper(
|
fun mapper(
|
||||||
|
|
|
@ -231,7 +231,8 @@ class LibraryPresenter(
|
||||||
categories = lastCategories ?: getCategories.await().toMutableList()
|
categories = lastCategories ?: getCategories.await().toMutableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val (library, hiddenItems) = withIOContext { getLibraryFromDB() }
|
val (library, _) = withIOContext { getLibraryFromDB() }
|
||||||
|
val hiddenItems = library.filter { it.manga.isHidden() }.mapNotNull { it.manga.items }.flatten()
|
||||||
setDownloadCount(library)
|
setDownloadCount(library)
|
||||||
setUnreadBadge(library)
|
setUnreadBadge(library)
|
||||||
setSourceLanguage(library)
|
setSourceLanguage(library)
|
||||||
|
@ -737,27 +738,30 @@ class LibraryPresenter(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MutableList<LibraryItem>.addRemovedManga(
|
private fun MutableList<LibraryItem>.addRemovedManga(
|
||||||
removedManga: List<Pair<LibraryManga, LibraryHeaderItem>>,
|
removedManga: Map<Category, List<LibraryItem>>,
|
||||||
): MutableList<LibraryItem> {
|
): MutableList<LibraryItem> {
|
||||||
|
removedManga.keys.forEach { key ->
|
||||||
|
val manga = removedManga[key] ?: return@forEach
|
||||||
val headerItem = try {
|
val headerItem = try {
|
||||||
removedManga.first().second
|
manga.first().header
|
||||||
} catch (e: NoSuchElementException) {
|
} catch (e: NoSuchElementException) {
|
||||||
return this // No hidden manga to be handled
|
return@forEach // No hidden manga to be handled
|
||||||
}
|
}
|
||||||
val mergedTitle = removedManga.joinToString("-") {
|
val mergedTitle = manga.joinToString("-") {
|
||||||
it.first.title + "-" + it.first.author
|
it.manga.title + "-" + it.manga.author
|
||||||
}
|
}
|
||||||
this.add(
|
this.add(
|
||||||
LibraryItem(
|
LibraryItem(
|
||||||
LibraryManga.createHide(
|
LibraryManga.createHide(
|
||||||
headerItem.catId,
|
headerItem.catId,
|
||||||
mergedTitle,
|
mergedTitle,
|
||||||
removedManga.size,
|
manga,
|
||||||
),
|
),
|
||||||
headerItem,
|
headerItem,
|
||||||
viewContext,
|
viewContext,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
}
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +810,7 @@ class LibraryPresenter(
|
||||||
}
|
}
|
||||||
|
|
||||||
val unknown = context.getString(R.string.unknown)
|
val unknown = context.getString(R.string.unknown)
|
||||||
val removedManga = mutableListOf<Pair<LibraryManga, LibraryHeaderItem>>()
|
val removedManga = mutableListOf<LibraryItem>()
|
||||||
val items = libraryMangaList.mapNotNull map@ { manga ->
|
val items = libraryMangaList.mapNotNull map@ { manga ->
|
||||||
when (groupType) {
|
when (groupType) {
|
||||||
BY_TAG -> {
|
BY_TAG -> {
|
||||||
|
@ -820,11 +824,12 @@ class LibraryPresenter(
|
||||||
}
|
}
|
||||||
tags.mapNotNull inner@ {
|
tags.mapNotNull inner@ {
|
||||||
val header = makeOrGetHeader(it)
|
val header = makeOrGetHeader(it)
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@inner null
|
return@inner null
|
||||||
}
|
}
|
||||||
LibraryItem(manga, header, viewContext)
|
item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BY_TRACK_STATUS -> {
|
BY_TRACK_STATUS -> {
|
||||||
|
@ -843,31 +848,32 @@ class LibraryPresenter(
|
||||||
view?.view?.context?.getString(R.string.not_tracked) ?: ""
|
view?.view?.context?.getString(R.string.not_tracked) ?: ""
|
||||||
}
|
}
|
||||||
val header = makeOrGetHeader(status)
|
val header = makeOrGetHeader(status)
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@map null
|
return@map null
|
||||||
}
|
}
|
||||||
listOf(LibraryItem(manga, header, viewContext))
|
listOf(item)
|
||||||
}
|
}
|
||||||
BY_SOURCE -> {
|
BY_SOURCE -> {
|
||||||
val source = sourceManager.getOrStub(manga.source)
|
val source = sourceManager.getOrStub(manga.source)
|
||||||
val header = makeOrGetHeader("${source.name}$sourceSplitter${source.id}")
|
val header = makeOrGetHeader("${source.name}$sourceSplitter${source.id}")
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@map null
|
return@map null
|
||||||
}
|
}
|
||||||
listOf(
|
listOf(item)
|
||||||
LibraryItem(manga, header, viewContext),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
BY_AUTHOR -> {
|
BY_AUTHOR -> {
|
||||||
if (manga.artist.isNullOrBlank() && manga.author.isNullOrBlank()) {
|
if (manga.artist.isNullOrBlank() && manga.author.isNullOrBlank()) {
|
||||||
val header = makeOrGetHeader(unknown)
|
val header = makeOrGetHeader(unknown)
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@map null
|
return@map null
|
||||||
}
|
}
|
||||||
listOf(LibraryItem(manga, header, viewContext))
|
listOf(item)
|
||||||
} else {
|
} else {
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
manga.author.takeUnless { it.isNullOrBlank() },
|
manga.author.takeUnless { it.isNullOrBlank() },
|
||||||
|
@ -879,11 +885,12 @@ class LibraryPresenter(
|
||||||
}
|
}
|
||||||
}.flatten().distinct().mapNotNull inner@ {
|
}.flatten().distinct().mapNotNull inner@ {
|
||||||
val header = makeOrGetHeader(it, true)
|
val header = makeOrGetHeader(it, true)
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@inner null
|
return@inner null
|
||||||
}
|
}
|
||||||
LibraryItem(manga, header, viewContext)
|
item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -898,26 +905,26 @@ class LibraryPresenter(
|
||||||
},
|
},
|
||||||
) ?: unknown,
|
) ?: unknown,
|
||||||
)
|
)
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@map null
|
return@map null
|
||||||
}
|
}
|
||||||
listOf(
|
listOf(item)
|
||||||
LibraryItem(manga, header, viewContext),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
BY_STATUS -> {
|
BY_STATUS -> {
|
||||||
val header = makeOrGetHeader(context.mapStatus(manga.status))
|
val header = makeOrGetHeader(context.mapStatus(manga.status))
|
||||||
|
val item = LibraryItem(manga, header, viewContext)
|
||||||
if (header.category.isHidden) {
|
if (header.category.isHidden) {
|
||||||
removedManga.add(manga to header)
|
removedManga.add(item)
|
||||||
return@map null
|
return@map null
|
||||||
}
|
}
|
||||||
listOf(LibraryItem(manga, header, viewContext))
|
listOf(item)
|
||||||
}
|
}
|
||||||
else -> throw IllegalStateException("Invalid group type")
|
else -> throw IllegalStateException("Invalid group type")
|
||||||
}
|
}
|
||||||
}.flatten().toMutableList()
|
}.flatten().toMutableList()
|
||||||
.addRemovedManga(removedManga)
|
.addRemovedManga(removedManga.groupBy { it.header.category })
|
||||||
.groupBy { it.header.category.id!! }
|
.groupBy { it.header.category.id!! }
|
||||||
|
|
||||||
val categories = tagItems
|
val categories = tagItems
|
||||||
|
@ -979,7 +986,7 @@ class LibraryPresenter(
|
||||||
}.toMap()
|
}.toMap()
|
||||||
else null
|
else null
|
||||||
|
|
||||||
val removedManga = mutableListOf<Pair<LibraryManga, LibraryHeaderItem>>()
|
val removedManga = mutableListOf<LibraryItem>()
|
||||||
val libraryManga = libraryMangaList
|
val libraryManga = libraryMangaList
|
||||||
.mapNotNull {
|
.mapNotNull {
|
||||||
// Header item is used to identify which category the library manga is actually belong to,
|
// Header item is used to identify which category the library manga is actually belong to,
|
||||||
|
@ -991,16 +998,18 @@ class LibraryPresenter(
|
||||||
headerItems[it.category]
|
headerItems[it.category]
|
||||||
} ?: return@mapNotNull null
|
} ?: return@mapNotNull null
|
||||||
|
|
||||||
|
val item = LibraryItem(it, headerItem, viewContext)
|
||||||
|
|
||||||
// We'll handle hidden manga separately
|
// We'll handle hidden manga separately
|
||||||
if (headerItem.isHidden) {
|
if (headerItem.isHidden) {
|
||||||
removedManga.add(it to headerItem)
|
removedManga.add(item)
|
||||||
return@mapNotNull null
|
return@mapNotNull null
|
||||||
}
|
}
|
||||||
|
|
||||||
LibraryItem(it, headerItem, viewContext)
|
item
|
||||||
}
|
}
|
||||||
.toMutableList()
|
.toMutableList()
|
||||||
.addRemovedManga(removedManga)
|
.addRemovedManga(removedManga.groupBy { it.header.category })
|
||||||
.groupBy { it.header.category.id!! }
|
.groupBy { it.header.category.id!! }
|
||||||
|
|
||||||
categories.associateWith {
|
categories.associateWith {
|
||||||
|
@ -1106,7 +1115,7 @@ class LibraryPresenter(
|
||||||
LibraryManga.createHide(
|
LibraryManga.createHide(
|
||||||
catId,
|
catId,
|
||||||
mergedTitle,
|
mergedTitle,
|
||||||
mangaToRemove.size,
|
mangaToRemove,
|
||||||
),
|
),
|
||||||
headerItem,
|
headerItem,
|
||||||
viewContext,
|
viewContext,
|
||||||
|
@ -1295,7 +1304,7 @@ class LibraryPresenter(
|
||||||
if (headerItem != null) {
|
if (headerItem != null) {
|
||||||
items.add(
|
items.add(
|
||||||
LibraryItem(
|
LibraryItem(
|
||||||
LibraryManga.createHide(catId, mergedTitle, mangaToRemove.size),
|
LibraryManga.createHide(catId, mergedTitle, mangaToRemove),
|
||||||
headerItem,
|
headerItem,
|
||||||
viewContext,
|
viewContext,
|
||||||
),
|
),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue