429 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			429 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 boolean isShelfCanceld() { | ||
|  |         return shelfCanceld; | ||
|  |     } | ||
|  | 
 | ||
|  |     public void setShelfCanceld(boolean shelfCanceld) { | ||
|  |         this.shelfCanceld = shelfCanceld; | ||
|  |     } | ||
|  | 
 | ||
|  |     private boolean shelfCanceld =false; | ||
|  |     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; | ||
|  |     } | ||
|  | } |