package ar.rulosoft.mimanganu.componentes; import android.content.Context; import java.io.File; import java.util.Comparator; import ar.rulosoft.mimanganu.servers.FromFolder; import ar.rulosoft.mimanganu.servers.ServerBase; import ar.rulosoft.mimanganu.utils.Paths; import ar.rulosoft.mimanganu.utils.Util; public class Chapter { public static final int NEW = -1; public static final int UNREAD = 0; public static final int READ = 1; public static final int READING = 2; private int id; private int pages; private int mangaID; private int pagesRead; private int readStatus; private String title; private String path; private String extra; private boolean finished; private boolean downloaded; private float volatile_order = -1; public Chapter(String title, String path) { super(); this.title = Util.getInstance().fromHtml(title).toString(); this.path = path; } public int getMangaID() { return mangaID; } public void setMangaID(int mangaID) { this.mangaID = mangaID; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public boolean isFinished() { return finished; } public void setFinished(boolean finished) { this.finished = finished; } @Override public String toString() { return title; } @Override public boolean equals(Object obj) { return (obj instanceof Chapter) && this.path.equalsIgnoreCase(((Chapter) obj).path); } public int getPagesRead() { return pagesRead; } public void setPagesRead(int pagesRead) { this.pagesRead = pagesRead; } public int getReadStatus() { return readStatus; } public void setReadStatus(int readStatus) { this.readStatus = readStatus; } public boolean isDownloaded() { return downloaded; } public void setDownloaded(boolean downloaded) { this.downloaded = downloaded; } public String getExtra() { return extra; } public void setExtra(String extra) { this.extra = extra; } public void delete(Context context, Manga manga, ServerBase s) { deleteImages(context, manga, s); Database.deleteChapter(context, this); } public void delete(Context context) { Manga manga = Database.getManga(context, getMangaID()); ServerBase s = ServerBase.getServer(manga.getServerId(), context); delete(context, manga, s); } public void deleteImages(Context context) { Manga manga = Database.getManga(context, getMangaID()); ServerBase s = ServerBase.getServer(manga.getServerId(), context); deleteImages(context, manga, s); } private void deleteImages(Context context, Manga manga, ServerBase serverBase) { String path; if (!(serverBase instanceof FromFolder)) path = Paths.generateBasePath(serverBase, manga, this, context); else path = getPath(); File fpath = new File(path); if(fpath.exists()) Util.getInstance().deleteRecursive(fpath); } public void reset(Context context, Manga manga, ServerBase s) { String path = Paths.generateBasePath(s, manga, this, context); File fpath = new File(path); if(fpath.exists()) Util.getInstance().deleteRecursive(fpath); //setPages(0); // this breaks "Sexual Hunter Riot" from KissManga no idea why setDownloaded(false); setPagesRead(0); Database.updateChapterPlusDownload(context, this); } public void freeSpace(Context context) { deleteImages(context); setDownloaded(false); Database.updateChapterPlusDownload(context, this); } public void freeSpace(Context context, Manga manga, ServerBase s) { deleteImages(context, manga, s); setDownloaded(false); Database.updateChapterPlusDownload(context, this); } public void reset(Context context) { Manga manga = Database.getManga(context, getMangaID()); ServerBase s = ServerBase.getServer(manga.getServerId(), context); reset(context, manga, s); } public void markRead(Context context, boolean read) { Database.markChapter(context, getId(), read); setReadStatus(read ? Chapter.READ : Chapter.UNREAD); if (read) { setPagesRead(getPages()); Database.updateChapterPlusDownload(context, this); } else { setPagesRead(0); Database.updateChapterPlusDownload(context, this); } } public void addChapterFirst(Manga manga) { manga.getChapters().add(0, this); } public static class Comparators { private static final String FLOAT_PATTERN = "([.,0123456789]+)"; private static final String STRING_END_PATTERN = "[^\\d]\\."; private static final String VOLUME_REMOVE_PATTERN = "[v|V][o|O][l|L].{0,1}\\d+"; public static Comparator<Chapter> TITLE_DESC = new Comparator<Chapter>() { @Override public int compare(Chapter c1, Chapter c2) { return c1.getTitle().compareTo(c2.getTitle()); } }; public static Comparator<Chapter> TITLE_ASC = new Comparator<Chapter>() { @Override public int compare(Chapter c1, Chapter c2) { return c2.getTitle().compareTo(c1.getTitle()); } }; public static Comparator<Chapter> DATABASE_ADDED_ASC = new Comparator<Chapter>() { @Override public int compare(Chapter c1, Chapter c2) { return (c1.getId() - c2.getId()); } }; public static Comparator<Chapter> DATABASE_ADDED_DESC = new Comparator<Chapter>() { @Override public int compare(Chapter c1, Chapter c2) { return (c2.getId() - c1.getId()); } }; private static String manga_title; public static Comparator<Chapter> NUMBERS_DESC = new Comparator<Chapter>() { @Override public int compare(Chapter c1, Chapter c2) { try { if (c1.volatile_order == -1){ String str1 = c1.getTitle().replace(manga_title,""); str1 = str1.replaceAll(VOLUME_REMOVE_PATTERN, " "); str1 = str1.replaceAll(STRING_END_PATTERN, " "); str1 = ServerBase.getFirstMatch(FLOAT_PATTERN, str1, ""); c1.volatile_order = Float.parseFloat(str1); } if (c2.volatile_order == -1) { String str2 = c2.getTitle().replace(manga_title,""); str2 = str2.replaceAll(VOLUME_REMOVE_PATTERN, " "); str2 = str2.replaceAll(STRING_END_PATTERN, " "); str2 = ServerBase.getFirstMatch(FLOAT_PATTERN, str2, ""); c2.volatile_order = Float.parseFloat(str2); } return (int) Math.floor(c2.volatile_order - c1.volatile_order); } catch (Exception e) { return 0; } } }; public static Comparator<Chapter> NUMBERS_ASC = new Comparator<Chapter>() { @Override public int compare(Chapter c1, Chapter c2) { try { if (c1.volatile_order == -1){ String str1 = c1.getTitle().replace(manga_title,""); str1 = str1.replaceAll(VOLUME_REMOVE_PATTERN, " "); str1 = str1.replaceAll(STRING_END_PATTERN, " "); str1 = ServerBase.getFirstMatch(FLOAT_PATTERN, str1, ""); c1.volatile_order = Float.parseFloat(str1); } if (c2.volatile_order == -1) { String str2 = c2.getTitle().replace(manga_title,""); str2 = str2.replaceAll(VOLUME_REMOVE_PATTERN, " "); str2 = str2.replaceAll(STRING_END_PATTERN, " "); str2 = ServerBase.getFirstMatch(FLOAT_PATTERN, str2, ""); c2.volatile_order = Float.parseFloat(str2); } return (int) Math.floor(c1.volatile_order - c2.volatile_order); } catch (Exception e) { return 0; } } }; public static void setManga_title(String title) { manga_title = title; } } }