Merge branch 'subtree'
[fanfix.git] / src / be / nikiroo / fanfix / supported / E621.java
index 4b2fb9028ba04c5ea50286eea031ebc445c39a34..c3a261bd78af518da82b9b72c40eb088a2161026 100644 (file)
@@ -17,6 +17,7 @@ import java.util.Map.Entry;
 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;
@@ -100,16 +101,25 @@ class E621 extends BasicSupport {
 
        @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());
-                       return getChapters(getSource(), pg, baseUrl, search);
+
+                       chapters = getChapters(getSource(), pg,
+                                       baseUrl, search);
                }
 
-               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)
@@ -123,7 +133,7 @@ class E621 extends BasicSupport {
                for (int i = 1; true; i++) {
                        URL url = new URL(baseUrl + i + parameters);
                        try {
-                               InputStream pageI = Instance.getCache().open(url, this, false);
+                               InputStream pageI = Instance.getInstance().getCache().open(url, this, false);
                                try {
                                        if (IOUtils.readSmallStream(pageI).contains("Nobody here but us chickens!")) {
                                                break;
@@ -137,8 +147,6 @@ class E621 extends BasicSupport {
                        }
                }
 
-               // They are sorted in reverse order on the website
-               Collections.reverse(urls);
                return urls;
        }
 
@@ -146,7 +154,15 @@ class E621 extends BasicSupport {
        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/>");
@@ -157,9 +173,28 @@ class E621 extends BasicSupport {
 
        @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 ppol, skip
+                       } catch (MalformedURLException e) {
+                               // Cannot happen
+                       }
+               }
+               
                if (isSetOriginalUrl(source)) {
                        try {
-                               Document doc = DataUtil.load(Instance.getCache().open(source, this, false), "UTF-8", source.toString());
+                               Document doc = DataUtil.load(Instance.getInstance().getCache().open(source, this, false), "UTF-8", source.toString());
                                for (Element shortname : doc.getElementsByClass("set-shortname")) {
                                        for (Element el : shortname.getElementsByTag("a")) {
                                                if (!el.attr("href").isEmpty())
@@ -167,7 +202,7 @@ class E621 extends BasicSupport {
                                        }
                                }
                        } catch (IOException e) {
-                               Instance.getTraceHandler().error(e);
+                               Instance.getInstance().getTraceHandler().error(e);
                        }
                }
 
@@ -282,8 +317,12 @@ class E621 extends BasicSupport {
                Image image = null;
                List<Entry<String, URL>> chapters = getChapters(null);
                if (!chapters.isEmpty()) {
-                       URL url = chapters.get(0).getValue();
-                       image = bsImages.getImage(this, url);
+                       URL chap1Url = chapters.get(0).getValue();
+                       String imgsChap1 = getChapterContent(chap1Url, 1, null);
+                       if (!imgsChap1.isEmpty()) {
+                               imgsChap1 = imgsChap1.split("]")[0].substring(1).trim();
+                               image = bsImages.getImage(this, new URL(imgsChap1));
+                       }
                }
 
                return image;