Add GUI for setting splitRecordingsBiggerThanBytes
This commit is contained in:
parent
a31debcdea
commit
d88e5ab960
|
@ -1,3 +1,10 @@
|
|||
3.10.7
|
||||
========================
|
||||
* Fixed credentials related bugs for Streamate and Stripchat
|
||||
They used the user name from Chaturbate for some requests. Whoopsie!
|
||||
* Renamed settings for Chaturbate's user name and password
|
||||
* Add setting to split recordings by size
|
||||
|
||||
3.10.6
|
||||
========================
|
||||
* Fixed Cam4 downloads
|
||||
|
|
|
@ -28,6 +28,7 @@ import javafx.beans.property.ListProperty;
|
|||
import javafx.beans.property.LongProperty;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.CheckBox;
|
||||
|
@ -267,6 +268,9 @@ public class CtbrecPreferencesStorage implements PreferencesStorage {
|
|||
}
|
||||
config.save();
|
||||
}));
|
||||
if(setting.getChangeListener() != null) {
|
||||
comboBox.valueProperty().addListener((ChangeListener<? super Object>) setting.getChangeListener());
|
||||
}
|
||||
return comboBox;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ 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;
|
||||
|
@ -57,6 +58,8 @@ 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 List<Site> sites;
|
||||
private Recorder recorder;
|
||||
|
@ -85,6 +88,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
private SimpleDirectoryProperty recordingsDir;
|
||||
private SimpleListProperty<DirectoryStructure> directoryStructure;
|
||||
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);
|
||||
|
@ -104,8 +108,6 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
private ExclusiveSelectionProperty recordLocal;
|
||||
private SimpleIntegerProperty postProcessingThreads;
|
||||
private IgnoreList ignoreList;
|
||||
private PostProcessingStepPanel postProcessingStepPanel;
|
||||
private Button variablesHelpButton;
|
||||
|
||||
public SettingsTab(List<Site> sites, Recorder recorder) {
|
||||
this.sites = sites;
|
||||
|
@ -137,7 +139,8 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
proxyPassword = new SimpleStringProperty(null, "proxyPassword", settings.proxyPassword);
|
||||
recordingsDir = new SimpleDirectoryProperty(null, "recordingsDir", settings.recordingsDir);
|
||||
directoryStructure = new SimpleListProperty<>(null, "recordingsDirStructure", FXCollections.observableList(List.of(FLAT, ONE_PER_MODEL, ONE_PER_RECORDING)));
|
||||
splitAfter = new SimpleListProperty<>(null, "splitRecordings", FXCollections.observableList(getSplitOptions()));
|
||||
splitAfter = new SimpleListProperty<>(null, "splitRecordingsAfterSecs", FXCollections.observableList(getSplitAfterSecsOptions()));
|
||||
splitBiggerThan = new SimpleListProperty<>(null, "splitRecordingsBiggerThanBytes", FXCollections.observableList(getSplitBiggerThanOptions()));
|
||||
resolutionRange = new SimpleRangeProperty<>(rangeValues, "minimumResolution", "maximumResolution", settings.minimumResolution, settings.maximumResolution);
|
||||
concurrentRecordings = new SimpleIntegerProperty(null, "concurrentRecordings", settings.concurrentRecordings);
|
||||
onlineCheckIntervalInSecs = new SimpleIntegerProperty(null, "onlineCheckIntervalInSecs", settings.onlineCheckIntervalInSecs);
|
||||
|
@ -157,8 +160,8 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
}
|
||||
|
||||
private void createGui() {
|
||||
postProcessingStepPanel = new PostProcessingStepPanel(config);
|
||||
variablesHelpButton = createHelpButton("Variables", "http://localhost:5689/docs/PostProcessing.md#variables");
|
||||
PostProcessingStepPanel postProcessingStepPanel = new PostProcessingStepPanel(config);
|
||||
Button variablesHelpButton = createHelpButton("Variables", "http://localhost:5689/docs/PostProcessing.md#variables");
|
||||
ignoreList = new IgnoreList(sites);
|
||||
List<Category> siteCategories = new ArrayList<>();
|
||||
for (Site site : sites) {
|
||||
|
@ -191,7 +194,8 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
Group.of("Settings",
|
||||
Setting.of("Recordings Directory", recordingsDir),
|
||||
Setting.of("Directory Structure", directoryStructure),
|
||||
Setting.of("Split recordings after (minutes)", splitAfter).converter(SplitAfterOption.converter()),
|
||||
Setting.of("Split recordings after", splitAfter).converter(SplitAfterOption.converter()).onChange(this::splitValuesChanged),
|
||||
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("Leave space on device (GiB)", leaveSpaceOnDevice, "Stop recording, if the free space on the device gets below this threshold").converter(new GigabytesConverter()),
|
||||
|
@ -251,7 +255,8 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
prefs.getSetting("requireAuthentication").ifPresent(s -> bindEnabledProperty(s, recordLocal));
|
||||
prefs.getSetting("transportLayerSecurity").ifPresent(s -> bindEnabledProperty(s, recordLocal));
|
||||
prefs.getSetting("recordingsDir").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
prefs.getSetting("splitRecordings").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
prefs.getSetting("splitRecordingsAfterSecs").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
prefs.getSetting("splitRecordingsBiggerThanBytes").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
prefs.getSetting("minimumResolution").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
prefs.getSetting("recordingsDirStructure").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
prefs.getSetting("onlineCheckIntervalInSecs").ifPresent(s -> bindEnabledProperty(s, recordLocal.not()));
|
||||
|
@ -266,6 +271,23 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
prefs.getSetting("downloadFilename").ifPresent(s -> bindEnabledProperty(s, recordLocal));
|
||||
postProcessingStepPanel.disableProperty().bind(recordLocal.not());
|
||||
variablesHelpButton.disableProperty().bind(recordLocal);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void splitValuesChanged(ObservableValue<?> value, Object oldV, Object newV) {
|
||||
boolean splitAfterSet = settings.splitRecordingsAfterSecs > 0;
|
||||
boolean splitBiggerThanSet = settings.splitRecordingsBiggerThanBytes > 0;
|
||||
if (splitAfterSet && splitBiggerThanSet) {
|
||||
settings.splitStrategy = TIME_OR_SIZE;
|
||||
} else if (splitAfterSet) {
|
||||
settings.splitStrategy = TIME;
|
||||
} else if (splitBiggerThanSet) {
|
||||
settings.splitStrategy = SIZE;
|
||||
} else {
|
||||
settings.splitStrategy = DONT;
|
||||
}
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
private Button createHelpButton(String text, String url) {
|
||||
|
@ -288,7 +310,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<SplitAfterOption> getSplitOptions() {
|
||||
private List<SplitAfterOption> getSplitAfterSecsOptions() {
|
||||
List<SplitAfterOption> splitOptions = new ArrayList<>();
|
||||
splitOptions.add(new SplitAfterOption("disabled", 0));
|
||||
if (Config.isDevMode()) {
|
||||
|
@ -304,6 +326,29 @@ public class SettingsTab extends Tab implements TabSelectionListener {
|
|||
return splitOptions;
|
||||
}
|
||||
|
||||
private List<SplitBiggerThanOption> getSplitBiggerThanOptions() {
|
||||
List<SplitBiggerThanOption> splitOptions = new ArrayList<>();
|
||||
splitOptions.add(new SplitBiggerThanOption("disabled", 0));
|
||||
if (Config.isDevMode()) {
|
||||
splitOptions.add(new SplitBiggerThanOption("10 MiB", 10 * MiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("20 MiB", 20 * MiB));
|
||||
}
|
||||
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("2 GiB", 2 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("3 GiB", 3 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("4 GiB", 4 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("5 GiB", 5 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("6 GiB", 6 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("7 GiB", 7 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("8 GiB", 8 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("9 GiB", 9 * GiB));
|
||||
splitOptions.add(new SplitBiggerThanOption("10 GiB", 10 * GiB));
|
||||
return splitOptions;
|
||||
}
|
||||
|
||||
private void requireAuthenticationChanged(ObservableValue<?> obs, Boolean oldV, Boolean newV) { // NOSONAR
|
||||
boolean requiresAuthentication = newV;
|
||||
Config.getInstance().getSettings().requireAuthentication = requiresAuthentication;
|
||||
|
@ -415,4 +460,60 @@ 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 long getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + (int) (value ^ (value >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
SplitBiggerThanOption other = (SplitBiggerThanOption) obj;
|
||||
if (value != other.value)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static ValueConverter converter() {
|
||||
return new ValueConverter() {
|
||||
@Override
|
||||
public Long convertFrom(Object splitBiggerThanOption) {
|
||||
return ((SplitBiggerThanOption) splitBiggerThanOption).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SplitBiggerThanOption convertTo(Object value) {
|
||||
return new SplitBiggerThanOption(value.toString(), (Long) value);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import static java.util.Optional.*;
|
|||
|
||||
import ctbrec.StringUtil;
|
||||
import javafx.beans.property.Property;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.Control;
|
||||
import javafx.scene.control.Tooltip;
|
||||
|
@ -17,6 +18,7 @@ public class Setting {
|
|||
private PreferencesStorage preferencesStorage;
|
||||
private boolean needsRestart = false;
|
||||
private ValueConverter converter;
|
||||
private ChangeListener<?> changeListener;
|
||||
|
||||
protected Setting(String name, Property<?> property) {
|
||||
this.name = name;
|
||||
|
@ -107,4 +109,13 @@ public class Setting {
|
|||
public ValueConverter getConverter() {
|
||||
return converter;
|
||||
}
|
||||
|
||||
public Setting onChange(ChangeListener<?> changeListener) {
|
||||
this.changeListener = changeListener;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ChangeListener<?> getChangeListener() {
|
||||
return changeListener;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue