X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FWebLibrary.java;h=978dd9af51c05e5b56f93c2d61948e34fcbcc968;hp=040acd07f1505acb49845d4ad153a3661dbae8b6;hb=acbec0d232186ddf5431b696ee74a791ae5e828f;hpb=089e354e5efc0de39caa4df2f3987d573b71dcbc diff --git a/src/be/nikiroo/fanfix/library/WebLibrary.java b/src/be/nikiroo/fanfix/library/WebLibrary.java index 040acd0..978dd9a 100644 --- a/src/be/nikiroo/fanfix/library/WebLibrary.java +++ b/src/be/nikiroo/fanfix/library/WebLibrary.java @@ -103,11 +103,15 @@ 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 = post(WebLibraryUrls.VERSION_URL); @@ -148,7 +152,12 @@ public class WebLibrary extends BasicLibrary { public Image getCover(String luid) throws IOException { 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(); } @@ -158,7 +167,12 @@ public class WebLibrary extends BasicLibrary { public Image getCustomSourceCover(String source) throws IOException { InputStream in = post(WebLibraryUrls.getCoverUrlSource(source)); try { - return new Image(in); + Image img = new Image(in); + if (img.getSize() > 0) { + return img; + } + + return null; } finally { in.close(); } @@ -168,7 +182,12 @@ public class WebLibrary extends BasicLibrary { public Image getCustomAuthorCover(String author) throws IOException { InputStream in = post(WebLibraryUrls.getCoverUrlAuthor(author)); try { - return new Image(in); + Image img = new Image(in); + if (img.getSize() > 0) { + return img; + } + + return null; } finally { in.close(); } @@ -191,8 +210,9 @@ public class WebLibrary extends BasicLibrary { @Override public synchronized Story getStory(final String luid, Progress pg) throws IOException { - - // TODO: pg + if (pg == null) { + pg = new Progress(); + } Story story; InputStream in = post(WebLibraryUrls.getStoryUrlJson(luid)); @@ -203,6 +223,12 @@ 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) { @@ -212,18 +238,23 @@ public class WebLibrary extends BasicLibrary { 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; } @@ -243,8 +274,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 @@ -254,8 +286,46 @@ 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))); + } 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 @@ -283,6 +353,11 @@ public class WebLibrary extends BasicLibrary { } } + @Override + public synchronized void delete(String luid) throws IOException { + post(WebLibraryUrls.getDeleteUrlStory(luid), null).close(); + } + @Override protected void updateInfo(MetaData meta) { // Will be taken care of directly server side @@ -296,7 +371,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"); }