Files
TachiyomiSY/app/src/main/java/eu/kanade/data/manga/LibraryQuery.kt
T
AntsyLich 71076bd56a Move LibraryManga to domain layer (#8126)
(cherry picked from commit ea8383978b)

# Conflicts:
#	app/src/main/java/eu/kanade/data/manga/MangaMapper.kt
#	app/src/main/java/eu/kanade/presentation/library/LibraryState.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/database/models/LibraryManga.kt
#	app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt
2022-10-01 19:14:58 -04:00

105 lines
4.0 KiB
Kotlin

package eu.kanade.data.manga
import com.squareup.sqldelight.Query
import com.squareup.sqldelight.db.SqlCursor
import com.squareup.sqldelight.db.SqlDriver
import com.squareup.sqldelight.internal.copyOnWriteList
import eu.kanade.data.listOfStringsAdapter
import eu.kanade.data.listOfStringsAndAdapter
import eu.kanade.data.updateStrategyAdapter
import eu.kanade.domain.library.model.LibraryManga
import exh.source.MERGED_SOURCE_ID
private val mapper = { cursor: SqlCursor ->
LibraryManga(
manga = mangaMapper(
cursor.getLong(0)!!,
cursor.getLong(1)!!,
cursor.getString(2)!!,
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6)?.let(listOfStringsAdapter::decode),
cursor.getString(7)!!,
cursor.getLong(8)!!,
cursor.getString(9),
cursor.getLong(10)!! == 1L,
cursor.getLong(11) ?: 0,
null,
cursor.getLong(13)!! == 1L,
cursor.getLong(14)!!,
cursor.getLong(15)!!,
cursor.getLong(16)!!,
cursor.getLong(17)!!,
cursor.getString(18)?.let(listOfStringsAndAdapter::decode),
updateStrategyAdapter.decode(cursor.getLong(19)!!),
),
unreadCount = cursor.getLong(20)!!,
readCount = cursor.getLong(21)!!,
category = cursor.getLong(22)!!,
)
}
class LibraryQuery(val driver: SqlDriver) : Query<LibraryManga>(copyOnWriteList(), mapper) {
override fun execute(): SqlCursor {
return driver.executeQuery(
null,
"""
SELECT M.*, COALESCE(MC.category_id, 0) AS category
FROM (
SELECT mangas.*, COALESCE(UR.unreadCount, 0) AS unread_count, COALESCE(R.readCount, 0) AS read_count
FROM mangas
LEFT JOIN (
SELECT chapters.manga_id, COUNT(*) AS unreadCount
FROM chapters
WHERE chapters.read = 0
GROUP BY chapters.manga_id
) AS UR
ON mangas._id = UR.manga_id
LEFT JOIN (
SELECT chapters.manga_id, COUNT(*) AS readCount
FROM chapters
WHERE chapters.read = 1
GROUP BY chapters.manga_id
) AS R
ON mangas._id = R.manga_id
WHERE mangas.favorite = 1 AND mangas.source <> $MERGED_SOURCE_ID
GROUP BY mangas._id
UNION
SELECT mangas.*, COALESCE(UR.unreadCount, 0) AS unread_count, COALESCE(R.readCount, 0) AS read_count
FROM mangas
LEFT JOIN (
SELECT merged.merge_id, COUNT(*) as unreadCount
FROM merged
JOIN chapters
ON chapters.manga_id = merged.manga_id
WHERE chapters.read = 0
GROUP BY merged.merge_id
) AS UR
ON mangas._id = UR.merge_id
LEFT JOIN (
SELECT merged.merge_id, COUNT(*) as readCount
FROM merged
JOIN chapters
ON chapters.manga_id = merged.manga_id
WHERE chapters.read = 1
GROUP BY merged.merge_id
) AS R
ON mangas._id = R.merge_id
WHERE mangas.favorite = 1 AND mangas.source = $MERGED_SOURCE_ID
GROUP BY mangas._id
ORDER BY mangas.title
) AS M
LEFT JOIN (
SELECT *
FROM mangas_categories
) AS MC
ON M._id = MC.manga_id;
""".trimIndent(),
1,
)
}
override fun toString(): String = "LibraryQuery.sq:get"
}