forked from j62/ctbrec
Add display to show space left on device
This commit is contained in:
parent
8fdb24bad1
commit
5708d7f259
|
@ -8,6 +8,7 @@ import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
@ -47,13 +48,16 @@ import javafx.scene.Cursor;
|
||||||
import javafx.scene.control.Alert.AlertType;
|
import javafx.scene.control.Alert.AlertType;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
import javafx.scene.control.ContextMenu;
|
import javafx.scene.control.ContextMenu;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.MenuItem;
|
import javafx.scene.control.MenuItem;
|
||||||
|
import javafx.scene.control.ProgressBar;
|
||||||
import javafx.scene.control.ScrollPane;
|
import javafx.scene.control.ScrollPane;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TableCell;
|
import javafx.scene.control.TableCell;
|
||||||
import javafx.scene.control.TableColumn;
|
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.control.TableView;
|
||||||
|
import javafx.scene.control.Tooltip;
|
||||||
import javafx.scene.control.cell.PropertyValueFactory;
|
import javafx.scene.control.cell.PropertyValueFactory;
|
||||||
import javafx.scene.input.ContextMenuEvent;
|
import javafx.scene.input.ContextMenuEvent;
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
|
@ -62,6 +66,9 @@ import javafx.scene.input.MouseButton;
|
||||||
import javafx.scene.input.MouseEvent;
|
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.StackPane;
|
||||||
|
import javafx.scene.text.Font;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import javafx.util.Callback;
|
import javafx.util.Callback;
|
||||||
import javafx.util.Duration;
|
import javafx.util.Duration;
|
||||||
|
@ -74,12 +81,16 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
private Recorder recorder;
|
private Recorder recorder;
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private List<Site> sites;
|
private List<Site> sites;
|
||||||
|
private long spaceTotal = -1;
|
||||||
|
private long spaceFree = -1;
|
||||||
|
|
||||||
FlowPane grid = new FlowPane();
|
FlowPane grid = new FlowPane();
|
||||||
ScrollPane scrollPane = new ScrollPane();
|
ScrollPane scrollPane = new ScrollPane();
|
||||||
TableView<JavaFxRecording> table = new TableView<JavaFxRecording>();
|
TableView<JavaFxRecording> table = new TableView<JavaFxRecording>();
|
||||||
ObservableList<JavaFxRecording> observableRecordings = FXCollections.observableArrayList();
|
ObservableList<JavaFxRecording> observableRecordings = FXCollections.observableArrayList();
|
||||||
ContextMenu popup;
|
ContextMenu popup;
|
||||||
|
ProgressBar spaceLeft;
|
||||||
|
Label spaceLabel;
|
||||||
|
|
||||||
public RecordingsTab(String title, Recorder recorder, Config config, List<Site> sites) {
|
public RecordingsTab(String title, Recorder recorder, Config config, List<Site> sites) {
|
||||||
super(title);
|
super(title);
|
||||||
|
@ -179,8 +190,21 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
});
|
});
|
||||||
scrollPane.setContent(table);
|
scrollPane.setContent(table);
|
||||||
|
|
||||||
|
HBox spaceBox = new HBox(5);
|
||||||
|
Label l = new Label("Space left on device");
|
||||||
|
HBox.setMargin(l, new Insets(2, 0, 0, 0));
|
||||||
|
spaceBox.getChildren().add(l);
|
||||||
|
spaceLeft = new ProgressBar(0);
|
||||||
|
spaceLeft.setPrefSize(200, 22);
|
||||||
|
spaceLabel = new Label();
|
||||||
|
spaceLabel.setFont(Font.font(11));
|
||||||
|
StackPane stack = new StackPane(spaceLeft, spaceLabel);
|
||||||
|
spaceBox.getChildren().add(stack);
|
||||||
|
BorderPane.setMargin(spaceBox, new Insets(5));
|
||||||
|
|
||||||
BorderPane root = new BorderPane();
|
BorderPane root = new BorderPane();
|
||||||
root.setPadding(new Insets(5));
|
root.setPadding(new Insets(5));
|
||||||
|
root.setTop(spaceBox);
|
||||||
root.setCenter(scrollPane);
|
root.setCenter(scrollPane);
|
||||||
setContent(root);
|
setContent(root);
|
||||||
|
|
||||||
|
@ -191,6 +215,33 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
updateService = createUpdateService();
|
updateService = createUpdateService();
|
||||||
updateService.setPeriod(new Duration(TimeUnit.SECONDS.toMillis(2)));
|
updateService.setPeriod(new Duration(TimeUnit.SECONDS.toMillis(2)));
|
||||||
updateService.setOnSucceeded((event) -> {
|
updateService.setOnSucceeded((event) -> {
|
||||||
|
updateRecordingsTable();
|
||||||
|
updateFreeSpaceDisplay();
|
||||||
|
});
|
||||||
|
updateService.setOnFailed((event) -> {
|
||||||
|
LOG.info("Couldn't get list of recordings from recorder", event.getSource().getException());
|
||||||
|
AutosizeAlert autosizeAlert = new AutosizeAlert(AlertType.ERROR);
|
||||||
|
autosizeAlert.setTitle("Whoopsie!");
|
||||||
|
autosizeAlert.setHeaderText("Recordings not available");
|
||||||
|
autosizeAlert.setContentText("An error occured while retrieving the list of recordings");
|
||||||
|
autosizeAlert.showAndWait();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateFreeSpaceDisplay() {
|
||||||
|
if(spaceTotal != -1 && spaceFree != -1) {
|
||||||
|
double free = ((double)spaceFree) / spaceTotal;
|
||||||
|
spaceLeft.setProgress(free);
|
||||||
|
double totalGiB = ((double) spaceTotal) / 1024 / 1024 / 1024;
|
||||||
|
double freeGiB = ((double) spaceFree) / 1024 / 1024 / 1024;
|
||||||
|
DecimalFormat df = new DecimalFormat("0.00");
|
||||||
|
String tt = df.format(freeGiB) + " / " + df.format(totalGiB) + " GiB";
|
||||||
|
spaceLeft.setTooltip(new Tooltip(tt));
|
||||||
|
spaceLabel.setText(tt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateRecordingsTable() {
|
||||||
List<JavaFxRecording> recordings = updateService.getValue();
|
List<JavaFxRecording> recordings = updateService.getValue();
|
||||||
if (recordings == null) {
|
if (recordings == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -215,15 +266,6 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
table.sort();
|
table.sort();
|
||||||
});
|
|
||||||
updateService.setOnFailed((event) -> {
|
|
||||||
LOG.info("Couldn't get list of recordings from recorder", event.getSource().getException());
|
|
||||||
AutosizeAlert autosizeAlert = new AutosizeAlert(AlertType.ERROR);
|
|
||||||
autosizeAlert.setTitle("Whoopsie!");
|
|
||||||
autosizeAlert.setHeaderText("Recordings not available");
|
|
||||||
autosizeAlert.setContentText("An error occured while retrieving the list of recordings");
|
|
||||||
autosizeAlert.showAndWait();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ScheduledService<List<JavaFxRecording>> createUpdateService() {
|
private ScheduledService<List<JavaFxRecording>> createUpdateService() {
|
||||||
|
@ -233,12 +275,23 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
||||||
return new Task<List<JavaFxRecording>>() {
|
return new Task<List<JavaFxRecording>>() {
|
||||||
@Override
|
@Override
|
||||||
public List<JavaFxRecording> call() throws IOException, InvalidKeyException, NoSuchAlgorithmException, IllegalStateException {
|
public List<JavaFxRecording> call() throws IOException, InvalidKeyException, NoSuchAlgorithmException, IllegalStateException {
|
||||||
|
updateSpace();
|
||||||
|
|
||||||
List<JavaFxRecording> recordings = new ArrayList<>();
|
List<JavaFxRecording> recordings = new ArrayList<>();
|
||||||
for (Recording rec : recorder.getRecordings()) {
|
for (Recording rec : recorder.getRecordings()) {
|
||||||
recordings.add(new JavaFxRecording(rec));
|
recordings.add(new JavaFxRecording(rec));
|
||||||
}
|
}
|
||||||
return recordings;
|
return recordings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateSpace() {
|
||||||
|
try {
|
||||||
|
spaceTotal = recorder.getTotalSpaceBytes();
|
||||||
|
spaceFree = recorder.getFreeSpaceBytes();
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.error("Couldn't update free space", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue