From 7926590c222e973f4220d161426c8db45ccd4c20 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Fri, 21 Jun 2024 09:25:43 +0700 Subject: [PATCH] chore(recents): Use sql query to filter scanlators --- .../data/database/queries/RawQueries.kt | 22 ++++++++++++++----- .../tachiyomi/ui/recents/RecentsPresenter.kt | 1 - .../sqldelight/tachiyomi/data/chapters.sq | 20 +++++++++++++++++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt index 86a2435455..19a5d7d39e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/RawQueries.kt @@ -8,17 +8,27 @@ import eu.kanade.tachiyomi.data.database.tables.HistoryTable as History import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable as MangaCategory import eu.kanade.tachiyomi.data.database.tables.MangaTable as Manga +// TODO: Migrate to SQLDelight /** * Query to get the recent chapters of manga from the library up to a date. */ fun getRecentsQuery(search: String, offset: Int, isResuming: Boolean) = """ - SELECT ${Manga.TABLE}.${Manga.COL_URL} as mangaUrl, * FROM ${Manga.TABLE} JOIN ${Chapter.TABLE} - ON ${Manga.TABLE}.${Manga.COL_ID} = ${Chapter.TABLE}.${Chapter.COL_MANGA_ID} - WHERE ${Manga.COL_FAVORITE} = 1 - AND ${Chapter.COL_DATE_FETCH} > ${Manga.COL_DATE_ADDED} - AND lower(${Manga.COL_TITLE}) LIKE '%$search%' - ORDER BY ${Chapter.COL_DATE_FETCH} DESC + SELECT + M.url AS mangaUrl, + M.*, + C.* + FROM mangas AS M + JOIN chapters AS C + ON M._id = C.manga_id + LEFT JOIN scanlators_view AS S + ON C.manga_id = S.manga_id + AND ifnull(C.scanlator, 'N/A') = ifnull(S.name, '//') + WHERE M.favorite = 1 + AND C.date_fetch > M.date_added + AND lower(M.title) LIKE '%$search%' + AND S.name IS NULL + ORDER BY C.date_fetch DESC ${limitAndOffset(true, isResuming, offset)} """ diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt index bad7ce93ba..5d3308b9a4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsPresenter.kt @@ -247,7 +247,6 @@ class RecentsPresenter( .mapNotNull { (key, mcs) -> val manga = mcs.first().manga val chapters = mcs.map { ChapterHistory(it.chapter) } - .filterChaptersByScanlators(manga) extraCount += mcs.size - chapters.size if (chapters.isEmpty()) return@mapNotNull null val existingItem = recentItems.takeLast(ENDLESS_LIMIT).find { diff --git a/data/src/commonMain/sqldelight/tachiyomi/data/chapters.sq b/data/src/commonMain/sqldelight/tachiyomi/data/chapters.sq index 20007f8d46..5e2043e006 100644 --- a/data/src/commonMain/sqldelight/tachiyomi/data/chapters.sq +++ b/data/src/commonMain/sqldelight/tachiyomi/data/chapters.sq @@ -32,6 +32,26 @@ AND ( :apply_filter = 0 OR S.name IS NULL ); +getRecents: +SELECT + M.url AS mangaUrl, + M.*, + C.* +FROM mangas AS M +JOIN chapters AS C +ON M._id = C.manga_id +LEFT JOIN scanlators_view AS S +ON C.manga_id = S.manga_id +AND ifnull(C.scanlator, 'N/A') = ifnull(S.name, '//') -- I assume if it's N/A it shouldn't be filtered +WHERE M.favorite = 1 +AND C.date_fetch > M.date_added +AND lower(M.title) LIKE :search +AND ( + :apply_filter = 0 OR S.name IS NULL +) +ORDER BY C.date_fetch DESC +LIMIT :limit OFFSET :offset; + getScanlatorsByMangaId: SELECT scanlator FROM chapters