package com.novelbook.android.db; import android.text.TextUtils; import android.util.Log; import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.Constants; import org.litepal.LitePal; import org.litepal.annotation.Column; import org.litepal.crud.LitePalSupport; import org.w3c.dom.Text; import java.io.Serializable; import java.util.Date; import java.util.List; public class Novel extends LitePalSupport implements Serializable{ private int id; //@Column(unique = true, defaultValue = "0") private int novelId; private String name; private String infoUrl; private String domain; private String domainName; private String muluUrl; private String novelPath; private long lastReadPos; private int lastReadChapt=1; private String charset; private String novelType; private String smallNovelType; private String author; private String cover; private String chapterName; private String desc; private String progress; private long lastUpdateTime; private boolean isOnShelf; //是否入书架 private boolean isFinished; //是否完本 private boolean isUpdated; private boolean isTop;//置顶 private long readtime; //阅读时间 private int chaptCnt; //总章数 private long lastVisit;//最近浏览,如何设置默认时间? private String lastReadChaptName=""; public int getChaptCnt() { return chaptCnt; } public void setChaptCnt(int chaptCnt) { this.chaptCnt = chaptCnt; } public long getReadtime() { return readtime; } public void setReadtime(long readtime) { this.readtime = readtime; } public String getDomainName() { return domainName; } public void setDomainName(String domainName) { this.domainName = domainName; } public long getLastVisit() { return lastVisit; } public void setLastVisit(long lastVisit) { this.lastVisit = lastVisit; } public boolean isTop() { return isTop; } public void setTop(boolean top) { isTop = top; } public boolean isUpdated() { return isUpdated; } public void setUpdated(boolean updated) { isUpdated = updated; } public String getInfoUrl() { return infoUrl; } public void setInfoUrl(String infoUrl) { this.infoUrl = infoUrl; } public String getSmallNovelType() { return smallNovelType; } public void setSmallNovelType(String smallNovelType) { this.smallNovelType = smallNovelType; } public String getChapterName() { return filterBlankHtml(chapterName); } public void setChapterName(String chapterName) { this.chapterName = chapterName; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getProgress() { return progress; } public void setProgress(String progress) { this.progress = progress; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getNovelId() { return novelId; } public void setNovelId(int novelId) { this.novelId = novelId; } public String getName() { return name; } public void setName(String novelName) { this.name = novelName; } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } public String getMuluUrl() { return muluUrl; } public void setMuluUrl(String muluUrl) { this.muluUrl = muluUrl; } public String getNovelPath() { return novelPath; } public void setNovelPath(String novelPath) { this.novelPath = novelPath; } public long getLastReadPos() { return lastReadPos; } public void setLastReadPos(long lastReadPos) { this.lastReadPos = lastReadPos; } public int getLastReadChapt() { // if(lastReadChapt<=0){lastReadChapt=1;} return lastReadChapt; } public void setLastReadChapt(int lastReadChapt) { // lastReadChapt = lastReadChapt >0 ? lastReadChapt :1; this.lastReadChapt = lastReadChapt; } public String getCharset() { return charset; } public void setCharset(String charset) { this.charset = charset; } public String getNovelType() { return novelType; } public void setNovelType(String novelType) { this.novelType = novelType; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getCover() { return cover; } public void setCover(String cover) { this.cover = cover; } public long getLastUpdateTime() { return lastUpdateTime; } public void setLastUpdateTime(long lastUpateTime) { this.lastUpdateTime = lastUpateTime; } public boolean isOnShelf() { return isOnShelf; } public void setOnShelf(boolean onShelf) { isOnShelf = onShelf; } public boolean isFinished() { return isFinished; } public void setFinished(boolean finished) { isFinished = finished; } public boolean isLocalBook(){ return novelId==0; } public static Novel getNovelBySvrId(int novelId){ List nvs = LitePal.where("novelId=?",novelId+"").limit(1).find(Novel.class); if(nvs.size()>0){ return nvs.get(0); } return null; } public static List getNovelsOnShelf(){ // return LitePal.where("isOnShelf=?","1").order("isTop desc,isUpdated desc,lastVisit desc,lastUpdateTime desc" ).find(Novel.class); String order = "isTop desc,lastUpdateTime desc"; switch (Constants.SHELF_ORDER){ case 1://更新时间 order = "isTop desc,lastUpdateTime desc"; break; case 2: //最近阅读 order = "isTop desc,lastVisit desc"; break; case 3: //有更新 + 最近阅读 + 更新时间 order = " isTop desc,isUpdated desc"; break; case 4: //有更新 + 最近阅读 + 更新时间 order = " isTop desc,isUpdated desc,lastVisit desc,lastUpdateTime desc"; break; } return LitePal.where("isOnShelf=?","1").order(order ).find(Novel.class); } public static List getLocalNovels(){ return LitePal.where("novelPath !=? ","").find(Novel.class); } public static List getNovelsHistory(){ return LitePal.where("lastVisit>0").order("lastVisit desc").limit(50).find(Novel.class); } /** * 有没有新的更新 * @return */ /* public boolean isUpdated(){ return lastUpdateTime2 >0 && lastUpdateTime > lastUpdateTime2; } */ private void setValues(){ lastVisit = new Date().getTime(); } @Override public boolean save(){ setValues(); return super.save(); } @Override public int update(long id){ setValues(); // checkAndUpdate(); Log.d("checkshelf", String.format("checkshelf:novel %s going to update,isUpdated %s,lastvist %s", getName() ,isUpdated, CommonUtil.getDateString(lastVisit ))); /* try { throw new Exception("check update"); }catch (Exception e){ Log.e("checkshelf", "checkshelf ", e); }*/ try { return super.update(id); }catch (Exception e){ Log.e("NOVELDB", "update:error ", e); } return 0; } public void testUpdate(){ isUpdated=true; super.update(id); } public int checkAndUpdate(){ Novel nv = getNovelBySvrId(novelId); if(nv==null){ return 0; } /* if(lastUpdateTime > nv.lastVisit && lastUpdateTime > nv.lastUpdateTime){ isUpdated =true; }*/ // isUpdated = lastUpdateTime > nv.lastVisit && lastUpdateTime > nv.lastUpdateTime; isUpdated = lastUpdateTime > nv.lastUpdateTime; Log.d("Novel", String.format("book %s server lastUpdateTime %s, local lastupdatetime %s, local lastvist %s," + "is updated %s, lastUpdateTime - nv.lastVisit %s,lastUpdateTime - nv.lastUpdateTime %s " ,name ,CommonUtil.getDateString(lastUpdateTime) ,CommonUtil.getDateString(nv.lastUpdateTime) ,CommonUtil.getDateString(nv.lastVisit) ,isUpdated, lastUpdateTime - nv.lastVisit, lastUpdateTime - nv.lastUpdateTime ) ); boolean isLastChaptNotRead = TextUtils.isEmpty(nv.lastReadChaptName) || !( !TextUtils.isEmpty(getChapterName()) && (getChapterName().trim()).equals(nv.lastReadChaptName.trim())); //没看过最新章节 boolean isLastChaptUpdated = !TextUtils.isEmpty(getChapterName()) && !TextUtils.isEmpty(nv.getChapterName()) && !(getChapterName().trim().equals(nv.getChapterName().trim())); Log.d("Novel", String.format( " server lastUpdateTime ,server chaptername '%s',chaptername %s,lastreadchapt '%s'" , getChapterName(),nv.getChapterName(),nv.lastReadChaptName ) ); /* isUpdated = isUpdated && isLastReadchaptUpdated || isLastChaptUpdated ; boolean isLastChaptUpdated = !TextUtils.isEmpty(chapterName) && !TextUtils.isEmpty(nv.chapterName) && !(chapterName.equals(nv.chapterName)); */ Log.d("Novel", String.format( " is updated %s, server lastUpdateTime isLastChaptNotRead %s,isLastChaptUpdated %s" ,isUpdated,isLastChaptNotRead,isLastChaptUpdated ) ); // Log.d("Novel", String.format( " server lastUpdateTime ,server chaptername '%s',chaptername '%s',lastreadchapt '%s'" , chapterName,nv.chapterName,nv.lastReadChaptName ) ); if(isUpdated && !isLastChaptUpdated){ Log.e("Novel", "......................................checkAndUpdate:server lastUpdateTime last time updated but last chapter not.............................................. "); } isUpdated = isUpdated && isLastChaptUpdated || lastUpdateTime > nv.lastVisit; isUpdated = isUpdated && isLastChaptNotRead; if(!isUpdated){ setToDefault("isUpdated"); } return super.update(nv.id); } public int getMaxAge(){ int maxAge = Constants.MAXAGE_MULU; if( isFinished){ maxAge =Constants.MAXAGE_MAX; }else if(isUpdated){ maxAge = 0; } return maxAge; // return 0;// maxAge; } public String getLastReadChaptName() { return filterBlankHtml(lastReadChaptName); } public void setLastReadChaptName(String lastReadChaptName) { this.lastReadChaptName = lastReadChaptName; } private String filterBlankHtml(String targets){ String blank =" "; if(!TextUtils.isEmpty(targets) && targets.contains(blank)){ return targets.substring(targets.indexOf(blank)+blank.length()); } return targets; } }