code cleanup / jdoc
[nikiroo-utils.git] / src / be / nikiroo / fanfix / supported / EHentai.java
index eae377c81d9feb53d5bdb2dcdda21623227d348d..399ce913055cdb66934a287153a768fd6223f5e3 100644 (file)
@@ -1,12 +1,13 @@
 package be.nikiroo.fanfix.supported;
 
-import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Scanner;
 
@@ -14,6 +15,7 @@ import be.nikiroo.fanfix.Instance;
 import be.nikiroo.fanfix.data.Chapter;
 import be.nikiroo.fanfix.data.MetaData;
 import be.nikiroo.fanfix.data.Story;
+import be.nikiroo.utils.Image;
 import be.nikiroo.utils.Progress;
 import be.nikiroo.utils.StringUtils;
 
@@ -23,28 +25,20 @@ import be.nikiroo.utils.StringUtils;
  * 
  * @author niki
  */
-class EHentai extends BasicSupport {
-       @Override
-       public String getSourceName() {
-               return "e-hentai.org";
-       }
-
+class EHentai extends BasicSupport_Deprecated {
        @Override
        protected MetaData getMeta(URL source, InputStream in) throws IOException {
                MetaData meta = new MetaData();
 
                meta.setTitle(getTitle(reset(in)));
                meta.setAuthor(getAuthor(reset(in)));
-               meta.setDate("");
+               meta.setDate(getDate(reset(in)));
                meta.setTags(getTags(reset(in)));
-               meta.setSource(getSourceName());
                meta.setUrl(source.toString());
-               meta.setPublisher(getSourceName());
                meta.setUuid(source.toString());
                meta.setLuid("");
-               meta.setLang("EN");
-               meta.setSubject("Furry");
-               meta.setType(getType().toString());
+               meta.setLang(getLang(reset(in)));
+               meta.setSubject("Hentai");
                meta.setImageDocument(true);
                meta.setCover(getCover(source, reset(in)));
                meta.setFakeCover(true);
@@ -57,7 +51,7 @@ class EHentai extends BasicSupport {
                // There is no chapters on e621, just pagination...
                Story story = super.process(url, pg);
 
-               Chapter only = new Chapter(1, null);
+               Chapter only = new Chapter(1, "");
                for (Chapter chap : story) {
                        only.getParagraphs().addAll(chap.getParagraphs());
                }
@@ -78,9 +72,15 @@ class EHentai extends BasicSupport {
                return true;
        }
 
-       private BufferedImage getCover(URL source, InputStream in)
-                       throws IOException {
-               BufferedImage author = null;
+       @Override
+       public Map<String, String> getCookies() {
+               Map<String, String> cookies = super.getCookies();
+               cookies.put("nw", "1");
+               return cookies;
+       }
+
+       private Image getCover(URL source, InputStream in) {
+               Image author = null;
                String coverLine = getKeyLine(in, "<div id=\"gd1\"", " url(", ")");
                if (coverLine != null) {
                        coverLine = StringUtils.unhtml(coverLine).trim();
@@ -101,6 +101,45 @@ class EHentai extends BasicSupport {
                return author;
        }
 
+       private String getLang(InputStream in) {
+               String lang = null;
+
+               String langLine = getKeyLine(in, "class=\"gdt1\">Language",
+                               "class=\"gdt2\"", "</td>");
+               if (langLine != null) {
+                       langLine = StringUtils.unhtml(langLine).trim();
+                       if (langLine.equalsIgnoreCase("English")) {
+                               lang = "en";
+                       } else if (langLine.equalsIgnoreCase("Japanese")) {
+                               lang = "jp";
+                       } else if (langLine.equalsIgnoreCase("French")) {
+                               lang = "fr";
+                       } else {
+                               // TODO find the code for other languages?
+                               lang = langLine;
+                       }
+               }
+
+               return lang;
+       }
+
+       private String getDate(InputStream in) {
+               String date = null;
+
+               String dateLine = getKeyLine(in, "class=\"gdt1\">Posted",
+                               "class=\"gdt2\"", "</td>");
+               if (dateLine != null) {
+                       dateLine = StringUtils.unhtml(dateLine).trim();
+                       if (dateLine.length() > 10) {
+                               dateLine = dateLine.substring(0, 10).trim();
+                       }
+
+                       date = dateLine;
+               }
+
+               return date;
+       }
+
        private List<String> getTags(InputStream in) {
                List<String> tags = new ArrayList<String>();
                List<String> tagsAuthor = getTagsAuthor(in);
@@ -128,7 +167,7 @@ class EHentai extends BasicSupport {
                return tags;
        }
 
-       private String getTitle(InputStream in) throws IOException {
+       private String getTitle(InputStream in) {
                String siteName = " - E-Hentai Galleries";
 
                String title = getLine(in, "<title>", 0);
@@ -191,21 +230,8 @@ class EHentai extends BasicSupport {
                }
 
                for (int i = 0; i <= last; i++) {
-                       final String key = Integer.toString(i + 1);
-                       final URL value = new URL(source.toString() + "?p=" + i);
-                       urls.add(new Entry<String, URL>() {
-                               public URL setValue(URL value) {
-                                       return null;
-                               }
-
-                               public URL getValue() {
-                                       return value;
-                               }
-
-                               public String getKey() {
-                                       return key;
-                               }
-                       });
+                       urls.add(new AbstractMap.SimpleEntry<String, URL>(Integer
+                                       .toString(i + 1), new URL(source.toString() + "?p=" + i)));
                }
 
                return urls;
@@ -226,9 +252,8 @@ class EHentai extends BasicSupport {
                                try {
                                        pages.add(new URL(line));
                                } catch (MalformedURLException e) {
-                                       Instance.syserr(new IOException(
-                                                       "Parsing error, a link is not correctly parsed: "
-                                                                       + line, e));
+                                       Instance.getInstance().getTraceHandler()
+                                                       .error(new IOException("Parsing error, a link is not correctly parsed: " + line, e));
                                }
                        }
                }
@@ -242,7 +267,7 @@ class EHentai extends BasicSupport {
                StringBuilder builder = new StringBuilder();
 
                for (URL page : pages) {
-                       InputStream pageIn = Instance.getCache().open(page, this, false);
+                       InputStream pageIn = Instance.getInstance().getCache().open(page, this, false);
                        try {
                                String link = getKeyLine(pageIn, "id=\"img\"", "src=\"", "\"");
                                if (link != null && !link.isEmpty()) {