mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-05 20:04:36 -05:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1770cb055 | ||
|
|
cf3589f272 | ||
|
|
d7a839b1fd | ||
|
|
5d46f2a197 | ||
|
|
fbd3a3cc5d | ||
|
|
41d23c0a09 | ||
|
|
f473135d04 | ||
|
|
36ecb3ce6f |
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -42,7 +42,7 @@ body:
|
|||||||
label: Suwayomi-Server version
|
label: Suwayomi-Server version
|
||||||
description: You can find your Suwayomi-Server version in **More → About**.
|
description: You can find your Suwayomi-Server version in **More → About**.
|
||||||
placeholder: |
|
placeholder: |
|
||||||
Example: "v2.3.2230"
|
Example: "v2.3.2238"
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/docker_build_stable.yml
vendored
2
.github/workflows/docker_build_stable.yml
vendored
@@ -11,5 +11,5 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: run docker build and publish script
|
- name: run docker build and publish script
|
||||||
run: |
|
run: |
|
||||||
curl -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ${{ secrets.DEPLOY_PREVIEW_TOKEN }}" -d '{"ref":"main", "inputs":{"tachidesk_release_type": "stable"}}' https://api.github.com/repos/suwayomi/docker-tachidesk/actions/workflows/build_container_images.yml/dispatches
|
curl -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ${{ secrets.DEPLOY_DOCKER_TOKEN }}" -d '{"ref":"main", "inputs":{"tachidesk_release_type": "stable"}}' https://api.github.com/repos/suwayomi/suwayomi-server-docker/actions/workflows/build_container_images.yml/dispatches
|
||||||
|
|
||||||
|
|||||||
37
.github/workflows/winget.yml
vendored
37
.github/workflows/winget.yml
vendored
@@ -1,19 +1,52 @@
|
|||||||
name: Publish to WinGet
|
name: Publish to WinGet
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
description: Version
|
description: Version
|
||||||
required: false
|
required: false
|
||||||
|
type: string
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
runs-on: windows-latest # action can only be run on windows
|
runs-on: windows-latest # action can only be run on windows
|
||||||
steps:
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Determine version
|
||||||
|
id: version
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
run: |
|
||||||
|
if [ -n "${{ inputs.version }}" ]; then
|
||||||
|
VERSION="${{ inputs.version }}"
|
||||||
|
elif [ "${{ github.event_name }}" = "release" ]; then
|
||||||
|
VERSION="${{ github.event.release.tag_name }}"
|
||||||
|
else
|
||||||
|
VERSION="$(gh release view --json tagName -q .tagName)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Sync winget-pkgs fork with upstream
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.WINGET_PUBLISH_PAT }}
|
||||||
|
run: |
|
||||||
|
gh api \
|
||||||
|
--method POST \
|
||||||
|
-H "Accept: application/vnd.github+json" \
|
||||||
|
"/repos/Suwayomi/winget-pkgs/merge-upstream" \
|
||||||
|
-f branch=master
|
||||||
|
|
||||||
- uses: vedantmgoyal2009/winget-releaser@v2
|
- uses: vedantmgoyal2009/winget-releaser@v2
|
||||||
with:
|
with:
|
||||||
identifier: Suwayomi.Suwayomi-Server
|
identifier: Suwayomi.Suwayomi-Server
|
||||||
installers-regex: '.*x64.msi$'
|
installers-regex: '.*x64.msi$'
|
||||||
token: ${{ secrets.WINGET_PUBLISH_PAT }}
|
token: ${{ secrets.WINGET_PUBLISH_PAT }}
|
||||||
version: ${{ inputs.version || github.ref_name }}
|
version: ${{ steps.version.outputs.version }}
|
||||||
release-tag: ${{ inputs.version || github.ref_name }}
|
release-tag: ${{ steps.version.outputs.version }}
|
||||||
18
CHANGELOG.md
18
CHANGELOG.md
@@ -15,6 +15,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|||||||
### Fixed
|
### Fixed
|
||||||
- .
|
- .
|
||||||
|
|
||||||
|
## [v2.3.2238] - 2026-07-05
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- (**Extension**) Support fully qualified extension class names
|
||||||
|
- (**Manga/API**) Return partial responses for Manga And Chapters query
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- (**Database/H2**) Use temporary file for H2 migration tools download
|
||||||
|
|
||||||
|
## [v2.3.2232] - 2026-07-03
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- (**Extension**) Update APK url on installed Extensions
|
||||||
|
|
||||||
## [v2.3.2230] - 2026-07-01
|
## [v2.3.2230] - 2026-07-01
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
@@ -486,7 +500,9 @@ Huge thanks to @martinek who pulled the most of the weight this release!
|
|||||||
|
|
||||||
<!-- SERVER LINKS -->
|
<!-- SERVER LINKS -->
|
||||||
|
|
||||||
[unreleased]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2230...HEAD
|
[unreleased]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2238...HEAD
|
||||||
|
[v2.3.2238]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2232...v2.3.2238
|
||||||
|
[v2.3.2232]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2230...v2.3.2232
|
||||||
[v2.3.2230]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2223...v2.3.2230
|
[v2.3.2230]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2223...v2.3.2230
|
||||||
[v2.3.2223]: https://github.com/suwayomi/suwayomi-server/compare/v2.2.2100...v2.3.2223
|
[v2.3.2223]: https://github.com/suwayomi/suwayomi-server/compare/v2.2.2100...v2.3.2223
|
||||||
[v2.2.2100]: https://github.com/suwayomi/suwayomi-server/compare/v2.1.1867...v2.2.2100
|
[v2.2.2100]: https://github.com/suwayomi/suwayomi-server/compare/v2.1.1867...v2.2.2100
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
package suwayomi.tachidesk.graphql.mutations
|
package suwayomi.tachidesk.graphql.mutations
|
||||||
|
|
||||||
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
|
||||||
|
import com.expediagroup.graphql.server.extensions.toGraphQLError
|
||||||
|
import graphql.execution.DataFetcherResult
|
||||||
import org.jetbrains.exposed.v1.core.LikePattern
|
import org.jetbrains.exposed.v1.core.LikePattern
|
||||||
import org.jetbrains.exposed.v1.core.Op
|
import org.jetbrains.exposed.v1.core.Op
|
||||||
import org.jetbrains.exposed.v1.core.and
|
import org.jetbrains.exposed.v1.core.and
|
||||||
@@ -181,15 +183,21 @@ class MangaMutation {
|
|||||||
)
|
)
|
||||||
|
|
||||||
@RequireAuth
|
@RequireAuth
|
||||||
fun fetchMangaAndChapters(input: FetchMangaAndChaptersInput): CompletableFuture<FetchMangaAndChaptersPayload?> {
|
fun fetchMangaAndChapters(input: FetchMangaAndChaptersInput): CompletableFuture<DataFetcherResult<FetchMangaAndChaptersPayload?>> {
|
||||||
val (clientMutationId, id, fetchManga, fetchChapters) = input
|
val (clientMutationId, id, fetchManga, fetchChapters) = input
|
||||||
|
|
||||||
return future {
|
return future {
|
||||||
Manga.updateMangaAndChapters(
|
val error =
|
||||||
mangaId = id,
|
try {
|
||||||
updateManga = fetchManga,
|
Manga.updateMangaAndChapters(
|
||||||
updateChapters = fetchChapters,
|
mangaId = id,
|
||||||
)
|
updateManga = fetchManga,
|
||||||
|
updateChapters = fetchChapters,
|
||||||
|
)
|
||||||
|
null
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e
|
||||||
|
}
|
||||||
|
|
||||||
val (manga, chapters) =
|
val (manga, chapters) =
|
||||||
transaction {
|
transaction {
|
||||||
@@ -202,11 +210,20 @@ class MangaMutation {
|
|||||||
.map { ChapterType(it) },
|
.map { ChapterType(it) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
FetchMangaAndChaptersPayload(
|
@Suppress("UNCHECKED_CAST")
|
||||||
clientMutationId = clientMutationId,
|
DataFetcherResult
|
||||||
manga = MangaType(manga),
|
.newResult<FetchMangaAndChaptersPayload>()
|
||||||
chapters = chapters,
|
.data(
|
||||||
)
|
FetchMangaAndChaptersPayload(
|
||||||
|
clientMutationId = clientMutationId,
|
||||||
|
manga = MangaType(manga),
|
||||||
|
chapters = chapters,
|
||||||
|
),
|
||||||
|
).also {
|
||||||
|
if (error != null) {
|
||||||
|
it.error(error.toGraphQLError())
|
||||||
|
}
|
||||||
|
}.build() as DataFetcherResult<FetchMangaAndChaptersPayload?>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -166,8 +166,17 @@ object Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val sourceClass =
|
||||||
|
packageInfo.applicationInfo.metaData
|
||||||
|
.getString(METADATA_SOURCE_CLASS)!!
|
||||||
|
.trim()
|
||||||
|
|
||||||
val className =
|
val className =
|
||||||
packageInfo.packageName + packageInfo.applicationInfo.metaData.getString(METADATA_SOURCE_CLASS)
|
if (sourceClass.startsWith(".")) {
|
||||||
|
packageInfo.packageName + sourceClass
|
||||||
|
} else {
|
||||||
|
sourceClass
|
||||||
|
}
|
||||||
|
|
||||||
logger.debug { "Main class for extension is $className" }
|
logger.debug { "Main class for extension is $className" }
|
||||||
|
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ object ExtensionsList {
|
|||||||
// Always update icon url and repo
|
// Always update icon url and repo
|
||||||
this[ExtensionTable.iconUrl] = foundExtension.iconUrl
|
this[ExtensionTable.iconUrl] = foundExtension.iconUrl
|
||||||
this[ExtensionTable.storeIndexUrl] = foundExtension.storeIndexUrl
|
this[ExtensionTable.storeIndexUrl] = foundExtension.storeIndexUrl
|
||||||
|
this[ExtensionTable.apkUrl] = foundExtension.apkUrl
|
||||||
|
|
||||||
// add these because batch updates need matching columns
|
// add these because batch updates need matching columns
|
||||||
this[ExtensionTable.hasUpdate] = extensionRecord[ExtensionTable.hasUpdate]
|
this[ExtensionTable.hasUpdate] = extensionRecord[ExtensionTable.hasUpdate]
|
||||||
|
|||||||
@@ -130,9 +130,12 @@ object H2Migration {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
output.outputStream().use { out ->
|
val tmp = output.resolveSibling(output.name + ".tmp")
|
||||||
|
tmp.outputStream().use { out ->
|
||||||
response.body.byteStream().copyTo(out)
|
response.body.byteStream().copyTo(out)
|
||||||
}
|
}
|
||||||
|
tmp.copyTo(output)
|
||||||
|
tmp.deleteExisting()
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info { "Saved: ${output.absolutePathString()}" }
|
logger.info { "Saved: ${output.absolutePathString()}" }
|
||||||
|
|||||||
Reference in New Issue
Block a user