diff --git a/app/build.gradle b/app/build.gradle index 3d13e5af..724e050f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,10 +10,12 @@ repositories { apply from: "$rootDir/gradle/gradle_scripts/java.gradle" apply from: "$rootDir/gradle/gradle_scripts/javafx.gradle" +apply from: "$rootDir/gradle/gradle_scripts/jna.gradle" apply from: "$rootDir/gradle/gradle_scripts/lombok.gradle" configurations { implementation.extendsFrom(javafx) + api.extendsFrom(jna) } dependencies { @@ -42,8 +44,6 @@ dependencies { api 'io.sentry:sentry:7.6.0' api 'org.ocpsoft.prettytime:prettytime:5.0.7.Final' api 'commons-io:commons-io:2.15.1' - api 'net.java.dev.jna:jna-jpms:5.14.0' - api 'net.java.dev.jna:jna-platform-jpms:5.14.0' api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "2.17.0" api group: 'com.fasterxml.jackson.module', name: 'jackson-module-parameter-names', version: "2.17.0" api group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: "2.17.0" @@ -54,6 +54,7 @@ dependencies { api group: 'org.kordamp.ikonli', name: 'ikonli-material-pack', version: "12.2.0" api group: 'org.kordamp.ikonli', name: 'ikonli-feather-pack', version: "12.2.0" api group: 'org.slf4j', name: 'slf4j-api', version: '2.0.12' + api group: 'org.slf4j', name: 'slf4j-jdk-platform-logging', version: '2.0.12' api 'io.xpipe:modulefs:0.1.5' api 'net.synedra:validatorfx:0.4.2' api ('io.github.mkpaz:atlantafx-base:2.0.1') { @@ -79,7 +80,7 @@ application { run { systemProperty 'io.xpipe.app.useVirtualThreads', 'false' systemProperty 'io.xpipe.app.mode', 'gui' - systemProperty 'io.xpipe.app.dataDir', "$projectDir/local_git8/" + systemProperty 'io.xpipe.app.dataDir', "$projectDir/local_git23/" systemProperty 'io.xpipe.app.writeLogs', "true" systemProperty 'io.xpipe.app.writeSysOut', "true" systemProperty 'io.xpipe.app.developerMode', "true" diff --git a/app/src/main/java/io/xpipe/app/core/AppLogs.java b/app/src/main/java/io/xpipe/app/core/AppLogs.java index 24f73d6a..50501aca 100644 --- a/app/src/main/java/io/xpipe/app/core/AppLogs.java +++ b/app/src/main/java/io/xpipe/app/core/AppLogs.java @@ -6,7 +6,6 @@ import io.xpipe.app.util.XPipeSession; import io.xpipe.core.util.Deobfuscator; import lombok.Getter; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; import org.slf4j.ILoggerFactory; import org.slf4j.IMarkerFactory; import org.slf4j.Logger; @@ -315,17 +314,16 @@ public class AppLogs { private final Map loggers = new ConcurrentHashMap<>(); public Logger getLogger(String name) { - if (AppLogs.get() == null) { - return NOPLogger.NOP_LOGGER; - } + // Only change this when debugging the logs of other libraries + return NOPLogger.NOP_LOGGER; - // Don't use fully qualified class names - var normalizedName = FilenameUtils.getExtension(name); - if (normalizedName == null || normalizedName.isEmpty()) { - normalizedName = name; - } - - return loggers.computeIfAbsent(normalizedName, s -> new Slf4jLogger()); +// // Don't use fully qualified class names +// var normalizedName = FilenameUtils.getExtension(name); +// if (normalizedName == null || normalizedName.isEmpty()) { +// normalizedName = name; +// } +// +// return loggers.computeIfAbsent(normalizedName, s -> new Slf4jLogger()); } }; diff --git a/app/src/main/java/io/xpipe/app/core/check/AppSidCheck.java b/app/src/main/java/io/xpipe/app/core/check/AppSidCheck.java new file mode 100644 index 00000000..37133454 --- /dev/null +++ b/app/src/main/java/io/xpipe/app/core/check/AppSidCheck.java @@ -0,0 +1,21 @@ +package io.xpipe.app.core.check; + +import com.sun.jna.Function; +import io.xpipe.app.issue.ErrorEvent; +import io.xpipe.core.process.OsType; + +public class AppSidCheck { + + public static void check() { + if (OsType.getLocal().equals(OsType.WINDOWS)) { + return; + } + + try { + var func = Function.getFunction("c", "setsid"); + func.invoke(new Object[0]); + } catch (Throwable t) { + ErrorEvent.fromThrowable(t).omit().handle(); + } + } +} diff --git a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java index f00a6c59..ec49511d 100644 --- a/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java +++ b/app/src/main/java/io/xpipe/app/core/mode/BaseMode.java @@ -6,6 +6,7 @@ import io.xpipe.app.core.*; import io.xpipe.app.core.check.AppAvCheck; import io.xpipe.app.core.check.AppCertutilCheck; import io.xpipe.app.core.check.AppShellCheck; +import io.xpipe.app.core.check.AppSidCheck; import io.xpipe.app.ext.ActionProvider; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.prefs.AppPrefs; @@ -49,6 +50,7 @@ public class BaseMode extends OperationMode { AppPrefs.initLocal(); AppCertutilCheck.check(); AppAvCheck.check(); + AppSidCheck.check(); LocalShell.init(); AppShellCheck.check(); XPipeDistributionType.init(); diff --git a/app/src/main/java/module-info.java b/app/src/main/java/module-info.java index 5ebb43bc..972cbdae 100644 --- a/app/src/main/java/module-info.java +++ b/app/src/main/java/module-info.java @@ -46,6 +46,7 @@ open module io.xpipe.app { requires com.sun.jna; requires com.sun.jna.platform; requires org.slf4j; + requires org.slf4j.jdk.platform.logging; requires atlantafx.base; requires org.ocpsoft.prettytime; requires com.vladsch.flexmark; diff --git a/build.gradle b/build.gradle index 79618a3c..277f6755 100644 --- a/build.gradle +++ b/build.gradle @@ -92,6 +92,7 @@ project.ext { "-Dapple.awt.application.appearance=system" ] useBundledJavaFx = fullVersion + useBundledJna = fullVersion announce = System.getenv('SKIP_ANNOUNCEMENT') == null || !Boolean.parseBoolean(System.getenv('SKIP_ANNOUNCEMENT')) changelogFile = file("$rootDir/dist/changelogs/${versionString}.md").exists() ? file("$rootDir/dist/changelogs/${versionString}.md") : diff --git a/dist/jpackage.gradle b/dist/jpackage.gradle index 1b657a0c..25540537 100644 --- a/dist/jpackage.gradle +++ b/dist/jpackage.gradle @@ -1,4 +1,5 @@ apply from: "$rootDir/gradle/gradle_scripts/javafx.gradle" +apply from: "$rootDir/gradle/gradle_scripts/jna.gradle" def distDir = "${project.layout.buildDirectory.get()}/dist" @@ -10,7 +11,9 @@ def releaseArguments = distJvmArgs + [ "-Dio.xpipe.app.buildId=$rootProject.buildId", "-Dio.xpipe.app.fullVersion=$rootProject.fullVersion", "-Dio.xpipe.app.staging=$rootProject.isStage", - '-Dio.xpipe.app.sentryUrl=https://fd5f67ff10764b7e8a704bec9558c8fe@o1084459.ingest.sentry.io/6094279' + '-Dio.xpipe.app.sentryUrl=https://fd5f67ff10764b7e8a704bec9558c8fe@o1084459.ingest.sentry.io/6094279', + '-Djna.nosys=false', + '-Djna.nounpack=true' ] if (org.gradle.internal.os.OperatingSystem.current().isMacOsX()) { @@ -30,6 +33,11 @@ dependencies { implementation files(it) } } + if (!useBundledJavaFx) { + configurations.jna.getAsFileTree().getFiles().forEach { + implementation files(it) + } + } } // Mac does not like a zero major version @@ -51,6 +59,9 @@ jlink { if (useBundledJavaFx) { addExtraModulePath(layout.projectDirectory.dir("javafx/${platformName}/${arch}").toString()) } + if (useBundledJna) { + addExtraModulePath(layout.projectDirectory.dir("jna/${platformName}/${arch}").toString()) + } launcher { moduleName = 'io.xpipe.app' diff --git a/gradle/gradle_scripts/jna.gradle b/gradle/gradle_scripts/jna.gradle new file mode 100644 index 00000000..d8cd6140 --- /dev/null +++ b/gradle/gradle_scripts/jna.gradle @@ -0,0 +1,8 @@ +configurations { + jna +} + +dependencies { + jna 'net.java.dev.jna:jna-jpms:5.14.0' + jna 'net.java.dev.jna:jna-platform-jpms:5.14.0' +}