将书签修改为本地存储

old
zlj 6 years ago
parent ca7091a7e6
commit 32c909adb8
  1. 2
      app/src/main/assets/litepal.xml
  2. 66
      app/src/main/java/com/novel/read/activity/NovelReadActivity.kt
  3. 15
      app/src/main/java/com/novel/read/adapter/MarkAdapter.java
  4. 17
      app/src/main/java/com/novel/read/model/db/BookSignTable.java
  5. 15
      app/src/main/java/com/novel/read/model/db/BookSignTable.kt
  6. 113
      app/src/main/java/com/novel/read/model/db/dbManage/BookRepository.java
  7. 4
      app/src/main/java/com/novel/read/service/DownloadService.java
  8. 11
      app/src/main/res/values-night/strings.xml
  9. 11
      app/src/main/res/values-zh-rTW-night/strings.xml
  10. 11
      app/src/main/res/values-zh-rTW/strings.xml
  11. 11
      app/src/main/res/values/strings.xml

@ -2,7 +2,7 @@
<litepal>
<dbname value="readDb" />
<version value="6" />
<version value="7" />
<list>
<!--搜索记录表-->

@ -28,13 +28,16 @@ import com.novel.read.adapter.MarkAdapter
import com.novel.read.base.NovelBaseActivity
import com.novel.read.constants.Constant
import com.novel.read.constants.Constant.ResultCode.Companion.RESULT_IS_COLLECTED
import com.novel.read.event.*
import com.novel.read.event.BookArticleEvent
import com.novel.read.event.ErrorChapterEvent
import com.novel.read.event.FinishChapterEvent
import com.novel.read.event.RxBus
import com.novel.read.http.AccountManager
import com.novel.read.model.db.BookChapterBean
import com.novel.read.model.db.BookSignTable
import com.novel.read.model.db.CollBookBean
import com.novel.read.model.db.DownloadTaskBean
import com.novel.read.model.db.dbManage.BookRepository
import com.novel.read.model.protocol.MarkResp
import com.novel.read.service.DownloadMessage
import com.novel.read.service.DownloadService
import com.novel.read.utlis.BrightnessUtils
@ -53,6 +56,9 @@ import kotlinx.android.synthetic.main.layout_light.*
import kotlinx.android.synthetic.main.layout_read_mark.*
import java.util.*
/**
* 阅读页📕
*/
class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListener {
private var mCategoryAdapter: CategoryAdapter? = null
@ -60,7 +66,7 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
private var mCurrentChapter: TxtChapter? = null //当前章节
private var currentChapter = 0
private var mMarkAdapter: MarkAdapter? = null
private val mMarks = ArrayList<MarkResp.SignBean>()
private val mMarks = ArrayList<BookSignTable>()
private lateinit var mPageLoader: PageLoader
private var mTopInAnim: Animation? = null
private var mTopOutAnim: Animation? = null
@ -298,8 +304,13 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
tvAddMark.setOnClickListener {
if (mCurrentChapter != null) {
mMarkAdapter!!.edit = false
AccountManager.getInstance()
if (BookRepository.getInstance().getSignById(mCurrentChapter!!.chapterId)) {
ToastUtils.showNormalToast(this, getString(R.string.sign_exist))
return@setOnClickListener
}
BookRepository.getInstance()
.addSign(mBookId, mCurrentChapter!!.chapterId, mCurrentChapter!!.title)
updateMark()
}
}
@ -307,7 +318,8 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
if (mMarkAdapter!!.edit) {
val sign = mMarkAdapter!!.selectList
if (sign != "") {
AccountManager.getInstance().deleteSign(sign)
BookRepository.getInstance().deleteSign(sign)
updateMark()
}
mMarkAdapter!!.edit = false
} else {
@ -478,9 +490,8 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
@Subscribe
fun getBookArticle(event: BookArticleEvent) {
Log.e(TAG, "getBookArticle: ")
if (event.isFail) {
//获取章节失败处理
} else {
val chapterBeans = event.result!!.chapterBean
mPageLoader.collBook.bookChapters = chapterBeans
@ -511,39 +522,10 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
}
private fun updateMark() {
AccountManager.getInstance().getSignList(mBookId)
}
@Subscribe
fun addSign(event: AddBookSignEvent) {
if (event.isFail) {
ToastUtils.showNormalToast(this, "添加书签失败,请检查网络设置")
} else {
ToastUtils.showNormalToast(this, "添加书签成功")
updateMark()
}
}
@Subscribe
fun deleteSigin(event: DeleteBookSignEvent) {
if (event.isFail) {
ToastUtils.showNormalToast(this, event.er!!.msg)
} else {
ToastUtils.showNormalToast(this, event.result!!.msg)
updateMark()
}
}
@Subscribe
fun getSignList(event: GetBookSignEvent) {
if (event.isFail) {
ToastUtils.showNormalToast(this, "获取书签失败,请检查网络设置")
} else {
mMarks.clear()
mMarks.addAll(event.result!!.sign)
mMarks.addAll(BookRepository.getInstance().getSign(mBookId))
mMarkAdapter!!.notifyDataSetChanged()
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
when (keyCode) {
@ -597,7 +579,6 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
val result = Intent()
result.putExtra(RESULT_IS_COLLECTED, isCollected)
setResult(Activity.RESULT_OK, result)
// 退出
super.onBackPressed()
}
@ -632,12 +613,6 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
}
override fun onDownloadChange(pos: Int, status: Int, msg: String) {
// DownloadTaskBean bean = mDownloadAdapter.getItem(pos);
// bean.setStatus(status);
// if (DownloadTaskBean.STATUS_LOADING == status){
// bean.setCurrentChapter(Integer.valueOf(msg));
// }
// mDownloadAdapter.notifyItemChanged(pos);
Log.e(TAG, "onDownloadChange: $pos $status $msg")
if (msg == getString(R.string.download_success) || msg == getString(R.string.download_error)) {
@ -662,9 +637,6 @@ class NovelReadActivity : NovelBaseActivity(), DownloadService.OnDownloadListene
override fun onDownloadResponse(pos: Int, status: Int) {
// DownloadTaskBean bean = mDownloadAdapter.getItem(pos);
// bean.setStatus(status);
// mDownloadAdapter.notifyItemChanged(pos);
Log.e(TAG, "onDownloadResponse: $pos $status")
}

@ -12,6 +12,7 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.novel.read.R;
import com.novel.read.model.db.BookSignTable;
import com.novel.read.model.protocol.MarkResp;
import java.util.List;
@ -19,10 +20,10 @@ import java.util.List;
public class MarkAdapter extends RecyclerView.Adapter{
private Context mContext;
private List<MarkResp.SignBean> mList;
private List<BookSignTable> mList;
private boolean edit;
public MarkAdapter(List<MarkResp.SignBean> mList) {
public MarkAdapter(List<BookSignTable> mList) {
this.mList = mList;
}
@ -52,7 +53,7 @@ public class MarkAdapter extends RecyclerView.Adapter{
((ViewHolder) viewHolder).mCheck.setVisibility(View.GONE);
}
((ViewHolder) viewHolder).mTvMark.setText(mList.get(i).getContent());
((ViewHolder) viewHolder).mCheck.setChecked(mList.get(i).isEdit());
((ViewHolder) viewHolder).mCheck.setChecked(mList.get(i).getEdit());
}
}
@ -84,11 +85,11 @@ public class MarkAdapter extends RecyclerView.Adapter{
public String getSelectList() {
StringBuilder signs = new StringBuilder();
for (int i = 0; i < mList.size(); i++) {
if (mList.get(i).isEdit()) {
if (signs.equals("")){
signs.append(mList.get(i).getId());
if (mList.get(i).getEdit()) {
if (signs.toString().equals("")){
signs.append(mList.get(i).getArticleId());
}else {
signs.append(",").append(mList.get(i).getId());
signs.append(",").append(mList.get(i).getArticleId());
}
}
}

@ -1,17 +0,0 @@
package com.novel.read.model.db;
import org.litepal.crud.LitePalSupport;
import java.io.Serializable;
/**
* create by zlj on 2019/11/6
* describe: 书签数据库
*/
public class BookSignTable extends LitePalSupport implements Serializable {
private String bookId;
private String content;
private long saveTime;
}

@ -0,0 +1,15 @@
package com.novel.read.model.db
import org.litepal.crud.LitePalSupport
import java.io.Serializable
/**
* create by zlj on 2019/11/6
* describe: 书签数据库
*/
class BookSignTable(val bookId: String, val articleId: String, val content: String) :
LitePalSupport(), Serializable {
val saveTime: Long = System.currentTimeMillis()
var edit: Boolean = false
}

@ -6,6 +6,7 @@ import android.util.Log;
import com.novel.read.constants.Constant;
import com.novel.read.model.db.BookChapterBean;
import com.novel.read.model.db.BookRecordBean;
import com.novel.read.model.db.BookSignTable;
import com.novel.read.model.db.ChapterInfoBean;
import com.novel.read.model.db.CollBookBean;
import com.novel.read.model.db.DownloadTaskBean;
@ -35,7 +36,7 @@ import io.reactivex.SingleOnSubscribe;
/**
* Created by newbiechen on 17-5-8.
* 存储关于书籍内容的信息(CollBook(收藏书籍),BookChapter(书籍列表),ChapterInfo(书籍章节),BookRecord(记录))
* 存储关于书籍内容的信息(CollBook(收藏书籍),BookChapter(书籍列表),ChapterInfo(书籍章节),BookRecord(记录),BookSignTable书签)
*/
public class BookRepository {
@ -59,15 +60,6 @@ public class BookRepository {
//存储已收藏书籍
public void saveCollBookWithAsync(CollBookBean bean) {
// bean.saveAsync().listen(new SaveCallback() {
// @Override
// public void onFinish(boolean success) {
// System.out.println(success);
// }
// });
// LitePal.saveAll(bean.getBookChapters());
// bean.saveOrUpdate("bookId=?", bean.getId());
// bean.saveOrUpdateAsync("bookId=?", bean.getId());
bean.saveOrUpdate("bookId=?", bean.getId());
for (int i = 0; i < bean.getBookChapters().size(); i++) {
bean.getBookChapters().get(i).setCollBookBean(bean);
@ -78,7 +70,6 @@ public class BookRepository {
Log.e(TAG, "saveCollBookWithAsync: " + success);
}
});
// LitePal.saveAll(bean.getBookChapters());
}
/**
@ -105,23 +96,11 @@ public class BookRepository {
}
public void saveCollBook(CollBookBean bean) {
// mCollBookDao.insertOrReplace(bean);
ContentValues values = new ContentValues();
values.put("isUpdate", bean.isUpdate());
values.put("lastRead", bean.getLastRead());
values.put("lastChapter", bean.getLastChapter());
LitePal.updateAll(CollBookBean.class, values, "bookId=?", bean.getId());
// bean.setBookChapters(new ArrayList<>());
// bean.saveOrUpdate("bookId=?", bean.getId());
// for (int i = 0; i < bean.getBookChapters().size(); i++) {
// bean.getBookChapters().get(i).setCollBookBean(bean);
// }
// LitePal.saveAllAsync(bean.getBookChapters()).listen(new SaveCallback() {
// @Override
// public void onFinish(boolean success) {
// Log.e(TAG, "saveCollBookWithAsync: " + success);
// }
// });
}
public void saveCollBooks(List<CollBookBean> beans) {
@ -141,25 +120,11 @@ public class BookRepository {
* @param beans
*/
public void saveBookChaptersWithAsync(List<BookChapterBean> beans, CollBookBean collBookBean) {
// //先删除旧的章节,再异步储存新的章节
// LitePal.deleteAll(BookChapterBean.class, "bookId=?", collBookBean.getId());
collBookBean.saveOrUpdate("bookId=?", collBookBean.getId());
for (int i = 0; i < collBookBean.getBookChapters().size(); i++) {
collBookBean.getBookChapters().get(i).setCollBookBean(collBookBean);
collBookBean.getBookChapters().get(i).saveOrUpdateAsync("bookId=?", collBookBean.getId());
}
// LitePal.saveAllAsync(beans).listen(new SaveCallback() {
// @Override
// public void onFinish(boolean success) {
// if (success) {
//
// }
// Log.d(TAG, "saveBookChaptersWithAsync: " + "进行存储" + success);
// }
// });
}
/**
@ -185,8 +150,6 @@ public class BookRepository {
}
public void saveBookRecord(BookRecordBean bean) {
// mSession.getBookRecordBeanDao()
// .insertOrReplace(bean);
bean.saveOrUpdateAsync("bookId=?", bean.getBookId()).listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
@ -207,10 +170,6 @@ public class BookRepository {
public List<CollBookBean> getCollBooks() {
// return mCollBookDao
// .queryBuilder()
// .orderDesc(CollBookBeanDao.Properties.LastRead)
// .list();
List<CollBookBean> collBookBeans;
if (SpUtil.getBooleanValue(Constant.BookSort, false)) { //默认根据阅读时间排序
collBookBeans = LitePal.order("updated desc").find(CollBookBean.class);
@ -223,17 +182,6 @@ public class BookRepository {
//获取书籍列表
public List<BookChapterBean> getBookChaptersInRx(String bookId) {
// return Single.create(new SingleOnSubscribe<List<BookChapterBean>>() {
// @Override
// public void subscribe(SingleEmitter<List<BookChapterBean>> e) throws Exception {
// List<BookChapterBean> beans = mSession
// .getBookChapterBeanDao()
// .queryBuilder()
// .where(BookChapterBeanDao.Properties.BookId.eq(bookId))
// .list();
// e.onSuccess(beans);
// }
// });
List<CollBookBean> bookBeans = LitePal.where("bookId=?", bookId).find(CollBookBean.class, true);
if (bookBeans != null && bookBeans.size() > 0) {
return bookBeans.get(0).getBookChapters();
@ -244,10 +192,6 @@ public class BookRepository {
//获取阅读记录
public BookRecordBean getBookRecord(String bookId) {
// return mSession.getBookRecordBeanDao()
// .queryBuilder()
// .where(BookRecordBeanDao.Properties.BookId.eq(bookId))
// .unique();
List<BookRecordBean> beans = LitePal.where("bookId=?", bookId).find(BookRecordBean.class);
if (beans != null && beans.size() > 0) {
return beans.get(0);
@ -353,19 +297,46 @@ public class BookRepository {
}
}
// //先删除旧的章节,再异步储存新的章节
// LitePal.deleteAll(BookChapterBean.class, "taskName=?",bean.getTaskName());
//
// LitePal.saveAllAsync(bean.getBookChapters()).listen(new SaveCallback() {
// @Override
// public void onFinish(boolean success) {
// if (success) {
// bean.setBookChapters(bean.getBookChapters());
// bean.saveOrUpdate("taskName=?",bean.getTaskName());
// }
// Log.d(TAG, "saveBookChaptersWithAsync: " + "进行存储" + success);
// }
// });
/**
* 获取本地书签
*
* @param bookId 书籍Id
* @return 书签
*/
public List<BookSignTable> getSign(String bookId) {
return LitePal.where("bookId=?", bookId).find(BookSignTable.class);
}
/**
* 添加书签
*
* @param bookId bookId
* @param articleId articleId
* @param content content
*/
public void addSign(String bookId, String articleId, String content) {
BookSignTable bookSignTable = new BookSignTable(bookId, articleId, content);
bookSignTable.saveOrUpdate();
}
/**
* 删除书签
*
* @param articleId articleId
*/
public void deleteSign(String articleId) {
LitePal.deleteAll(BookSignTable.class, "articleId=?", articleId);
}
/**
* 根据id查询书签是否存在
*
* @param articleId
*/
public boolean getSignById(String articleId) {
List<BookSignTable> mList = LitePal.where("articleId=?", articleId).find(BookSignTable.class);
return mList.size() > 0;
}
}

@ -166,7 +166,7 @@ public class DownloadService extends BaseService {
//删除掉已经完成的章节
List<BookChapterBean> remainChapterBeans = newTask.getBookChapterList().subList(downloadTask.getLastChapter(), newTask.getLastChapter());
String taskName = newTask.getTaskName()
+ getString(R.string.nb_download_chapter_scope,
+ getString(R.string.download_chapter_scope,
downloadTask.getLastChapter(), newTask.getLastChapter());
//重置任务
newTask.setBookChapters(remainChapterBeans);
@ -187,7 +187,7 @@ public class DownloadService extends BaseService {
//重置名字
if (!isExist) {
String taskName = newTask.getTaskName()
+ getString(R.string.nb_download_chapter_scope,
+ getString(R.string.download_chapter_scope,
1, newTask.getLastChapter());
newTask.setTaskName(taskName);
postMessage(getString(R.string.cache_success));

@ -92,6 +92,7 @@
<string name="delete">删除</string>
<string name="add_bookmark">新增书签</string>
<string name="clear_bookmark">清除</string>
<string name="sign_exist">当前章节书签已存在</string>
<string name="like_book">喜欢本书就加入书架吧</string>
<string name="please_add_book">请先添加书籍</string>
@ -150,9 +151,9 @@
<string name="none"></string>
<!--DownloadTask:书籍下载-->
<string name="nb.download.add_succeed">成功添加到下载列表</string>
<string name="nb.download.exist">该任务已存在</string>
<string name="nb.download.load_all">已缓存全部章节</string>
<string name="nb.download.progress">%1$d/%2$d</string>
<string name="nb.download.chapter_scope">(%1$d-%2$d章)</string>
<string name="download_add_succeed">成功添加到下载列表</string>
<string name="download_exist">该任务已存在</string>
<string name="download_load_all">已缓存全部章节</string>
<string name="download_progress">%1$d/%2$d</string>
<string name="download_chapter_scope">(%1$d-%2$d章)</string>
</resources>

@ -89,6 +89,7 @@
<string name="delete">删除</string>
<string name="add_bookmark">新增書籤</string>
<string name="clear_bookmark">清除</string>
<string name="sign_exist">当前章节书签已存在</string>
<string name="like_book">喜歡本書就加入書架吧</string>
<string name="please_add_book">請先添加書籍</string>
@ -147,10 +148,10 @@
<string name="none"></string>
<!--DownloadTask:书籍下载-->
<string name="nb.download.add_succeed">成功添加到下載列表</string>
<string name="nb.download.exist">該任務已存在</string>
<string name="nb.download.load_all">以緩存全部章節</string>
<string name="nb.download.progress">%1$d/%2$d</string>
<string name="nb.download.chapter_scope">(%1$d-%2$d章)</string>
<string name="download_add_succeed">成功添加到下載列表</string>
<string name="download_exist">該任務已存在</string>
<string name="download_load_all">以緩存全部章節</string>
<string name="download_progress">%1$d/%2$d</string>
<string name="download_chapter_scope">(%1$d-%2$d章)</string>
</resources>

@ -89,6 +89,7 @@
<string name="delete">删除</string>
<string name="add_bookmark">新增書籤</string>
<string name="clear_bookmark">清除</string>
<string name="sign_exist">当前章节书签已存在</string>
<string name="like_book">喜歡本書就加入書架吧</string>
<string name="please_add_book">請先添加書籍</string>
@ -149,10 +150,10 @@
<string name="none"></string>
<!--DownloadTask:书籍下载-->
<string name="nb.download.add_succeed">成功添加到下載列表</string>
<string name="nb.download.exist">該任務已存在</string>
<string name="nb.download.load_all">以緩存全部章節</string>
<string name="nb.download.progress">%1$d/%2$d</string>
<string name="nb.download.chapter_scope">(%1$d-%2$d章)</string>
<string name="download_add_succeed">成功添加到下載列表</string>
<string name="download_exist">該任務已存在</string>
<string name="download_load_all">以緩存全部章節</string>
<string name="download_progress">%1$d/%2$d</string>
<string name="download_chapter_scope">(%1$d-%2$d章)</string>
</resources>

@ -92,6 +92,7 @@
<string name="delete">删除</string>
<string name="add_bookmark">新增书签</string>
<string name="clear_bookmark">清除</string>
<string name="sign_exist">当前章节书签已存在</string>
<string name="like_book">喜欢本书就加入书架吧</string>
<string name="please_add_book">请先添加书籍</string>
@ -152,9 +153,9 @@
<string name="none"></string>
<!--DownloadTask:书籍下载-->
<string name="nb.download.add_succeed">成功添加到下载列表</string>
<string name="nb.download.exist">该任务已存在</string>
<string name="nb.download.load_all">已缓存全部章节</string>
<string name="nb.download.progress">%1$d/%2$d</string>
<string name="nb.download.chapter_scope">(%1$d-%2$d章)</string>
<string name="download_add_succeed">成功添加到下载列表</string>
<string name="download_exist">该任务已存在</string>
<string name="download_load_all">已缓存全部章节</string>
<string name="download_progress">%1$d/%2$d</string>
<string name="download_chapter_scope">(%1$d-%2$d章)</string>
</resources>

Loading…
Cancel
Save