diff --git a/client/src/main/java/ctbrec/ui/RecordUntilDialog.java b/client/src/main/java/ctbrec/ui/RecordUntilDialog.java index 05e85fae..1f307ab7 100644 --- a/client/src/main/java/ctbrec/ui/RecordUntilDialog.java +++ b/client/src/main/java/ctbrec/ui/RecordUntilDialog.java @@ -76,7 +76,7 @@ public class RecordUntilDialog { var localDate = LocalDateTime.ofInstant(model.getRecordUntil(), ZoneId.systemDefault()); datePicker.setDateTimeValue(localDate); } else { - var localDate = LocalDateTime.now().plusHours(config.getSettings().recordUntilDefaultPeriodInHours); + var localDate = LocalDateTime.now().plusMinutes(config.getSettings().recordUntilDefaultDurationInMinutes); datePicker.setDateTimeValue(localDate); } } diff --git a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java index 8f57c957..e7fadb0b 100644 --- a/client/src/main/java/ctbrec/ui/settings/SettingsTab.java +++ b/client/src/main/java/ctbrec/ui/settings/SettingsTab.java @@ -1,19 +1,5 @@ package ctbrec.ui.settings; -import static ctbrec.Settings.DirectoryStructure.*; -import static ctbrec.Settings.ProxyType.*; -import static ctbrec.Settings.SplitStrategy.*; -import static java.util.Optional.*; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import ctbrec.Config; import ctbrec.GlobalThreadPool; import ctbrec.Hmac; @@ -27,28 +13,14 @@ import ctbrec.ui.DesktopIntegration; import ctbrec.ui.SiteUI; import ctbrec.ui.SiteUiFactory; import ctbrec.ui.controls.range.DiscreteRange; -import ctbrec.ui.settings.api.Category; -import ctbrec.ui.settings.api.ExclusiveSelectionProperty; -import ctbrec.ui.settings.api.GigabytesConverter; -import ctbrec.ui.settings.api.Group; -import ctbrec.ui.settings.api.LocalTimeProperty; -import ctbrec.ui.settings.api.Preferences; -import ctbrec.ui.settings.api.Setting; -import ctbrec.ui.settings.api.SimpleDirectoryProperty; -import ctbrec.ui.settings.api.SimpleFileProperty; -import ctbrec.ui.settings.api.SimpleRangeProperty; -import ctbrec.ui.settings.api.ValueConverter; +import ctbrec.ui.settings.api.*; import ctbrec.ui.sites.ConfigUI; import ctbrec.ui.tabs.TabSelectionListener; import javafx.animation.FadeTransition; import javafx.animation.PauseTransition; import javafx.animation.Transition; import javafx.beans.binding.BooleanExpression; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.property.SimpleIntegerProperty; -import javafx.beans.property.SimpleListProperty; -import javafx.beans.property.SimpleLongProperty; -import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.*; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.geometry.Insets; @@ -58,31 +30,34 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Tab; import javafx.scene.control.TextInputDialog; -import javafx.scene.layout.Background; -import javafx.scene.layout.BackgroundFill; -import javafx.scene.layout.Border; -import javafx.scene.layout.BorderStroke; -import javafx.scene.layout.BorderStrokeStyle; -import javafx.scene.layout.BorderWidths; -import javafx.scene.layout.CornerRadii; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.Region; -import javafx.scene.layout.StackPane; +import javafx.scene.layout.*; import javafx.scene.paint.Color; import javafx.util.Duration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static ctbrec.Settings.DirectoryStructure.*; +import static ctbrec.Settings.ProxyType.*; +import static ctbrec.Settings.SplitStrategy.*; +import static java.util.Optional.ofNullable; public class SettingsTab extends Tab implements TabSelectionListener { private static final Logger LOG = LoggerFactory.getLogger(SettingsTab.class); public static final int CHECKBOX_MARGIN = 6; - private static final long MiB = 1024 * 1024L; - private static final long GiB = 1024 * MiB; + private static final long MiB = 1024 * 1024L; // NOSONAR + private static final long GiB = 1024 * MiB; // NOSONAR - private List sites; - private Recorder recorder; + private final List sites; + private final Recorder recorder; + private final Config config; + private final Settings settings; private boolean initialized = false; - private Config config; - private Settings settings; private SimpleStringProperty httpUserAgent; private SimpleStringProperty httpUserAgentMobile; @@ -109,9 +84,9 @@ public class SettingsTab extends Tab implements TabSelectionListener { private SimpleListProperty splitAfter; private SimpleListProperty splitBiggerThan; private SimpleRangeProperty resolutionRange; - private List labels = Arrays.asList(0, 240, 360, 480, 600, 720, 960, 1080, 1440, 2160, 4320, 8640); - private List values = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); - private DiscreteRange rangeValues = new DiscreteRange<>(values, labels); + private final List labels = Arrays.asList(0, 240, 360, 480, 600, 720, 960, 1080, 1440, 2160, 4320, 8640); + private final List values = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); + private final DiscreteRange rangeValues = new DiscreteRange<>(values, labels); private SimpleIntegerProperty concurrentRecordings; private SimpleIntegerProperty onlineCheckIntervalInSecs; private SimpleBooleanProperty onlineCheckSkipsPausedModels; @@ -143,7 +118,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { private SimpleIntegerProperty defaultPriority; private LocalTimeProperty timeoutRecordingStartingAt; private LocalTimeProperty timeoutRecordingEndingAt; - private SimpleLongProperty recordUntilDefaultPeriodInHours; + private SimpleLongProperty recordUntilDefaultDurationInMinutes; public SettingsTab(List sites, Recorder recorder) { this.sites = sites; @@ -213,7 +188,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { defaultPriority = new SimpleIntegerProperty(null, "defaultPriority", settings.defaultPriority); timeoutRecordingStartingAt = new LocalTimeProperty(null, "timeoutRecordingStartingAt", settings.timeoutRecordingStartingAt); timeoutRecordingEndingAt = new LocalTimeProperty(null, "timeoutRecordingEndingAt", settings.timeoutRecordingEndingAt); - recordUntilDefaultPeriodInHours = new SimpleLongProperty(null, "recordUntilDefaultPeriodInHours", settings.recordUntilDefaultPeriodInHours); + recordUntilDefaultDurationInMinutes = new SimpleLongProperty(null, "recordUntilDefaultDurationInMinutes", settings.recordUntilDefaultDurationInMinutes); } private void createGui() { @@ -267,7 +242,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { 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 period for \"Record until\" (hours)", recordUntilDefaultPeriodInHours), + 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()), Setting.of("FFmpeg parameters", ffmpegParameters, "FFmpeg parameters to use when merging stream segments"), @@ -399,14 +374,14 @@ public class SettingsTab extends Tab implements TabSelectionListener { } private List getTabNames() { - return getTabPane().getTabs().stream().map(Tab::getText).collect(Collectors.toList()); + return getTabPane().getTabs().stream().map(Tab::getText).toList(); } private List getSplitAfterSecsOptions() { List splitOptions = new ArrayList<>(); splitOptions.add(new SplitAfterOption("disabled", 0)); if (Config.isDevMode()) { - splitOptions.add(new SplitAfterOption("1 min", 1 * 60)); + splitOptions.add(new SplitAfterOption("1 min", 60)); splitOptions.add(new SplitAfterOption("3 min", 3 * 60)); } splitOptions.add(new SplitAfterOption("5 min", 5 * 60)); @@ -428,7 +403,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { splitOptions.add(new SplitBiggerThanOption("100 MiB", 100 * MiB)); splitOptions.add(new SplitBiggerThanOption("250 MiB", 250 * MiB)); splitOptions.add(new SplitBiggerThanOption("500 MiB", 500 * MiB)); - splitOptions.add(new SplitBiggerThanOption("1 GiB", 1 * GiB)); + splitOptions.add(new SplitBiggerThanOption("1 GiB", GiB)); splitOptions.add(new SplitBiggerThanOption("2 GiB", 2 * GiB)); splitOptions.add(new SplitBiggerThanOption("3 GiB", 3 * GiB)); splitOptions.add(new SplitBiggerThanOption("4 GiB", 4 * GiB)); @@ -521,15 +496,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { return transition; } - public static class SplitAfterOption { - private String label; - private int value; - - public SplitAfterOption(String label, int value) { - super(); - this.label = label; - this.value = value; - } + public record SplitAfterOption(String label, int value) { public int getValue() { return value; @@ -575,15 +542,7 @@ public class SettingsTab extends Tab implements TabSelectionListener { } } - public static class SplitBiggerThanOption { - private String label; - private long value; - - public SplitBiggerThanOption(String label, long value) { - super(); - this.label = label; - this.value = value; - } + public record SplitBiggerThanOption(String label, long value) { public long getValue() { return value; diff --git a/common/src/main/java/ctbrec/Settings.java b/common/src/main/java/ctbrec/Settings.java index da0dd777..c92c0ae4 100644 --- a/common/src/main/java/ctbrec/Settings.java +++ b/common/src/main/java/ctbrec/Settings.java @@ -161,7 +161,7 @@ public class Settings { public DirectoryStructure recordingsDirStructure = DirectoryStructure.FLAT; public List recordLater = new ArrayList<>(); public boolean recordSingleFile = false; - public long recordUntilDefaultPeriodInHours = 24L; + public long recordUntilDefaultDurationInMinutes = 24 * 60L; public boolean removeRecordingAfterPostProcessing = false; public boolean requireAuthentication = false; public String servletContext = ""; diff --git a/common/src/main/java/ctbrec/recorder/RecordUntilExpiredException.java b/common/src/main/java/ctbrec/recorder/RecordUntilExpiredException.java index 69434860..022f9724 100644 --- a/common/src/main/java/ctbrec/recorder/RecordUntilExpiredException.java +++ b/common/src/main/java/ctbrec/recorder/RecordUntilExpiredException.java @@ -6,7 +6,7 @@ import java.time.ZoneId; import java.time.format.DateTimeFormatter; public class RecordUntilExpiredException extends PreconditionNotMetException { - private Instant until; + private final Instant until; public RecordUntilExpiredException(Instant until) { this.until = until; @@ -15,7 +15,7 @@ public class RecordUntilExpiredException extends PreconditionNotMetException { @Override public String getMessage() { LocalDateTime dateTime = LocalDateTime.ofInstant(until, ZoneId.systemDefault()); - String date = DateTimeFormatter.ISO_LOCAL_DATE.format(dateTime); + String date = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(dateTime); return "Recording expired at " + date; } }