package ar.rulosoft.mimanganu.servers;
import android.content.Context;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ar.rulosoft.mimanganu.R;
import ar.rulosoft.mimanganu.componentes.Chapter;
import ar.rulosoft.mimanganu.componentes.Manga;
import ar.rulosoft.mimanganu.componentes.ServerFilter;
import ar.rulosoft.mimanganu.utils.Util;
public class HeavenManga extends ServerBase {
private static String[] generos = new String[]{
"Todo", "Accion", "Adulto", "Aventura", "Artes Marciales",
"Acontesimientos de la Vida", "Bakunyuu", "Sci-fi",
"Comic", "Combate", "Comedia", "Cooking", "Cotidiano", "Colegialas",
"Critica social", "Ciencia ficcion", "Cambio de genero", "Cosas de la Vida",
"Drama", "Deporte", "Doujinshi", "Delincuentes", "Ecchi", "Escolar",
"Erotico", "Escuela", "Estilo de Vida", "Fantasia", "Fragmentos de la Vida",
"Gore", "Gender Bender", "Humor", "Harem", "Haren", "Hentai", "Horror",
"Historico", "Josei", "Loli", "Light", "Lucha Libre", "Manga", "Mecha",
"Magia", "Maduro", "Manhwa", "Manwha", "Mature", "Misterio", "Mutantes",
"Novela", "Orgia", "OneShot", "OneShots", "Psicologico", "Romance",
"Recuentos de la vida", "Smut", "Shojo", "Shonen", "Seinen", "Shoujo",
"Shounen", "Suspenso", "School Life", "Sobrenatural", "SuperHeroes",
"Supernatural", "Slice of Life", "Super Poderes", "Terror", "Torneo",
"Tragedia", "Transexual", "Vida", "Vampiros", "Violencia", "Vida Pasada",
"Vida Cotidiana", "Vida de Escuela", "Webtoon", "Webtoons", "Yuri"
};
private static String[] generosV = new String[]{
"", "/genero/accion.html", "/genero/adulto.html", "/genero/aventura.html",
"/genero/artes+marciales.html", "/genero/acontesimientos+de+la+vida.html",
"/genero/bakunyuu.html", "/genero/sci-fi.html", "/genero/comic.html",
"/genero/combate.html", "/genero/comedia.html", "/genero/cooking.html",
"/genero/cotidiano.html", "/genero/colegialas.html", "/genero/critica+social.html",
"/genero/ciencia+ficcion.html", "/genero/cambio+de+genero.html",
"/genero/cosas+de+la+vida.html", "/genero/drama.html", "/genero/deporte.html",
"/genero/doujinshi.html", "/genero/delincuentes.html", "/genero/ecchi.html",
"/genero/escolar.html", "/genero/erotico.html", "/genero/escuela.html",
"/genero/estilo+de+vida.html", "/genero/fantasia.html",
"/genero/fragmentos+de+la+vida.html", "/genero/gore.html",
"/genero/gender+bender.html", "/genero/humor.html", "/genero/harem.html",
"/genero/haren.html", "/genero/hentai.html", "/genero/horror.html",
"/genero/historico.html", "/genero/josei.html", "/genero/loli.html",
"/genero/light.html", "/genero/lucha+libre.html", "/genero/manga.html",
"/genero/mecha.html", "/genero/magia.html", "/genero/maduro.html",
"/genero/manhwa.html", "/genero/manwha.html", "/genero/mature.html",
"/genero/misterio.html", "/genero/mutantes.html", "/genero/novela.html",
"/genero/orgia.html", "/genero/oneshot.html", "/genero/oneshots.html",
"/genero/psicologico.html", "/genero/romance.html",
"/genero/recuentos+de+la+vida.html", "/genero/smut.html", "/genero/shojo.html",
"/genero/shonen.html", "/genero/seinen.html", "/genero/shoujo.html",
"/genero/shounen.html", "/genero/suspenso.html", "/genero/school+life.html",
"/genero/sobrenatural.html", "/genero/superheroes.html", "/genero/supernatural.html",
"/genero/slice+of+life.html", "/genero/ssuper+poderes.html",
"/genero/terror.html", "/genero/torneo.html", "/genero/tragedia.html",
"/genero/transexual.html", "/genero/vida.html", "/genero/vampiros.html",
"/genero/violencia.html", "/genero/vida+pasada.html", "/genero/vida+cotidiana.html",
"/genero/vida+de+escuela.html", "/genero/webtoon.html",
"/genero/webtoons.html", "/genero/yuri.html"
};
private static String[] paginas = new String[]{
"0-9.html", "a.html", "b.html", "c.html", "d.html", "e.html",
"f.html", "g.html", "h.html", "i.html", "j.html", "k.html", "l.html", "m.html",
"n.html", "o.html", "p.html", "q.html", "r.html", "s.html", "t.html", "u.html",
"v.html", "w.html", "x.html", "y.html", "z.html"
};
public HeavenManga(Context context) {
super(context);
this.setFlag(R.drawable.flag_es);
this.setIcon(R.drawable.heavenmanga);
this.setServerName("HeavenManga");
setServerID(ServerBase.HEAVENMANGACOM);
}
@Override
public ArrayList<Manga> getMangas() throws Exception {
String source = getNavigatorAndFlushParameters().get("http://heavenmanga.com/");
source = getFirstMatch("<span>Lista Completa(.+)", source, "Error al obtener la lista");
Pattern p = Pattern.compile("<li class=\"rpwe-clearfix\"><a href=\"(.+?)\" title=\"(.+?)\"");
Matcher m = p.matcher(source);
ArrayList<Manga> mangas = new ArrayList<>();
while (m.find()) {
mangas.add(new Manga(HEAVENMANGACOM, m.group(2), m.group(1), true));
}
return mangas;
}
@Override
public ArrayList<Manga> search(String term) throws Exception {
String source = getNavigatorAndFlushParameters().get("http://heavenmanga.com/buscar/" + URLEncoder.encode(term, "UTF-8") + ".html");
return getMangasFromSource(source);
}
@Override
public void loadChapters(Manga manga, boolean forceReload) throws Exception {
if (manga.getChapters() == null || manga.getChapters().size() == 0 || forceReload)
loadMangaInformation(manga, forceReload);
}
@Override
public void loadMangaInformation(Manga manga, boolean forceReload) throws Exception {
String source = getNavigatorAndFlushParameters().get(manga.getPath());
// portada
String portada = getFirstMatchDefault("<meta property=\"og:image\" content=\"(.+?)\"", source, "");
manga.setImages(portada);
// sinopsis
String sinopsis = getFirstMatchDefault("<div class=\"sinopsis\">(.+?)<div", source, defaultSynopsis);
manga.setSynopsis(sinopsis.replaceAll("<.+?>", ""));
// estado no soportado
// genero
manga.setGenre((Util.getInstance().fromHtml(getFirstMatchDefault("nero\\(s\\) :(.+?)</div>", source, "")).toString().trim()));
// capitulos
Pattern p = Pattern.compile("<li><span class=\"capfec\">.+?><a href=\"(http://heavenmanga.com/.+?)\" title=\"(.+?)\"");
Matcher matcher = p.matcher(source);
ArrayList<Chapter> chapters = new ArrayList<>();
while (matcher.find()) {
chapters.add(0, new Chapter(matcher.group(2), matcher.group(1)));
}
if (chapters.size() > 0)
manga.setChapters(chapters);
else
throw new Exception("Error al cargar capitulos");
}
@Override
public String getPagesNumber(Chapter chapter, int page) {
if (chapter.getExtra() == null)
try {
setExtra(chapter);
} catch (Exception e) {
e.printStackTrace();
}
return chapter.getExtra().substring(0, chapter.getExtra().lastIndexOf("/") + 1) + page;
}
@Override
public String getImageFrom(Chapter chapter, int page) throws Exception {
String source = getNavigatorAndFlushParameters().get(getPagesNumber(chapter, page));
return getFirstMatch("src=\"([^\"]+)\" border=\"1\" id=\"p\">", source, "Error al obtener imagen");
}
@Override
public void chapterInit(Chapter chapter) throws Exception {
if (chapter.getExtra() == null)
setExtra(chapter);
String source = getNavigatorAndFlushParameters().get(chapter.getExtra());
String nop = getFirstMatch("(\\d+)</option></select>", source, "Error al cargar paginas");
chapter.setPages(Integer.parseInt(nop));
}
private void setExtra(Chapter chapter) throws Exception {
String source = getNavigatorAndFlushParameters().get(chapter.getPath());
String web = getFirstMatch("<a id=\"l\" href=\"(http://heavenmanga.com/.+?)\"><b>Leer</b>",
source, "Error al obtener página");
chapter.setExtra(web);
}
private ArrayList<Manga> getMangasFromSource(String source) {
ArrayList<Manga> mangas = new ArrayList<>();
Pattern p = Pattern.compile("<article class=\"rel\"><a href=\"(http://heavenmanga.com/.+?)\"><header>(.+?)<.+?src=\"(.+?)\"");
Matcher matcher = p.matcher(source);
while (matcher.find()) {
Manga manga = new Manga(HEAVENMANGACOM, matcher.group(2), matcher.group(1), false);
manga.setImages(matcher.group(3));
mangas.add(manga);
}
return mangas;
}
@Override
public ArrayList<Manga> getMangasFiltered(int[][] categorie, int pageNumber) throws Exception {
int paginaLoc = pageNumber - 1;
ArrayList<Manga> mangas = null;
String web = "";
if (categorie[0][0] == 0 && paginaLoc < paginas.length) {
web = "/letra/" + paginas[paginaLoc];
} else if (paginaLoc < 1) {
web = generosV[categorie[0][0]];
}
if (web.length() > 2) {
String source = getNavigatorAndFlushParameters().get("http://heavenmanga.com" + web);
mangas = getMangasFromSource(source);
}
return mangas;
}
@Override
public ServerFilter[] getServerFilters() {
return new ServerFilter[]{new ServerFilter("Generos", generos, ServerFilter.FilterType.SINGLE)};
}
@Override
public boolean hasList() {
return true;
}
}