Use minutes for record until default duration setting

This commit is contained in:
0xb00bface 2021-12-21 15:01:19 +01:00
parent e5689d9af5
commit 21fa71c901
4 changed files with 36 additions and 77 deletions

View File

@ -76,7 +76,7 @@ public class RecordUntilDialog {
var localDate = LocalDateTime.ofInstant(model.getRecordUntil(), ZoneId.systemDefault()); var localDate = LocalDateTime.ofInstant(model.getRecordUntil(), ZoneId.systemDefault());
datePicker.setDateTimeValue(localDate); datePicker.setDateTimeValue(localDate);
} else { } else {
var localDate = LocalDateTime.now().plusHours(config.getSettings().recordUntilDefaultPeriodInHours); var localDate = LocalDateTime.now().plusMinutes(config.getSettings().recordUntilDefaultDurationInMinutes);
datePicker.setDateTimeValue(localDate); datePicker.setDateTimeValue(localDate);
} }
} }

View File

@ -1,19 +1,5 @@
package ctbrec.ui.settings; 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.Config;
import ctbrec.GlobalThreadPool; import ctbrec.GlobalThreadPool;
import ctbrec.Hmac; import ctbrec.Hmac;
@ -27,28 +13,14 @@ import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SiteUI; import ctbrec.ui.SiteUI;
import ctbrec.ui.SiteUiFactory; import ctbrec.ui.SiteUiFactory;
import ctbrec.ui.controls.range.DiscreteRange; import ctbrec.ui.controls.range.DiscreteRange;
import ctbrec.ui.settings.api.Category; import ctbrec.ui.settings.api.*;
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.sites.ConfigUI; import ctbrec.ui.sites.ConfigUI;
import ctbrec.ui.tabs.TabSelectionListener; import ctbrec.ui.tabs.TabSelectionListener;
import javafx.animation.FadeTransition; import javafx.animation.FadeTransition;
import javafx.animation.PauseTransition; import javafx.animation.PauseTransition;
import javafx.animation.Transition; import javafx.animation.Transition;
import javafx.beans.binding.BooleanExpression; import javafx.beans.binding.BooleanExpression;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.*;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleLongProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.geometry.Insets; import javafx.geometry.Insets;
@ -58,31 +30,34 @@ import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.scene.control.TextInputDialog; import javafx.scene.control.TextInputDialog;
import javafx.scene.layout.Background; import javafx.scene.layout.*;
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.paint.Color; import javafx.scene.paint.Color;
import javafx.util.Duration; 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 { public class SettingsTab extends Tab implements TabSelectionListener {
private static final Logger LOG = LoggerFactory.getLogger(SettingsTab.class); private static final Logger LOG = LoggerFactory.getLogger(SettingsTab.class);
public static final int CHECKBOX_MARGIN = 6; public static final int CHECKBOX_MARGIN = 6;
private static final long MiB = 1024 * 1024L; private static final long MiB = 1024 * 1024L; // NOSONAR
private static final long GiB = 1024 * MiB; private static final long GiB = 1024 * MiB; // NOSONAR
private List<Site> sites; private final List<Site> sites;
private Recorder recorder; private final Recorder recorder;
private final Config config;
private final Settings settings;
private boolean initialized = false; private boolean initialized = false;
private Config config;
private Settings settings;
private SimpleStringProperty httpUserAgent; private SimpleStringProperty httpUserAgent;
private SimpleStringProperty httpUserAgentMobile; private SimpleStringProperty httpUserAgentMobile;
@ -109,9 +84,9 @@ public class SettingsTab extends Tab implements TabSelectionListener {
private SimpleListProperty<SplitAfterOption> splitAfter; private SimpleListProperty<SplitAfterOption> splitAfter;
private SimpleListProperty<SplitBiggerThanOption> splitBiggerThan; private SimpleListProperty<SplitBiggerThanOption> splitBiggerThan;
private SimpleRangeProperty<Integer> resolutionRange; private SimpleRangeProperty<Integer> resolutionRange;
private List<Integer> labels = Arrays.asList(0, 240, 360, 480, 600, 720, 960, 1080, 1440, 2160, 4320, 8640); private final List<Integer> labels = Arrays.asList(0, 240, 360, 480, 600, 720, 960, 1080, 1440, 2160, 4320, 8640);
private List<Integer> values = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); private final List<Integer> values = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
private DiscreteRange<Integer> rangeValues = new DiscreteRange<>(values, labels); private final DiscreteRange<Integer> rangeValues = new DiscreteRange<>(values, labels);
private SimpleIntegerProperty concurrentRecordings; private SimpleIntegerProperty concurrentRecordings;
private SimpleIntegerProperty onlineCheckIntervalInSecs; private SimpleIntegerProperty onlineCheckIntervalInSecs;
private SimpleBooleanProperty onlineCheckSkipsPausedModels; private SimpleBooleanProperty onlineCheckSkipsPausedModels;
@ -143,7 +118,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
private SimpleIntegerProperty defaultPriority; private SimpleIntegerProperty defaultPriority;
private LocalTimeProperty timeoutRecordingStartingAt; private LocalTimeProperty timeoutRecordingStartingAt;
private LocalTimeProperty timeoutRecordingEndingAt; private LocalTimeProperty timeoutRecordingEndingAt;
private SimpleLongProperty recordUntilDefaultPeriodInHours; private SimpleLongProperty recordUntilDefaultDurationInMinutes;
public SettingsTab(List<Site> sites, Recorder recorder) { public SettingsTab(List<Site> sites, Recorder recorder) {
this.sites = sites; this.sites = sites;
@ -213,7 +188,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
defaultPriority = new SimpleIntegerProperty(null, "defaultPriority", settings.defaultPriority); defaultPriority = new SimpleIntegerProperty(null, "defaultPriority", settings.defaultPriority);
timeoutRecordingStartingAt = new LocalTimeProperty(null, "timeoutRecordingStartingAt", settings.timeoutRecordingStartingAt); timeoutRecordingStartingAt = new LocalTimeProperty(null, "timeoutRecordingStartingAt", settings.timeoutRecordingStartingAt);
timeoutRecordingEndingAt = new LocalTimeProperty(null, "timeoutRecordingEndingAt", settings.timeoutRecordingEndingAt); timeoutRecordingEndingAt = new LocalTimeProperty(null, "timeoutRecordingEndingAt", settings.timeoutRecordingEndingAt);
recordUntilDefaultPeriodInHours = new SimpleLongProperty(null, "recordUntilDefaultPeriodInHours", settings.recordUntilDefaultPeriodInHours); recordUntilDefaultDurationInMinutes = new SimpleLongProperty(null, "recordUntilDefaultDurationInMinutes", settings.recordUntilDefaultDurationInMinutes);
} }
private void createGui() { 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("Restrict Resolution", resolutionRange, "Only record streams with resolution within the given range"),
Setting.of("Concurrent Recordings (0 = unlimited)", concurrentRecordings), Setting.of("Concurrent Recordings (0 = unlimited)", concurrentRecordings),
Setting.of("Default Priority", defaultPriority), 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, Setting.of("Leave space on device (GiB)", leaveSpaceOnDevice,
"Stop recording, if the free space on the device gets below this threshold").converter(new GigabytesConverter()), "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"), 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<String> getTabNames() { private List<String> getTabNames() {
return getTabPane().getTabs().stream().map(Tab::getText).collect(Collectors.toList()); return getTabPane().getTabs().stream().map(Tab::getText).toList();
} }
private List<SplitAfterOption> getSplitAfterSecsOptions() { private List<SplitAfterOption> getSplitAfterSecsOptions() {
List<SplitAfterOption> splitOptions = new ArrayList<>(); List<SplitAfterOption> splitOptions = new ArrayList<>();
splitOptions.add(new SplitAfterOption("disabled", 0)); splitOptions.add(new SplitAfterOption("disabled", 0));
if (Config.isDevMode()) { 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("3 min", 3 * 60));
} }
splitOptions.add(new SplitAfterOption("5 min", 5 * 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("100 MiB", 100 * MiB));
splitOptions.add(new SplitBiggerThanOption("250 MiB", 250 * MiB)); splitOptions.add(new SplitBiggerThanOption("250 MiB", 250 * MiB));
splitOptions.add(new SplitBiggerThanOption("500 MiB", 500 * 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("2 GiB", 2 * GiB));
splitOptions.add(new SplitBiggerThanOption("3 GiB", 3 * GiB)); splitOptions.add(new SplitBiggerThanOption("3 GiB", 3 * GiB));
splitOptions.add(new SplitBiggerThanOption("4 GiB", 4 * GiB)); splitOptions.add(new SplitBiggerThanOption("4 GiB", 4 * GiB));
@ -521,15 +496,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
return transition; return transition;
} }
public static class SplitAfterOption { public record SplitAfterOption(String label, int value) {
private String label;
private int value;
public SplitAfterOption(String label, int value) {
super();
this.label = label;
this.value = value;
}
public int getValue() { public int getValue() {
return value; return value;
@ -575,15 +542,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
} }
} }
public static class SplitBiggerThanOption { public record SplitBiggerThanOption(String label, long value) {
private String label;
private long value;
public SplitBiggerThanOption(String label, long value) {
super();
this.label = label;
this.value = value;
}
public long getValue() { public long getValue() {
return value; return value;

View File

@ -161,7 +161,7 @@ public class Settings {
public DirectoryStructure recordingsDirStructure = DirectoryStructure.FLAT; public DirectoryStructure recordingsDirStructure = DirectoryStructure.FLAT;
public List<Model> recordLater = new ArrayList<>(); public List<Model> recordLater = new ArrayList<>();
public boolean recordSingleFile = false; public boolean recordSingleFile = false;
public long recordUntilDefaultPeriodInHours = 24L; public long recordUntilDefaultDurationInMinutes = 24 * 60L;
public boolean removeRecordingAfterPostProcessing = false; public boolean removeRecordingAfterPostProcessing = false;
public boolean requireAuthentication = false; public boolean requireAuthentication = false;
public String servletContext = ""; public String servletContext = "";

View File

@ -6,7 +6,7 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
public class RecordUntilExpiredException extends PreconditionNotMetException { public class RecordUntilExpiredException extends PreconditionNotMetException {
private Instant until; private final Instant until;
public RecordUntilExpiredException(Instant until) { public RecordUntilExpiredException(Instant until) {
this.until = until; this.until = until;
@ -15,7 +15,7 @@ public class RecordUntilExpiredException extends PreconditionNotMetException {
@Override @Override
public String getMessage() { public String getMessage() {
LocalDateTime dateTime = LocalDateTime.ofInstant(until, ZoneId.systemDefault()); 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; return "Recording expired at " + date;
} }
} }