package me.devsaki.hentoid.database.domains; import com.google.gson.annotations.Expose; import java.io.Serializable; import java.util.List; import me.devsaki.hentoid.activities.ASMHentaiActivity; import me.devsaki.hentoid.activities.BaseWebActivity; import me.devsaki.hentoid.activities.HentaiCafeActivity; import me.devsaki.hentoid.activities.HitomiActivity; import me.devsaki.hentoid.activities.NhentaiActivity; import me.devsaki.hentoid.activities.TsuminoActivity; import me.devsaki.hentoid.enums.AttributeType; import me.devsaki.hentoid.enums.Site; import me.devsaki.hentoid.enums.StatusContent; import me.devsaki.hentoid.util.AttributeMap; /** * Created by DevSaki on 09/05/2015. * Content builder */ public class Content implements Serializable { @Expose private String url; @Expose private String title; @Expose private AttributeMap attributes; @Expose private String coverImageUrl; @Expose private Integer qtyPages; @Expose private long uploadDate; @Expose private long downloadDate; @Expose private StatusContent status; @Expose private List<ImageFile> imageFiles; @Expose(serialize = false, deserialize = false) private double percent; @Expose private Site site; public AttributeMap getAttributes() { return attributes; } public Content setAttributes(AttributeMap attributes) { this.attributes = attributes; return this; } public int getId() { return url.hashCode(); } public String getUniqueSiteId() { String[] paths; switch (site) { case FAKKU: return url.substring(url.lastIndexOf("/") + 1); case PURURIN: paths = url.split("/"); return paths[2].replace(".html", "") + "-" + paths[1]; case HITOMI: paths = url.split("/"); return paths[1].replace(".html", "") + "-" + title.replaceAll("[^a-zA-Z0-9.-]", "_"); case ASMHENTAI: case NHENTAI: case TSUMINO: return url.replace("/", "") + "-" + site.getDescription(); case HENTAICAFE: return url.replace("/?p=", "") + "-" + site.getDescription(); default: return null; } } public Class<?> getWebActivityClass() { switch (site) { case HITOMI: return HitomiActivity.class; case NHENTAI: return NhentaiActivity.class; case ASMHENTAI: return ASMHentaiActivity.class; case HENTAICAFE: return HentaiCafeActivity.class; case TSUMINO: return TsuminoActivity.class; default: return BaseWebActivity.class; // Fallback for Pururin and FAKKU } } public String getCategory() { if (site == Site.FAKKU) { return url.substring(1, url.lastIndexOf("/")); } else { List<Attribute> attributesList = attributes.get(AttributeType.CATEGORY); if (attributesList != null && attributesList.size() > 0) { return attributesList.get(0).getName(); } } return null; } public String getUrl() { return url; } public Content setUrl(String url) { this.url = url; return this; } public String getGalleryUrl() { String galleryConst; switch (site) { case PURURIN: galleryConst = "/gallery"; break; case HITOMI: galleryConst = "/galleries"; break; case ASMHENTAI: case NHENTAI: galleryConst = "/g"; break; case TSUMINO: galleryConst = "/Book/Info"; break; case HENTAICAFE: default: galleryConst = ""; break; // Includes FAKKU & Hentai Cafe } return site.getUrl() + galleryConst + url; } public String getReaderUrl() { switch (site) { case HITOMI: return site.getUrl() + "/reader" + url; case NHENTAI: return getGalleryUrl() + "1/"; case TSUMINO: return site.getUrl() + "/Read/View" + url; case ASMHENTAI: return site.getUrl() + "/gallery" + url; case HENTAICAFE: return getGalleryUrl(); default: return null; } } public String getTitle() { return title; } public Content setTitle(String title) { this.title = title; return this; } public String getCoverImageUrl() { return coverImageUrl; } public Content setCoverImageUrl(String coverImageUrl) { this.coverImageUrl = coverImageUrl; return this; } public Integer getQtyPages() { return qtyPages; } public Content setQtyPages(Integer qtyPages) { this.qtyPages = qtyPages; return this; } public long getUploadDate() { return uploadDate; } public Content setUploadDate(long uploadDate) { this.uploadDate = uploadDate; return this; } public long getDownloadDate() { return downloadDate; } public Content setDownloadDate(long downloadDate) { this.downloadDate = downloadDate; return this; } public StatusContent getStatus() { return status; } public Content setStatus(StatusContent status) { this.status = status; return this; } public List<ImageFile> getImageFiles() { return imageFiles; } public Content setImageFiles(List<ImageFile> imageFiles) { this.imageFiles = imageFiles; return this; } public double getPercent() { return percent; } public Content setPercent(double percent) { this.percent = percent; return this; } public Site getSite() { return site; } public Content setSite(Site site) { this.site = site; return this; } }