import be.nikiroo.utils.NanoHTTPD.Response;
import be.nikiroo.utils.NanoHTTPD.Response.Status;
import be.nikiroo.utils.Progress;
-import be.nikiroo.utils.Progress.ProgressListener;
public class WebLibraryServer extends WebLibraryServerHtml {
class WLoginResult extends LoginResult {
private Map<String, Progress> imprts = new HashMap<String, Progress>();
+ private boolean exiting;
+
public WebLibraryServer(boolean secure) throws IOException {
super(secure);
new Thread(this).start();
}
+ @Override
+ protected Response stop(WLoginResult login) {
+ if (!login.isRw()) {
+ return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
+ NanoHTTPD.MIME_PLAINTEXT, "Exit not allowed");
+ }
+
+ if (exiting) {
+ return NanoHTTPD.newFixedLengthResponse(Status.SERVICE_UNAVAILABLE,
+ NanoHTTPD.MIME_PLAINTEXT, "Server is already exiting...");
+ }
+
+ exiting = true;
+ Instance.getInstance().getTraceHandler().trace("Exiting");
+
+ boolean ok;
+ do {
+ synchronized (imprts) {
+ ok = imprts.isEmpty();
+ }
+ if (!ok) {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ Instance.getInstance().getTraceHandler()
+ .trace("Waiting to exit...");
+ }
+ }
+ } while (!ok);
+
+ doStop();
+
+ return NanoHTTPD.newFixedLengthResponse(Status.OK,
+ NanoHTTPD.MIME_PLAINTEXT, "Exited");
+ }
+
@Override
protected WLoginResult login(boolean badLogin, boolean badCookie) {
return new WLoginResult(false, false);
return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
NanoHTTPD.MIME_PLAINTEXT, "SET story part not allowed");
}
+
+ if (exiting) {
+ return NanoHTTPD.newFixedLengthResponse(Status.SERVICE_UNAVAILABLE,
+ NanoHTTPD.MIME_PLAINTEXT, "Server is exiting...");
+ }
String luid = uriParts[off + 0];
String type = uriParts[off + 1];
return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
NanoHTTPD.MIME_PLAINTEXT, "Cover request not allowed");
}
+
+ if (exiting) {
+ return NanoHTTPD.newFixedLengthResponse(Status.SERVICE_UNAVAILABLE,
+ NanoHTTPD.MIME_PLAINTEXT, "Server is exiting...");
+ }
String type = uriParts[off + 0];
String id = uriParts[off + 1];
return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
NanoHTTPD.MIME_PLAINTEXT, "Import not allowed");
}
+
+ if (exiting) {
+ return NanoHTTPD.newFixedLengthResponse(Status.SERVICE_UNAVAILABLE,
+ NanoHTTPD.MIME_PLAINTEXT, "Server is exiting...");
+ }
final URL url = new URL(urlStr);
final Progress pg = new Progress();
final String luid = lib.getNextId();
- // Keep the latest name
- pg.addProgressListener(new ProgressListener() {
- @Override
- public void progress(Progress progress, String name) {
- pg.setName(name);
- }
- });
-
synchronized (imprts) {
imprts.put(luid, pg);
}
return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
NanoHTTPD.MIME_PLAINTEXT, "Delete not allowed");
}
+
+ if (exiting) {
+ return NanoHTTPD.newFixedLengthResponse(Status.SERVICE_UNAVAILABLE,
+ NanoHTTPD.MIME_PLAINTEXT, "Server is exiting...");
+ }
String luid = uriParts[off + 0];