mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 06:42:05 +01:00
Use custom version codes for Tachidesk-Server versioning
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import Config.serverCode
|
||||
import Config.tachideskVersion
|
||||
import org.gradle.jvm.tasks.Jar
|
||||
import org.jetbrains.compose.compose
|
||||
@@ -189,6 +190,7 @@ buildConfig {
|
||||
|
||||
buildConfigField("boolean", "DEBUG", project.hasProperty("debugApp").toString())
|
||||
buildConfigField("String", "TACHIDESK_SP_VERSION", tachideskVersion)
|
||||
buildConfigField("int", "SERVER_CODE", serverCode.toString())
|
||||
}
|
||||
|
||||
kotlinter {
|
||||
|
||||
@@ -2,6 +2,7 @@ import org.gradle.api.JavaVersion
|
||||
|
||||
object Config {
|
||||
const val tachideskVersion = "v0.4.5"
|
||||
const val serverCode = 1
|
||||
const val preview = true
|
||||
const val previewCommit = "8a986383fe0550d190090f14a9ac2fa0ddace448"
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import Config.preview
|
||||
import Config.previewCommit
|
||||
import Config.serverCode
|
||||
import Config.tachideskVersion
|
||||
import de.undercouch.gradle.tasks.download.Download
|
||||
import org.gradle.api.Project
|
||||
@@ -12,7 +13,11 @@ import org.gradle.kotlin.dsl.TaskContainerScope
|
||||
import org.gradle.kotlin.dsl.register
|
||||
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
||||
import java.io.File
|
||||
import java.nio.file.FileSystems
|
||||
import java.nio.file.Files
|
||||
import java.util.jar.Attributes
|
||||
import java.util.jar.JarFile
|
||||
import java.util.jar.Manifest
|
||||
|
||||
private const val tachideskGroup = "tachidesk"
|
||||
private const val deleteOldTachideskTask = "deleteOldTachidesk"
|
||||
@@ -25,6 +30,7 @@ private const val copyTachideskJarTask = "copyTachidesk"
|
||||
private const val extractTachideskJar = "extractJar"
|
||||
private const val signTachideskJar = "signJar"
|
||||
private const val zipTachideskJar = "zipJar"
|
||||
private const val modifyTachideskJarManifest = "modifyManifest"
|
||||
private const val deleteTmpFolderTask = "deleteTmp"
|
||||
private const val runAllTachideskTasks = "setupTachideskJar"
|
||||
|
||||
@@ -36,9 +42,10 @@ fun String?.anyEquals(vararg others: String?, ignoreCase: Boolean = false): Bool
|
||||
return others.any { this.equals(it, ignoreCase) }
|
||||
}
|
||||
|
||||
private fun tachideskExists(rootDir: File) = File(rootDir, "src/main/resources/Tachidesk.jar").exists()
|
||||
|
||||
private fun Task.onlyIfTachideskDoesntExist(rootDir: File) {
|
||||
onlyIf { !File(rootDir, "src/main/resources/Tachidesk.jar").exists() }
|
||||
onlyIf { !tachideskExists(rootDir) }
|
||||
}
|
||||
private fun Task.onlyIfSigning(project: Project) {
|
||||
with(project){
|
||||
@@ -79,7 +86,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||
val tachideskJar = file(finalJar)
|
||||
onlyIf {
|
||||
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
|
||||
jar.manifest?.mainAttributes?.getValue("Specification-Version") != tachideskVersion
|
||||
jar.manifest?.mainAttributes?.getValue(Attributes.Name.IMPLEMENTATION_VERSION)?.toIntOrNull() != serverCode
|
||||
}
|
||||
}
|
||||
delete(tachideskJar)
|
||||
@@ -88,6 +95,8 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||
register<Download>(downloadTask) {
|
||||
group = tachideskGroup
|
||||
mustRunAfter(deleteOldTachideskTask)
|
||||
onlyIf { !tachideskExists(rootDir) && !file(tmpTar).exists() }
|
||||
|
||||
onlyIfTachideskDoesntExist(rootDir)
|
||||
|
||||
src(tarUrl)
|
||||
@@ -96,6 +105,8 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||
register<Copy>(extractTask) {
|
||||
group = tachideskGroup
|
||||
mustRunAfter(downloadTask)
|
||||
onlyIf { !tachideskExists(rootDir) && !file(tmpServerFolder).exists() }
|
||||
|
||||
onlyIfTachideskDoesntExist(rootDir)
|
||||
|
||||
from(tarTree(tmpTar))
|
||||
@@ -104,7 +115,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||
register<Exec>(androidScriptTask) {
|
||||
group = tachideskGroup
|
||||
mustRunAfter(extractTask)
|
||||
onlyIfTachideskDoesntExist(rootDir)
|
||||
onlyIf { !tachideskExists(rootDir) && !file("${tmpServerFolder}AndroidCompat/lib/android.jar").exists() }
|
||||
|
||||
val workingDir = file(tmpServerFolder)
|
||||
val getAndroidScript = File(workingDir, "AndroidCompat/getAndroid").absolutePath
|
||||
@@ -199,8 +210,34 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||
archiveExtension.set("jar")
|
||||
destinationDirectory.set(file(destination))
|
||||
}
|
||||
register<Delete>(deleteTmpFolderTask) {
|
||||
register<Task>(modifyTachideskJarManifest) {
|
||||
group = tachideskGroup
|
||||
mustRunAfter(zipTachideskJar)
|
||||
val tachideskJar = file(finalJar)
|
||||
onlyIf {
|
||||
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
|
||||
jar.manifest?.mainAttributes?.getValue(Attributes.Name.IMPLEMENTATION_VERSION)?.toIntOrNull() != serverCode
|
||||
}
|
||||
}
|
||||
|
||||
doFirst {
|
||||
val manifest = JarFile(tachideskJar).use { jar ->
|
||||
Manifest(jar.manifest)
|
||||
}
|
||||
manifest.mainAttributes[Attributes.Name.IMPLEMENTATION_VERSION] = serverCode.toString()
|
||||
FileSystems.newFileSystem(tachideskJar.toPath()).use { fs ->
|
||||
val manifestFile = fs.getPath("META-INF/MANIFEST.MF")
|
||||
val manifestBak = fs.getPath("META-INF/MANIFEST.MF" + ".bak")
|
||||
Files.deleteIfExists(manifestBak)
|
||||
Files.move(manifestFile, manifestBak)
|
||||
Files.newOutputStream(manifestFile).use {
|
||||
manifest.write(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
register<Delete>(deleteTmpFolderTask) {
|
||||
mustRunAfter(modifyTachideskJarManifest)
|
||||
delete(tmpPath)
|
||||
|
||||
doFirst {
|
||||
@@ -221,6 +258,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
||||
extractTachideskJar,
|
||||
signTachideskJar,
|
||||
zipTachideskJar,
|
||||
modifyTachideskJarManifest,
|
||||
deleteTmpFolderTask
|
||||
)
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import mu.KotlinLogging
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.io.Reader
|
||||
import java.util.jar.Attributes
|
||||
import java.util.jar.JarInputStream
|
||||
import javax.inject.Inject
|
||||
import kotlin.concurrent.thread
|
||||
@@ -116,7 +117,7 @@ class ServerService @Inject constructor(
|
||||
}
|
||||
}
|
||||
GlobalScope.launch(handler) {
|
||||
val jarFile = File(userDataDir, "Tachidesk.jar")
|
||||
val jarFile = File(userDataDir.also { it.mkdirs() }, "Tachidesk.jar")
|
||||
if (!jarFile.exists()) {
|
||||
info { "Copying server to resources" }
|
||||
withIOContext { copyJar(jarFile) }
|
||||
@@ -124,11 +125,11 @@ class ServerService @Inject constructor(
|
||||
try {
|
||||
val jarVersion = withIOContext {
|
||||
JarInputStream(jarFile.inputStream()).use { jar ->
|
||||
jar.manifest?.mainAttributes?.getValue("Specification-Version")
|
||||
jar.manifest?.mainAttributes?.getValue(Attributes.Name.IMPLEMENTATION_VERSION)?.toIntOrNull()
|
||||
}
|
||||
}
|
||||
|
||||
if (jarVersion != BuildConfig.TACHIDESK_SP_VERSION) {
|
||||
if (jarVersion != BuildConfig.SERVER_CODE) {
|
||||
info { "Updating server file from resources" }
|
||||
withIOContext { copyJar(jarFile) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user