BasicSupport: public makeChap
[fanfix.git] / src / be / nikiroo / fanfix / supported / BasicSupport.java
index 4314b99ce3da1589eef307e7d76b851adeadc943..61f46211e3af3907579f6c4e60893670dc335d79 100644 (file)
@@ -38,13 +38,6 @@ public abstract class BasicSupport {
        private SupportType type;
        private URL currentReferer; // with only one 'r', as in 'HTTP'...
 
-       /**
-        * The name of this support class.
-        * 
-        * @return the name
-        */
-       protected abstract String getSourceName();
-
        /**
         * Check if the given resource is supported by this {@link BasicSupport}.
         * 
@@ -84,7 +77,7 @@ public abstract class BasicSupport {
        protected abstract String getDesc() throws IOException;
 
        /**
-        * Return the list of chapters (name and resource). *
+        * Return the list of chapters (name and resource).
         * <p>
         * Can be NULL if this {@link BasicSupport} do no use chapters.
         * 
@@ -214,8 +207,8 @@ public abstract class BasicSupport {
        /**
         * Open an input link that will be used for the support.
         * <p>
-        * Can return NULL, in which case you are supposed to work without an
-        * {@link InputStream}.
+        * Can return NULL, in which case you are supposed to work without a source
+        * node.
         * 
         * @param source
         *            the source {@link URL}
@@ -237,20 +230,9 @@ public abstract class BasicSupport {
         * @throws IOException
         *             in case of I/O error
         */
-       @SuppressWarnings("unused")
        protected void login() throws IOException {
        }
 
-       /**
-        * Prepare the support if needed before processing.
-        * 
-        * @throws IOException
-        *             on I/O error
-        */
-       @SuppressWarnings("unused")
-       protected void preprocess() throws IOException {
-       }
-
        /**
         * Now that we have processed the {@link Story}, close the resources if any.
         */
@@ -258,28 +240,6 @@ public abstract class BasicSupport {
                setCurrentReferer(null);
        }
 
-       /**
-        * Process the given story resource into a partially filled {@link Story}
-        * object containing the name and metadata, except for the description.
-        * 
-        * @return the {@link Story}
-        * 
-        * @throws IOException
-        *             in case of I/O error
-        */
-       public Story processMeta() throws IOException {
-               Story story = null;
-
-               preprocess();
-               try {
-                       story = processMeta(false, null);
-               } finally {
-                       close();
-               }
-
-               return story;
-       }
-
        /**
         * Process the given story resource into a partially filled {@link Story}
         * object containing the name and metadata.
@@ -328,7 +288,7 @@ public abstract class BasicSupport {
                                                        getDesc(), isHtml(), null));
                }
 
-               pg.setProgress(100);
+               pg.done();
                return story;
        }
 
@@ -344,87 +304,118 @@ public abstract class BasicSupport {
         * @throws IOException
         *             in case of I/O error
         */
+       // ADD final when BasicSupport_Deprecated is gone
        public Story process(Progress pg) throws IOException {
+               setCurrentReferer(source);
+               login();
+               sourceNode = loadDocument(source);
+
+               try {
+                       return doProcess(pg);
+               } finally {
+                       close();
+               }
+       }
+
+       /**
+        * Actual processing step, without the calls to other methods.
+        * <p>
+        * Will convert the story resource into a fully filled {@link Story} object.
+        * 
+        * @param pg
+        *            the optional progress reporter
+        * 
+        * @return the {@link Story}, never NULL
+        * 
+        * @throws IOException
+        *             in case of I/O error
+        */
+       protected Story doProcess(Progress pg) throws IOException {
                if (pg == null) {
                        pg = new Progress();
                } else {
                        pg.setMinMax(0, 100);
                }
 
-               setCurrentReferer(source);
-               login();
-               sourceNode = loadDocument(source);
-
                pg.setProgress(1);
-               try {
-                       Progress pgMeta = new Progress();
-                       pg.addProgress(pgMeta, 10);
-                       preprocess();
-                       Story story = processMeta(true, pgMeta);
-                       if (!pgMeta.isDone()) {
-                               pgMeta.setProgress(pgMeta.getMax()); // 10%
-                       }
+               Progress pgMeta = new Progress();
+               pg.addProgress(pgMeta, 10);
+               Story story = processMeta(true, pgMeta);
+               pgMeta.done(); // 10%
+
+               pg.setName("Retrieving " + story.getMeta().getTitle());
+
+               Progress pgGetChapters = new Progress();
+               pg.addProgress(pgGetChapters, 10);
+               story.setChapters(new ArrayList<Chapter>());
+               List<Entry<String, URL>> chapters = getChapters(pgGetChapters);
+               pgGetChapters.done(); // 20%
+
+               if (chapters != null) {
+                       Progress pgChaps = new Progress("Extracting chapters", 0,
+                                       chapters.size() * 300);
+                       pg.addProgress(pgChaps, 80);
+
+                       long words = 0;
+                       int i = 1;
+                       for (Entry<String, URL> chap : chapters) {
+                               pgChaps.setName("Extracting chapter " + i);
+                               URL chapUrl = chap.getValue();
+                               String chapName = chap.getKey();
+                               if (chapUrl != null) {
+                                       setCurrentReferer(chapUrl);
+                               }
 
-                       pg.setName("Retrieving " + story.getMeta().getTitle());
+                               pgChaps.setProgress(i * 100);
+                               Progress pgGetChapterContent = new Progress();
+                               Progress pgMakeChapter = new Progress();
+                               pgChaps.addProgress(pgGetChapterContent, 100);
+                               pgChaps.addProgress(pgMakeChapter, 100);
 
-                       Progress pgGetChapters = new Progress();
-                       pg.addProgress(pgGetChapters, 10);
-                       story.setChapters(new ArrayList<Chapter>());
-                       List<Entry<String, URL>> chapters = getChapters(pgGetChapters);
-                       if (!pgGetChapters.isDone()) {
-                               pgGetChapters.setProgress(pgGetChapters.getMax()); // 20%
-                       }
+                               String content = getChapterContent(chapUrl, i,
+                                               pgGetChapterContent);
+                               pgGetChapterContent.done();
+                               Chapter cc = BasicSupportPara.makeChapter(this, chapUrl, i,
+                                               chapName, content, isHtml(), pgMakeChapter);
+                               pgMakeChapter.done();
 
-                       if (chapters != null) {
-                               Progress pgChaps = new Progress("Extracting chapters", 0,
-                                               chapters.size() * 300);
-                               pg.addProgress(pgChaps, 80);
-
-                               long words = 0;
-                               int i = 1;
-                               for (Entry<String, URL> chap : chapters) {
-                                       pgChaps.setName("Extracting chapter " + i);
-                                       URL chapUrl = chap.getValue();
-                                       String chapName = chap.getKey();
-                                       if (chapUrl != null) {
-                                               setCurrentReferer(chapUrl);
-                                       }
-
-                                       pgChaps.setProgress(i * 100);
-                                       Progress pgGetChapterContent = new Progress();
-                                       Progress pgMakeChapter = new Progress();
-                                       pgChaps.addProgress(pgGetChapterContent, 100);
-                                       pgChaps.addProgress(pgMakeChapter, 100);
-
-                                       String content = getChapterContent(chapUrl, i,
-                                                       pgGetChapterContent);
-                                       if (!pgGetChapterContent.isDone()) {
-                                               pgGetChapterContent.setProgress(pgGetChapterContent
-                                                               .getMax());
-                                       }
-
-                                       Chapter cc = BasicSupportPara.makeChapter(this, chapUrl, i,
-                                                       chapName, content, isHtml(), pgMakeChapter);
-                                       if (!pgMakeChapter.isDone()) {
-                                               pgMakeChapter.setProgress(pgMakeChapter.getMax());
-                                       }
-
-                                       words += cc.getWords();
-                                       story.getChapters().add(cc);
-                                       story.getMeta().setWords(words);
-
-                                       i++;
-                               }
+                               words += cc.getWords();
+                               story.getChapters().add(cc);
+                               story.getMeta().setWords(words);
 
-                               pgChaps.setName("Extracting chapters");
-                       } else {
-                               pg.setProgress(80);
+                               i++;
                        }
 
-                       return story;
-               } finally {
-                       close();
+                       pgChaps.setName("Extracting chapters");
+                       pgChaps.done();
                }
+
+               pg.done();
+
+               return story;
+       }
+
+       /**
+        * Create a chapter from the given data.
+        * 
+        * @param source
+        *            the source URL for this content, which can be used to try and
+        *            find images if images are present in the format [image-url]
+        * @param number
+        *            the chapter number (0 = description)
+        * @param name
+        *            the chapter name
+        * @param content
+        *            the content of the chapter
+        * @return the {@link Chapter}
+        * 
+        * @throws IOException
+        *             in case of I/O error
+        */
+       public Chapter makeChapter(URL source, int number, String name,
+                       String content) throws IOException {
+               return BasicSupportPara.makeChapter(this, source, number, name,
+                               content, isHtml(), null);
        }
 
        /**
@@ -466,10 +457,11 @@ public abstract class BasicSupport {
         * Return a {@link BasicSupport} implementation supporting the given type.
         * 
         * @param type
-        *            the type
+        *            the type, must not be NULL
         * @param url
         *            the {@link URL} to support (can be NULL to get an
-        *            "abstract support")
+        *            "abstract support"; if not NULL, will be used as the source
+        *            URL)
         * 
         * @return an implementation that supports it, or NULL
         */
@@ -509,6 +501,9 @@ public abstract class BasicSupport {
                case E_HENTAI:
                        support = new EHentai();
                        break;
+               case MANGA_LEL:
+                       support = new MangaLel();
+                       break;
                case CBZ:
                        support = new Cbz();
                        break;