mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 06:42:05 +01:00
239 lines
7.3 KiB
Kotlin
239 lines
7.3 KiB
Kotlin
import Config.migrationCode
|
|
import Config.serverCode
|
|
import Config.tachideskVersion
|
|
import org.gradle.jvm.tasks.Jar
|
|
import org.jetbrains.compose.compose
|
|
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
|
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
|
|
@Suppress("DSL_SCOPE_VIOLATION")
|
|
plugins {
|
|
id(libs.plugins.kotlin.jvm.get().pluginId)
|
|
id(libs.plugins.ksp.get().pluginId)
|
|
id(libs.plugins.compose.get().pluginId)
|
|
id(libs.plugins.buildconfig.get().pluginId)
|
|
id(libs.plugins.kotlinter.get().pluginId)
|
|
id(libs.plugins.aboutLibraries.get().pluginId)
|
|
}
|
|
|
|
dependencies {
|
|
implementation(projects.core)
|
|
implementation(projects.i18n)
|
|
implementation(projects.domain)
|
|
implementation(projects.data)
|
|
implementation(projects.uiCore)
|
|
implementation(projects.presentation)
|
|
|
|
// UI (Compose)
|
|
implementation(compose.desktop.currentOs)
|
|
implementation(compose.uiTooling)
|
|
implementation(compose.materialIconsExtended)
|
|
implementation(compose("org.jetbrains.compose.ui:ui-util"))
|
|
implementation(libs.voyager.core)
|
|
implementation(libs.voyager.navigation)
|
|
implementation(libs.voyager.transitions)
|
|
implementation(libs.voyager.screenmodel)
|
|
implementation(libs.accompanist.pager)
|
|
implementation(libs.accompanist.pagerIndicators)
|
|
implementation(libs.accompanist.flowLayout)
|
|
implementation(libs.imageloader.core)
|
|
implementation(libs.imageloader.moko)
|
|
implementation(libs.materialDialogs.core)
|
|
implementation(libs.materialDialogs.datetime)
|
|
|
|
// UI (Swing)
|
|
implementation(libs.darklaf)
|
|
|
|
// Threading
|
|
implementation(libs.coroutines.core)
|
|
implementation(libs.coroutines.swing)
|
|
|
|
// Json
|
|
implementation(libs.serialization.json.core)
|
|
implementation(libs.serialization.json.okio)
|
|
|
|
// Dependency Injection
|
|
implementation(libs.kotlinInject.runtime)
|
|
ksp(libs.kotlinInject.compiler)
|
|
|
|
// Http client
|
|
implementation(libs.ktor.core)
|
|
implementation(libs.ktor.okHttp)
|
|
implementation(libs.ktor.contentNegotiation)
|
|
implementation(libs.ktor.serialization.json)
|
|
implementation(libs.ktor.logging)
|
|
implementation(libs.ktor.websockets)
|
|
implementation(libs.ktor.auth)
|
|
|
|
// Ktorfit
|
|
implementation(libs.ktorfit.lib)
|
|
ksp(libs.ktorfit.ksp)
|
|
|
|
// Apollo GraphQL
|
|
implementation(libs.apollo.runtime)
|
|
implementation(libs.apollo.engine.ktor)
|
|
|
|
// Logging
|
|
implementation(libs.logging.slf4j.api)
|
|
implementation(libs.logging.slf4j.jul)
|
|
implementation(libs.logging.log4j.api)
|
|
implementation(libs.logging.log4j.core)
|
|
implementation(libs.logging.log4j.slf4j)
|
|
implementation(libs.logging.kmlogging)
|
|
|
|
// Storage
|
|
implementation(libs.okio)
|
|
implementation(libs.appDirs)
|
|
|
|
// Preferences
|
|
implementation(libs.multiplatformSettings.core)
|
|
implementation(libs.multiplatformSettings.serialization)
|
|
implementation(libs.multiplatformSettings.coroutines)
|
|
|
|
// Utility
|
|
implementation(libs.dateTime)
|
|
implementation(libs.immutableCollections)
|
|
implementation(libs.korge.foundation)
|
|
|
|
// Localization
|
|
implementation(libs.moko.core)
|
|
implementation(libs.moko.compose)
|
|
|
|
// Testing
|
|
testImplementation(kotlin("test-junit"))
|
|
testImplementation(compose("org.jetbrains.compose.ui:ui-test-junit4"))
|
|
testImplementation(libs.coroutines.test)
|
|
}
|
|
|
|
java {
|
|
sourceCompatibility = Config.desktopJvmTarget
|
|
targetCompatibility = Config.desktopJvmTarget
|
|
}
|
|
|
|
tasks {
|
|
withType<KotlinCompile> {
|
|
kotlinOptions {
|
|
jvmTarget = Config.desktopJvmTarget.toString()
|
|
freeCompilerArgs = listOf(
|
|
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi"
|
|
)
|
|
}
|
|
}
|
|
test {
|
|
useJUnit()
|
|
}
|
|
|
|
withType<Jar> {
|
|
exclude("META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA")
|
|
}
|
|
|
|
registerTachideskTasks(project)
|
|
|
|
getByName("formatKotlinMain").dependsOn("kspKotlin")
|
|
getByName("formatKotlinTest").dependsOn("kspTestKotlin")
|
|
}
|
|
|
|
kotlin {
|
|
sourceSets.main {
|
|
kotlin.srcDir("build/generated/ksp/main/kotlin")
|
|
}
|
|
sourceSets.test {
|
|
kotlin.srcDir("build/generated/ksp/test/kotlin")
|
|
}
|
|
}
|
|
|
|
val isPreview: Boolean
|
|
get() = project.hasProperty("preview")
|
|
val previewCode: String
|
|
get() = project.properties["preview"]?.toString()?.trim('"') ?: 0.toString()
|
|
|
|
compose.desktop {
|
|
application {
|
|
mainClass = "ca.gosyer.jui.desktop.MainKt"
|
|
nativeDistributions {
|
|
targetFormats(
|
|
// Windows
|
|
TargetFormat.Msi,
|
|
TargetFormat.Exe,
|
|
// Linux
|
|
TargetFormat.Deb,
|
|
TargetFormat.Rpm,
|
|
// MacOS
|
|
TargetFormat.Dmg
|
|
)
|
|
modules(
|
|
"java.base",
|
|
"java.compiler",
|
|
"java.instrument",
|
|
"java.management",
|
|
"java.naming",
|
|
"java.prefs",
|
|
"java.rmi",
|
|
"java.scripting",
|
|
"java.sql",
|
|
"jdk.crypto.ec",
|
|
"jdk.unsupported",
|
|
"jdk.xml.dom"
|
|
)
|
|
|
|
packageName = if (!isPreview) {
|
|
"Suwayomi-JUI"
|
|
} else {
|
|
"Suwayomi-JUI Preview"
|
|
}
|
|
description = "Suwayomi-JUI is a Jvm client for Suwayomi-Server"
|
|
copyright = "Mozilla Public License v2.0"
|
|
vendor = "Suwayomi"
|
|
if (isPreview) {
|
|
packageVersion = "${version.toString().substringBeforeLast('.')}.$previewCode"
|
|
}
|
|
|
|
args(project.projectDir.absolutePath)
|
|
buildTypes.release.proguard {
|
|
version.set(libs.versions.proguard.get())
|
|
configurationFiles.from("proguard-rules.pro")
|
|
isEnabled = false
|
|
}
|
|
|
|
windows {
|
|
dirChooser = true
|
|
upgradeUuid = if (!isPreview) {
|
|
"B2ED947E-81E4-4258-8388-2B1EDF5E0A30"
|
|
} else {
|
|
"7869504A-DB4D-45E8-AC6C-60C0360EA2F0"
|
|
}
|
|
shortcut = true
|
|
menu = true
|
|
iconFile.set(rootProject.file("resources/icon.ico"))
|
|
menuGroup = "Suwayomi"
|
|
}
|
|
macOS {
|
|
bundleID = "ca.gosyer.tachideskjui"
|
|
packageName = rootProject.name
|
|
iconFile.set(rootProject.file("resources/icon.icns"))
|
|
}
|
|
linux {
|
|
iconFile.set(rootProject.file("resources/icon.png"))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fun String.wrap() = """"$this""""
|
|
buildConfig {
|
|
className("BuildConfig")
|
|
packageName(project.group.toString() + ".jui.desktop.build")
|
|
useKotlinOutput { internalVisibility = true }
|
|
|
|
buildConfigField("String", "NAME", rootProject.name.wrap())
|
|
buildConfigField("String", "VERSION", project.version.toString().wrap())
|
|
buildConfigField("int", "MIGRATION_CODE", migrationCode.toString())
|
|
buildConfigField("boolean", "DEBUG", project.hasProperty("debugApp").toString())
|
|
buildConfigField("boolean", "IS_PREVIEW", isPreview.toString())
|
|
buildConfigField("int", "PREVIEW_BUILD", previewCode)
|
|
|
|
// Tachidesk
|
|
buildConfigField("String", "TACHIDESK_SP_VERSION", tachideskVersion.wrap())
|
|
buildConfigField("int", "SERVER_CODE", serverCode.toString())
|
|
}
|