From 8dc389c73ca92440f156a024a9820cb05fc754c5 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 25 Feb 2023 16:54:33 +0100 Subject: [PATCH] Add option to start ctbrec minimized - add option to start ctbrec minimized - add launcher files to start without splash screen --- client/pom.xml | 76 ++++++----- .../assembly/ctbrec-linux-jre-no-splash.sh | 8 ++ client/src/assembly/ctbrec-linux-jre.sh | 2 +- .../assembly/ctbrec-macos-jre-no-splash.sh | 9 ++ client/src/assembly/ctbrec-macos-jre.sh | 2 +- client/src/assembly/linux-jre.xml | 124 +++++++++-------- client/src/assembly/macos-jre.xml | 126 ++++++++++-------- client/src/assembly/win64-jre.xml | 124 ++++++++--------- .../java/ctbrec/ui/CamrecApplication.java | 9 +- .../java/ctbrec/ui/settings/SettingsTab.java | 16 ++- .../src/main/resources/META-INF/MANIFEST.MF | 1 - common/src/main/java/ctbrec/Config.java | 2 +- common/src/main/java/ctbrec/Settings.java | 1 + 13 files changed, 287 insertions(+), 213 deletions(-) create mode 100755 client/src/assembly/ctbrec-linux-jre-no-splash.sh create mode 100755 client/src/assembly/ctbrec-macos-jre-no-splash.sh diff --git a/client/pom.xml b/client/pom.xml index a645c2ef..d2864eca 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -102,6 +102,40 @@ com.akathist.maven.plugins.launch4j launch4j-maven-plugin 2.1.1 + + gui + ${name.final}.jar + true + src/main/resources/icon.ico + ctbrec + + ctbrec.ui.Launcher + true + lib/ + . + + https://jdk.java.net/ + + jre + true + 15 + 1024 + + -Dfile.encoding=utf-8 + + + + 4.0.0.0 + 4.0.0.0 + Software to record live streams + 2021 0xb00bface + 4.0.0.0 + 4.0.0.0 + CTB Recorder + ctbrec + ctbrec.exe + + l4j-win @@ -110,39 +144,7 @@ launch4j - gui target/ctbrec.exe - ${name.final}.jar - true - src/main/resources/icon.ico - ctbrec - - ctbrec.ui.Launcher - true - lib/ - . - - https://jdk.java.net/ - - jre - true - 15 - 1024 - - -Dfile.encoding=utf-8 - - - - 4.0.0.0 - 4.0.0.0 - Software to record live streams - 2021 0xb00bface - 4.0.0.0 - 4.0.0.0 - CTB Recorder - ctbrec - ctbrec.exe - src/main/resources/splash.bmp true @@ -151,6 +153,16 @@ + + l4j-win-no-splash + package + + launch4j + + + target/ctbrec-no-splash.exe + + diff --git a/client/src/assembly/ctbrec-linux-jre-no-splash.sh b/client/src/assembly/ctbrec-linux-jre-no-splash.sh new file mode 100755 index 00000000..21067e3f --- /dev/null +++ b/client/src/assembly/ctbrec-linux-jre-no-splash.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +DIR="$(dirname "$0")" +pushd "${DIR}" +JAVA=./jre/bin/java +$JAVA -version +$JAVA -Xmx1g -Djdk.gtk.version=3 -Dfile.encoding=utf-8 -jar ${name.final}.jar +popd diff --git a/client/src/assembly/ctbrec-linux-jre.sh b/client/src/assembly/ctbrec-linux-jre.sh index 21067e3f..294ea60d 100755 --- a/client/src/assembly/ctbrec-linux-jre.sh +++ b/client/src/assembly/ctbrec-linux-jre.sh @@ -4,5 +4,5 @@ DIR="$(dirname "$0")" pushd "${DIR}" JAVA=./jre/bin/java $JAVA -version -$JAVA -Xmx1g -Djdk.gtk.version=3 -Dfile.encoding=utf-8 -jar ${name.final}.jar +$JAVA -splash:splash.png -Xmx1g -Djdk.gtk.version=3 -Dfile.encoding=utf-8 -jar ${name.final}.jar popd diff --git a/client/src/assembly/ctbrec-macos-jre-no-splash.sh b/client/src/assembly/ctbrec-macos-jre-no-splash.sh new file mode 100755 index 00000000..eb23e7a6 --- /dev/null +++ b/client/src/assembly/ctbrec-macos-jre-no-splash.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +DIR=$(dirname $0) +pushd "$DIR" +JAVA_HOME="$DIR/jre/Contents/Home" +JAVA="$JAVA_HOME/bin/java" +$JAVA -version +$JAVA -Xmx1g -Dfile.encoding=utf-8 -jar ${name.final}.jar +popd diff --git a/client/src/assembly/ctbrec-macos-jre.sh b/client/src/assembly/ctbrec-macos-jre.sh index eb23e7a6..04194027 100755 --- a/client/src/assembly/ctbrec-macos-jre.sh +++ b/client/src/assembly/ctbrec-macos-jre.sh @@ -5,5 +5,5 @@ pushd "$DIR" JAVA_HOME="$DIR/jre/Contents/Home" JAVA="$JAVA_HOME/bin/java" $JAVA -version -$JAVA -Xmx1g -Dfile.encoding=utf-8 -jar ${name.final}.jar +$JAVA -splash:splash.png -Xmx1g -Dfile.encoding=utf-8 -jar ${name.final}.jar popd diff --git a/client/src/assembly/linux-jre.xml b/client/src/assembly/linux-jre.xml index 7afc7d70..ecb791a3 100644 --- a/client/src/assembly/linux-jre.xml +++ b/client/src/assembly/linux-jre.xml @@ -1,60 +1,70 @@ - linux-jre - - zip - - false - - - ctbrec/lib - false - false - runtime - - - - - ${project.basedir}/src/assembly/ctbrec-linux-jre.sh - ctbrec - true - ctbrec.sh - - - ${project.build.directory}/${project.artifactId}-${project.version}.jar - ctbrec - ${name.final}.jar - - - ${project.basedir}/LICENSE.txt - ctbrec - - - ${project.basedir}/README.md - ctbrec - - - ${project.basedir}/ffmpeg/ffmpeg-linux64 - ctbrec/lib/ffmpeg - ffmpeg - - - - - jre/jdk_linux - - **/* - - ctbrec/jre - false - - - browser/ctbrec-minimal-browser-linux-x64 - - **/* - - ctbrec/lib/browser - false - - + linux-jre + + zip + + false + + + ctbrec/lib + false + false + runtime + + + + + ${project.basedir}/src/assembly/ctbrec-linux-jre.sh + ctbrec + true + ctbrec.sh + + + ${project.basedir}/src/assembly/ctbrec-linux-jre-no-splash.sh + ctbrec + true + ctbrec-no-splash.sh + + + ${project.build.directory}/${project.artifactId}-${project.version}.jar + ctbrec + ${name.final}.jar + + + ${project.basedir}/LICENSE.txt + ctbrec + + + ${project.basedir}/README.md + ctbrec + + + ${project.basedir}/src/main/resources/splash.png + ctbrec + + + ${project.basedir}/ffmpeg/ffmpeg-linux64 + ctbrec/lib/ffmpeg + ffmpeg + + + + + jre/jdk_linux + + **/* + + ctbrec/jre + false + + + browser/ctbrec-minimal-browser-linux-x64 + + **/* + + ctbrec/lib/browser + false + + diff --git a/client/src/assembly/macos-jre.xml b/client/src/assembly/macos-jre.xml index 323bb056..6f51cae3 100644 --- a/client/src/assembly/macos-jre.xml +++ b/client/src/assembly/macos-jre.xml @@ -1,61 +1,71 @@ - macos-jre - - zip - - false - - - ctbrec/lib - false - false - runtime - - - - - ${project.basedir}/src/assembly/ctbrec-macos-jre.sh - ctbrec - true - ctbrec.sh - - - ${project.build.directory}/${project.artifactId}-${project.version}.jar - - ctbrec - ${name.final}.jar - - - ${project.basedir}/LICENSE.txt - ctbrec - - - ${project.basedir}/README.md - ctbrec - - - ${project.basedir}/ffmpeg/ffmpeg-macos64 - ctbrec/lib/ffmpeg - ffmpeg - - - - - jre/jdk_macos - - **/* - - ctbrec/jre - false - - - browser/ctbrec-minimal-browser-darwin-x64 - - **/* - - ctbrec/lib/browser - false - - + macos-jre + + zip + + false + + + ctbrec/lib + false + false + runtime + + + + + ${project.basedir}/src/assembly/ctbrec-macos-jre.sh + ctbrec + true + ctbrec.sh + + + ${project.basedir}/src/assembly/ctbrec-macos-jre-no-splash.sh + ctbrec + true + ctbrec-no-splash.sh + + + ${project.build.directory}/${project.artifactId}-${project.version}.jar + + ctbrec + ${name.final}.jar + + + ${project.basedir}/LICENSE.txt + ctbrec + + + ${project.basedir}/README.md + ctbrec + + + ${project.basedir}/src/main/resources/splash.png + ctbrec + + + ${project.basedir}/ffmpeg/ffmpeg-macos64 + ctbrec/lib/ffmpeg + ffmpeg + + + + + jre/jdk_macos + + **/* + + ctbrec/jre + false + + + browser/ctbrec-minimal-browser-darwin-x64 + + **/* + + ctbrec/lib/browser + false + + diff --git a/client/src/assembly/win64-jre.xml b/client/src/assembly/win64-jre.xml index 69b893ac..0f85f278 100644 --- a/client/src/assembly/win64-jre.xml +++ b/client/src/assembly/win64-jre.xml @@ -1,63 +1,67 @@ - win64-jre - - zip - - false - - - ctbrec/lib - false - false - runtime - - - - - ${project.build.directory}/ctbrec.exe - ctbrec - - - ${project.build.directory}/${project.artifactId}-${project.version}.jar - ctbrec - ${name.final}.jar - - - ${project.basedir}/LICENSE.txt - ctbrec - - - ${project.basedir}/README.md - ctbrec - - - ${project.basedir}/src/assembly/ctbrec.bat - ctbrec - true - - - ${project.basedir}/ffmpeg/ffmpeg-win64.exe - ctbrec/lib/ffmpeg - ffmpeg.exe - - - - - jre/jdk_windows - - **/* - - ctbrec/jre - false - - - browser/ctbrec-minimal-browser-win32-x64 - - **/* - - ctbrec/lib/browser - false - - + win64-jre + + zip + + false + + + ctbrec/lib + false + false + runtime + + + + + ${project.build.directory}/ctbrec.exe + ctbrec + + + ${project.build.directory}/ctbrec-no-splash.exe + ctbrec + + + ${project.build.directory}/${project.artifactId}-${project.version}.jar + ctbrec + ${name.final}.jar + + + ${project.basedir}/LICENSE.txt + ctbrec + + + ${project.basedir}/README.md + ctbrec + + + ${project.basedir}/src/assembly/ctbrec.bat + ctbrec + true + + + ${project.basedir}/ffmpeg/ffmpeg-win64.exe + ctbrec/lib/ffmpeg + ffmpeg.exe + + + + + jre/jdk_windows + + **/* + + ctbrec/jre + false + + + browser/ctbrec-minimal-browser-win32-x64 + + **/* + + ctbrec/lib/browser + false + + diff --git a/client/src/main/java/ctbrec/ui/CamrecApplication.java b/client/src/main/java/ctbrec/ui/CamrecApplication.java index 80f7df95..d8bf8e23 100644 --- a/client/src/main/java/ctbrec/ui/CamrecApplication.java +++ b/client/src/main/java/ctbrec/ui/CamrecApplication.java @@ -275,7 +275,14 @@ public class CamrecApplication extends Application { Config.getInstance().getSettings().windowY = newVal.intValue(); } }); - primaryStage.show(); + + if (config.getSettings().startMinimized) { + LOG.info("Minimize to tray on start"); + DesktopIntegration.minimizeToTray(primaryStage); + } else { + LOG.info("Showing primary stage"); + primaryStage.show(); + } primaryStage.setOnCloseRequest(createShutdownHandler()); Runtime.getRuntime().addShutdownHook(new Thread(() -> Platform.runLater(this::shutdown))); setWindowMinimizeListener(primaryStage); diff --git a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java index 0b296235..715fbd2d 100644 --- a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java +++ b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java @@ -40,6 +40,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; import static ctbrec.Settings.DirectoryStructure.*; import static ctbrec.Settings.ProxyType.*; @@ -115,6 +116,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { private Label restartNotification; private SimpleIntegerProperty playlistRequestTimeout; private SimpleBooleanProperty minimizeToTray; + private SimpleBooleanProperty startMinimized; private SimpleBooleanProperty showGridLinesInTables; private SimpleBooleanProperty tabsSortable; private SimpleIntegerProperty defaultPriority; @@ -188,6 +190,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { recentlyWatched = new SimpleBooleanProperty(null, "recentlyWatched", settings.recentlyWatched); playlistRequestTimeout = new SimpleIntegerProperty(null, "playlistRequestTimeout", settings.playlistRequestTimeout); minimizeToTray = new SimpleBooleanProperty(null, "minimizeToTray", settings.minimizeToTray); + startMinimized = new SimpleBooleanProperty(null, "startMinimized", settings.startMinimized); showGridLinesInTables = new SimpleBooleanProperty(null, "showGridLinesInTables", settings.showGridLinesInTables); defaultPriority = new SimpleIntegerProperty(null, "defaultPriority", settings.defaultPriority); timeoutRecordingStartingAt = new LocalTimeProperty(null, "timeoutRecordingStartingAt", settings.timeoutRecordingStartingAt); @@ -220,6 +223,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { Setting.of("Enable live previews (experimental)", livePreviews), Setting.of("Enable recently watched tab", recentlyWatched).needsRestart(), Setting.of("Minimize to tray", minimizeToTray, "Removes the app from the task bar, if minimized"), + Setting.of("Start minimized", startMinimized, "Start the app minimized to the tray, automatically activates \"Minimize to tray\""), Setting.of("Add models from clipboard", monitorClipboard, "Monitor clipboard for model URLs and automatically add them to the recorder").needsRestart(), Setting.of("Show confirmation dialogs", confirmationDialogs, "Show confirmation dialogs for irreversible actions"), Setting.of("Recording tab per site", recordedModelsPerSite, "Add a Recording tab for each site").needsRestart(), @@ -250,7 +254,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { Setting.of("Split recordings bigger than", splitBiggerThan).converter(SplitBiggerThanOption.converter()).onChange(this::splitValuesChanged), Setting.of("Restrict Resolution", resolutionRange, "Only record streams with resolution within the given range"), Setting.of("Concurrent Recordings (0 = unlimited)", concurrentRecordings), - Setting.of("Default Priority", defaultPriority), + Setting.of("Default Priority", defaultPriority, "lowest 0 - 10000 highest"), Setting.of("Default duration for \"Record until\" (minutes)", recordUntilDefaultDurationInMinutes), Setting.of("Leave space on device (GiB)", leaveSpaceOnDevice, "Stop recording, if the free space on the device gets below this threshold").converter(new GigabytesConverter()), @@ -340,6 +344,16 @@ public class SettingsTab extends Tab implements TabSelectionListener { prefs.getSetting("downloadFilename").ifPresent(s -> bindEnabledProperty(s, recordLocal)); prefs.getSetting("hlsdlExecutable").ifPresent(s -> bindEnabledProperty(s, useHlsdl.not())); prefs.getSetting("loghlsdlOutput").ifPresent(s -> bindEnabledProperty(s, useHlsdl.not())); + startMinimized.addListener((obs, oldV, newV) -> { + if (Objects.equals(newV, Boolean.TRUE)) { + minimizeToTray.set(true); + } + }); + minimizeToTray.addListener((obs, oldV, newV) -> { + if (Objects.equals(newV, Boolean.FALSE)) { + startMinimized.set(false); + } + }); postProcessingStepPanel.disableProperty().bind(recordLocal.not()); variablesHelpButton.disableProperty().bind(recordLocal); } diff --git a/client/src/main/resources/META-INF/MANIFEST.MF b/client/src/main/resources/META-INF/MANIFEST.MF index b6ae98e5..0f5f5121 100644 --- a/client/src/main/resources/META-INF/MANIFEST.MF +++ b/client/src/main/resources/META-INF/MANIFEST.MF @@ -1,4 +1,3 @@ Manifest-Version: 1.0 Main-Class: ctbrec.ui.Launcher -SplashScreen-Image: splash.png Built-By: 0xb00bface diff --git a/common/src/main/java/ctbrec/Config.java b/common/src/main/java/ctbrec/Config.java index d29ef369..25c2c9fc 100644 --- a/common/src/main/java/ctbrec/Config.java +++ b/common/src/main/java/ctbrec/Config.java @@ -73,7 +73,7 @@ public class Config { File src = currentConfigDir; if (src.exists()) { File target = new File(src.getParentFile(), src.getName() + "_backup_" + dateTimeFormatter.format(LocalDateTime.now())); - LOG.info("Creating a backup of the config in {}", target); + LOG.info("Creating a backup of {} the config in {}", src, target); FileUtils.copyDirectory(src, target, pathname -> !(pathname.toString().contains("minimal-browser") && pathname.toString().contains("Cache")), true); deleteOldBackups(currentConfigDir); } diff --git a/common/src/main/java/ctbrec/Settings.java b/common/src/main/java/ctbrec/Settings.java index 6e8503c4..6db0dbb0 100644 --- a/common/src/main/java/ctbrec/Settings.java +++ b/common/src/main/java/ctbrec/Settings.java @@ -179,6 +179,7 @@ public class Settings { public int splitRecordingsAfterSecs = 0; public long splitRecordingsBiggerThanBytes = 0; public String startTab = "Settings"; + public boolean startMinimized = false; public String streamatePassword = ""; public String streamateUsername = ""; public String stripchatUsername = "";