forked from j62/ctbrec
1
0
Fork 0

Add lifecycle listener to Help server to open the browser once the server is ready

This commit is contained in:
0xb00bface 2023-11-12 15:30:23 +01:00
parent 6b1d8eedec
commit 41ffd75d48
2 changed files with 43 additions and 17 deletions

View File

@ -4,17 +4,17 @@ import ctbrec.servlet.AbstractDocServlet;
import ctbrec.servlet.MarkdownServlet; import ctbrec.servlet.MarkdownServlet;
import ctbrec.servlet.SearchServlet; import ctbrec.servlet.SearchServlet;
import ctbrec.servlet.StaticFileServlet; import ctbrec.servlet.StaticFileServlet;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.jetty.server.*; import org.eclipse.jetty.server.*;
import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.servlet.ServletHolder;
import org.slf4j.Logger; import org.eclipse.jetty.util.component.LifeCycle;
import org.slf4j.LoggerFactory;
import java.net.BindException; import java.net.BindException;
@Slf4j
public class DocServer { public class DocServer {
private static final Logger LOG = LoggerFactory.getLogger(DocServer.class);
private static volatile boolean started = false; private static volatile boolean started = false;
@ -22,7 +22,15 @@ public class DocServer {
} }
public static synchronized void start() throws Exception { public static synchronized void start() throws Exception {
start(() -> {
});
}
public static synchronized void start(Runnable callback) throws Exception {
log.info("DocServer.start");
if (started) { if (started) {
log.info("if started");
callback.run();
return; return;
} }
@ -53,12 +61,18 @@ public class DocServer {
holder = new ServletHolder(staticFileServlet); holder = new ServletHolder(staticFileServlet);
handler.addServletWithMapping(holder, "/static/*"); handler.addServletWithMapping(holder, "/static/*");
server.addLifeCycleListener(new LifeCycle.Listener() {
@Override
public void lifeCycleStarted(LifeCycle event) {
callback.run();
}
});
try { try {
server.start(); server.start();
server.join(); server.join();
} catch (BindException e) { } catch (BindException e) {
LOG.error("Port {} is already in use", http.getPort(), e); log.error("Port {} is already in use", http.getPort(), e);
} }
} }
} }

View File

@ -1,19 +1,19 @@
package ctbrec.ui.tabs; package ctbrec.ui.tabs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.docs.DocServer; import ctbrec.docs.DocServer;
import ctbrec.ui.DesktopIntegration; import ctbrec.ui.DesktopIntegration;
import javafx.application.Platform;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j
public class HelpTab extends Tab { public class HelpTab extends Tab {
private static final Logger LOG = LoggerFactory.getLogger(HelpTab.class);
public HelpTab() { public HelpTab() {
setClosable(true); setClosable(true);
setText("Help"); setText("Help");
@ -23,15 +23,27 @@ public class HelpTab extends Tab {
var layout = new BorderPane(openHelp); var layout = new BorderPane(openHelp);
BorderPane.setMargin(openHelp, new Insets(20)); BorderPane.setMargin(openHelp, new Insets(20));
setContent(layout); setContent(layout);
AtomicBoolean started = new AtomicBoolean(false);
openHelp.setOnAction(e -> { openHelp.setOnAction(e -> {
new Thread(() -> { synchronized (started) {
try { if (!started.get()) {
DocServer.start(); new Thread(() -> {
} catch (Exception ex) { try {
LOG.error("Couldn't start documentation server", ex); DocServer.start(() ->
Platform.runLater(() -> {
started.set(true);
DesktopIntegration.open("http://localhost:5689/docs/index.md");
})
);
} catch (Exception ex) {
log.error("Couldn't start documentation server", ex);
}
}).start();
} else {
DesktopIntegration.open("http://localhost:5689/docs/index.md");
}
}
} }
}).start(); );
DesktopIntegration.open("http://localhost:5689/docs/index.md");
});
} }
} }