mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 19:04:39 -05:00
Add global meta
This commit is contained in:
@@ -7,14 +7,32 @@ import org.jetbrains.exposed.sql.Slf4jSqlDebugLogger
|
|||||||
import org.jetbrains.exposed.sql.addLogger
|
import org.jetbrains.exposed.sql.addLogger
|
||||||
import org.jetbrains.exposed.sql.select
|
import org.jetbrains.exposed.sql.select
|
||||||
import org.jetbrains.exposed.sql.transactions.transaction
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
|
import suwayomi.tachidesk.global.model.table.GlobalMetaTable
|
||||||
import suwayomi.tachidesk.graphql.types.CategoryMetaItem
|
import suwayomi.tachidesk.graphql.types.CategoryMetaItem
|
||||||
import suwayomi.tachidesk.graphql.types.ChapterMetaItem
|
import suwayomi.tachidesk.graphql.types.ChapterMetaItem
|
||||||
|
import suwayomi.tachidesk.graphql.types.GlobalMetaItem
|
||||||
import suwayomi.tachidesk.graphql.types.MangaMetaItem
|
import suwayomi.tachidesk.graphql.types.MangaMetaItem
|
||||||
|
import suwayomi.tachidesk.graphql.types.MetaItem
|
||||||
import suwayomi.tachidesk.graphql.types.MetaType
|
import suwayomi.tachidesk.graphql.types.MetaType
|
||||||
import suwayomi.tachidesk.manga.model.table.ChapterMetaTable
|
import suwayomi.tachidesk.manga.model.table.ChapterMetaTable
|
||||||
import suwayomi.tachidesk.manga.model.table.MangaMetaTable
|
import suwayomi.tachidesk.manga.model.table.MangaMetaTable
|
||||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||||
|
|
||||||
|
class GlobalMetaDataLoader : KotlinDataLoader<String, MetaItem?> {
|
||||||
|
override val dataLoaderName = "GlobalMetaDataLoader"
|
||||||
|
override fun getDataLoader(): DataLoader<String, MetaItem?> = DataLoaderFactory.newDataLoader<String, MetaItem?> { ids ->
|
||||||
|
future {
|
||||||
|
transaction {
|
||||||
|
addLogger(Slf4jSqlDebugLogger)
|
||||||
|
val metasByRefId = GlobalMetaTable.select { GlobalMetaTable.key inList ids }
|
||||||
|
.map { GlobalMetaItem(it) }
|
||||||
|
.associateBy { it.key }
|
||||||
|
ids.map { metasByRefId[it] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class ChapterMetaDataLoader : KotlinDataLoader<Int, MetaType> {
|
class ChapterMetaDataLoader : KotlinDataLoader<Int, MetaType> {
|
||||||
override val dataLoaderName = "ChapterMetaDataLoader"
|
override val dataLoaderName = "ChapterMetaDataLoader"
|
||||||
override fun getDataLoader(): DataLoader<Int, MetaType> = DataLoaderFactory.newDataLoader<Int, MetaType> { ids ->
|
override fun getDataLoader(): DataLoader<Int, MetaType> = DataLoaderFactory.newDataLoader<Int, MetaType> { ids ->
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) Contributors to the Suwayomi project
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package suwayomi.tachidesk.graphql.queries
|
||||||
|
|
||||||
|
import com.expediagroup.graphql.server.extensions.getValueFromDataLoader
|
||||||
|
import graphql.schema.DataFetchingEnvironment
|
||||||
|
import org.jetbrains.exposed.sql.selectAll
|
||||||
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
|
import suwayomi.tachidesk.global.model.table.GlobalMetaTable
|
||||||
|
import suwayomi.tachidesk.graphql.types.GlobalMetaItem
|
||||||
|
import suwayomi.tachidesk.graphql.types.MetaItem
|
||||||
|
import java.util.concurrent.CompletableFuture
|
||||||
|
|
||||||
|
class MetaQuery {
|
||||||
|
fun meta(dataFetchingEnvironment: DataFetchingEnvironment, key: String): CompletableFuture<MetaItem?> {
|
||||||
|
return dataFetchingEnvironment.getValueFromDataLoader<String, MetaItem?>("GlobalMetaDataLoader", key)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun metas(): List<GlobalMetaItem> {
|
||||||
|
val results = transaction {
|
||||||
|
GlobalMetaTable.selectAll().toList()
|
||||||
|
}
|
||||||
|
|
||||||
|
return results.map { GlobalMetaItem(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ import suwayomi.tachidesk.graphql.dataLoaders.ChapterMetaDataLoader
|
|||||||
import suwayomi.tachidesk.graphql.dataLoaders.ChaptersForMangaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.ChaptersForMangaDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.ExtensionDataLoader
|
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.MangaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.MangaDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.MangaForCategoryDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.MangaForCategoryDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.MangaMetaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.MangaMetaDataLoader
|
||||||
@@ -29,6 +30,7 @@ class TachideskDataLoaderRegistryFactory {
|
|||||||
MangaDataLoader(),
|
MangaDataLoader(),
|
||||||
ChapterDataLoader(),
|
ChapterDataLoader(),
|
||||||
ChaptersForMangaDataLoader(),
|
ChaptersForMangaDataLoader(),
|
||||||
|
GlobalMetaDataLoader(),
|
||||||
ChapterMetaDataLoader(),
|
ChapterMetaDataLoader(),
|
||||||
MangaMetaDataLoader(),
|
MangaMetaDataLoader(),
|
||||||
MangaForCategoryDataLoader(),
|
MangaForCategoryDataLoader(),
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import suwayomi.tachidesk.graphql.queries.CategoryQuery
|
|||||||
import suwayomi.tachidesk.graphql.queries.ChapterQuery
|
import suwayomi.tachidesk.graphql.queries.ChapterQuery
|
||||||
import suwayomi.tachidesk.graphql.queries.ExtensionQuery
|
import suwayomi.tachidesk.graphql.queries.ExtensionQuery
|
||||||
import suwayomi.tachidesk.graphql.queries.MangaQuery
|
import suwayomi.tachidesk.graphql.queries.MangaQuery
|
||||||
|
import suwayomi.tachidesk.graphql.queries.MetaQuery
|
||||||
import suwayomi.tachidesk.graphql.queries.SourceQuery
|
import suwayomi.tachidesk.graphql.queries.SourceQuery
|
||||||
import suwayomi.tachidesk.graphql.subscriptions.DownloadSubscription
|
import suwayomi.tachidesk.graphql.subscriptions.DownloadSubscription
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
@@ -41,7 +42,8 @@ val schema = toSchema(
|
|||||||
TopLevelObject(ChapterQuery()),
|
TopLevelObject(ChapterQuery()),
|
||||||
TopLevelObject(CategoryQuery()),
|
TopLevelObject(CategoryQuery()),
|
||||||
TopLevelObject(SourceQuery()),
|
TopLevelObject(SourceQuery()),
|
||||||
TopLevelObject(ExtensionQuery())
|
TopLevelObject(ExtensionQuery()),
|
||||||
|
TopLevelObject(MetaQuery())
|
||||||
),
|
),
|
||||||
mutations = listOf(
|
mutations = listOf(
|
||||||
TopLevelObject(ChapterMutation())
|
TopLevelObject(ChapterMutation())
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package suwayomi.tachidesk.graphql.types
|
|||||||
|
|
||||||
import com.expediagroup.graphql.generator.annotations.GraphQLIgnore
|
import com.expediagroup.graphql.generator.annotations.GraphQLIgnore
|
||||||
import org.jetbrains.exposed.sql.ResultRow
|
import org.jetbrains.exposed.sql.ResultRow
|
||||||
|
import suwayomi.tachidesk.global.model.table.GlobalMetaTable
|
||||||
import suwayomi.tachidesk.manga.model.table.CategoryMetaTable
|
import suwayomi.tachidesk.manga.model.table.CategoryMetaTable
|
||||||
import suwayomi.tachidesk.manga.model.table.ChapterMetaTable
|
import suwayomi.tachidesk.manga.model.table.ChapterMetaTable
|
||||||
import suwayomi.tachidesk.manga.model.table.MangaMetaTable
|
import suwayomi.tachidesk.manga.model.table.MangaMetaTable
|
||||||
@@ -12,7 +13,7 @@ open class MetaItem(
|
|||||||
val key: String,
|
val key: String,
|
||||||
val value: String,
|
val value: String,
|
||||||
@GraphQLIgnore
|
@GraphQLIgnore
|
||||||
val ref: Int
|
val ref: Int?
|
||||||
)
|
)
|
||||||
|
|
||||||
class ChapterMetaItem(
|
class ChapterMetaItem(
|
||||||
@@ -26,3 +27,7 @@ class MangaMetaItem(
|
|||||||
class CategoryMetaItem(
|
class CategoryMetaItem(
|
||||||
private val row: ResultRow
|
private val row: ResultRow
|
||||||
) : MetaItem(row[CategoryMetaTable.key], row[CategoryMetaTable.value], row[CategoryMetaTable.ref].value)
|
) : MetaItem(row[CategoryMetaTable.key], row[CategoryMetaTable.value], row[CategoryMetaTable.ref].value)
|
||||||
|
|
||||||
|
class GlobalMetaItem(
|
||||||
|
private val row: ResultRow
|
||||||
|
) : MetaItem(row[GlobalMetaTable.key], row[GlobalMetaTable.value], null)
|
||||||
|
|||||||
Reference in New Issue
Block a user