Merge branch 'subtree'
[fanfix.git] / src / be / nikiroo / fanfix / supported / E621.java
index 316ac2c2bcfbad54411467af2f34713e37772d8d..39bbe867d9eb2cdfc630c80df9393bc9bc47aba4 100644 (file)
@@ -3,6 +3,7 @@ package be.nikiroo.fanfix.supported;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.util.AbstractMap;
@@ -16,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;
@@ -99,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)
@@ -122,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;
@@ -136,8 +147,6 @@ class E621 extends BasicSupport {
                        }
                }
 
-               // They are sorted in reverse order on the website
-               Collections.reverse(urls);
                return urls;
        }
 
@@ -145,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/>");
@@ -158,7 +175,7 @@ class E621 extends BasicSupport {
        protected URL getCanonicalUrl(URL source) {
                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())
@@ -166,7 +183,14 @@ class E621 extends BasicSupport {
                                        }
                                }
                        } catch (IOException e) {
-                               Instance.getTraceHandler().error(e);
+                               Instance.getInstance().getTraceHandler().error(e);
+                       }
+               }
+
+               if (isPool(source)) {
+                       try {
+                               return new URL(source.toString().replace("/pool/show/", "/pools/"));
+                       } catch (MalformedURLException e) {
                        }
                }
 
@@ -274,8 +298,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;
@@ -287,7 +315,7 @@ class E621 extends BasicSupport {
        }
 
        private boolean isPool(URL url) {
-               return url.getPath().startsWith("/pools/");
+               return url.getPath().startsWith("/pools/") || url.getPath().startsWith("/pool/show/");
        }
 
        // set will be renamed into search by canonical url