package ar.rulosoft.mimanganu.servers; import android.content.Context; import android.util.Log; 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; /** * Created by xtj-9182 on 23.04.2017. */ class MangaStream extends ServerBase { private static String HOST = "http://mangastream.com"; private static String[] order = {"All"}; MangaStream(Context context) { super(context); this.setFlag(R.drawable.flag_en); this.setIcon(R.drawable.mangastream); this.setServerName("MangaStream"); setServerID(ServerBase.MANGASTREAM); } @Override public ArrayList<Manga> getMangas() throws Exception { return null; } @Override public ArrayList<Manga> search(String search) throws Exception { ArrayList<Manga> mangas = new ArrayList<>(); ArrayList<String> tmpMangaPathList = new ArrayList<>(); String web = "http://mangastream.com/manga"; String source = getNavigatorAndFlushParameters().get(web); Pattern pattern = Pattern.compile("href=\"(http://mangastream\\.com/manga/[^\"]+?)\">([^\"]+?)</a>"); Matcher matcher = pattern.matcher(source); while (matcher.find()) { if (matcher.group(2).toLowerCase().contains(search.toLowerCase())) { /*Log.d("MS", "1: " + matcher.group(1)); Log.d("MS", "2: " + matcher.group(2));*/ Manga manga = new Manga(getServerID(), matcher.group(2), matcher.group(1), false); if(!tmpMangaPathList.contains(manga.getPath())) { mangas.add(manga); tmpMangaPathList.add(manga.getPath()); } } } 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()); //Log.d("MS", "m.p: " + manga.getPath()); // no Summary // no Status // no Authors // no Genres // Chapters Pattern p = Pattern.compile("href=\"(http://readms\\.net/[^\"]+?)\">([^\"]+?)</a>"); Matcher matcher = p.matcher(source); ArrayList<Chapter> chapters = new ArrayList<>(); String latestChapterPath = ""; while (matcher.find()) { /*Log.d("MS", "1: " + matcher.group(1)); Log.d("MS", "2: " + matcher.group(2));*/ chapters.add(0, new Chapter(matcher.group(2), matcher.group(1))); if (latestChapterPath.isEmpty()) latestChapterPath = matcher.group(1); } manga.setChapters(chapters); // Cover if (manga.getImages() == null || manga.getImages().isEmpty()) { manga.setImages(generateImageLink(latestChapterPath)); } } private String generateImageLink(String firstLink) { String image = ""; try { //Log.d("MS", "in: " + firstLink); String chapterLink; if (!firstLink.contains("http://readms")) { String source2 = getNavigatorAndFlushParameters().get(firstLink); chapterLink = getFirstMatchDefault("href=\"(http://readms\\.net/r/[^\"]+?)\">", source2, ""); } else { chapterLink = firstLink; } //Log.d("MS", "chapterLink: " + chapterLink); String source3 = getNavigatorAndFlushParameters().get(chapterLink); image = getFirstMatchDefault("\"(//img\\.readms\\.net/cdn/manga/[^\"]+?)\"", source3, ""); } catch (Exception e) { e.printStackTrace(); } if (image.length() > 2) { image = "http:" + image; Log.d("MS", "image: " + image); } return image; } @Override public String getPagesNumber(Chapter chapter, int page) { return chapter.getPath().replace("/1", "/") + page; } @Override public String getImageFrom(Chapter chapter, int page) throws Exception { //Log.d("MS", "source: " + this.getPagesNumber(chapter, page)); String source = ""; try { source = getNavigatorAndFlushParameters().get(this.getPagesNumber(chapter, page)); } catch (Exception e) { e.printStackTrace(); } String img = ""; try { img = getFirstMatchDefault("\"(//img\\.readms\\.net/cdn/manga/[^\"]+?)\"", source, "Error getting image"); } catch (Exception e) { e.printStackTrace(); } img = "http:" + img; //Log.d("MS", "img: " + img); return img; } @Override public void chapterInit(Chapter chapter) throws Exception { String source = getNavigatorAndFlushParameters().get(chapter.getPath()); //Log.d("MS", "p: " + chapter.getPath()); String pageNumber = getFirstMatchDefault("Last Page \\((\\d+)\\)</a>", source, "failed to get the number of pages"); //Log.d("MS", "pa: " + pageNumber); chapter.setPages(Integer.parseInt(pageNumber)); } @Override public ServerFilter[] getServerFilters() { return new ServerFilter[]{ new ServerFilter("Order", order, ServerFilter.FilterType.SINGLE) }; } private ArrayList<Manga> getMangasFromSource(String source) { Pattern pattern = Pattern.compile("href=\"(http://mangastream\\.com/manga/[^\"]+?)\">([^\"]+?)</a>"); final Matcher matcher = pattern.matcher(source); ArrayList<Manga> mangas = new ArrayList<>(); ArrayList<String> tmpMangaPathList = new ArrayList<>(); while (matcher.find()) { /*Log.d("MS", "1: " + matcher.group(1)); Log.d("MS", "2: " + matcher.group(2));*/ Manga manga = new Manga(getServerID(), matcher.group(2), matcher.group(1), false); if(!tmpMangaPathList.contains(manga.getPath())) { mangas.add(manga); tmpMangaPathList.add(manga.getPath()); } } return mangas; } @Override public ArrayList<Manga> getMangasFiltered(int[][] filters, int pageNumber) throws Exception { String web = "http://mangastream.com/manga"; String source = getNavigatorAndFlushParameters().get(web); return getMangasFromSource(source); } @Override public boolean hasList() { return false; } }