mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 10:54:38 -05:00
Add more chapter fields to MangaType (#812)
- last read - latest read (latest fetched chapter that has been read) - latest fetched - latest uploaded
This commit is contained in:
@@ -109,11 +109,68 @@ class LastReadChapterForMangaDataLoader : KotlinDataLoader<Int, ChapterType?> {
|
|||||||
addLogger(Slf4jSqlDebugLogger)
|
addLogger(Slf4jSqlDebugLogger)
|
||||||
val lastReadChaptersByMangaId =
|
val lastReadChaptersByMangaId =
|
||||||
ChapterTable
|
ChapterTable
|
||||||
.select { (ChapterTable.manga inList ids) and (ChapterTable.isRead eq true) }
|
.select { (ChapterTable.manga inList ids) }
|
||||||
.orderBy(ChapterTable.sourceOrder to SortOrder.DESC)
|
.orderBy(ChapterTable.lastReadAt to SortOrder.DESC)
|
||||||
.groupBy { it[ChapterTable.manga].value }
|
.groupBy { it[ChapterTable.manga].value }
|
||||||
ids.map { id -> lastReadChaptersByMangaId[id]?.let { chapters -> ChapterType(chapters.first()) } }
|
ids.map { id -> lastReadChaptersByMangaId[id]?.let { chapters -> ChapterType(chapters.first()) } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class LatestReadChapterForMangaDataLoader : KotlinDataLoader<Int, ChapterType?> {
|
||||||
|
override val dataLoaderName = "LatestReadChapterForMangaDataLoader"
|
||||||
|
|
||||||
|
override fun getDataLoader(): DataLoader<Int, ChapterType?> =
|
||||||
|
DataLoaderFactory.newDataLoader<Int, ChapterType?> { ids ->
|
||||||
|
future {
|
||||||
|
transaction {
|
||||||
|
addLogger(Slf4jSqlDebugLogger)
|
||||||
|
val latestReadChaptersByMangaId =
|
||||||
|
ChapterTable
|
||||||
|
.select { (ChapterTable.manga inList ids) and (ChapterTable.isRead eq true) }
|
||||||
|
.orderBy(ChapterTable.sourceOrder to SortOrder.DESC)
|
||||||
|
.groupBy { it[ChapterTable.manga].value }
|
||||||
|
ids.map { id -> latestReadChaptersByMangaId[id]?.let { chapters -> ChapterType(chapters.first()) } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LatestFetchedChapterForMangaDataLoader : KotlinDataLoader<Int, ChapterType?> {
|
||||||
|
override val dataLoaderName = "LatestFetchedChapterForMangaDataLoader"
|
||||||
|
|
||||||
|
override fun getDataLoader(): DataLoader<Int, ChapterType?> =
|
||||||
|
DataLoaderFactory.newDataLoader<Int, ChapterType?> { ids ->
|
||||||
|
future {
|
||||||
|
transaction {
|
||||||
|
addLogger(Slf4jSqlDebugLogger)
|
||||||
|
val latestFetchedChaptersByMangaId =
|
||||||
|
ChapterTable
|
||||||
|
.select { (ChapterTable.manga inList ids) }
|
||||||
|
.orderBy(ChapterTable.fetchedAt to SortOrder.DESC, ChapterTable.sourceOrder to SortOrder.DESC)
|
||||||
|
.groupBy { it[ChapterTable.manga].value }
|
||||||
|
ids.map { id -> latestFetchedChaptersByMangaId[id]?.let { chapters -> ChapterType(chapters.first()) } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LatestUploadedChapterForMangaDataLoader : KotlinDataLoader<Int, ChapterType?> {
|
||||||
|
override val dataLoaderName = "LatestUploadedChapterForMangaDataLoader"
|
||||||
|
|
||||||
|
override fun getDataLoader(): DataLoader<Int, ChapterType?> =
|
||||||
|
DataLoaderFactory.newDataLoader<Int, ChapterType?> { ids ->
|
||||||
|
future {
|
||||||
|
transaction {
|
||||||
|
addLogger(Slf4jSqlDebugLogger)
|
||||||
|
val latestUploadedChaptersByMangaId =
|
||||||
|
ChapterTable
|
||||||
|
.select { (ChapterTable.manga inList ids) }
|
||||||
|
.orderBy(ChapterTable.date_upload to SortOrder.DESC, ChapterTable.sourceOrder to SortOrder.DESC)
|
||||||
|
.groupBy { it[ChapterTable.manga].value }
|
||||||
|
ids.map { id -> latestUploadedChaptersByMangaId[id]?.let { chapters -> ChapterType(chapters.first()) } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ import suwayomi.tachidesk.graphql.dataLoaders.ExtensionDataLoader
|
|||||||
import suwayomi.tachidesk.graphql.dataLoaders.ExtensionForSourceDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.ExtensionForSourceDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.GlobalMetaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.GlobalMetaDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.LastReadChapterForMangaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.LastReadChapterForMangaDataLoader
|
||||||
|
import suwayomi.tachidesk.graphql.dataLoaders.LatestFetchedChapterForMangaDataLoader
|
||||||
|
import suwayomi.tachidesk.graphql.dataLoaders.LatestReadChapterForMangaDataLoader
|
||||||
|
import suwayomi.tachidesk.graphql.dataLoaders.LatestUploadedChapterForMangaDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.MangaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.MangaDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.MangaForCategoryDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.MangaForCategoryDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.MangaForIdsDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.MangaForIdsDataLoader
|
||||||
@@ -39,6 +42,9 @@ class TachideskDataLoaderRegistryFactory {
|
|||||||
DownloadedChapterCountForMangaDataLoader(),
|
DownloadedChapterCountForMangaDataLoader(),
|
||||||
UnreadChapterCountForMangaDataLoader(),
|
UnreadChapterCountForMangaDataLoader(),
|
||||||
LastReadChapterForMangaDataLoader(),
|
LastReadChapterForMangaDataLoader(),
|
||||||
|
LatestReadChapterForMangaDataLoader(),
|
||||||
|
LatestFetchedChapterForMangaDataLoader(),
|
||||||
|
LatestUploadedChapterForMangaDataLoader(),
|
||||||
GlobalMetaDataLoader(),
|
GlobalMetaDataLoader(),
|
||||||
ChapterMetaDataLoader(),
|
ChapterMetaDataLoader(),
|
||||||
MangaMetaDataLoader(),
|
MangaMetaDataLoader(),
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ class MangaType(
|
|||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, Int>("DownloadedChapterCountForMangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, Int>("UnreadChapterCountForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, Int>("UnreadChapterCountForMangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LastReadChapterForMangaDataLoader").clear(mangaId)
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LastReadChapterForMangaDataLoader").clear(mangaId)
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LatestReadChapterForMangaDataLoader").clear(mangaId)
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LatestFetchedChapterForMangaDataLoader").clear(mangaId)
|
||||||
|
dataFetchingEnvironment.getDataLoader<Int, ChapterType>("LatestUploadedChapterForMangaDataLoader").clear(mangaId)
|
||||||
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>(
|
dataFetchingEnvironment.getDataLoader<Int, ChapterNodeList>(
|
||||||
"ChaptersForMangaDataLoader",
|
"ChaptersForMangaDataLoader",
|
||||||
).clear(mangaId)
|
).clear(mangaId)
|
||||||
@@ -113,6 +116,18 @@ class MangaType(
|
|||||||
return dataFetchingEnvironment.getValueFromDataLoader("LastReadChapterForMangaDataLoader", id)
|
return dataFetchingEnvironment.getValueFromDataLoader("LastReadChapterForMangaDataLoader", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun latestReadChapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType?> {
|
||||||
|
return dataFetchingEnvironment.getValueFromDataLoader("LatestReadChapterForMangaDataLoader", id)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun latestFetchedChapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType?> {
|
||||||
|
return dataFetchingEnvironment.getValueFromDataLoader("LatestFetchedChapterForMangaDataLoader", id)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun latestUploadedChapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterType?> {
|
||||||
|
return dataFetchingEnvironment.getValueFromDataLoader("LatestUploadedChapterForMangaDataLoader", id)
|
||||||
|
}
|
||||||
|
|
||||||
fun chapters(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterNodeList> {
|
fun chapters(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<ChapterNodeList> {
|
||||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, ChapterNodeList>("ChaptersForMangaDataLoader", id)
|
return dataFetchingEnvironment.getValueFromDataLoader<Int, ChapterNodeList>("ChaptersForMangaDataLoader", id)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user