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;
}
}