package me.devsaki.hentoid.parsers;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import me.devsaki.hentoid.database.domains.Attribute;
import me.devsaki.hentoid.database.domains.Content;
import me.devsaki.hentoid.enums.AttributeType;
import me.devsaki.hentoid.enums.StatusContent;
import me.devsaki.hentoid.util.AttributeMap;
import me.devsaki.hentoid.util.HttpClientHelper;
import me.devsaki.hentoid.util.LogHelper;
import static me.devsaki.hentoid.enums.Site.NHENTAI;
/**
* Created by Shiro on 1/5/2016.
* Handles parsing of content from nhentai
*/
public class NhentaiParser {
private static final String TAG = LogHelper.makeLogTag(NhentaiParser.class);
public static Content parseContent(String json) throws JSONException {
JSONObject jsonContent = new JSONObject(json);
String title = jsonContent.getJSONObject("title").getString("pretty");
String url = "/" + jsonContent.getInt("id") + '/';
int qtyPages = jsonContent.getInt("num_pages");
String mediaId = jsonContent.getString("media_id");
String extension = jsonContent.getJSONObject("images").getJSONObject("cover").getString("t");
switch (extension) {
case "j":
extension = "jpg";
break;
case "p":
extension = "png";
break;
default:
extension = "gif";
break;
}
String coverImageUrl = "http://t.nhentai.net/galleries/" + mediaId + "/cover." + extension;
JSONArray allTags = jsonContent.getJSONArray("tags");
AttributeMap attributes = new AttributeMap();
for (int i = 0; i < allTags.length(); i++) {
Tag tag = new Tag();
JSONObject singleTagObject = allTags.optJSONObject(i);
if (singleTagObject != null) {
tag.url = singleTagObject.getString("url");
tag.type = singleTagObject.getString("type");
tag.name = singleTagObject.getString("name");
} else {
JSONArray singleTagArray = allTags.getJSONArray(i);
tag.url = singleTagArray.getString(0);
tag.type = singleTagArray.getString(1);
tag.name = singleTagArray.getString(2);
}
Attribute attribute = new Attribute()
.setUrl(tag.url)
.setName(tag.name);
switch (tag.type) {
case "artist":
attribute.setType(AttributeType.ARTIST);
break;
case "character":
attribute.setType(AttributeType.CHARACTER);
break;
case "parody":
attribute.setType(AttributeType.SERIE);
break;
case "language":
attribute.setType(AttributeType.LANGUAGE);
break;
case "tag":
attribute.setType(AttributeType.TAG);
break;
case "group":
attribute.setType(AttributeType.CIRCLE);
break;
case "category":
attribute.setType(AttributeType.CATEGORY);
break;
default: // do nothing
break;
}
attributes.add(attribute);
}
return new Content()
.setTitle(title)
.setUrl(url)
.setCoverImageUrl(coverImageUrl)
.setAttributes(attributes)
.setQtyPages(qtyPages)
.setStatus(StatusContent.SAVED)
.setSite(NHENTAI);
}
public static List<String> parseImageList(Content content) {
String url = content.getGalleryUrl();
url = url.replace("/g", "/api/gallery");
url = url.substring(0, url.length() - 1);
List<String> imgUrls = new ArrayList<>();
try {
String json = HttpClientHelper.call(url);
JSONObject gallery = new JSONObject(json);
String mediaId = gallery.getString("media_id");
JSONArray images = gallery.getJSONObject("images").getJSONArray("pages");
String serverUrl = "http://i.nhentai.net/galleries/" + mediaId + "/";
for (int i = 0; i < images.length(); i++) {
JSONObject image = images.getJSONObject(i);
String extension = image.getString("t");
switch (extension) {
case "j":
extension = ".jpg";
break;
case "p":
extension = ".png";
break;
default:
extension = ".gif";
break;
}
String urlImage = serverUrl + (i + 1) + extension;
imgUrls.add(urlImage);
}
} catch (JSONException e) {
LogHelper.e(TAG, e, "Error parsing content");
} catch (Exception e) {
LogHelper.e(TAG, e, "Couldn't connect to resource");
}
LogHelper.d(TAG, imgUrls);
return imgUrls;
}
private static class Tag {
String url;
String name;
String type;
}
}