124 lines
4.6 KiB
Java
124 lines
4.6 KiB
Java
package ctbrec.ui.tabs;
|
|
|
|
import ctbrec.Config;
|
|
import ctbrec.OS;
|
|
import ctbrec.docs.DocServer;
|
|
import ctbrec.ui.DesktopIntegration;
|
|
import javafx.application.Platform;
|
|
import javafx.geometry.Insets;
|
|
import javafx.geometry.Pos;
|
|
import javafx.scene.control.Button;
|
|
import javafx.scene.control.Tab;
|
|
import javafx.scene.control.Label;
|
|
import javafx.scene.layout.BorderPane;
|
|
import javafx.scene.layout.VBox;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
// import java.awt.Desktop;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
|
|
@Slf4j
|
|
public class HelpTab extends Tab {
|
|
|
|
private boolean serverStarted = false;
|
|
|
|
public HelpTab() {
|
|
setClosable(false);
|
|
setText("Help");
|
|
|
|
Button openHelp = new Button("Open Help");
|
|
Button openLog = new Button("Open Log File");
|
|
Button openCfg = new Button("Open config dir");
|
|
openHelp.setPadding(new Insets(20));
|
|
openLog.setPadding(new Insets(20));
|
|
openCfg.setPadding(new Insets(20));
|
|
Label logFilePathLabel = new Label("Log file: " + new File("ctbrec.log").getAbsolutePath());
|
|
File cfgDir = Config.getInstance().getConfigDir();
|
|
String path = (cfgDir != null) ? cfgDir.getAbsolutePath() : "Unknown";
|
|
Label configPathLabel = new Label("Config dir: " + path);
|
|
|
|
VBox vbox = new VBox();
|
|
vbox.setAlignment(Pos.CENTER); // Center align the buttons
|
|
vbox.setSpacing(20); // Set a 20 pixel gap between the buttons
|
|
vbox.getChildren().addAll(openHelp, openCfg, configPathLabel, openLog, logFilePathLabel);
|
|
|
|
BorderPane layout = new BorderPane();
|
|
|
|
// Add the VBox to the center region of the BorderPane
|
|
layout.setCenter(vbox);
|
|
|
|
setContent(layout);
|
|
|
|
openHelp.setOnAction(e -> {
|
|
if (!serverStarted) {
|
|
startDocumentationServer();
|
|
} else {
|
|
openDocumentationPage();
|
|
}
|
|
});
|
|
|
|
openLog.setOnAction(e -> {
|
|
File logFile = new File("ctbrec.log");
|
|
if (logFile.exists()) {
|
|
try {
|
|
// Use Runtime.getRuntime().exec() to open the file in a separate process
|
|
String osName = System.getProperty("os.name").toLowerCase();
|
|
ProcessBuilder pb = null;
|
|
if (osName.contains("mac")) {
|
|
pb = new ProcessBuilder("open", logFile.getAbsolutePath());
|
|
} else if (osName.contains("win")) {
|
|
pb = new ProcessBuilder("explorer.exe", logFile.getAbsolutePath());
|
|
} else { // Assume it's a Unix/Linux system
|
|
pb = new ProcessBuilder("xdg-open", logFile.getAbsolutePath());
|
|
}
|
|
pb.start();
|
|
} catch (IOException ex) {
|
|
log.error("Couldn't open log file", ex);
|
|
}
|
|
} else {
|
|
log.warn("Log file doesn't exist: {}", logFile.getAbsolutePath());
|
|
}
|
|
});
|
|
|
|
openCfg.setOnAction(e -> {
|
|
File configDir = Config.getInstance().getConfigDir();
|
|
if (configDir.exists()) {
|
|
try {
|
|
// Use Runtime.getRuntime().exec() to open the file in a separate process
|
|
String osName = System.getProperty("os.name").toLowerCase();
|
|
ProcessBuilder pb = null;
|
|
if (osName.contains("mac")) {
|
|
pb = new ProcessBuilder("open", configDir.getAbsolutePath());
|
|
} else if (osName.contains("win")) {
|
|
pb = new ProcessBuilder("explorer.exe", configDir.getAbsolutePath());
|
|
} else { // Assume it's a Unix/Linux system
|
|
pb = new ProcessBuilder("xdg-open", configDir.getAbsolutePath());
|
|
}
|
|
pb.start();
|
|
} catch (IOException ex) {
|
|
log.error("Couldn't open config dir", ex);
|
|
}
|
|
} else {
|
|
log.warn("Config dir doesn't exist: {}", configDir.getAbsolutePath());
|
|
}
|
|
});
|
|
}
|
|
|
|
private void startDocumentationServer() {
|
|
new Thread(() -> {
|
|
try {
|
|
DocServer.start(() -> Platform.runLater(() -> {
|
|
serverStarted = true;
|
|
openDocumentationPage();
|
|
}));
|
|
} catch (Exception ex) {
|
|
log.error("Couldn't start documentation server", ex);
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
private void openDocumentationPage() {
|
|
DesktopIntegration.open("http://localhost:5689/docs/index.md");
|
|
}
|
|
} |