import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.utils.Progress;
+import be.nikiroo.utils.StringUtils;
import be.nikiroo.utils.Version;
import be.nikiroo.utils.serial.server.ConnectActionClientObject;
public class RemoteLibrary extends BasicLibrary {
private String host;
private int port;
- private final String key;
+ private final String md5;
/**
* Create a {@link RemoteLibrary} linked to the given server.
* the port to contact it on
*/
public RemoteLibrary(String key, String host, int port) {
- this.key = key;
+ this.md5 = StringUtils.getMd5Hash(key);
this.host = host;
this.port = port;
}
return host + ":" + port;
}
+ @Override
+ public Status getStatus() {
+ final Status[] result = new Status[1];
+
+ result[0] = Status.INVALID;
+
+ ConnectActionClientObject action = null;
+ try {
+ action = new ConnectActionClientObject(host, port, true) {
+ @Override
+ public void action(Version serverVersion) throws Exception {
+ Object rep = send(new Object[] { md5, "PING" });
+ if ("PONG".equals(rep)) {
+ result[0] = Status.READY;
+ } else {
+ result[0] = Status.UNAUTORIZED;
+ }
+ }
+
+ @Override
+ protected void onError(Exception e) {
+ result[0] = Status.UNAVAILABLE;
+ }
+ };
+
+ } catch (UnknownHostException e) {
+ result[0] = Status.INVALID;
+ } catch (IllegalArgumentException e) {
+ result[0] = Status.INVALID;
+ } catch (Exception e) {
+ result[0] = Status.UNAVAILABLE;
+ }
+
+ if (action != null) {
+ try {
+ action.connect();
+ } catch (Exception e) {
+ result[0] = Status.UNAVAILABLE;
+ }
+ }
+
+ return result[0];
+ }
+
@Override
public BufferedImage getCover(final String luid) {
final BufferedImage[] result = new BufferedImage[1];
new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
- Object rep = send(new Object[] { key, "GET_COVER", luid });
+ Object rep = send(new Object[] { md5, "GET_COVER", luid });
result[0] = (BufferedImage) rep;
}
new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
- Object rep = send(new Object[] { key, "GET_SOURCE_COVER",
+ Object rep = send(new Object[] { md5, "GET_SOURCE_COVER",
source });
result[0] = (BufferedImage) rep;
}
pg = new Progress();
}
- Object rep = send(new Object[] { key, "GET_STORY", luid });
+ Object rep = send(new Object[] { md5, "GET_STORY", luid });
MetaData meta = null;
if (rep instanceof MetaData) {
pg.setMinMax(0, (int) story.getMeta().getWords());
}
- send(new Object[] { key, "SAVE_STORY", luid });
+ send(new Object[] { md5, "SAVE_STORY", luid });
List<Object> list = RemoteLibraryServer.breakStory(story);
for (Object obj : list) {
new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
- send(new Object[] { key, "DELETE_STORY", luid });
+ send(new Object[] { md5, "DELETE_STORY", luid });
}
@Override
new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
- send(new Object[] { key, "SET_SOURCE_COVER", source, luid });
+ send(new Object[] { md5, "SET_SOURCE_COVER", source, luid });
}
@Override
}
/**
- * Check if this {@link RemoteLibraryServer} is able to connect and identify
- * to the remote server.
- *
- * @return TRUE if it is online
+ * Stop the server.
*/
- public boolean isOnline() {
- final Boolean[] result = new Boolean[1];
-
- result[0] = false;
+ public void exit() {
try {
new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
- Object rep = send(new Object[] { key, "PING" });
- result[0] = "PONG".equals(rep);
+ send(new Object[] { md5, "EXIT" });
}
@Override
Instance.getTraceHandler().error(e);
}
}.connect();
- } catch (Exception e) {
+ } catch (IOException e) {
Instance.getTraceHandler().error(e);
}
-
- return result[0];
}
@Override
pg = new Progress();
}
- Object rep = send(new Object[] { key, "GET_METADATA", "*" });
+ Object rep = send(new Object[] { md5, "GET_METADATA", "*" });
while (true) {
if (!RemoteLibraryServer.updateProgress(pg, rep)) {