New web library (http/https)
[nikiroo-utils.git] / src / be / nikiroo / fanfix / library / RemoteLibrary.java
index a6c68546882c0cdd64bda6c7592976d228bdfb4d..9fa8c66190174bd1a92536b995d181a16bc8744a 100644 (file)
@@ -21,6 +21,8 @@ import be.nikiroo.utils.serial.server.ConnectActionClientObject;
  * This {@link BasicLibrary} will access a remote server to list the available
  * stories, and download the ones you try to load to the local directory
  * specified in the configuration.
+ * <p>
+ * This remote library uses a custom fanfix:// protocol.
  * 
  * @author niki
  */
@@ -35,8 +37,8 @@ public class RemoteLibrary extends BasicLibrary {
                }
 
                @Override
-               public Object send(Object data) throws IOException,
-                               NoSuchFieldException, NoSuchMethodException,
+               public Object send(Object data)
+                               throws IOException, NoSuchFieldException, NoSuchMethodException,
                                ClassNotFoundException {
                        Object rep = super.send(data);
                        if (rep instanceof RemoteLibraryException) {
@@ -78,7 +80,7 @@ public class RemoteLibrary extends BasicLibrary {
         * <li><b>wl</b>: flag to allow access to all the stories (bypassing the
         * whitelist if it exists)</li>
         * </ul>
-        * 
+        * <p>
         * Some examples:
         * <ul>
         * <li><b>my_key</b>: normal connection, will take the default server
@@ -113,20 +115,26 @@ public class RemoteLibrary extends BasicLibrary {
                        this.subkey = "";
                }
 
+               if (host.startsWith("fanfix://")) {
+                       host = host.substring("fanfix://".length());
+               }
+
                this.host = host;
                this.port = port;
        }
 
        @Override
        public String getLibraryName() {
-               return (rw ? "[READ-ONLY] " : "") + host + ":" + port;
+               return (rw ? "[READ-ONLY] " : "") + "fanfix://" + host + ":" + port;
        }
 
        @Override
        public Status getStatus() {
-               Instance.getTraceHandler().trace("Getting remote lib status...");
+               Instance.getInstance().getTraceHandler()
+                               .trace("Getting remote lib status...");
                Status status = getStatusDo();
-               Instance.getTraceHandler().trace("Remote lib status: " + status);
+               Instance.getInstance().getTraceHandler()
+                               .trace("Remote lib status: " + status);
                return status;
        }
 
@@ -180,8 +188,8 @@ public class RemoteLibrary extends BasicLibrary {
                        @Override
                        public void action(ConnectActionClientObject action)
                                        throws Exception {
-                               Object rep = action.send(new Object[] { subkey, "GET_COVER",
-                                               luid });
+                               Object rep = action
+                                               .send(new Object[] { subkey, "GET_COVER", luid });
                                result[0] = (Image) rep;
                        }
                });
@@ -232,8 +240,8 @@ public class RemoteLibrary extends BasicLibrary {
                                        pg = new Progress();
                                }
 
-                               Object rep = action.send(new Object[] { subkey, "GET_STORY",
-                                               luid });
+                               Object rep = action
+                                               .send(new Object[] { subkey, "GET_STORY", luid });
 
                                MetaData meta = null;
                                if (rep instanceof MetaData) {
@@ -352,8 +360,9 @@ public class RemoteLibrary extends BasicLibrary {
 
        @Override
        // Could work (more slowly) without it
-       public Story imprt(final URL url, Progress pg) throws IOException {
+       public MetaData imprt(final URL url, Progress pg) throws IOException {
                // Import the file locally if it is actually a file
+
                if (url == null || url.getProtocol().equalsIgnoreCase("file")) {
                        return super.imprt(url, pg);
                }
@@ -364,13 +373,7 @@ public class RemoteLibrary extends BasicLibrary {
                        pg = new Progress();
                }
 
-               pg.setMinMax(0, 2);
-               Progress pgImprt = new Progress();
-               Progress pgGet = new Progress();
-               pg.addProgress(pgImprt, 1);
-               pg.addProgress(pgGet, 1);
-
-               final Progress pgF = pgImprt;
+               final Progress pgF = pg;
                final String[] luid = new String[1];
 
                connectRemoteAction(new RemoteAction() {
@@ -379,8 +382,8 @@ public class RemoteLibrary extends BasicLibrary {
                                        throws Exception {
                                Progress pg = pgF;
 
-                               Object rep = action.send(new Object[] { subkey, "IMPORT",
-                                               url.toString() });
+                               Object rep = action.send(
+                                               new Object[] { subkey, "IMPORT", url.toString() });
 
                                while (true) {
                                        if (!RemoteLibraryServer.updateProgress(pg, rep)) {
@@ -399,11 +402,8 @@ public class RemoteLibrary extends BasicLibrary {
                        throw new IOException("Remote failure");
                }
 
-               Story story = getStory(luid[0], pgGet);
-               pgGet.done();
-
                pg.done();
-               return story;
+               return getInfo(luid[0]);
        }
 
        @Override
@@ -434,7 +434,7 @@ public class RemoteLibrary extends BasicLibrary {
        }
 
        @Override
-       public synchronized File getFile(final String luid, Progress pg) {
+       public File getFile(final String luid, Progress pg) {
                throw new java.lang.InternalError(
                                "Operation not supportorted on remote Libraries");
        }
@@ -443,20 +443,23 @@ public class RemoteLibrary extends BasicLibrary {
         * Stop the server.
         * 
         * @throws IOException
-        *             in case of I/O error (including bad key)
+        *             in case of I/O errors
+        * @throws SSLException
+        *             when the key was not accepted
         */
-       public void exit() throws IOException {
+       public void exit() throws IOException, SSLException {
                connectRemoteAction(new RemoteAction() {
                        @Override
                        public void action(ConnectActionClientObject action)
                                        throws Exception {
                                action.send(new Object[] { subkey, "EXIT" });
+                               Thread.sleep(100);
                        }
                });
        }
 
        @Override
-       public synchronized MetaData getInfo(String luid) throws IOException {
+       public MetaData getInfo(String luid) throws IOException {
                List<MetaData> metas = getMetasList(luid, null);
                if (!metas.isEmpty()) {
                        return metas.get(0);
@@ -529,8 +532,8 @@ public class RemoteLibrary extends BasicLibrary {
                                        pg = new Progress();
                                }
 
-                               Object rep = action.send(new Object[] { subkey, "GET_METADATA",
-                                               luid });
+                               Object rep = action
+                                               .send(new Object[] { subkey, "GET_METADATA", luid });
 
                                while (true) {
                                        if (!RemoteLibraryServer.updateProgress(pg, rep)) {
@@ -567,7 +570,7 @@ public class RemoteLibrary extends BasicLibrary {
                                @Override
                                protected void onError(Exception e) {
                                        if (!(e instanceof IOException)) {
-                                               Instance.getTraceHandler().error(e);
+                                               Instance.getInstance().getTraceHandler().error(e);
                                                return;
                                        }