import org.json.JSONObject;
import be.nikiroo.fanfix.Instance;
+import be.nikiroo.fanfix.data.Chapter;
import be.nikiroo.fanfix.data.JsonIO;
import be.nikiroo.fanfix.data.MetaData;
+import be.nikiroo.fanfix.data.Paragraph;
+import be.nikiroo.fanfix.data.Paragraph.ParagraphType;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.utils.IOUtils;
import be.nikiroo.utils.Image;
import be.nikiroo.utils.Progress;
+import be.nikiroo.utils.Version;
/**
* This {@link BasicLibrary} will access a remote server to list the available
this.rw = false;
}
+ public Version getVersion() {
+ try {
+ InputStream in = post(WebLibraryUrls.VERSION_URL);
+ try {
+ return new Version(IOUtils.readSmallStream(in));
+ } finally {
+ in.close();
+ }
+ } catch (IOException e) {
+ }
+
+ return new Version();
+ }
+
@Override
public Status getStatus() {
try {
- download("/");
+ post(WebLibraryUrls.INDEX_URL).close();
} catch (IOException e) {
try {
- download("/style.css");
+ post("/style.css").close();
return Status.UNAUTHORIZED;
} catch (IOException ioe) {
- return Status.INVALID;
+ return Status.UNAVAILABLE;
}
}
@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("/story/" + luid + "/cover");
- if (in != null) {
+ InputStream in = post(WebLibraryUrls.getStoryUrlCover(luid));
+ try {
return new Image(in);
+ } finally {
+ in.close();
}
+ }
- return null;
+ @Override
+ public Image getCustomSourceCover(String source) throws IOException {
+ InputStream in = post(WebLibraryUrls.getCoverUrlSource(source));
+ try {
+ return new Image(in);
+ } finally {
+ in.close();
+ }
+ }
+
+ @Override
+ public Image getCustomAuthorCover(String author) throws IOException {
+ InputStream in = post(WebLibraryUrls.getCoverUrlAuthor(author));
+ try {
+ return new Image(in);
+ } 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<String, String> post = new HashMap<String, String>();
+ 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<String, String> post = new HashMap<String, String>();
+ post.put("luid", luid);
+ post(WebLibraryUrls.getCoverUrlAuthor(author), post).close();
+ }
+
+ @Override
+ public synchronized Story getStory(final String luid, Progress pg)
+ throws IOException {
+
+ // TODO: pg
+
+ Story story;
+ InputStream in = post(WebLibraryUrls.getStoryUrlJson(luid));
+ try {
+ JSONObject json = new JSONObject(IOUtils.readSmallStream(in));
+ story = JsonIO.toStory(json);
+ } finally {
+ in.close();
+ }
+
+ 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 = post(
+ WebLibraryUrls.getStoryUrl(luid, chapNum, number));
+ try {
+ para.setContentImage(new Image(subin));
+ } finally {
+ subin.close();
+ }
+ }
+
+ number++;
+ }
+
+ chapNum++;
+ }
+
+ return story;
}
@Override
protected List<MetaData> getMetas(Progress pg) throws IOException {
List<MetaData> metas = new ArrayList<MetaData>();
- InputStream in = download("/list/luids");
+ 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);
"Operation not supportorted on remote Libraries");
}
- // starts with "/"
- private InputStream download(String path) throws IOException {
+ // starts with "/", never NULL
+ private InputStream post(String path) throws IOException {
+ return post(path, null);
+ }
+
+ // starts with "/", never NULL
+ private InputStream post(String path, Map<String, String> post)
+ throws IOException {
URL url = new URL(host + ":" + port + path);
- Map<String, String> post = new HashMap<String, String>();
+ if (post == null) {
+ post = new HashMap<String, String>();
+ }
post.put("login", subkey);
post.put("password", key);