X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Fsupported%2FMangaFox.java;fp=src%2Fbe%2Fnikiroo%2Ffanfix%2Fsupported%2FMangaFox.java;h=f1226076315e844d6b55718fe26394bc556c1ae2;hb=41c3bba7f6fc6f5ec1fa7fe35643c6aace94240d;hp=b6d3fe133ce1a70ace47f92ac4bab21805172ac6;hpb=276f95c6ca9a79d2fc6879877b240cefb4ceb598;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/supported/MangaFox.java b/src/be/nikiroo/fanfix/supported/MangaFox.java index b6d3fe1..f122607 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; @@ -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; } @@ -231,7 +298,7 @@ class MangaFox extends BasicSupport { } /** - * 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