mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14: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