package ar.rulosoft.mimanganu.servers; import android.content.Context; import android.util.Log; 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 18.02.2016. */ class ViewComic extends ServerBase { private static String HOST0 = "http://viewcomic.com"; private static String HOST1 = "http://view-comic.com"; private static String[] domain = new String[]{ "http://view-comic.com/", "http://viewcomic.com/" }; private static boolean onHost0; ViewComic(Context context) { super(context); this.setFlag(R.drawable.flag_en); this.setIcon(R.drawable.viewcomic); this.setServerName("ViewComic"); setServerID(ServerBase.VIEWCOMIC); } @Override public ArrayList<Manga> getMangas() throws Exception { return null; } @Override public ArrayList<Manga> search(String search) throws Exception { String web; if (onHost0) { web = "http://viewcomic.com/?s=" + URLEncoder.encode(search, "UTF-8"); } else { web = "http://view-comic.com/?s=" + URLEncoder.encode(search, "UTF-8"); } String source = getNavigatorAndFlushParameters().get(web); 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()); // Cover Img //Log.d("VC", "m.gI0: " + manga.getImages()); if (manga.getImages() == null || manga.getImages().isEmpty()) manga.setImages(getFirstMatchDefault("src=\"(http[s]?://\\d+\\.bp\\.blogspot\\.com/.+?)\"", source, "")); // Summary // ViewComic lists no summary ... // Status // ViewComic lists no status ... // Author // ViewComic lists no authors ... // Genre // ViewComic lists no genres ... // Chapters //<select id(.+?)</select> String newSource = getFirstMatchDefault("<select id(.+?)</select>", source, ""); Pattern p = Pattern.compile("<option value=\"(.+?)\">(.+?)</div>|<option selected value=\"(.+?)\">(.+?)</div>"); Matcher matcher; if(newSource.isEmpty()) matcher = p.matcher(source); else matcher = p.matcher(newSource); ArrayList<Chapter> chapters = new ArrayList<>(); while (matcher.find()) { /*Log.d("VC", "1: " + matcher.group(1)); Log.d("VC", "2: " + matcher.group(2)); Log.d("VC", "3: " + matcher.group(3)); Log.d("VC", "4: " + matcher.group(4));*/ if(matcher.group(1) != null && matcher.group(2) != null) chapters.add(0, new Chapter(Util.getInstance().fromHtml(matcher.group(2).replaceAll("…", "").replaceAll("\\.","").trim()).toString().replaceAll("…", ""), matcher.group(1))); else chapters.add(0, new Chapter(Util.getInstance().fromHtml(matcher.group(4).replaceAll("…", "").replaceAll("\\.","").replaceAll("Reading", "").trim()).toString().replaceAll("…", ""), matcher.group(3))); } manga.setChapters(chapters); } @Override public String getPagesNumber(Chapter chapter, int page) { return null; } @Override public String getImageFrom(Chapter chapter, int page) throws Exception { if (chapter.getExtra() == null || chapter.getExtra().length() < 2) { setExtra(chapter); } return chapter.getExtra().split("\\|")[page]; } private int setExtra(Chapter chapter) throws Exception { String source = getNavigatorAndFlushParameters().get(chapter.getPath()); String images = ""; Pattern pattern = Pattern.compile("src=\"(http[s]?://\\d+\\.bp\\.blogspot\\.com/.+?)\""); Matcher matcher = pattern.matcher(source); int i = 0; while (matcher.find()) { i++; //Log.d("VC", "(1_0): " + matcher.group(1)); images = images + "|" + matcher.group(1); } if (i == 0) { Pattern pattern1 = Pattern.compile("src=\"(//\\d+\\.bp\\.blogspot\\.com/.+?)\""); Matcher matcher1 = pattern1.matcher(source); while (matcher1.find()) { i++; //Log.d("VC", "(1_1): " + "https:" + matcher1.group(1)); images = images + "|" + "https:" + matcher1.group(1); } } chapter.setExtra(images); return i; } @Override public void chapterInit(Chapter chapter) throws Exception { if (chapter.getExtra() == null || chapter.getExtra().length() < 2) { chapter.setPages(setExtra(chapter)); } else chapter.setPages(0); } @Override public ServerFilter[] getServerFilters() { return new ServerFilter[]{ new ServerFilter("Domain", domain, ServerFilter.FilterType.SINGLE) }; } @Override public ArrayList<Manga> getMangasFiltered(int[][] filters, int pageNumber) throws Exception { String web = ""; String host0web = ""; String host1web = ""; if (domain[filters[0][0]].equals("http://viewcomic.com/")) { onHost0 = true; web = HOST0 + "/page/" + pageNumber + "/"; host0web = web; host1web = HOST1 + "/page/" + pageNumber + "/"; } else if (domain[filters[0][0]].equals("http://view-comic.com/")) { onHost0 = false; web = HOST1 + "/page/" + pageNumber + "/"; host1web = web; host0web = HOST0 + "/page/" + pageNumber + "/"; } //Log.d("VC", "web: " + web); String source = getNavigatorAndFlushParameters().getAndReturnResponseCodeOnFailure(web); if (source.equals("404")) { if (onHost0) { Log.e("VC", "viewcomic is down :(. Redirecting to view-comic"); Util.getInstance().toast(context, "viewcomic is down :(. Redirecting to view-comic"); source = getNavigatorAndFlushParameters().getAndReturnResponseCodeOnFailure(host1web); } else { Log.e("VC", "view-comic is down :(. Redirecting to viewcomic"); Util.getInstance().toast(context, "view-comic is down :(. Redirecting to viewcomic"); source = getNavigatorAndFlushParameters().getAndReturnResponseCodeOnFailure(host0web); } if (source.equals("404")) { Log.e("VC", "viewcomic and view-comic are down :("); Util.getInstance().toast(context, "viewcomic and view-comic are down :("); } } return getMangasFromSource(source); } private ArrayList<Manga> getMangasFromSource(String source) { ArrayList<Manga> mangas = new ArrayList<>(); //<div id=(.+?)</div> Pattern pattern = Pattern.compile("src=\"(http[s]?://\\d+\\.bp\\.blogspot\\.com/.+?)\".+?<a class=\"front-link\" href=\"(.+?)\">(.+?)</a>"); Matcher matcher = pattern.matcher(source); while (matcher.find()) { /*Log.d("VC", "(1): " + matcher.group(1)); Log.d("VC", "(2): " + matcher.group(2)); Log.d("VC", "(3): " + matcher.group(3));*/ Manga manga = new Manga(getServerID(), Util.getInstance().fromHtml(matcher.group(3).replaceAll("…", "").replaceAll("\\.", "").trim()).toString().replaceAll("…", ""), matcher.group(2), false); manga.setImages(matcher.group(1)); mangas.add(manga); } return mangas; } @Override public boolean hasList() { return false; } }