Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 62 additions & 61 deletions desktop/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapConfinement
import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapGrade
import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat
import dev.nucleusframework.desktop.application.dsl.SnapConfinement
import dev.nucleusframework.desktop.application.dsl.SnapGrade
import dev.nucleusframework.desktop.application.dsl.TargetFormat

plugins {
alias(libs.plugins.compose.compiler)
Expand All @@ -20,81 +20,82 @@ kotlin {
dependencies {
implementation(project(":foliary"))
implementation(compose.desktop.currentOs)
implementation(libs.composenativetray)
implementation(libs.lucideIcons)
implementation(libs.nucleus.application)
implementation(libs.nucleus.core.runtime)
implementation(libs.nucleus.aot.runtime)
implementation(libs.nucleus.decoratedWindow.jbr)
implementation(libs.nucleus.decoratedWindow.material3)

testImplementation(kotlin("test"))
testImplementation(libs.kotest.assertions)
}

nucleus.application {
mainClass = "MainKt"

buildTypes {
release {
proguard {
isEnabled = false
obfuscate = false
optimize = false
configurationFiles.from(project.file("proguard-rules.pro"))
nucleus {
application {
mainClass = "MainKt"

buildTypes {
release {
proguard {
isEnabled = false
obfuscate = false
optimize = false
configurationFiles.from(project.file("proguard-rules.pro"))
}
}
}
}

nativeDistributions {
packageName = "Foliary"
packageVersion = libs.versions.versionName.get()
enableAotCache = false

protocol("Foliary", "foliary")

modules("java.instrument", "java.management", "java.prefs", "jdk.unsupported")

targetFormats(
TargetFormat.Snap,
TargetFormat.Flatpak,
TargetFormat.AppX,
TargetFormat.Dmg
)

linux {
iconFile.set(project.file("icons/icon.png"))
shortcut = true
nativeDistributions {
packageName = "Foliary"
appRelease = libs.versions.versionCode.get()
appCategory = "Utility"
startupWMClass = "dev-appoutlet-Foliary"

snap {
confinement = SnapConfinement.Strict
grade = SnapGrade.Stable
base = "core26"
packageVersion = libs.versions.versionName.get()
enableAotCache = false

protocol("Foliary", "foliary")

modules("java.instrument", "java.management", "java.prefs", "jdk.unsupported")

targetFormats(
TargetFormat.Snap,
TargetFormat.Flatpak,
TargetFormat.AppX,
TargetFormat.Dmg
)

linux {
iconFile.set(project.file("icons/icon.png"))
shortcut = true
packageName = "Foliary"
appRelease = libs.versions.versionCode.get()
appCategory = "Utility"
startupWMClass = "dev-appoutlet-Foliary"

snap {
confinement = SnapConfinement.Strict
grade = SnapGrade.Stable
base = "core26"
}

flatpak {
license.set(rootProject.file("LICENSE"))
}
}

flatpak {
license.set(rootProject.file("LICENSE"))
windows {
iconFile.set(project.file("icons/icon.ico"))
upgradeUuid = libs.versions.versionUuid.get()
console = false
perUserInstall = true
appx { }
}
}

windows {
iconFile.set(project.file("icons/icon.ico"))
upgradeUuid = libs.versions.versionUuid.get()
console = false
perUserInstall = true
appx { }
}

macOS {
bundleID = "dev.appoutlet.Foliary"
dockName = "Foliary"
appCategory = "public.app-category.utilities"
minimumSystemVersion = "12.0"
macOsSdkVersion = "26.0"
iconFile.set(project.file("icons/icon.icns"))
macOS {
bundleID = "dev.appoutlet.Foliary"
dockName = "Foliary"
appCategory = "public.app-category.utilities"
minimumSystemVersion = "12.0"
macOsSdkVersion = "26.0"
iconFile.set(project.file("icons/icon.icns"))
}
}
}
}
Expand Down
4 changes: 0 additions & 4 deletions desktop/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,3 @@
# Ktor
-keep class io.ktor.client.engine.** { *; }
-keep class io.ktor.serialization.kotlinx.json.** { *; }

# ComposeNativeTray
-keep class com.sun.jna.** { *; }
-keep class com.kdroid.composetray.** { *; }
86 changes: 0 additions & 86 deletions desktop/src/main/kotlin/DecoratedWindow.kt

This file was deleted.

8 changes: 0 additions & 8 deletions desktop/src/main/kotlin/DeeplinkHandler.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
import dev.appoutlet.foliary.feature.common.deeplink.DeepLinkDispatcher
import dev.appoutlet.foliary.feature.common.deeplink.Deeplink
import dev.appoutlet.foliary.feature.common.deeplink.getAdditionalQueryParameters
import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler
import java.net.URI

fun registerDeeplinkHandler(args: Array<String>) {
DeepLinkHandler.register(args) { uri ->
DeepLinkDispatcher.dispatch(uri.toDeeplink())
}
}

internal fun URI.toDeeplink(): Deeplink {
val regularQueryParameters = this.query?.split('&')?.associate {
val arg = it.split('=', limit = 2)
Expand Down
45 changes: 45 additions & 0 deletions desktop/src/main/kotlin/FoliaryDecoratedWindow.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.rememberWindowState
import dev.nucleusframework.application.DecoratedWindow
import dev.nucleusframework.application.NucleusApplicationScope
import dev.nucleusframework.application.NucleusDecoratedWindowScope
import dev.nucleusframework.window.TitleBar
import dev.nucleusframework.window.styling.LocalTitleBarStyle

private const val WindowMinimumWidth = 350
private const val WindowMinimumHeight = 900

@Composable
fun NucleusApplicationScope.FoliaryDecoratedWindow(content: @Composable () -> Unit) {
DecoratedWindow(
onCloseRequest = ::exitApplication,
state = rememberWindowState(width = 800.dp, height = WindowMinimumHeight.dp),
title = "Foliary",
minimumSize = DpSize(WindowMinimumWidth.dp, WindowMinimumHeight.dp),
) {
Box {
content()
FoliaryTitleBar()
}
}
}

@Composable
private fun NucleusDecoratedWindowScope.FoliaryTitleBar() {
val defaultStyle = LocalTitleBarStyle.current
val style = remember {
defaultStyle.copy(
colors = defaultStyle.colors.copy(
background = Color.Transparent,
inactiveBackground = Color.Transparent,
)
)
}

TitleBar(style = style)
}
9 changes: 5 additions & 4 deletions desktop/src/main/kotlin/Main.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import androidx.compose.ui.window.application
import dev.appoutlet.foliary.App
import dev.appoutlet.foliary.core.logging.initSentry
import dev.appoutlet.foliary.feature.common.deeplink.DeepLinkDispatcher
import dev.nucleusframework.application.nucleusApplication

fun main(args: Array<String>) {
initSentry()
registerDeeplinkHandler(args)
application {
DecoratedWindow { App() }
nucleusApplication(args = args) {
onDeepLink { uri -> DeepLinkDispatcher.dispatch(uri.toDeeplink()) }
FoliaryDecoratedWindow { App() }
}
}
28 changes: 0 additions & 28 deletions desktop/src/main/kotlin/ManageSingleInstance.kt

This file was deleted.

40 changes: 0 additions & 40 deletions desktop/src/main/kotlin/SystemTray.kt

This file was deleted.

Loading
Loading