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 Config.tachideskVersion
|
||||||
import org.gradle.jvm.tasks.Jar
|
import org.gradle.jvm.tasks.Jar
|
||||||
import org.jetbrains.compose.compose
|
import org.jetbrains.compose.compose
|
||||||
@@ -189,6 +190,7 @@ buildConfig {
|
|||||||
|
|
||||||
buildConfigField("boolean", "DEBUG", project.hasProperty("debugApp").toString())
|
buildConfigField("boolean", "DEBUG", project.hasProperty("debugApp").toString())
|
||||||
buildConfigField("String", "TACHIDESK_SP_VERSION", tachideskVersion)
|
buildConfigField("String", "TACHIDESK_SP_VERSION", tachideskVersion)
|
||||||
|
buildConfigField("int", "SERVER_CODE", serverCode.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinter {
|
kotlinter {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import org.gradle.api.JavaVersion
|
|||||||
|
|
||||||
object Config {
|
object Config {
|
||||||
const val tachideskVersion = "v0.4.5"
|
const val tachideskVersion = "v0.4.5"
|
||||||
|
const val serverCode = 1
|
||||||
const val preview = true
|
const val preview = true
|
||||||
const val previewCommit = "8a986383fe0550d190090f14a9ac2fa0ddace448"
|
const val previewCommit = "8a986383fe0550d190090f14a9ac2fa0ddace448"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import Config.preview
|
import Config.preview
|
||||||
import Config.previewCommit
|
import Config.previewCommit
|
||||||
|
import Config.serverCode
|
||||||
import Config.tachideskVersion
|
import Config.tachideskVersion
|
||||||
import de.undercouch.gradle.tasks.download.Download
|
import de.undercouch.gradle.tasks.download.Download
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
@@ -12,7 +13,11 @@ import org.gradle.kotlin.dsl.TaskContainerScope
|
|||||||
import org.gradle.kotlin.dsl.register
|
import org.gradle.kotlin.dsl.register
|
||||||
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
||||||
import java.io.File
|
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.JarFile
|
||||||
|
import java.util.jar.Manifest
|
||||||
|
|
||||||
private const val tachideskGroup = "tachidesk"
|
private const val tachideskGroup = "tachidesk"
|
||||||
private const val deleteOldTachideskTask = "deleteOldTachidesk"
|
private const val deleteOldTachideskTask = "deleteOldTachidesk"
|
||||||
@@ -25,6 +30,7 @@ private const val copyTachideskJarTask = "copyTachidesk"
|
|||||||
private const val extractTachideskJar = "extractJar"
|
private const val extractTachideskJar = "extractJar"
|
||||||
private const val signTachideskJar = "signJar"
|
private const val signTachideskJar = "signJar"
|
||||||
private const val zipTachideskJar = "zipJar"
|
private const val zipTachideskJar = "zipJar"
|
||||||
|
private const val modifyTachideskJarManifest = "modifyManifest"
|
||||||
private const val deleteTmpFolderTask = "deleteTmp"
|
private const val deleteTmpFolderTask = "deleteTmp"
|
||||||
private const val runAllTachideskTasks = "setupTachideskJar"
|
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) }
|
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) {
|
private fun Task.onlyIfTachideskDoesntExist(rootDir: File) {
|
||||||
onlyIf { !File(rootDir, "src/main/resources/Tachidesk.jar").exists() }
|
onlyIf { !tachideskExists(rootDir) }
|
||||||
}
|
}
|
||||||
private fun Task.onlyIfSigning(project: Project) {
|
private fun Task.onlyIfSigning(project: Project) {
|
||||||
with(project){
|
with(project){
|
||||||
@@ -79,7 +86,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
val tachideskJar = file(finalJar)
|
val tachideskJar = file(finalJar)
|
||||||
onlyIf {
|
onlyIf {
|
||||||
tachideskJar.exists() && JarFile(tachideskJar).use { jar ->
|
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)
|
delete(tachideskJar)
|
||||||
@@ -88,6 +95,8 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
register<Download>(downloadTask) {
|
register<Download>(downloadTask) {
|
||||||
group = tachideskGroup
|
group = tachideskGroup
|
||||||
mustRunAfter(deleteOldTachideskTask)
|
mustRunAfter(deleteOldTachideskTask)
|
||||||
|
onlyIf { !tachideskExists(rootDir) && !file(tmpTar).exists() }
|
||||||
|
|
||||||
onlyIfTachideskDoesntExist(rootDir)
|
onlyIfTachideskDoesntExist(rootDir)
|
||||||
|
|
||||||
src(tarUrl)
|
src(tarUrl)
|
||||||
@@ -96,6 +105,8 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
register<Copy>(extractTask) {
|
register<Copy>(extractTask) {
|
||||||
group = tachideskGroup
|
group = tachideskGroup
|
||||||
mustRunAfter(downloadTask)
|
mustRunAfter(downloadTask)
|
||||||
|
onlyIf { !tachideskExists(rootDir) && !file(tmpServerFolder).exists() }
|
||||||
|
|
||||||
onlyIfTachideskDoesntExist(rootDir)
|
onlyIfTachideskDoesntExist(rootDir)
|
||||||
|
|
||||||
from(tarTree(tmpTar))
|
from(tarTree(tmpTar))
|
||||||
@@ -104,7 +115,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
register<Exec>(androidScriptTask) {
|
register<Exec>(androidScriptTask) {
|
||||||
group = tachideskGroup
|
group = tachideskGroup
|
||||||
mustRunAfter(extractTask)
|
mustRunAfter(extractTask)
|
||||||
onlyIfTachideskDoesntExist(rootDir)
|
onlyIf { !tachideskExists(rootDir) && !file("${tmpServerFolder}AndroidCompat/lib/android.jar").exists() }
|
||||||
|
|
||||||
val workingDir = file(tmpServerFolder)
|
val workingDir = file(tmpServerFolder)
|
||||||
val getAndroidScript = File(workingDir, "AndroidCompat/getAndroid").absolutePath
|
val getAndroidScript = File(workingDir, "AndroidCompat/getAndroid").absolutePath
|
||||||
@@ -199,8 +210,34 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
archiveExtension.set("jar")
|
archiveExtension.set("jar")
|
||||||
destinationDirectory.set(file(destination))
|
destinationDirectory.set(file(destination))
|
||||||
}
|
}
|
||||||
register<Delete>(deleteTmpFolderTask) {
|
register<Task>(modifyTachideskJarManifest) {
|
||||||
|
group = tachideskGroup
|
||||||
mustRunAfter(zipTachideskJar)
|
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)
|
delete(tmpPath)
|
||||||
|
|
||||||
doFirst {
|
doFirst {
|
||||||
@@ -221,6 +258,7 @@ fun TaskContainerScope.registerTachideskTasks(project: Project) {
|
|||||||
extractTachideskJar,
|
extractTachideskJar,
|
||||||
signTachideskJar,
|
signTachideskJar,
|
||||||
zipTachideskJar,
|
zipTachideskJar,
|
||||||
|
modifyTachideskJarManifest,
|
||||||
deleteTmpFolderTask
|
deleteTmpFolderTask
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import mu.KotlinLogging
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.Reader
|
import java.io.Reader
|
||||||
|
import java.util.jar.Attributes
|
||||||
import java.util.jar.JarInputStream
|
import java.util.jar.JarInputStream
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
@@ -116,7 +117,7 @@ class ServerService @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
GlobalScope.launch(handler) {
|
GlobalScope.launch(handler) {
|
||||||
val jarFile = File(userDataDir, "Tachidesk.jar")
|
val jarFile = File(userDataDir.also { it.mkdirs() }, "Tachidesk.jar")
|
||||||
if (!jarFile.exists()) {
|
if (!jarFile.exists()) {
|
||||||
info { "Copying server to resources" }
|
info { "Copying server to resources" }
|
||||||
withIOContext { copyJar(jarFile) }
|
withIOContext { copyJar(jarFile) }
|
||||||
@@ -124,11 +125,11 @@ class ServerService @Inject constructor(
|
|||||||
try {
|
try {
|
||||||
val jarVersion = withIOContext {
|
val jarVersion = withIOContext {
|
||||||
JarInputStream(jarFile.inputStream()).use { jar ->
|
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" }
|
info { "Updating server file from resources" }
|
||||||
withIOContext { copyJar(jarFile) }
|
withIOContext { copyJar(jarFile) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user