X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Fsupported%2FMangaFox.java;h=bd5816a63641c57e0fdb6ba7f7aa0f2e86e652bb;hb=af1f506fb4bb7265645e34cd03c6c7178d6a4da7;hp=5abc47b090ce563e1801bcd0ebed7c10cc09d47f;hpb=cb554033588024e05741c80d9e6ff9bee65a2e66;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/supported/MangaFox.java b/src/be/nikiroo/fanfix/supported/MangaFox.java index 5abc47b..bd5816a 100644 --- a/src/be/nikiroo/fanfix/supported/MangaFox.java +++ b/src/be/nikiroo/fanfix/supported/MangaFox.java @@ -9,6 +9,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map.Entry; +import java.util.SortedMap; +import java.util.TreeMap; import org.jsoup.helper.DataUtil; import org.jsoup.nodes.Element; @@ -66,7 +68,7 @@ class MangaFox extends BasicSupport { meta.setPublisher(getSourceName()); meta.setUuid(getSource().toString()); meta.setLuid(""); - meta.setLang("EN"); + meta.setLang("en"); meta.setSubject("manga"); meta.setType(getType().toString()); meta.setImageDocument(true); @@ -104,7 +106,7 @@ class MangaFox extends BasicSupport { Element doc = getSourceNode(); Element title = doc.getElementsByClass("summary").first(); if (title != null) { - StringUtils.unhtml(title.text()).trim(); + return StringUtils.unhtml(title.text()).trim(); } return null; @@ -140,6 +142,9 @@ class MangaFox extends BasicSupport { protected List> getChapters(Progress pg) { List> urls = new ArrayList>(); + String prefix = null; // each chapter starts with this prefix, then a + // chapter number (including "x.5"), then name + Element doc = getSourceNode(); for (Element li : doc.getElementsByTag("li")) { Element el = li.getElementsByTag("h4").first(); @@ -160,6 +165,32 @@ class MangaFox extends BasicSupport { url += "/"; } + if (prefix == null || !prefix.isEmpty()) { + StringBuilder possiblePrefix = new StringBuilder( + StringUtils.unhtml(a.text()).trim()); + while (possiblePrefix.length() > 0) { + char car = possiblePrefix.charAt(possiblePrefix + .length() - 1); + boolean punctuation = (car == '.' || car == ' '); + boolean digit = (car >= '0' && car <= '9'); + if (!punctuation && !digit) { + break; + } + + possiblePrefix.setLength(possiblePrefix + .length() - 1); + } + + if (prefix == null) { + prefix = possiblePrefix.toString(); + } + + if (!prefix.equalsIgnoreCase(possiblePrefix + .toString())) { + prefix = ""; // prefix not ok + } + } + urls.add(new AbstractMap.SimpleEntry( title, new URL(url))); } catch (Exception e) { @@ -169,8 +200,44 @@ class MangaFox extends BasicSupport { } } - // the chapters are in reversed order - Collections.reverse(urls); + if (prefix != null && !prefix.isEmpty()) { + try { + // We found a prefix, so everything should be sortable + SortedMap> map = new TreeMap>(); + for (Entry entry : urls) { + String num = entry.getKey().substring(prefix.length() + 1) + .trim(); + String name = ""; + int pos = num.indexOf(' '); + if (pos >= 0) { + name = num.substring(pos).trim(); + num = num.substring(0, pos).trim(); + } + + if (!name.isEmpty()) { + name = "Tome " + num + ": " + name; + } else { + name = "Tome " + num; + } + + double key = Double.parseDouble(num); + + map.put(key, new AbstractMap.SimpleEntry(name, + entry.getValue())); + } + urls = new ArrayList>(map.values()); + } catch (NumberFormatException e) { + Instance.getTraceHandler() + .error(new IOException( + "Cannot find a tome number, revert to default sorting", + e)); + // by default, the chapters are in reversed order + Collections.reverse(urls); + } + } else { + // by default, the chapters are in reversed order + Collections.reverse(urls); + } return urls; } @@ -194,8 +261,13 @@ class MangaFox extends BasicSupport { // note: when used, the base URL can be an ad-page imageIn = openEx(url + "1.html"); imageDoc = DataUtil.load(imageIn, "UTF-8", url + "1.html"); + } catch (IOException e) { + Instance.getTraceHandler().error( + new IOException("Cannot get image " + 1 + " of manga", e)); } finally { - imageIn.close(); + if (imageIn != null) { + imageIn.close(); + } } Element select = imageDoc.getElementsByClass("m").first(); Elements options = select.getElementsByTag("option"); @@ -205,33 +277,40 @@ class MangaFox extends BasicSupport { // 2. list them for (int i = 1; i <= size; i++) { - if (i > 1) { // because fist one was opened for size + if (i > 1) { // because first one was opened for size try { imageIn = openEx(url + i + ".html"); imageDoc = DataUtil.load(imageIn, "UTF-8", url + i + ".html"); + + String linkImage = imageDoc.getElementById("image").absUrl( + "src"); + if (linkImage != null) { + builder.append("["); + // to help with the retry and the originalUrl, part 1 + builder.append(withoutQuery(linkImage)); + builder.append("]
"); + } + + // to help with the retry and the originalUrl, part 2 + refresh(linkImage); + } catch (IOException e) { + Instance.getTraceHandler().error( + new IOException("Cannot get image " + i + + " of manga", e)); } finally { - imageIn.close(); + if (imageIn != null) { + imageIn.close(); + } } } - - String linkImage = imageDoc.getElementById("image").absUrl("src"); - if (linkImage != null) { - builder.append("["); - // to help with the retry and the originalUrl, part 1 - builder.append(withoutQuery(linkImage)); - builder.append("]
"); - } - - // to help with the retry and the originalUrl, part 2 - refresh(linkImage); } return builder.toString(); } /** - * Refresh the {@link URL} by calling {@link MangaFoxNew#openEx(String)}. + * Refresh the {@link URL} by calling {@link MangaFox#openEx(String)}. * * @param url * the URL to refresh