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());
datePicker.setDateTimeValue(localDate);
} else {
var localDate = LocalDateTime.now().plusHours(config.getSettings().recordUntilDefaultPeriodInHours);
var localDate = LocalDateTime.now().plusMinutes(config.getSettings().recordUntilDefaultDurationInMinutes);
datePicker.setDateTimeValue(localDate);
}
}

View File

@ -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;

View File

@ -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 = "";

View File

@ -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;
}
}