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;
}
action = new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
- Object rep = send(new Object[] { key, "PING" });
+ Object rep = send(new Object[] { md5, "PING" });
if ("PONG".equals(rep)) {
result[0] = Status.READY;
} else {
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) {
@Override
public synchronized Story save(final Story story, final String luid,
Progress pg) throws IOException {
- final Progress pgF = pg;
+ final String[] luidSaved = new String[1];
+ Progress pgSave = new Progress();
+ Progress pgRefresh = new Progress();
+ if (pg == null) {
+ pg = new Progress();
+ }
+
+ pg.setMinMax(0, 10);
+ pg.addProgress(pgSave, 9);
+ pg.addProgress(pgRefresh, 1);
+
+ final Progress pgF = pgSave;
new ConnectActionClientObject(host, port, true) {
@Override
public void action(Version serverVersion) throws Exception {
Progress pg = pgF;
- if (pg == null) {
- pg = new Progress();
- }
-
if (story.getMeta().getWords() <= Integer.MAX_VALUE) {
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) {
pg.add(1);
}
- send(null);
+ send(null); // done sending the story
+ luidSaved[0] = (String) send(null); // get LUID
+
pg.done();
}
// because the meta changed:
clearCache();
- story.setMeta(getInfo(luid));
+ refresh(pgRefresh);
+ story.setMeta(getInfo(luidSaved[0]));
+
+ pg.done();
return story;
}
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
"Operation not supportorted on remote Libraries");
}
+ /**
+ * Stop the server.
+ */
+ public void exit() {
+ try {
+ new ConnectActionClientObject(host, port, true) {
+ @Override
+ public void action(Version serverVersion) throws Exception {
+ send(new Object[] { md5, "EXIT" });
+ }
+
+ @Override
+ protected void onError(Exception e) {
+ Instance.getTraceHandler().error(e);
+ }
+ }.connect();
+ } catch (IOException e) {
+ Instance.getTraceHandler().error(e);
+ }
+ }
+
@Override
protected List<MetaData> getMetas(Progress pg) {
final Progress pgF = pg;
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)) {