Little bit of code cleanup
This commit is contained in:
parent
4f973dbeed
commit
628c92cc67
|
@ -1,28 +1,10 @@
|
||||||
package ctbrec.ui;
|
package ctbrec.ui;
|
||||||
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.security.InvalidKeyException;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import com.squareup.moshi.JsonAdapter;
|
import com.squareup.moshi.JsonAdapter;
|
||||||
import com.squareup.moshi.Moshi;
|
import com.squareup.moshi.Moshi;
|
||||||
import com.squareup.moshi.Types;
|
import com.squareup.moshi.Types;
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.StringUtil;
|
import ctbrec.StringUtil;
|
||||||
|
@ -56,25 +38,14 @@ import ctbrec.sites.stripchat.Stripchat;
|
||||||
import ctbrec.ui.controls.Dialogs;
|
import ctbrec.ui.controls.Dialogs;
|
||||||
import ctbrec.ui.news.NewsTab;
|
import ctbrec.ui.news.NewsTab;
|
||||||
import ctbrec.ui.settings.SettingsTab;
|
import ctbrec.ui.settings.SettingsTab;
|
||||||
import ctbrec.ui.tabs.DonateTabFx;
|
import ctbrec.ui.tabs.*;
|
||||||
import ctbrec.ui.tabs.HelpTab;
|
|
||||||
import ctbrec.ui.tabs.RecordedModelsTab;
|
|
||||||
import ctbrec.ui.tabs.RecordingsTab;
|
|
||||||
import ctbrec.ui.tabs.SiteTab;
|
|
||||||
import ctbrec.ui.tabs.TabSelectionListener;
|
|
||||||
import ctbrec.ui.tabs.UpdateTab;
|
|
||||||
import ctbrec.ui.tabs.logging.LoggingTab;
|
import ctbrec.ui.tabs.logging.LoggingTab;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.application.HostServices;
|
import javafx.application.HostServices;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.value.ChangeListener;
|
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.control.ButtonType;
|
|
||||||
import javafx.scene.control.Label;
|
|
||||||
import javafx.scene.control.Tab;
|
|
||||||
import javafx.scene.control.TabPane;
|
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
|
@ -83,6 +54,17 @@ import javafx.stage.Stage;
|
||||||
import javafx.stage.WindowEvent;
|
import javafx.stage.WindowEvent;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class CamrecApplication extends Application {
|
public class CamrecApplication extends Application {
|
||||||
|
|
||||||
|
@ -92,11 +74,11 @@ public class CamrecApplication extends Application {
|
||||||
private Recorder recorder;
|
private Recorder recorder;
|
||||||
private OnlineMonitor onlineMonitor;
|
private OnlineMonitor onlineMonitor;
|
||||||
static HostServices hostServices;
|
static HostServices hostServices;
|
||||||
private BorderPane rootPane = new BorderPane();
|
private final BorderPane rootPane = new BorderPane();
|
||||||
private HBox statusBar = new HBox();
|
private final HBox statusBar = new HBox();
|
||||||
private Label statusLabel = new Label();
|
private final Label statusLabel = new Label();
|
||||||
private TabPane tabPane = new TabPane();
|
private final TabPane tabPane = new TabPane();
|
||||||
private List<Site> sites = new ArrayList<>();
|
private final List<Site> sites = new ArrayList<>();
|
||||||
public static HttpClient httpClient;
|
public static HttpClient httpClient;
|
||||||
public static String title;
|
public static String title;
|
||||||
private Stage primaryStage;
|
private Stage primaryStage;
|
||||||
|
@ -180,9 +162,8 @@ public class CamrecApplication extends Application {
|
||||||
primaryStage.setScene(scene);
|
primaryStage.setScene(scene);
|
||||||
rootPane.setCenter(tabPane);
|
rootPane.setCenter(tabPane);
|
||||||
rootPane.setBottom(statusBar);
|
rootPane.setBottom(statusBar);
|
||||||
for (Iterator<Site> iterator = sites.iterator(); iterator.hasNext();) {
|
for (Site site : sites) {
|
||||||
Site site = iterator.next();
|
if (site.isEnabled()) {
|
||||||
if(site.isEnabled()) {
|
|
||||||
SiteTab siteTab = new SiteTab(site, scene);
|
SiteTab siteTab = new SiteTab(site, scene);
|
||||||
tabPane.getTabs().add(siteTab);
|
tabPane.getTabs().add(siteTab);
|
||||||
}
|
}
|
||||||
|
@ -190,7 +171,7 @@ public class CamrecApplication extends Application {
|
||||||
|
|
||||||
modelsTab = new RecordedModelsTab("Recording", recorder, sites);
|
modelsTab = new RecordedModelsTab("Recording", recorder, sites);
|
||||||
tabPane.getTabs().add(modelsTab);
|
tabPane.getTabs().add(modelsTab);
|
||||||
recordingsTab = new RecordingsTab("Recordings", recorder, config, sites);
|
recordingsTab = new RecordingsTab("Recordings", recorder, config);
|
||||||
tabPane.getTabs().add(recordingsTab);
|
tabPane.getTabs().add(recordingsTab);
|
||||||
tabPane.getTabs().add(new SettingsTab(sites, recorder));
|
tabPane.getTabs().add(new SettingsTab(sites, recorder));
|
||||||
tabPane.getTabs().add(new NewsTab());
|
tabPane.getTabs().add(new NewsTab());
|
||||||
|
@ -215,7 +196,7 @@ public class CamrecApplication extends Application {
|
||||||
.addListener((observable, oldVal, newVal) -> Config.getInstance().getSettings().windowHeight = newVal.intValue());
|
.addListener((observable, oldVal, newVal) -> Config.getInstance().getSettings().windowHeight = newVal.intValue());
|
||||||
primaryStage.setMaximized(Config.getInstance().getSettings().windowMaximized);
|
primaryStage.setMaximized(Config.getInstance().getSettings().windowMaximized);
|
||||||
primaryStage.maximizedProperty()
|
primaryStage.maximizedProperty()
|
||||||
.addListener((observable, oldVal, newVal) -> Config.getInstance().getSettings().windowMaximized = newVal.booleanValue());
|
.addListener((observable, oldVal, newVal) -> Config.getInstance().getSettings().windowMaximized = newVal);
|
||||||
Player.scene = primaryStage.getScene();
|
Player.scene = primaryStage.getScene();
|
||||||
primaryStage.setX(Config.getInstance().getSettings().windowX);
|
primaryStage.setX(Config.getInstance().getSettings().windowX);
|
||||||
primaryStage.setY(Config.getInstance().getSettings().windowY);
|
primaryStage.setY(Config.getInstance().getSettings().windowY);
|
||||||
|
@ -225,7 +206,7 @@ public class CamrecApplication extends Application {
|
||||||
primaryStage.setOnCloseRequest(createShutdownHandler());
|
primaryStage.setOnCloseRequest(createShutdownHandler());
|
||||||
|
|
||||||
// register changelistener to activate / deactivate tabs, when the user switches between them
|
// register changelistener to activate / deactivate tabs, when the user switches between them
|
||||||
tabPane.getSelectionModel().selectedItemProperty().addListener((ChangeListener<Tab>) (ov, from, to) -> {
|
tabPane.getSelectionModel().selectedItemProperty().addListener((ov, from, to) -> {
|
||||||
if (from instanceof TabSelectionListener) {
|
if (from instanceof TabSelectionListener) {
|
||||||
((TabSelectionListener) from).deselected();
|
((TabSelectionListener) from).deselected();
|
||||||
}
|
}
|
||||||
|
@ -274,15 +255,13 @@ public class CamrecApplication extends Application {
|
||||||
shutdownInfo.show();
|
shutdownInfo.show();
|
||||||
|
|
||||||
final boolean immediately = shutdownNow;
|
final boolean immediately = shutdownNow;
|
||||||
new Thread() {
|
new Thread(() -> {
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
modelsTab.saveState();
|
modelsTab.saveState();
|
||||||
recordingsTab.saveState();
|
recordingsTab.saveState();
|
||||||
onlineMonitor.shutdown();
|
onlineMonitor.shutdown();
|
||||||
recorder.shutdown(immediately);
|
recorder.shutdown(immediately);
|
||||||
for (Site site : sites) {
|
for (Site site : sites) {
|
||||||
if(site.isEnabled()) {
|
if (site.isEnabled()) {
|
||||||
site.shutdown();
|
site.shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -307,11 +286,10 @@ public class CamrecApplication extends Application {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ExternalBrowser.getInstance().close();
|
ExternalBrowser.getInstance().close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e12) {
|
||||||
// noop
|
// noop
|
||||||
}
|
}
|
||||||
}
|
}).start();
|
||||||
}.start();
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,8 +333,8 @@ public class CamrecApplication extends Application {
|
||||||
if (activeRecordings == 0) {
|
if (activeRecordings == 0) {
|
||||||
bytesPerSecond = 0;
|
bytesPerSecond = 0;
|
||||||
}
|
}
|
||||||
String humanreadable = ByteUnitFormatter.format(bytesPerSecond);
|
String humanReadable = ByteUnitFormatter.format(bytesPerSecond);
|
||||||
String status = String.format("Recording %s / %s models @ %s/s", activeRecordings, recorder.getModels().size(), humanreadable);
|
String status = String.format("Recording %s / %s models @ %s/s", activeRecordings, recorder.getModels().size(), humanReadable);
|
||||||
Platform.runLater(() -> statusLabel.setText(status));
|
Platform.runLater(() -> statusLabel.setText(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +348,7 @@ public class CamrecApplication extends Application {
|
||||||
" -fx-focus-color: -fx-accent;\n" +
|
" -fx-focus-color: -fx-accent;\n" +
|
||||||
" -fx-control-inner-background-alt: derive(-fx-base, 95%);\n" +
|
" -fx-control-inner-background-alt: derive(-fx-base, 95%);\n" +
|
||||||
"}";
|
"}";
|
||||||
fos.write(content.getBytes("utf-8"));
|
fos.write(content.getBytes(StandardCharsets.UTF_8));
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
LOG.error("Couldn't write stylesheet for user defined color theme");
|
LOG.error("Couldn't write stylesheet for user defined color theme");
|
||||||
}
|
}
|
||||||
|
@ -400,7 +378,6 @@ public class CamrecApplication extends Application {
|
||||||
|
|
||||||
private void createRecorder() {
|
private void createRecorder() {
|
||||||
if (config.getSettings().localRecording) {
|
if (config.getSettings().localRecording) {
|
||||||
//recorder = new LocalRecorder(config);
|
|
||||||
try {
|
try {
|
||||||
recorder = new NextGenLocalRecorder(config, sites);
|
recorder = new NextGenLocalRecorder(config, sites);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -431,7 +408,7 @@ public class CamrecApplication extends Application {
|
||||||
private void createHttpClient() {
|
private void createHttpClient() {
|
||||||
httpClient = new HttpClient("camrec") {
|
httpClient = new HttpClient("camrec") {
|
||||||
@Override
|
@Override
|
||||||
public boolean login() throws IOException {
|
public boolean login() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -481,8 +458,7 @@ public class CamrecApplication extends Application {
|
||||||
try (InputStream is = CamrecApplication.class.getClassLoader().getResourceAsStream("version")) {
|
try (InputStream is = CamrecApplication.class.getClassLoader().getResourceAsStream("version")) {
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
||||||
String versionString = reader.readLine();
|
String versionString = reader.readLine();
|
||||||
Version version = Version.of(versionString);
|
return Version.of(versionString);
|
||||||
return version;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,33 +1,5 @@
|
||||||
package ctbrec.ui.tabs;
|
package ctbrec.ui.tabs;
|
||||||
|
|
||||||
import static ctbrec.Recording.State.*;
|
|
||||||
import static javafx.scene.control.ButtonType.*;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.NoSuchFileException;
|
|
||||||
import java.security.InvalidKeyException;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import ctbrec.Config;
|
import ctbrec.Config;
|
||||||
import ctbrec.Model;
|
import ctbrec.Model;
|
||||||
import ctbrec.Recording;
|
import ctbrec.Recording;
|
||||||
|
@ -40,13 +12,7 @@ import ctbrec.recorder.ProgressListener;
|
||||||
import ctbrec.recorder.Recorder;
|
import ctbrec.recorder.Recorder;
|
||||||
import ctbrec.recorder.RecordingPinnedException;
|
import ctbrec.recorder.RecordingPinnedException;
|
||||||
import ctbrec.recorder.download.hls.MergedFfmpegHlsDownload;
|
import ctbrec.recorder.download.hls.MergedFfmpegHlsDownload;
|
||||||
import ctbrec.sites.Site;
|
import ctbrec.ui.*;
|
||||||
import ctbrec.ui.AutosizeAlert;
|
|
||||||
import ctbrec.ui.CamrecApplication;
|
|
||||||
import ctbrec.ui.DesktopIntegration;
|
|
||||||
import ctbrec.ui.FileDownload;
|
|
||||||
import ctbrec.ui.JavaFxRecording;
|
|
||||||
import ctbrec.ui.Player;
|
|
||||||
import ctbrec.ui.action.FollowAction;
|
import ctbrec.ui.action.FollowAction;
|
||||||
import ctbrec.ui.action.PauseAction;
|
import ctbrec.ui.action.PauseAction;
|
||||||
import ctbrec.ui.action.StopRecordingAction;
|
import ctbrec.ui.action.StopRecordingAction;
|
||||||
|
@ -64,24 +30,9 @@ import javafx.geometry.Insets;
|
||||||
import javafx.scene.Cursor;
|
import javafx.scene.Cursor;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import javafx.scene.control.Alert.AlertType;
|
import javafx.scene.control.Alert.AlertType;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.control.ContextMenu;
|
|
||||||
import javafx.scene.control.Label;
|
|
||||||
import javafx.scene.control.MenuItem;
|
|
||||||
import javafx.scene.control.ProgressBar;
|
|
||||||
import javafx.scene.control.ScrollPane;
|
|
||||||
import javafx.scene.control.SelectionMode;
|
|
||||||
import javafx.scene.control.Tab;
|
|
||||||
import javafx.scene.control.TableCell;
|
|
||||||
import javafx.scene.control.TableColumn;
|
|
||||||
import javafx.scene.control.TableColumn.SortType;
|
import javafx.scene.control.TableColumn.SortType;
|
||||||
import javafx.scene.control.TableView;
|
import javafx.scene.input.*;
|
||||||
import javafx.scene.control.Tooltip;
|
|
||||||
import javafx.scene.input.ContextMenuEvent;
|
|
||||||
import javafx.scene.input.KeyCode;
|
|
||||||
import javafx.scene.input.KeyEvent;
|
|
||||||
import javafx.scene.input.MouseButton;
|
|
||||||
import javafx.scene.input.MouseEvent;
|
|
||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
import javafx.scene.layout.FlowPane;
|
import javafx.scene.layout.FlowPane;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
|
@ -89,6 +40,29 @@ import javafx.scene.layout.StackPane;
|
||||||
import javafx.scene.text.Font;
|
import javafx.scene.text.Font;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import javafx.util.Duration;
|
import javafx.util.Duration;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.NoSuchFileException;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.locks.Lock;
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static ctbrec.Recording.State.*;
|
||||||
|
import static javafx.scene.control.ButtonType.NO;
|
||||||
|
import static javafx.scene.control.ButtonType.YES;
|
||||||
|
|
||||||
public class RecordingsTab extends Tab implements TabSelectionListener {
|
public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
private static final String ERROR_WHILE_DOWNLOADING_RECORDING = "Error while downloading recording";
|
private static final String ERROR_WHILE_DOWNLOADING_RECORDING = "Error while downloading recording";
|
||||||
|
@ -96,10 +70,8 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(RecordingsTab.class);
|
private static final Logger LOG = LoggerFactory.getLogger(RecordingsTab.class);
|
||||||
|
|
||||||
private ScheduledService<List<JavaFxRecording>> updateService;
|
private ScheduledService<List<JavaFxRecording>> updateService;
|
||||||
private Config config;
|
private final Config config;
|
||||||
private Recorder recorder;
|
private final Recorder recorder;
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private List<Site> sites;
|
|
||||||
private long spaceTotal = -1;
|
private long spaceTotal = -1;
|
||||||
private long spaceFree = -1;
|
private long spaceFree = -1;
|
||||||
|
|
||||||
|
@ -112,11 +84,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
Label spaceLabel;
|
Label spaceLabel;
|
||||||
Lock recordingsLock = new ReentrantLock();
|
Lock recordingsLock = new ReentrantLock();
|
||||||
|
|
||||||
public RecordingsTab(String title, Recorder recorder, Config config, List<Site> sites) {
|
public RecordingsTab(String title, Recorder recorder, Config config) {
|
||||||
super(title);
|
super(title);
|
||||||
this.recorder = recorder;
|
this.recorder = recorder;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.sites = sites;
|
|
||||||
createGui();
|
createGui();
|
||||||
setClosable(false);
|
setClosable(false);
|
||||||
initializeUpdateService();
|
initializeUpdateService();
|
||||||
|
@ -143,9 +114,9 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
date.setId("date");
|
date.setId("date");
|
||||||
date.setCellValueFactory(cdf -> {
|
date.setCellValueFactory(cdf -> {
|
||||||
Instant instant = cdf.getValue().getStartDate();
|
Instant instant = cdf.getValue().getStartDate();
|
||||||
return new SimpleObjectProperty<Instant>(instant);
|
return new SimpleObjectProperty<>(instant);
|
||||||
});
|
});
|
||||||
date.setCellFactory(new DateTimeCellFactory<JavaFxRecording>());
|
date.setCellFactory(new DateTimeCellFactory<>());
|
||||||
date.setPrefWidth(200);
|
date.setPrefWidth(200);
|
||||||
TableColumn<JavaFxRecording, String> status = new TableColumn<>("Status");
|
TableColumn<JavaFxRecording, String> status = new TableColumn<>("Status");
|
||||||
status.setId("status");
|
status.setId("status");
|
||||||
|
@ -200,7 +171,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableCell<JavaFxRecording, Number> createSizeCell() {
|
private TableCell<JavaFxRecording, Number> createSizeCell() {
|
||||||
TableCell<JavaFxRecording, Number> cell = new TableCell<JavaFxRecording, Number>() {
|
return new TableCell<>() {
|
||||||
@Override
|
@Override
|
||||||
protected void updateItem(Number sizeInByte, boolean empty) {
|
protected void updateItem(Number sizeInByte, boolean empty) {
|
||||||
if (empty || sizeInByte == null) {
|
if (empty || sizeInByte == null) {
|
||||||
|
@ -219,7 +190,6 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return cell;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onContextMenuRequested(ContextMenuEvent event) {
|
private void onContextMenuRequested(ContextMenuEvent event) {
|
||||||
|
@ -276,7 +246,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
AutosizeAlert autosizeAlert = new AutosizeAlert(AlertType.ERROR, getTabPane().getScene());
|
AutosizeAlert autosizeAlert = new AutosizeAlert(AlertType.ERROR, getTabPane().getScene());
|
||||||
autosizeAlert.setTitle("Whoopsie!");
|
autosizeAlert.setTitle("Whoopsie!");
|
||||||
autosizeAlert.setHeaderText("Recordings not available");
|
autosizeAlert.setHeaderText("Recordings not available");
|
||||||
autosizeAlert.setContentText("An error occured while retrieving the list of recordings");
|
autosizeAlert.setContentText("An error occurred while retrieving the list of recordings");
|
||||||
autosizeAlert.showAndWait();
|
autosizeAlert.showAndWait();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -302,13 +272,9 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
|
|
||||||
recordingsLock.lock();
|
recordingsLock.lock();
|
||||||
try {
|
try {
|
||||||
for (Iterator<JavaFxRecording> iterator = observableRecordings.iterator(); iterator.hasNext();) {
|
|
||||||
JavaFxRecording old = iterator.next();
|
|
||||||
if (!recordings.contains(old)) {
|
|
||||||
// remove deleted recordings
|
// remove deleted recordings
|
||||||
iterator.remove();
|
observableRecordings.removeIf(old -> !recordings.contains(old));
|
||||||
}
|
|
||||||
}
|
|
||||||
for (JavaFxRecording recording : recordings) {
|
for (JavaFxRecording recording : recordings) {
|
||||||
if (!observableRecordings.contains(recording)) {
|
if (!observableRecordings.contains(recording)) {
|
||||||
// add new recordings
|
// add new recordings
|
||||||
|
@ -327,10 +293,10 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ScheduledService<List<JavaFxRecording>> createUpdateService() {
|
private ScheduledService<List<JavaFxRecording>> createUpdateService() {
|
||||||
ScheduledService<List<JavaFxRecording>> service = new ScheduledService<List<JavaFxRecording>>() {
|
ScheduledService<List<JavaFxRecording>> service = new ScheduledService<>() {
|
||||||
@Override
|
@Override
|
||||||
protected Task<List<JavaFxRecording>> createTask() {
|
protected Task<List<JavaFxRecording>> createTask() {
|
||||||
return new Task<List<JavaFxRecording>>() {
|
return new Task<>() {
|
||||||
@Override
|
@Override
|
||||||
public List<JavaFxRecording> call() throws IOException, InvalidKeyException, NoSuchAlgorithmException {
|
public List<JavaFxRecording> call() throws IOException, InvalidKeyException, NoSuchAlgorithmException {
|
||||||
updateSpace();
|
updateSpace();
|
||||||
|
@ -401,13 +367,13 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
contextMenu.getItems().add(openContactSheet);
|
contextMenu.getItems().add(openContactSheet);
|
||||||
|
|
||||||
MenuItem stopRecording = new MenuItem("Stop Recording");
|
MenuItem stopRecording = new MenuItem("Stop Recording");
|
||||||
stopRecording.setOnAction(e -> stopRecording(recordings.stream().map(r -> r.getModel()).collect(Collectors.toList())));
|
stopRecording.setOnAction(e -> stopRecording(recordings.stream().map(JavaFxRecording::getModel).collect(Collectors.toList())));
|
||||||
if (recordings.stream().anyMatch(r -> r.getStatus() == RECORDING)) {
|
if (recordings.stream().anyMatch(r -> r.getStatus() == RECORDING)) {
|
||||||
contextMenu.getItems().add(stopRecording);
|
contextMenu.getItems().add(stopRecording);
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuItem pauseRecording = new MenuItem("Pause Recording");
|
MenuItem pauseRecording = new MenuItem("Pause Recording");
|
||||||
pauseRecording.setOnAction(e -> pauseRecording(recordings.stream().map(r -> r.getModel()).collect(Collectors.toList())));
|
pauseRecording.setOnAction(e -> pauseRecording(recordings.stream().map(JavaFxRecording::getModel).collect(Collectors.toList())));
|
||||||
if (recordings.stream().anyMatch(r -> r.getStatus() == RECORDING)) {
|
if (recordings.stream().anyMatch(r -> r.getStatus() == RECORDING)) {
|
||||||
contextMenu.getItems().add(pauseRecording);
|
contextMenu.getItems().add(pauseRecording);
|
||||||
}
|
}
|
||||||
|
@ -420,8 +386,8 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuItem followModels = new MenuItem("Follow Model");
|
MenuItem followModels = new MenuItem("Follow Model");
|
||||||
followModels.setOnAction(e -> follow(recordings.stream().map(r -> r.getModel()).collect(Collectors.toList())));
|
followModels.setOnAction(e -> follow(recordings.stream().map(JavaFxRecording::getModel).collect(Collectors.toList())));
|
||||||
followModels.setDisable(!recordings.stream().map(r -> r.getModel()).allMatch(m -> m.getSite().supportsFollow() && m.getSite().credentialsAvailable()));
|
followModels.setDisable(!recordings.stream().map(JavaFxRecording::getModel).allMatch(m -> m.getSite().supportsFollow() && m.getSite().credentialsAvailable()));
|
||||||
contextMenu.getItems().add(followModels);
|
contextMenu.getItems().add(followModels);
|
||||||
|
|
||||||
MenuItem openDir = new MenuItem("Open directory");
|
MenuItem openDir = new MenuItem("Open directory");
|
||||||
|
@ -484,7 +450,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
try {
|
try {
|
||||||
target = File.createTempFile("cs_", ".jpg");
|
target = File.createTempFile("cs_", ".jpg");
|
||||||
target.deleteOnExit();
|
target.deleteOnExit();
|
||||||
FileDownload download = new FileDownload(CamrecApplication.httpClient, (p) -> {
|
FileDownload download = new FileDownload(CamrecApplication.httpClient, p -> {
|
||||||
if (p == 100) {
|
if (p == 100) {
|
||||||
DesktopIntegration.open(target);
|
DesktopIntegration.open(target);
|
||||||
}
|
}
|
||||||
|
@ -653,8 +619,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
} else {
|
} else {
|
||||||
String downloadFilename = config.getSettings().downloadFilename;
|
String downloadFilename = config.getSettings().downloadFilename;
|
||||||
String fileSuffix = config.getSettings().ffmpegFileSuffix;
|
String fileSuffix = config.getSettings().ffmpegFileSuffix;
|
||||||
String filename = new DownloadPostprocessor().fillInPlaceHolders(downloadFilename, recording, config) + '.' + fileSuffix;
|
return new DownloadPostprocessor().fillInPlaceHolders(downloadFilename, recording, config) + '.' + fileSuffix;
|
||||||
return filename;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -716,7 +681,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
AutosizeAlert autosizeAlert = new AutosizeAlert(AlertType.ERROR, getTabPane().getScene());
|
AutosizeAlert autosizeAlert = new AutosizeAlert(AlertType.ERROR, getTabPane().getScene());
|
||||||
autosizeAlert.setTitle(title);
|
autosizeAlert.setTitle(title);
|
||||||
autosizeAlert.setHeaderText(msg);
|
autosizeAlert.setHeaderText(msg);
|
||||||
StringBuilder contentText = new StringBuilder("On or more error(s) occured:");
|
StringBuilder contentText = new StringBuilder("On or more error(s) occurred:");
|
||||||
for (Exception exception : exceptions) {
|
for (Exception exception : exceptions) {
|
||||||
contentText.append("\n• ").append(exception.getLocalizedMessage());
|
contentText.append("\n• ").append(exception.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
|
@ -726,15 +691,12 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void play(Recording recording) {
|
private void play(Recording recording) {
|
||||||
new Thread() {
|
new Thread(() -> {
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
boolean started = Player.play(recording);
|
boolean started = Player.play(recording);
|
||||||
if (started && Config.getInstance().getSettings().showPlayerStarting) {
|
if (started && Config.getInstance().getSettings().showPlayerStarting) {
|
||||||
Platform.runLater(() -> Toast.makeText(getTabPane().getScene(), "Starting Player", 2000, 500, 500));
|
Platform.runLater(() -> Toast.makeText(getTabPane().getScene(), "Starting Player", 2000, 500, 500));
|
||||||
}
|
}
|
||||||
}
|
}).start();
|
||||||
}.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void delete(List<JavaFxRecording> recordings) {
|
private void delete(List<JavaFxRecording> recordings) {
|
||||||
|
@ -764,8 +726,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
try {
|
try {
|
||||||
List<Recording> deleted = new ArrayList<>();
|
List<Recording> deleted = new ArrayList<>();
|
||||||
List<Exception> exceptions = new ArrayList<>();
|
List<Exception> exceptions = new ArrayList<>();
|
||||||
for (Iterator<JavaFxRecording> iterator = recordings.iterator(); iterator.hasNext();) {
|
for (JavaFxRecording r : recordings) {
|
||||||
JavaFxRecording r = iterator.next();
|
|
||||||
if (r.getStatus() != FINISHED && r.getStatus() != FAILED && r.getStatus() != WAITING) {
|
if (r.getStatus() != FINISHED && r.getStatus() != FAILED && r.getStatus() != WAITING) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue