public Version getVersion() {
try {
- InputStream in = download(WebLibraryUrls.VERSION_URL);
+ InputStream in = post(WebLibraryUrls.VERSION_URL);
try {
return new Version(IOUtils.readSmallStream(in));
} finally {
@Override
public Status getStatus() {
try {
- download(WebLibraryUrls.INDEX_URL).close();
+ post(WebLibraryUrls.INDEX_URL).close();
} catch (IOException e) {
try {
- download("/style.css").close();
+ post("/style.css").close();
return Status.UNAUTHORIZED;
} catch (IOException ioe) {
return Status.UNAVAILABLE;
@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);
} finally {
@Override
public Image getCustomSourceCover(String source) throws IOException {
- InputStream in = download(WebLibraryUrls.getCoverUrlSource(source));
+ InputStream in = post(WebLibraryUrls.getCoverUrlSource(source));
try {
return new Image(in);
} finally {
@Override
public Image getCustomAuthorCover(String author) throws IOException {
- InputStream in = download(WebLibraryUrls.getCoverUrlAuthor(author));
+ InputStream in = post(WebLibraryUrls.getCoverUrlAuthor(author));
try {
return new Image(in);
} finally {
@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
// TODO: pg
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);
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));
@Override
protected List<MetaData> getMetas(Progress pg) throws IOException {
List<MetaData> metas = new ArrayList<MetaData>();
- 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);
}
// 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<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);
InputStream in = null;
- if ("cover".equals(type)) {
+ if ("story".equals(type)) {
Image img = storyCover(id, login);
if (img != null) {
in = img.newInputStream();
}
- } else if ("author".equals(type)) {
- Image img = authorCover(id, login);
+ } else if ("source".equals(type)) {
+ Image img = sourceCover(id, login);
if (img != null) {
in = img.newInputStream();
}
- } else if ("source".equals(type)) {
- Image img = sourceCover(id, login);
+ } else if ("author".equals(type)) {
+ Image img = authorCover(id, login);
if (img != null) {
in = img.newInputStream();
}
} else {
return NanoHTTPD.newFixedLengthResponse(Status.BAD_REQUEST,
- NanoHTTPD.MIME_PLAINTEXT, "Invalid cover type: " + type);
+ NanoHTTPD.MIME_PLAINTEXT,
+ "Invalid GET cover type: " + type);
}
// TODO: get correct image type
return newInputStreamResponse("image/png", in);
}
+ @Override
+ protected Response setCover(String uri, String luid, WLoginResult login)
+ throws IOException {
+ String[] uriParts = uri.split("/");
+ int off = 2; // "" and "cover"
+
+ if (uriParts.length < off + 2) {
+ return NanoHTTPD.newFixedLengthResponse(Status.BAD_REQUEST,
+ NanoHTTPD.MIME_PLAINTEXT, "Invalid cover request");
+ }
+
+ String type = uriParts[off + 0];
+ String id = uriParts[off + 1];
+
+ if ("source".equals(type)) {
+ sourceCover(id, login, luid);
+ } else if ("author".equals(type)) {
+ authorCover(id, login, luid);
+ } else {
+ return NanoHTTPD.newFixedLengthResponse(Status.BAD_REQUEST,
+ NanoHTTPD.MIME_PLAINTEXT,
+ "Invalid SET cover type: " + type);
+ }
+
+ return newInputStreamResponse(NanoHTTPD.MIME_PLAINTEXT, null);
+ }
+
@Override
protected List<MetaData> metas(WLoginResult login) throws IOException {
BasicLibrary lib = Instance.getInstance().getLibrary();
}
+ private void authorCover(String author, WLoginResult login, String luid)
+ throws IOException {
+ if (meta(luid, login) != null) {
+ List<MetaData> metas = new MetaResultList(metas(login)).filter(null,
+ author, null);
+ if (metas.size() > 0) {
+ BasicLibrary lib = Instance.getInstance().getLibrary();
+ lib.setAuthorCover(author, luid);
+ }
+ }
+ }
+
private Image sourceCover(String source, WLoginResult login)
throws IOException {
Image img = null;
return img;
}
+ private void sourceCover(String source, WLoginResult login, String luid)
+ throws IOException {
+ if (meta(luid, login) != null) {
+ List<MetaData> metas = new MetaResultList(metas(login))
+ .filter(source, null, null);
+ if (metas.size() > 0) {
+ BasicLibrary lib = Instance.getInstance().getLibrary();
+ lib.setSourceCover(source, luid);
+ }
+ }
+ }
+
private boolean isAllowed(MetaData meta, WLoginResult login) {
MetaResultList one = new MetaResultList(Arrays.asList(meta));
if (login.isWl() && !whitelist.isEmpty()) {
abstract protected Response getCover(String uri, WLoginResult login)
throws IOException;
+ abstract protected Response setCover(String uri, String luid,
+ WLoginResult login) throws IOException;
+
abstract protected List<MetaData> metas(WLoginResult login)
throws IOException;
MIME_PLAINTEXT,
Version.getCurrentVersion().toString());
} else if (WebLibraryUrls.isCoverUrl(uri)) {
- rep = getCover(uri, login);
+ String luid = params.get("luid");
+ if (luid != null) {
+ rep = setCover(uri, luid, login);
+ } else {
+ rep = getCover(uri, login);
+ }
} else if (WebLibraryUrls.isListUrl(uri)) {
rep = getList(uri, login);
} else if (WebLibraryUrls.isStoryUrl(uri)) {
static public final String LIST_URL_METADATA = LIST_URL_BASE + "metadata";
- // GET/POST
+ // GET/SET ("luid" param -> set cover to the cover of this story -- not ok
+ // for /cover/story/)
static private final String COVER_URL_BASE = "/cover/";
static private final String COVER_URL_STORY = COVER_URL_BASE
+ "story/{luid}";