mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 11:24:35 -05:00
Support Custom Repos (#803)
* Support custom repos * Fix migration * Make extension after update optional
This commit is contained in:
@@ -20,7 +20,7 @@ class ExtensionMutation {
|
||||
|
||||
data class UpdateExtensionPayload(
|
||||
val clientMutationId: String?,
|
||||
val extension: ExtensionType,
|
||||
val extension: ExtensionType?,
|
||||
)
|
||||
|
||||
data class UpdateExtensionInput(
|
||||
@@ -77,7 +77,8 @@ class ExtensionMutation {
|
||||
}.thenApply {
|
||||
val extension =
|
||||
transaction {
|
||||
ExtensionType(ExtensionTable.select { ExtensionTable.pkgName eq id }.first())
|
||||
ExtensionTable.select { ExtensionTable.pkgName eq id }.firstOrNull()
|
||||
?.let { ExtensionType(it) }
|
||||
}
|
||||
|
||||
UpdateExtensionPayload(
|
||||
|
||||
@@ -55,6 +55,9 @@ class SettingsMutation {
|
||||
updateSetting(settings.excludeEntryWithUnreadChapters, serverConfig.excludeEntryWithUnreadChapters)
|
||||
updateSetting(settings.autoDownloadAheadLimit, serverConfig.autoDownloadAheadLimit)
|
||||
|
||||
// extension
|
||||
updateSetting(settings.extensionRepos, serverConfig.extensionRepos)
|
||||
|
||||
// requests
|
||||
updateSetting(settings.maxSourcesInParallel, serverConfig.maxSourcesInParallel)
|
||||
|
||||
|
||||
@@ -82,6 +82,7 @@ class ExtensionQuery {
|
||||
}
|
||||
|
||||
data class ExtensionCondition(
|
||||
val repo: String? = null,
|
||||
val apkName: String? = null,
|
||||
val iconUrl: String? = null,
|
||||
val name: String? = null,
|
||||
@@ -96,6 +97,7 @@ class ExtensionQuery {
|
||||
) : HasGetOp {
|
||||
override fun getOp(): Op<Boolean>? {
|
||||
val opAnd = OpAnd()
|
||||
opAnd.eq(repo, ExtensionTable.repo)
|
||||
opAnd.eq(apkName, ExtensionTable.apkName)
|
||||
opAnd.eq(iconUrl, ExtensionTable.iconUrl)
|
||||
opAnd.eq(name, ExtensionTable.name)
|
||||
@@ -112,6 +114,7 @@ class ExtensionQuery {
|
||||
}
|
||||
|
||||
data class ExtensionFilter(
|
||||
val repo: StringFilter? = null,
|
||||
val apkName: StringFilter? = null,
|
||||
val iconUrl: StringFilter? = null,
|
||||
val name: StringFilter? = null,
|
||||
@@ -129,6 +132,7 @@ class ExtensionQuery {
|
||||
) : Filter<ExtensionFilter> {
|
||||
override fun getOpList(): List<Op<Boolean>> {
|
||||
return listOfNotNull(
|
||||
andFilterWithCompareString(ExtensionTable.repo, repo),
|
||||
andFilterWithCompareString(ExtensionTable.apkName, apkName),
|
||||
andFilterWithCompareString(ExtensionTable.iconUrl, iconUrl),
|
||||
andFilterWithCompareString(ExtensionTable.name, name),
|
||||
|
||||
@@ -20,6 +20,7 @@ import suwayomi.tachidesk.manga.model.table.ExtensionTable
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
class ExtensionType(
|
||||
val repo: String?,
|
||||
val apkName: String,
|
||||
val iconUrl: String,
|
||||
val name: String,
|
||||
@@ -33,6 +34,7 @@ class ExtensionType(
|
||||
val isObsolete: Boolean,
|
||||
) : Node {
|
||||
constructor(row: ResultRow) : this(
|
||||
repo = row[ExtensionTable.repo],
|
||||
apkName = row[ExtensionTable.apkName],
|
||||
iconUrl = Extension.getExtensionIconUrl(row[ExtensionTable.apkName]),
|
||||
name = row[ExtensionTable.name],
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
package suwayomi.tachidesk.graphql.types
|
||||
|
||||
import com.expediagroup.graphql.server.extensions.getValueFromDataLoader
|
||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||
import graphql.schema.DataFetchingEnvironment
|
||||
import org.jetbrains.exposed.sql.ResultRow
|
||||
import suwayomi.tachidesk.graphql.server.primitives.Cursor
|
||||
@@ -37,6 +38,7 @@ class MangaType(
|
||||
val status: MangaStatus,
|
||||
val inLibrary: Boolean,
|
||||
val inLibraryAt: Long,
|
||||
val updateStrategy: UpdateStrategy,
|
||||
val realUrl: String?,
|
||||
var lastFetchedAt: Long?, // todo
|
||||
var chaptersLastFetchedAt: Long?, // todo
|
||||
@@ -73,6 +75,7 @@ class MangaType(
|
||||
MangaStatus.valueOf(row[MangaTable.status]),
|
||||
row[MangaTable.inLibrary],
|
||||
row[MangaTable.inLibraryAt],
|
||||
UpdateStrategy.valueOf(row[MangaTable.updateStrategy]),
|
||||
row[MangaTable.realUrl],
|
||||
row[MangaTable.lastFetchedAt],
|
||||
row[MangaTable.chaptersLastFetchedAt],
|
||||
@@ -92,6 +95,7 @@ class MangaType(
|
||||
MangaStatus.valueOf(dataClass.status),
|
||||
dataClass.inLibrary,
|
||||
dataClass.inLibraryAt,
|
||||
dataClass.updateStrategy,
|
||||
dataClass.realUrl,
|
||||
dataClass.lastFetchedAt,
|
||||
dataClass.chaptersLastFetchedAt,
|
||||
|
||||
@@ -40,6 +40,9 @@ interface Settings : Node {
|
||||
val excludeEntryWithUnreadChapters: Boolean?
|
||||
val autoDownloadAheadLimit: Int?
|
||||
|
||||
// extension
|
||||
val extensionRepos: List<String>?
|
||||
|
||||
// requests
|
||||
val maxSourcesInParallel: Int?
|
||||
|
||||
@@ -90,6 +93,8 @@ data class PartialSettingsType(
|
||||
override val autoDownloadNewChapters: Boolean?,
|
||||
override val excludeEntryWithUnreadChapters: Boolean?,
|
||||
override val autoDownloadAheadLimit: Int?,
|
||||
// extension
|
||||
override val extensionRepos: List<String>?,
|
||||
// requests
|
||||
override val maxSourcesInParallel: Int?,
|
||||
// updater
|
||||
@@ -135,6 +140,8 @@ class SettingsType(
|
||||
override val autoDownloadNewChapters: Boolean,
|
||||
override val excludeEntryWithUnreadChapters: Boolean,
|
||||
override val autoDownloadAheadLimit: Int,
|
||||
// extension
|
||||
override val extensionRepos: List<String>,
|
||||
// requests
|
||||
override val maxSourcesInParallel: Int,
|
||||
// updater
|
||||
@@ -179,6 +186,8 @@ class SettingsType(
|
||||
config.autoDownloadNewChapters.value,
|
||||
config.excludeEntryWithUnreadChapters.value,
|
||||
config.autoDownloadAheadLimit.value,
|
||||
// extension
|
||||
config.extensionRepos.value,
|
||||
// requests
|
||||
config.maxSourcesInParallel.value,
|
||||
// updater
|
||||
|
||||
Reference in New Issue
Block a user