X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FWebLibrary.java;h=7566877cebd48343b47c1764ed31045ee8de78dd;hb=bf9c483d826523d68ab6b2dfc9e77b515813c09c;hp=1178e40c578b3bb2f2df46b3994de2b0770cc1ed;hpb=5ee0fc14dbffa8d11b914537d957ef892ba20ef9;p=fanfix.git
diff --git a/src/be/nikiroo/fanfix/library/WebLibrary.java b/src/be/nikiroo/fanfix/library/WebLibrary.java
index 1178e40..7566877 100644
--- a/src/be/nikiroo/fanfix/library/WebLibrary.java
+++ b/src/be/nikiroo/fanfix/library/WebLibrary.java
@@ -103,14 +103,18 @@ public class WebLibrary extends BasicLibrary {
this.host = host;
this.port = port;
-
- // TODO: not supported yet
- this.rw = false;
}
+ /**
+ * Return the version of the program running server-side.
+ *
+ * Never returns NULL.
+ *
+ * @return the version or an empty {@link Version} if not known
+ */
public Version getVersion() {
try {
- InputStream in = download(WebLibraryUrls.VERSION_URL);
+ InputStream in = post(WebLibraryUrls.VERSION_URL);
try {
return new Version(IOUtils.readSmallStream(in));
} finally {
@@ -119,16 +123,26 @@ public class WebLibrary extends BasicLibrary {
} catch (IOException e) {
}
- return null;
+ return new Version();
+ }
+
+ /**
+ * Stop the server.
+ *
+ * @throws IOException
+ * in case of I/O errors
+ */
+ public void stop() throws IOException {
+ post(WebLibraryUrls.EXIT_URL, null).close();
}
@Override
public Status getStatus() {
try {
- download(WebLibraryUrls.INDEX_URL).close();
+ post(WebLibraryUrls.INDEX_URL).close();
} catch (IOException e) {
try {
- download(WebLibraryUrls.VERSION_URL).close();
+ post("/style.css").close();
return Status.UNAUTHORIZED;
} catch (IOException ioe) {
return Status.UNAVAILABLE;
@@ -140,51 +154,78 @@ public class WebLibrary extends BasicLibrary {
@Override
public String getLibraryName() {
- return (rw ? "[READ-ONLY] " : "") + host + ":" + port;
+ return (rw ? "[READ-ONLY] " : "") + host + ":" + port + " ("
+ + getVersion() + ")";
}
@Override
public Image getCover(String luid) throws IOException {
- InputStream in = download(WebLibraryUrls.getStoryUrlCover(luid));
+ InputStream in = post(WebLibraryUrls.getStoryUrlCover(luid));
try {
- return new Image(in);
+ Image img = new Image(in);
+ if (img.getSize() > 0) {
+ return img;
+ }
+
+ return null;
} finally {
in.close();
}
}
@Override
- public Image getCustomSourceCover(final String source) throws IOException {
- // TODO maybe global system in BasicLib ?
- return null;
+ public Image getCustomSourceCover(String source) throws IOException {
+ InputStream in = post(WebLibraryUrls.getCoverUrlSource(source));
+ try {
+ Image img = new Image(in);
+ if (img.getSize() > 0) {
+ return img;
+ }
+
+ return null;
+ } finally {
+ in.close();
+ }
}
@Override
- public Image getCustomAuthorCover(final String author) throws IOException {
- // TODO maybe global system in BasicLib ?
- return null;
+ public Image getCustomAuthorCover(String author) throws IOException {
+ InputStream in = post(WebLibraryUrls.getCoverUrlAuthor(author));
+ try {
+ Image img = new Image(in);
+ if (img.getSize() > 0) {
+ return img;
+ }
+
+ return null;
+ } finally {
+ in.close();
+ }
}
@Override
public void setSourceCover(String source, String luid) throws IOException {
- // TODO Auto-generated method stub
- throw new IOException("Not implemented yet");
+ Map post = new HashMap();
+ post.put("luid", luid);
+ post(WebLibraryUrls.getCoverUrlSource(source), post).close();
}
@Override
public void setAuthorCover(String author, String luid) throws IOException {
- // TODO Auto-generated method stub
- throw new IOException("Not implemented yet");
+ Map post = new HashMap();
+ post.put("luid", luid);
+ post(WebLibraryUrls.getCoverUrlAuthor(author), post).close();
}
@Override
public synchronized Story getStory(final String luid, Progress pg)
throws IOException {
-
- // TODO: pg
+ if (pg == null) {
+ pg = new Progress();
+ }
Story story;
- InputStream in = download(WebLibraryUrls.getStoryUrlJson(luid));
+ InputStream in = post(WebLibraryUrls.getStoryUrlJson(luid));
try {
JSONObject json = new JSONObject(IOUtils.readSmallStream(in));
story = JsonIO.toStory(json);
@@ -192,34 +233,45 @@ public class WebLibrary extends BasicLibrary {
in.close();
}
+ int max = 0;
+ for (Chapter chap : story) {
+ max += chap.getParagraphs().size();
+ }
+ pg.setMinMax(0, max);
+
story.getMeta().setCover(getCover(luid));
int chapNum = 1;
for (Chapter chap : story) {
int number = 1;
for (Paragraph para : chap) {
if (para.getType() == ParagraphType.IMAGE) {
- InputStream subin = download(
+ InputStream subin = post(
WebLibraryUrls.getStoryUrl(luid, chapNum, number));
try {
- para.setContentImage(new Image(subin));
+ Image img = new Image(subin);
+ if (img.getSize() > 0) {
+ para.setContentImage(img);
+ }
} finally {
subin.close();
}
}
+ pg.add(1);
number++;
}
chapNum++;
}
+ pg.done();
return story;
}
@Override
protected List getMetas(Progress pg) throws IOException {
List metas = new ArrayList();
- InputStream in = download(WebLibraryUrls.LIST_URL_METADATA);
+ InputStream in = post(WebLibraryUrls.LIST_URL_METADATA);
JSONArray jsonArr = new JSONArray(IOUtils.readSmallStream(in));
for (int i = 0; i < jsonArr.length(); i++) {
JSONObject json = jsonArr.getJSONObject(i);
@@ -232,8 +284,9 @@ public class WebLibrary extends BasicLibrary {
@Override
// Could work (more slowly) without it
public MetaData imprt(final URL url, Progress pg) throws IOException {
- if (true)
- throw new IOException("Not implemented yet");
+ if (pg == null) {
+ pg = new Progress();
+ }
// Import the file locally if it is actually a file
@@ -243,8 +296,49 @@ public class WebLibrary extends BasicLibrary {
// Import it remotely if it is an URL
- // TODO
- return super.imprt(url, pg);
+ try {
+ String luid = null;
+
+ Map post = new HashMap();
+ post.put("url", url.toString());
+ InputStream in = post(WebLibraryUrls.IMPRT_URL_IMPORT, post);
+ try {
+ luid = IOUtils.readSmallStream(in);
+ } finally {
+ in.close();
+ }
+
+ Progress subPg = null;
+ do {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ }
+
+ in = post(WebLibraryUrls.getImprtProgressUrl(luid));
+ try {
+ subPg = JsonIO.toProgress(
+ new JSONObject(IOUtils.readSmallStream(in)));
+ pg.setName(subPg.getName());
+ pg.setMinMax(subPg.getMin(), subPg.getMax());
+ pg.setProgress(subPg.getProgress());
+ } catch (Exception e) {
+ subPg = null;
+ } finally {
+ in.close();
+ }
+ } while (subPg != null);
+
+ in = post(WebLibraryUrls.getStoryUrlMetadata(luid));
+ try {
+ return JsonIO.toMetaData(
+ new JSONObject(IOUtils.readSmallStream(in)));
+ } finally {
+ in.close();
+ }
+ } finally {
+ pg.done();
+ }
}
@Override
@@ -252,8 +346,29 @@ public class WebLibrary extends BasicLibrary {
protected synchronized void changeSTA(final String luid,
final String newSource, final String newTitle,
final String newAuthor, Progress pg) throws IOException {
- // TODO
- super.changeSTA(luid, newSource, newTitle, newAuthor, pg);
+ MetaData meta = getInfo(luid);
+ if (meta != null) {
+ if (!meta.getSource().equals(newSource)) {
+ Map post = new HashMap();
+ post.put("value", newSource);
+ post(WebLibraryUrls.getStoryUrlSource(luid), post).close();
+ }
+ if (!meta.getTitle().equals(newTitle)) {
+ Map post = new HashMap();
+ post.put("value", newTitle);
+ post(WebLibraryUrls.getStoryUrlTitle(luid), post).close();
+ }
+ if (!meta.getAuthor().equals(newAuthor)) {
+ Map post = new HashMap();
+ post.put("value", newAuthor);
+ post(WebLibraryUrls.getStoryUrlAuthor(luid), post).close();
+ }
+ }
+ }
+
+ @Override
+ public synchronized void delete(String luid) throws IOException {
+ post(WebLibraryUrls.getDeleteUrlStory(luid), null).close();
}
@Override
@@ -269,7 +384,7 @@ public class WebLibrary extends BasicLibrary {
// The following methods are only used by Save and Delete in BasicLibrary:
@Override
- protected int getNextId() {
+ protected String getNextId() {
throw new java.lang.InternalError("Should not have been called");
}
@@ -292,10 +407,18 @@ public class WebLibrary extends BasicLibrary {
}
// starts with "/", never NULL
- private InputStream download(String path) throws IOException {
+ private InputStream post(String path) throws IOException {
+ return post(path, null);
+ }
+
+ // starts with "/", never NULL
+ private InputStream post(String path, Map post)
+ throws IOException {
URL url = new URL(host + ":" + port + path);
- Map post = new HashMap();
+ if (post == null) {
+ post = new HashMap();
+ }
post.put("login", subkey);
post.put("password", key);