X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FRemoteLibrary.java;h=83bb2124ecaaf9eb1bf66d92366670609c493610;hb=fce0a73f476f282ebc2031dcf1c99fae2850de65;hp=ce4305aadad96bfe9446817d467234545ccfce7a;hpb=e2c2060faf5e905039acc1d405f9d6bb810eedb1;p=nikiroo-utils.git
diff --git a/src/be/nikiroo/fanfix/library/RemoteLibrary.java b/src/be/nikiroo/fanfix/library/RemoteLibrary.java
index ce4305a..83bb212 100644
--- a/src/be/nikiroo/fanfix/library/RemoteLibrary.java
+++ b/src/be/nikiroo/fanfix/library/RemoteLibrary.java
@@ -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.
+ *
+ * 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) {
@@ -60,7 +62,7 @@ public class RemoteLibrary extends BasicLibrary {
* Create a {@link RemoteLibrary} linked to the given server.
*
* Note that the key is structured:
- * xxx(|yyy|wl)(|rw)
+ * xxx(|yyy(|wl)(|bl)(|rw)
*
* Note that anything before the first pipe (|) character is
* considered to be the encryption key, anything after that character is
@@ -75,16 +77,16 @@ public class RemoteLibrary extends BasicLibrary {
*
yyy: the secondary key
* rw: flag to allow read and write access if it is not the
* default on this server
- * wl: flag to allow access to all the stories (bypassing the
- * whitelist if it exists)
+ * bl: flag to bypass the blacklist (if it exists)
+ * wl: flag to bypass the whitelist if it exists
*
*
* Some examples:
*
* - my_key: normal connection, will take the default server
* options
- * - my_key|agzyzz|wl: will ask to bypass the white list (if it
- * exists)
+ * - my_key|agzyzz|wl|bl: will ask to bypass the black list and the
+ * white list (if it exists)
* - my_key|agzyzz|rw: will ask read-write access (if the default
* is read-only)
* - my_key|agzyzz|wl|rw: will ask both read-write access and white
@@ -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) {
@@ -354,7 +362,7 @@ public class RemoteLibrary extends BasicLibrary {
// Could work (more slowly) without it
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);
}
@@ -374,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)) {
@@ -426,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");
}
@@ -435,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 metas = getMetasList(luid, null);
if (!metas.isEmpty()) {
return metas.get(0);
@@ -521,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)) {
@@ -559,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;
}