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; /** * Created by xtj-9182 on 21.02.2017. */ /*Je suis Charlie * L'Assassin court toujours*/ class JapScan extends ServerBase { public static String HOST = "http://www.japscan.com"; private static String[] order = new String[]{ "All" }; private static String[] orderV = new String[]{ "" }; JapScan(Context context) { super(context); this.setFlag(R.drawable.flag_fr); this.setIcon(R.drawable.japscan); this.setServerName("JapScan"); setServerID(ServerBase.JAPSCAN); } @Override public ArrayList<Manga> getMangas() throws Exception { return null; } @Override public ArrayList<Manga> search(String search) throws Exception { String source = getNavigatorAndFlushParameters().get("http://www.japscan.com/mangas/"); Pattern pattern = Pattern.compile("<a href=\"(/mangas/[^\"].+?)\">(.+?)</a>"); Matcher matcher = pattern.matcher(source); ArrayList<Manga> mangas = new ArrayList<>(); while (matcher.find()) { if (matcher.group(2).toLowerCase().contains(URLEncoder.encode(search.toLowerCase(), "UTF-8"))) { Manga manga = new Manga(getServerID(), matcher.group(2), HOST + matcher.group(1), false); mangas.add(manga); } } return mangas; } @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()); // Cover Image // JapScan has no cover images ... // Summary String summary = getFirstMatchDefault("<div id=\"synopsis\">(.+?)</div>", source, defaultSynopsis); manga.setSynopsis(Util.getInstance().fromHtml(summary).toString()); // Status manga.setFinished(!getFirstMatchDefault("<div class=\"row\">.+?<div class=\"cell\">.+?<div class=\"cell\">.+?<div class=\"cell\">.+?<div class=\"cell\">.+?<div class=\"cell\">(.+?)</div>", source, "").contains("En Cours")); // Author manga.setAuthor(Util.getInstance().fromHtml(getFirstMatchDefault("<div class=\"row\">(.+?)</div>", source, "")).toString().trim()); // Genres manga.setGenre((Util.getInstance().fromHtml(getFirstMatchDefault("<div class=\"row\">.+?<div class=\"cell\">.+?<div class=\"cell\">.+?<div class=\"cell\">(.+?)</div>", source, "")).toString().trim())); // Chapters Pattern pattern = Pattern.compile("<a href=\"(//www\\.japscan\\.com/lecture-en-ligne/[^\"]+?)\">(Scan.+?)</a>"); Matcher matcher = pattern.matcher(source); ArrayList<Chapter> chapters = new ArrayList<>(); while (matcher.find()) { /*Log.d("JS", "1: " + "http:" + matcher.group(1)); Log.d("JS", "2: " + matcher.group(2));*/ chapters.add(0, new Chapter(Util.getInstance().fromHtml(matcher.group(2)).toString(), "http:" + matcher.group(1))); } manga.setChapters(chapters); } @Override public String getPagesNumber(Chapter chapter, int page) { return null; } @Override public String getImageFrom(Chapter chapter, int page) throws Exception { //Log.d("JS", "source: " + chapter.getPath() + page + ".html"); String source = getNavigatorAndFlushParameters().get(chapter.getPath() + page + ".html"); String img = ""; try { img = getFirstMatchDefault("src=\"(http://cdn.japscan.com/[^\"]+?)\"/>", source, "Error getting image"); } catch (Exception e) { e.printStackTrace(); } //Log.d("JS", "img: " + img); return img; } @Override public void chapterInit(Chapter chapter) throws Exception { String source = getNavigatorAndFlushParameters().get(chapter.getPath()); //Log.d("JS", "p: " + chapter.getPath()); String pagenumber = getFirstMatchDefault("Page (\\d+)</option>[\\s]*</select>", source, "failed to get the number of pages"); //Log.d("JS", "pa: " + pagenumber); chapter.setPages(Integer.parseInt(pagenumber)); } private ArrayList<Manga> getMangasFromSource(String source) { Pattern pattern = Pattern.compile("<a href=\"(/mangas/[^\"].+?)\">(.+?)</a>"); Matcher matcher = pattern.matcher(source); ArrayList<Manga> mangas = new ArrayList<>(); while (matcher.find()) { /*Log.d("JS", "1: " + matcher.group(1)); Log.d("JS", "2: " + matcher.group(2));*/ Manga manga = new Manga(getServerID(), matcher.group(2), HOST + matcher.group(1), false); mangas.add(manga); } return mangas; } @Override public FilteredType getFilteredType() { return FilteredType.TEXT; } @Override public ArrayList<Manga> getMangasFiltered(int[][] filters, int pageNumber) throws Exception { String web = HOST; if (orderV[filters[0][0]].equals("")) { web = "http://www.japscan.com/mangas/"; } //Log.d("JS","web: "+web); String source = getNavigatorAndFlushParameters().get(web); return getMangasFromSource(source); } @Override public ServerFilter[] getServerFilters() { return new ServerFilter[]{ new ServerFilter("Order", order, ServerFilter.FilterType.SINGLE) }; } @Override public boolean hasList() { return false; } }