mirror of
https://github.com/mihonapp/mihon.git
synced 2025-10-29 13:27:57 +01:00
Tweak library query (#8214)
* Tweak library query Co-Authored-By: Quang Kieu <kieuq@wit.edu> * Update app/src/main/sqldelight/migrations/21.sqm * Update app/src/main/java/eu/kanade/domain/library/model/LibraryManga.kt * Update app/src/main/sqldelight/view/libraryView.sq * Update app/src/main/java/eu/kanade/data/manga/MangaMapper.kt * Update app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt * Update app/src/main/java/eu/kanade/data/manga/MangaMapper.kt * Bump version Co-authored-by: Quang Kieu <kieuq@wit.edu>
This commit is contained in:
@@ -5,14 +5,14 @@ import eu.kanade.domain.manga.model.Manga
|
||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||
|
||||
val mangaMapper: (Long, Long, String, String?, String?, String?, List<String>?, String, Long, String?, Boolean, Long?, Long?, Boolean, Long, Long, Long, Long, UpdateStrategy) -> Manga =
|
||||
{ id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, _, initialized, viewer, chapterFlags, coverLastModified, dateAdded, updateStrategy ->
|
||||
{ id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, _, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, updateStrategy ->
|
||||
Manga(
|
||||
id = id,
|
||||
source = source,
|
||||
favorite = favorite,
|
||||
lastUpdate = lastUpdate ?: 0,
|
||||
dateAdded = dateAdded,
|
||||
viewerFlags = viewer,
|
||||
viewerFlags = viewerFlags,
|
||||
chapterFlags = chapterFlags,
|
||||
coverLastModified = coverLastModified,
|
||||
url = url,
|
||||
@@ -28,11 +28,11 @@ val mangaMapper: (Long, Long, String, String?, String?, String?, List<String>?,
|
||||
)
|
||||
}
|
||||
|
||||
val libraryManga: (Long, Long, String, String?, String?, String?, List<String>?, String, Long, String?, Boolean, Long?, Long?, Boolean, Long, Long, Long, Long, UpdateStrategy, Long, Long, Long) -> LibraryManga =
|
||||
{ _id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, nextUpdate, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, updateStrategy, unreadCount, readCount, category ->
|
||||
val libraryManga: (Long, Long, String, String?, String?, String?, List<String>?, String, Long, String?, Boolean, Long?, Long?, Boolean, Long, Long, Long, Long, UpdateStrategy, Long, Long, Long, Long, Long, Long) -> LibraryManga =
|
||||
{ id, source, url, artist, author, description, genre, title, status, thumbnailUrl, favorite, lastUpdate, nextUpdate, initialized, viewerFlags, chapterFlags, coverLastModified, dateAdded, updateStrategy, unreadCount, readCount, latestUpload, chapterFetchedAt, lastRead, category ->
|
||||
LibraryManga(
|
||||
manga = mangaMapper(
|
||||
_id,
|
||||
id,
|
||||
source,
|
||||
url,
|
||||
artist,
|
||||
@@ -55,5 +55,8 @@ val libraryManga: (Long, Long, String, String?, String?, String?, List<String>?,
|
||||
category = category,
|
||||
unreadCount = unreadCount,
|
||||
readCount = readCount,
|
||||
latestUpload = latestUpload,
|
||||
chapterFetchedAt = chapterFetchedAt,
|
||||
lastRead = lastRead,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -37,11 +37,11 @@ class MangaRepositoryImpl(
|
||||
}
|
||||
|
||||
override suspend fun getLibraryManga(): List<LibraryManga> {
|
||||
return handler.awaitList { mangasQueries.getLibrary(libraryManga) }
|
||||
return handler.awaitList { libraryViewQueries.library(libraryManga) }
|
||||
}
|
||||
|
||||
override fun getLibraryMangaAsFlow(): Flow<List<LibraryManga>> {
|
||||
return handler.subscribeToList { mangasQueries.getLibrary(libraryManga) }
|
||||
return handler.subscribeToList { libraryViewQueries.library(libraryManga) }
|
||||
}
|
||||
|
||||
override fun getFavoritesBySourceId(sourceId: Long): Flow<List<Manga>> {
|
||||
|
||||
@@ -7,6 +7,9 @@ data class LibraryManga(
|
||||
val category: Long,
|
||||
val unreadCount: Long,
|
||||
val readCount: Long,
|
||||
val latestUpload: Long,
|
||||
val chapterFetchedAt: Long,
|
||||
val lastRead: Long,
|
||||
) {
|
||||
val totalChapters
|
||||
get() = readCount + unreadCount
|
||||
|
||||
@@ -15,7 +15,6 @@ import eu.kanade.core.prefs.CheckboxState
|
||||
import eu.kanade.core.prefs.PreferenceMutableState
|
||||
import eu.kanade.core.util.asFlow
|
||||
import eu.kanade.core.util.asObservable
|
||||
import eu.kanade.data.DatabaseHandler
|
||||
import eu.kanade.domain.base.BasePreferences
|
||||
import eu.kanade.domain.category.interactor.GetCategories
|
||||
import eu.kanade.domain.category.interactor.SetMangaCategories
|
||||
@@ -82,7 +81,6 @@ typealias LibraryMap = Map<Long, List<LibraryItem>>
|
||||
*/
|
||||
class LibraryPresenter(
|
||||
private val state: LibraryStateImpl = LibraryState() as LibraryStateImpl,
|
||||
private val handler: DatabaseHandler = Injekt.get(),
|
||||
private val getLibraryManga: GetLibraryManga = Injekt.get(),
|
||||
private val getTracks: GetTracks = Injekt.get(),
|
||||
private val getCategories: GetCategories = Injekt.get(),
|
||||
@@ -286,37 +284,7 @@ class LibraryPresenter(
|
||||
* @param map the map to sort.
|
||||
*/
|
||||
private fun applySort(categories: List<Category>, map: LibraryMap): LibraryMap {
|
||||
val lastReadManga by lazy {
|
||||
var counter = 0
|
||||
// TODO: Make [applySort] a suspended function
|
||||
runBlocking {
|
||||
handler.awaitList {
|
||||
mangasQueries.getLastRead()
|
||||
}.associate { it._id to counter++ }
|
||||
}
|
||||
}
|
||||
val latestChapterManga by lazy {
|
||||
var counter = 0
|
||||
// TODO: Make [applySort] a suspended function
|
||||
runBlocking {
|
||||
handler.awaitList {
|
||||
mangasQueries.getLatestByChapterUploadDate()
|
||||
}.associate { it._id to counter++ }
|
||||
}
|
||||
}
|
||||
val chapterFetchDateManga by lazy {
|
||||
var counter = 0
|
||||
// TODO: Make [applySort] a suspended function
|
||||
runBlocking {
|
||||
handler.awaitList {
|
||||
mangasQueries.getLatestByChapterFetchDate()
|
||||
}.associate { it._id to counter++ }
|
||||
}
|
||||
}
|
||||
|
||||
val sortModes = categories.associate { category ->
|
||||
category.id to category.sort
|
||||
}
|
||||
val sortModes = categories.associate { it.id to it.sort }
|
||||
|
||||
val locale = Locale.getDefault()
|
||||
val collator = Collator.getInstance(locale).apply {
|
||||
@@ -329,9 +297,7 @@ class LibraryPresenter(
|
||||
collator.compare(i1.libraryManga.manga.title.lowercase(locale), i2.libraryManga.manga.title.lowercase(locale))
|
||||
}
|
||||
LibrarySort.Type.LastRead -> {
|
||||
val manga1LastRead = lastReadManga[i1.libraryManga.manga.id] ?: 0
|
||||
val manga2LastRead = lastReadManga[i2.libraryManga.manga.id] ?: 0
|
||||
manga1LastRead.compareTo(manga2LastRead)
|
||||
i1.libraryManga.lastRead.compareTo(i2.libraryManga.lastRead)
|
||||
}
|
||||
LibrarySort.Type.LastUpdate -> {
|
||||
i1.libraryManga.manga.lastUpdate.compareTo(i2.libraryManga.manga.lastUpdate)
|
||||
@@ -347,16 +313,10 @@ class LibraryPresenter(
|
||||
i1.libraryManga.totalChapters.compareTo(i2.libraryManga.totalChapters)
|
||||
}
|
||||
LibrarySort.Type.LatestChapter -> {
|
||||
val manga1latestChapter = latestChapterManga[i1.libraryManga.manga.id]
|
||||
?: latestChapterManga.size
|
||||
val manga2latestChapter = latestChapterManga[i2.libraryManga.manga.id]
|
||||
?: latestChapterManga.size
|
||||
manga1latestChapter.compareTo(manga2latestChapter)
|
||||
i1.libraryManga.latestUpload.compareTo(i2.libraryManga.latestUpload)
|
||||
}
|
||||
LibrarySort.Type.ChapterFetchDate -> {
|
||||
val manga1chapterFetchDate = chapterFetchDateManga[i1.libraryManga.manga.id] ?: 0
|
||||
val manga2chapterFetchDate = chapterFetchDateManga[i2.libraryManga.manga.id] ?: 0
|
||||
manga1chapterFetchDate.compareTo(manga2chapterFetchDate)
|
||||
i1.libraryManga.chapterFetchedAt.compareTo(i2.libraryManga.chapterFetchedAt)
|
||||
}
|
||||
LibrarySort.Type.DateAdded -> {
|
||||
i1.libraryManga.manga.dateAdded.compareTo(i2.libraryManga.manga.dateAdded)
|
||||
|
||||
Reference in New Issue
Block a user