import org.jsoup.helper.DataUtil;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.data.MetaData;
@Override
protected List<Entry<String, URL>> getChapters(Progress pg) throws IOException {
+ List<Entry<String, URL>> chapters = new LinkedList<Entry<String, URL>>();
+
if (isPool(getSource())) {
String baseUrl = "https://e621.net/" + getSource().getPath() + "?page=";
- return getChapters(getSource(), pg, baseUrl, "");
+ chapters = getChapters(getSource(), pg, baseUrl, "");
} else if (isSearchOrSet(getSource())) {
String baseUrl = "https://e621.net/posts/?page=";
String search = "&tags=" + getTagsFromUrl(getSource());
- // sets are sorted in reverse order on the website
- List<Entry<String, URL>> urls = getChapters(getSource(), pg,
+
+ chapters = getChapters(getSource(), pg,
baseUrl, search);
- Collections.reverse(urls);
- return urls;
}
- return new LinkedList<Entry<String, URL>>();
+ // sets and some pools are sorted in reverse order on the website
+ if (getSource().getPath().startsWith("/posts")) {
+ Collections.reverse(chapters);
+ }
+
+ return chapters;
}
private List<Entry<String, URL>> getChapters(URL source, Progress pg, String baseUrl, String parameters)
protected String getChapterContent(URL chapUrl, int number, Progress pg) throws IOException {
StringBuilder builder = new StringBuilder();
Document chapterNode = loadDocument(chapUrl);
- for (Element el : chapterNode.getElementsByTag("article")) {
+
+ Elements articles = chapterNode.getElementsByTag("article");
+
+ // sets and some pools are sorted in reverse order on the website
+ if (getSource().getPath().startsWith("/posts")) {
+ Collections.reverse(articles);
+ }
+
+ for (Element el : articles) {
builder.append("[");
builder.append(el.attr("data-file-url"));
builder.append("]<br/>");
@Override
protected URL getCanonicalUrl(URL source) {
+ // Convert search-pools into proper pools
+ if (source.getPath().equals("/posts") && source.getQuery() != null
+ && source.getQuery().startsWith("tags=pool%3A")) {
+ String poolNumber = source.getQuery()
+ .substring("tags=pool%3A".length());
+ try {
+ Integer.parseInt(poolNumber);
+ String base = source.getProtocol() + "://" + source.getHost();
+ if (source.getPort() != -1) {
+ base = base + ":" + source.getPort();
+ }
+ source = new URL(base + "/pools/" + poolNumber);
+ } catch (NumberFormatException e) {
+ // Not a simple pool, skip
+ } catch (MalformedURLException e) {
+ // Cannot happen
+ }
+ }
+
if (isSetOriginalUrl(source)) {
try {
Document doc = DataUtil.load(Instance.getInstance().getCache().open(source, this, false), "UTF-8", source.toString());
title = el.text().trim();
}
- for (String s : new String[] { "e621", "-", "e621" }) {
+ for (String s : new String[] { "e621", "-", "e621", "Pool", "-" }) {
if (title.startsWith(s)) {
title = title.substring(s.length()).trim();
}
if (title.endsWith(s)) {
title = title.substring(0, title.length() - s.length()).trim();
}
-
}
if (isSearchOrSet(getSource())) {
title = title.isEmpty() ? "e621" : "[e621] " + title;
}
+
return title;
}
builder.append(" ").append(tab[i]);
}
}
+
+ if (builder.length() == 0) {
+ String url = "https://e621.net/" + getSource().getPath()
+ + "?page=1";
+ Document page1 = DataUtil.load(Instance.getInstance().getCache()
+ .open(getSource(), this, false), "UTF-8",
+ url.toString());
+ for (Element el : page1.getElementsByClass("search-tag")) {
+ if (el.attr("itemprop").equals("author")) {
+ if (builder.length() > 0) {
+ builder.append(", ");
+ }
+ builder.append(el.text().trim());
+ }
+ }
+ }
}
return builder.toString();