Use minutes for record until default duration setting
This commit is contained in:
parent
e5689d9af5
commit
21fa71c901
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Site> sites;
|
||||
private Recorder recorder;
|
||||
private final List<Site> 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<SplitAfterOption> splitAfter;
|
||||
private SimpleListProperty<SplitBiggerThanOption> splitBiggerThan;
|
||||
private SimpleRangeProperty<Integer> resolutionRange;
|
||||
private 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 DiscreteRange<Integer> rangeValues = new DiscreteRange<>(values, labels);
|
||||
private final List<Integer> labels = Arrays.asList(0, 240, 360, 480, 600, 720, 960, 1080, 1440, 2160, 4320, 8640);
|
||||
private final List<Integer> values = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
|
||||
private final DiscreteRange<Integer> 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<Site> 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<String> getTabNames() {
|
||||
return getTabPane().getTabs().stream().map(Tab::getText).collect(Collectors.toList());
|
||||
return getTabPane().getTabs().stream().map(Tab::getText).toList();
|
||||
}
|
||||
|
||||
private List<SplitAfterOption> getSplitAfterSecsOptions() {
|
||||
List<SplitAfterOption> 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;
|
||||
|
|
|
@ -161,7 +161,7 @@ public class Settings {
|
|||
public DirectoryStructure recordingsDirStructure = DirectoryStructure.FLAT;
|
||||
public List<Model> 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 = "";
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue