419 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			419 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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<Novel> nvs =  LitePal.where("novelId=?",novelId+"").limit(1).find(Novel.class);
 | |
|         if(nvs.size()>0){
 | |
|             return nvs.get(0);
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
|     public static List<Novel> 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<Novel> getLocalNovels(){
 | |
| 
 | |
|         return  LitePal.where("novelPath !=? ","").find(Novel.class);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     public static List<Novel> 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;
 | |
|     }
 | |
| }
 |