812 lines
26 KiB
Plaintext
812 lines
26 KiB
Plaintext
|
package com.novelbook.android;
|
|||
|
|
|||
|
import android.Manifest;
|
|||
|
import android.app.AlertDialog;
|
|||
|
import android.content.BroadcastReceiver;
|
|||
|
import android.content.Context;
|
|||
|
import android.content.DialogInterface;
|
|||
|
import android.content.Intent;
|
|||
|
import android.content.IntentFilter;
|
|||
|
import android.graphics.pdf.PdfDocument;
|
|||
|
import android.net.Uri;
|
|||
|
import android.os.Build;
|
|||
|
import android.os.Handler;
|
|||
|
import android.os.Message;
|
|||
|
import android.support.v7.widget.GridLayoutManager;
|
|||
|
import android.support.v7.widget.LinearLayoutManager;
|
|||
|
import android.support.v7.widget.RecyclerView;
|
|||
|
import android.support.v7.widget.Toolbar;
|
|||
|
import android.text.TextUtils;
|
|||
|
import android.util.Log;
|
|||
|
import android.view.Gravity;
|
|||
|
import android.view.MenuItem;
|
|||
|
import android.view.View;
|
|||
|
import android.view.Window;
|
|||
|
import android.widget.Button;
|
|||
|
import android.widget.ImageView;
|
|||
|
import android.widget.LinearLayout;
|
|||
|
import android.widget.TextView;
|
|||
|
import android.widget.Toast;
|
|||
|
|
|||
|
import com.bumptech.glide.Glide;
|
|||
|
import com.google.gson.Gson;
|
|||
|
import com.novelbook.android.adapter.BookListAdapter;
|
|||
|
import com.novelbook.android.bean.NovelSites;
|
|||
|
import com.novelbook.android.db.Chapter;
|
|||
|
import com.novelbook.android.db.DownloadTask;
|
|||
|
import com.novelbook.android.db.Novel;
|
|||
|
import com.novelbook.android.filechooser.FileChooserActivity;
|
|||
|
import com.novelbook.android.netsubscribe.BookSubscribe;
|
|||
|
import com.novelbook.android.netsubscribe.MovieSubscribe;
|
|||
|
import com.novelbook.android.netutils.HttpMethods;
|
|||
|
import com.novelbook.android.netutils.NetUtil;
|
|||
|
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
|
|||
|
import com.novelbook.android.netutils.OnSuccessAndFaultSub;
|
|||
|
|
|||
|
import com.novelbook.android.service.ChapterDownloadSvrc;
|
|||
|
import com.novelbook.android.service.MyIntentService;
|
|||
|
import com.novelbook.android.service.ServiceDownload;
|
|||
|
import com.novelbook.android.utils.BookUtil;
|
|||
|
import com.novelbook.android.utils.CommonUtil;
|
|||
|
import com.novelbook.android.utils.Constants;
|
|||
|
import com.novelbook.android.utils.GaoSiTransForm;
|
|||
|
import com.novelbook.android.utils.GsonUtil;
|
|||
|
import com.novelbook.android.utils.ImageUtil;
|
|||
|
import com.novelbook.android.utils.MyImageLoader;
|
|||
|
import com.novelbook.android.utils.NovelParseUtil;
|
|||
|
import com.novelbook.android.utils.PageFactory;
|
|||
|
import com.youth.banner.loader.ImageLoader;
|
|||
|
|
|||
|
import org.json.JSONException;
|
|||
|
import org.json.JSONObject;
|
|||
|
import org.litepal.LitePal;
|
|||
|
|
|||
|
import java.io.File;
|
|||
|
import java.io.IOException;
|
|||
|
import java.net.MalformedURLException;
|
|||
|
import java.net.URI;
|
|||
|
import java.net.URL;
|
|||
|
import java.time.LocalDateTime;
|
|||
|
import java.util.ArrayList;
|
|||
|
import java.util.Date;
|
|||
|
import java.util.List;
|
|||
|
|
|||
|
import butterknife.BindView;
|
|||
|
import butterknife.OnClick;
|
|||
|
import jp.wasabeef.glide.transformations.BlurTransformation;
|
|||
|
import okhttp3.Call;
|
|||
|
import okhttp3.Callback;
|
|||
|
import okhttp3.Request;
|
|||
|
import okhttp3.Response;
|
|||
|
import okhttp3.ResponseBody;
|
|||
|
|
|||
|
import static com.novelbook.android.FileActivity.EXTERNAL_STORAGE_REQ_CODE;
|
|||
|
|
|||
|
public class BookActivity extends Activity_base {
|
|||
|
public static final String TAG=BookActivity.class.getSimpleName();
|
|||
|
private PageFactory pageFactory;
|
|||
|
int novelId = 0;
|
|||
|
// String muluUrl = "https://www.qu.la/book/390/";
|
|||
|
private Novel mNovel;
|
|||
|
private Chapter mChapter;
|
|||
|
|
|||
|
BookListAdapter mAdapterAuthor;
|
|||
|
// private BookListAdapter mAdapter;
|
|||
|
private List<Novel> mDataAuthor;
|
|||
|
|
|||
|
BookListAdapter mAdapterRelated;
|
|||
|
// private BookListAdapter mAdapter;
|
|||
|
private List<Novel> mDataRelated;
|
|||
|
;
|
|||
|
|
|||
|
//private Gson gson = new Gson();
|
|||
|
private List<Chapter> mChapters = new ArrayList<>();
|
|||
|
// @BindView(R.id.toolbar)
|
|||
|
// Toolbar toolbar;
|
|||
|
@BindView(R.id.rvBooklist)
|
|||
|
RecyclerView rvBooklistAuthor;
|
|||
|
@BindView(R.id.btnShelf)
|
|||
|
Button btnShelf;
|
|||
|
@BindView(R.id.imageView)
|
|||
|
ImageView imageView;
|
|||
|
@BindView(R.id.title)
|
|||
|
TextView txtTitle;
|
|||
|
@BindView(R.id.desc)
|
|||
|
TextView txtDesc;
|
|||
|
@BindView(R.id.author)
|
|||
|
TextView txtAuth;
|
|||
|
@BindView(R.id.category)
|
|||
|
TextView txtCategory;
|
|||
|
@BindView(R.id.txtDesc2)
|
|||
|
com.timqi.collapsibletextview.CollapsibleTextView txtDesc2;
|
|||
|
@BindView(R.id.txtLatestCate)
|
|||
|
TextView txtLatestCate;
|
|||
|
@BindView(R.id.btnCacheBook)
|
|||
|
Button btnCach;
|
|||
|
@BindView(R.id.rvBooklistRelated)
|
|||
|
RecyclerView rvBooklistRelated;
|
|||
|
Intent serviceIntent ;
|
|||
|
@BindView(R.id.imageViewHead)
|
|||
|
ImageView imageViewHead;
|
|||
|
|
|||
|
@BindView(R.id.ll_others)
|
|||
|
LinearLayout llAuthorMore;
|
|||
|
@BindView(R.id.tvAuthorMore)
|
|||
|
TextView tvAuthorMore;
|
|||
|
@BindView(R.id.tvTonglei)
|
|||
|
TextView tvTonglei;
|
|||
|
@BindView(R.id.txtLatestUpdate)
|
|||
|
TextView tvLastUpdate;
|
|||
|
|
|||
|
@BindView(R.id.progress)
|
|||
|
TextView tvProgress;
|
|||
|
@BindView(R.id.smallCate)
|
|||
|
TextView tvSmallcate;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public Intent getSvrIntent(){
|
|||
|
if(serviceIntent ==null){
|
|||
|
serviceIntent= new Intent(this, ServiceDownload.class);
|
|||
|
}
|
|||
|
return serviceIntent;
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public int getLayoutRes() {
|
|||
|
return R.layout.activity_book;
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
protected void initViews() {
|
|||
|
rvBooklistRelated.setVisibility(View.GONE);
|
|||
|
rvBooklistAuthor.setVisibility(View.GONE);
|
|||
|
tvTonglei.setVisibility(View.GONE);
|
|||
|
llAuthorMore. setVisibility(View.GONE);
|
|||
|
tvAuthorMore.setText( "");
|
|||
|
initiDownloadReceiver();
|
|||
|
/* if(Constants.SHOWAD){
|
|||
|
loadNativeBannerAd(mBannerContainer,BuildConfig.AD_SLOT_TOUTIAO_BANNER_NATIVE_ID);
|
|||
|
mBannerContainer.setVisibility(View.VISIBLE);
|
|||
|
}else{
|
|||
|
mBannerContainer.setVisibility(View.GONE);
|
|||
|
}*/
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
protected void setupToolbar() {
|
|||
|
super.setupToolbar();
|
|||
|
// toolbar.setTitleMarginBottom(1);
|
|||
|
// toolbar.setTitleTextAppearance(this,R.style.TitleText);
|
|||
|
/* toolbar.inflateMenu(R.menu.menu_book);//设置右上角的填充菜单
|
|||
|
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
|
|||
|
@Override
|
|||
|
public boolean onMenuItemClick(MenuItem item) {
|
|||
|
int menuItemId = item.getItemId();
|
|||
|
if (menuItemId == R.id.menuShelf) {
|
|||
|
Toast.makeText(BookActivity.this,"show book shelf",Toast.LENGTH_LONG);
|
|||
|
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
});*/
|
|||
|
}
|
|||
|
|
|||
|
public final static String EXTRA_BOOK ="book";
|
|||
|
@Override
|
|||
|
protected void setTitle() {
|
|||
|
// getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.book_activity_custom_title);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
protected void initData() {
|
|||
|
|
|||
|
checkPermission(BookActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, EXTERNAL_STORAGE_REQ_CODE, "添加图书需要此权限,请允许");
|
|||
|
|
|||
|
pageFactory = PageFactory.getInstance(getApplicationContext());
|
|||
|
// pageFactory.clear();
|
|||
|
setBookInfo();//set title ,data from novel list
|
|||
|
NetUtil.cancelRequest(mNovel.getNovelId());
|
|||
|
getBookInfo();
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置book list 传过来的基本信息
|
|||
|
*/
|
|||
|
private void setBookInfo() {
|
|||
|
mNovel = (Novel) getIntent().getSerializableExtra(EXTRA_BOOK);
|
|||
|
novelId = mNovel.getNovelId();
|
|||
|
this.setTitle(mNovel.getName());
|
|||
|
btnCach.setText(R.string.cache_novel);
|
|||
|
// ((TextView) findViewById(R.id.left_text)).setText(mNovel.getName());
|
|||
|
if(toolbar!=null) {
|
|||
|
toolbar.setTitle(mNovel.getName());
|
|||
|
}
|
|||
|
}
|
|||
|
@Override
|
|||
|
protected void onNewIntent(Intent intent) {
|
|||
|
super.onNewIntent(intent);
|
|||
|
Log.e("tag", "onNewINtent执行了");
|
|||
|
setIntent(intent);
|
|||
|
initData();
|
|||
|
}
|
|||
|
private void setNovelsSameAuthor(){
|
|||
|
|
|||
|
|
|||
|
if(mDataAuthor!=null && mDataAuthor.size() >0){
|
|||
|
tvAuthorMore.setText(mNovel.getAuthor()+ " 还写过");
|
|||
|
llAuthorMore .setVisibility(View.VISIBLE);
|
|||
|
} else{
|
|||
|
return;
|
|||
|
}
|
|||
|
rvBooklistAuthor.setVisibility(View.VISIBLE);
|
|||
|
// mAdapterAuthor = getBookListAdapter(mDataAuthor,R.layout.recycle_list_item_horizon);
|
|||
|
// rvBooklistAuthor.setLayoutManager(new LinearLayoutManager(this));
|
|||
|
mAdapterAuthor = getBookListAdapter(mDataAuthor,R.layout.recycle_list_item_horizon);
|
|||
|
rvBooklistAuthor.setLayoutManager(new LinearLayoutManager(this));
|
|||
|
|
|||
|
rvBooklistAuthor.setAdapter(mAdapterAuthor);
|
|||
|
loadListAd(mAdapterAuthor, 1 ,false);
|
|||
|
|
|||
|
}
|
|||
|
private void setNovelsRelated(){
|
|||
|
|
|||
|
if(mDataRelated!=null && mDataRelated.size() >0){
|
|||
|
tvTonglei.setVisibility(View.VISIBLE);
|
|||
|
|
|||
|
}else
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
rvBooklistRelated.setVisibility(View.VISIBLE);
|
|||
|
/* mAdapterRelated = getBookListAdapter(mDataRelated,R.layout.recycle_list_item);
|
|||
|
rvBooklistRelated.setLayoutManager(new GridLayoutManager(this, Constants.NOVEL_SPAN_CNT));*/
|
|||
|
mAdapterRelated = getBookListAdapter(mDataRelated,R.layout.recycle_list_item_horizon);
|
|||
|
rvBooklistRelated.setLayoutManager(new LinearLayoutManager(this));
|
|||
|
rvBooklistRelated.setAdapter(mAdapterRelated);
|
|||
|
|
|||
|
loadListAd (mAdapterRelated, 1 ,false);
|
|||
|
|
|||
|
}
|
|||
|
/**
|
|||
|
* 设置服务器传来的详细信息
|
|||
|
*/
|
|||
|
public void setBookDetailInfo() {
|
|||
|
setShelfButtonText();
|
|||
|
//this.setTitle(mNovel.getName());//why not apply
|
|||
|
this.txtAuth.setText(mNovel.getAuthor());
|
|||
|
this.txtCategory.setText(mNovel.getNovelType());
|
|||
|
// this.txtDesc.setText(mNovel.getDesc ());
|
|||
|
this.txtTitle.setText(mNovel.getName());
|
|||
|
this.txtDesc2.setFullString(mNovel.getDesc ());
|
|||
|
this.tvSmallcate.setText(mNovel.getSmallNovelType());
|
|||
|
this.tvProgress.setText(mNovel.getProgress());
|
|||
|
|
|||
|
// txtDesc2.setCollapsedLines(2);
|
|||
|
// txtDesc2.setSuffixColor(R.color.colorPrimary);
|
|||
|
|
|||
|
// txtDesc2.setExpanded(false);
|
|||
|
// txtDesc2.setSuffixTrigger(false);
|
|||
|
this.txtLatestCate.setText(mNovel.getChapterName());
|
|||
|
tvLastUpdate.setText(CommonUtil.getDateString( mNovel.getLastUpdateTime()));
|
|||
|
|
|||
|
loadImageView(mNovel.getCover(),imageView);
|
|||
|
try {
|
|||
|
gaosiHeadPic();
|
|||
|
}catch (Exception e){
|
|||
|
Log.e(TAG, "setBookDetailInfo: gosiheadpic error", e);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
void gaosiHeadPic(){
|
|||
|
//new BlurTransformation(BookActivity.this, 10)).into(mImageView);
|
|||
|
/* URL url = null;
|
|||
|
try {
|
|||
|
url = new URL( NetUtil.getCoverUrl(mNovel.getCover()));
|
|||
|
} catch (MalformedURLException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}*/
|
|||
|
String a =Uri.decode(NetUtil.getCoverUrl(mNovel.getCover()));
|
|||
|
Glide.with(BookActivity.this)
|
|||
|
.load( Uri.decode(NetUtil.getCoverUrl(mNovel.getCover())))
|
|||
|
.dontAnimate()
|
|||
|
// .error(R.mipmap.side_bg2)
|
|||
|
.transform(new GaoSiTransForm(this, 150, 5)) // "14":模糊度;"3":图片缩放3倍后再进行模糊
|
|||
|
.into(imageViewHead);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// Glide.with(this).load(url) .transform(new BlurTransformation(BookActivity.this, 10)).into(imageViewHead);
|
|||
|
// Glide.with(this).load(imageView.getDrawable()).transform(new BlurTransformation(BookActivity.this, 10)).into(imageViewHead);
|
|||
|
}
|
|||
|
|
|||
|
void setShelfButtonText() {
|
|||
|
String title = mNovel.isOnShelf() ? "移出书架" : "加入书架";
|
|||
|
btnShelf.setText(title);
|
|||
|
}
|
|||
|
|
|||
|
@OnClick({R.id.btnRead, R.id.btnCacheBook, R.id.btnShelf,R.id.llCate})
|
|||
|
void submitButton(View view) {
|
|||
|
Intent intent;
|
|||
|
if(mNovel==null){
|
|||
|
return;
|
|||
|
}
|
|||
|
switch (view.getId()) {
|
|||
|
|
|||
|
case R.id.btnRead:
|
|||
|
readBook();
|
|||
|
//testBook();
|
|||
|
|
|||
|
// openBook(new Novel() );
|
|||
|
break;
|
|||
|
case R.id.btnCacheBook:
|
|||
|
cacheBook();
|
|||
|
break;
|
|||
|
|
|||
|
case R.id.btnShelf:
|
|||
|
shelfBook();
|
|||
|
break;
|
|||
|
case R.id.llCate:
|
|||
|
|
|||
|
// Log.d(TAG, String .format("prepareBook: current book %s, start to open book cate of %s" , mNovel.getName() , pageFactory.getNovle().getName()));
|
|||
|
|
|||
|
intent = new Intent(BookActivity.this, MarkActivity.class);
|
|||
|
startActivity(intent);;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
private void shelfBook() {
|
|||
|
mNovel.setOnShelf(!mNovel.isOnShelf());
|
|||
|
mNovel.save();
|
|||
|
setShelfButtonText();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
Handler handler = new Handler() {
|
|||
|
@Override
|
|||
|
public void handleMessage(Message msg) {
|
|||
|
|
|||
|
int wt = msg.what;
|
|||
|
|
|||
|
if (msg.what == 1) {
|
|||
|
setBookDetailInfo();
|
|||
|
} else if (msg.what == 2) //准备数据,启动service
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Toast.makeText(BookActivity.this, "已加入下载队列1", Toast.LENGTH_LONG).show();
|
|||
|
} else if (msg.what == 3) {
|
|||
|
Toast.makeText(BookActivity.this, "获取目录信息失败,下载失败", Toast.LENGTH_LONG).show();
|
|||
|
}else if (msg.what == 4) {
|
|||
|
Toast.makeText(BookActivity.this, String.format("亲,小说《%s》已经缓存完成了", mNovel.getName()), Toast.LENGTH_LONG).show();
|
|||
|
}else if (msg.what == 5) {
|
|||
|
Toast.makeText(BookActivity.this, String.format("亲,小说《%s》已经在缓存队列了,请耐心等待", mNovel.getName()), Toast.LENGTH_LONG).show();
|
|||
|
}
|
|||
|
hideProgress();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
private void readBook() {
|
|||
|
if (mNovel == null) {
|
|||
|
Toast.makeText(this, "网络错误", Toast.LENGTH_LONG);
|
|||
|
return;
|
|||
|
}
|
|||
|
ReadActivity.openBook(mNovel, BookActivity.this);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
private void getChapters() {
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
boolean test=false;
|
|||
|
private void cacheBook() {
|
|||
|
|
|||
|
if(test)
|
|||
|
{
|
|||
|
|
|||
|
String url[] = {
|
|||
|
"https://img-blog.csdn.net/20160903083245762",
|
|||
|
"https://img-blog.csdn.net/20160903083252184",
|
|||
|
"https://img-blog.csdn.net/20160903083257871",
|
|||
|
"https://img-blog.csdn.net/20160903083257871",
|
|||
|
"https://img-blog.csdn.net/20160903083311972",
|
|||
|
"https://img-blog.csdn.net/20160903083319668",
|
|||
|
"https://img-blog.csdn.net/20160903083326871"
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
Intent intent = new Intent(this, MyIntentService.class);
|
|||
|
for (int i=0;i<7;i++) {//循环启动任务
|
|||
|
intent.putExtra(MyIntentService.DOWNLOAD_URL,url[i]);
|
|||
|
intent.putExtra(MyIntentService.INDEX_FLAG,i);
|
|||
|
startService(intent);
|
|||
|
}
|
|||
|
|
|||
|
intent = getSvrIntent();//new Intent(this, ServiceDownload.class);;;
|
|||
|
for(int i=0;i<5;i++)
|
|||
|
{
|
|||
|
intent.putExtra("taskId",i);
|
|||
|
startService( intent);
|
|||
|
}
|
|||
|
|
|||
|
// intent = new Intent(this, ChapterDownloadSvrc.class);;;
|
|||
|
// for(int i=0;i<3;i++)
|
|||
|
{
|
|||
|
// intent.putExtra("taskId",i);
|
|||
|
// startService( intent);
|
|||
|
}
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// if (LitePal.where("novelId = ?", mNovel.getId() + "").count("DownloadTask") > 0) {
|
|||
|
|
|||
|
// }
|
|||
|
|
|||
|
|
|||
|
new Thread() {
|
|||
|
@Override
|
|||
|
public void run() {
|
|||
|
int slepttime = 0;
|
|||
|
while (slepttime < 100 && pageFactory.getChapters().size() == 0) {
|
|||
|
try {
|
|||
|
sleep(50);
|
|||
|
slepttime++;
|
|||
|
} catch (InterruptedException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
if (pageFactory.getChapters().size() == 0) {
|
|||
|
|
|||
|
handler.sendEmptyMessage(3);
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
|
|||
|
List<DownloadTask> dts = LitePal.where("novelId = ? and domain =?", mNovel.getId() + "",mNovel.getDomain()).limit(1).find(DownloadTask.class);
|
|||
|
if (dts.size() > 0) {
|
|||
|
if (dts.get(0).getStatus() == 1) {
|
|||
|
|
|||
|
handler.sendEmptyMessage(4);
|
|||
|
|
|||
|
} else {
|
|||
|
handler.sendEmptyMessage(5);
|
|||
|
|
|||
|
startDownloadService(dts.get(0).getId());
|
|||
|
// startService( getSvrIntent());
|
|||
|
}
|
|||
|
|
|||
|
return;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
DownloadTask dt = new DownloadTask();
|
|||
|
dt.setDomain(mNovel.getDomain());
|
|||
|
dt.setDomainName(mNovel.getDomainName());
|
|||
|
dt.setFinishedChpats(0);
|
|||
|
dt.setNovelId(mNovel.getId());
|
|||
|
dt.setStatus(0);
|
|||
|
// dt.setTotalChapts(mNovel.getChaptCnt());
|
|||
|
dt.setTotalChapts(pageFactory.getChapters().size());
|
|||
|
dt.setNovelTitle(mNovel.getName());
|
|||
|
|
|||
|
dt.save();
|
|||
|
// LitePal.deleteAll("chapter","novelId=?",mNovel.getId()+"");
|
|||
|
for (Chapter chapter : pageFactory.getChapters()) {
|
|||
|
chapter.setNovelId(mNovel.getId());
|
|||
|
chapter.setTaskId(dt.getId());
|
|||
|
chapter.save();
|
|||
|
}
|
|||
|
startDownloadService(dt.getId());
|
|||
|
|
|||
|
handler.sendEmptyMessage(2);
|
|||
|
}
|
|||
|
|
|||
|
// Toast.makeText(BookActivity.this,"已加入下载队列2",Toast.LENGTH_LONG).show();
|
|||
|
}
|
|||
|
}.start();
|
|||
|
|
|||
|
|
|||
|
showProgressDialog(false, "正在加入到队列,请等待");
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
private void startDownloadService(int taskId) {
|
|||
|
Intent serviceIntent = getSvrIntent();
|
|||
|
// serviceIntent.putExtra("taskId",taskId);
|
|||
|
// serviceIntent.putExtra("start",true);
|
|||
|
startService(serviceIntent);
|
|||
|
}
|
|||
|
|
|||
|
void openBook(Novel book) {
|
|||
|
|
|||
|
final String path = book.getNovelPath();
|
|||
|
if (null == path) {
|
|||
|
List<Novel> bookLists = LitePal.findAll(Novel.class);
|
|||
|
if (bookLists.size() > 0) {
|
|||
|
openBook(bookLists.get(0));
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
File file = new File(path);
|
|||
|
if (!file.exists()) {
|
|||
|
|
|||
|
//to get book content txt from web
|
|||
|
new AlertDialog.Builder(this)
|
|||
|
.setTitle(this.getString(R.string.app_name))
|
|||
|
.setMessage(path + "文件不存在,是否删除该书本?")
|
|||
|
.setPositiveButton("删除", new DialogInterface.OnClickListener() {
|
|||
|
@Override
|
|||
|
public void onClick(DialogInterface dialog, int which) {
|
|||
|
LitePal.deleteAll(Novel.class, "bookpath = ?", path);
|
|||
|
|
|||
|
}
|
|||
|
}).setCancelable(true).show();
|
|||
|
return;
|
|||
|
}
|
|||
|
// ReadActivity.openBook(book ,null,this);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void getBookInfo() {
|
|||
|
|
|||
|
boolean isLocalDbExist = LitePal.isExist(Novel.class, "novelId=?", novelId+"");
|
|||
|
|
|||
|
showProgressDialog(false,"正在加载...");
|
|||
|
BookSubscribe.getNovel(novelId, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
|
|||
|
@Override
|
|||
|
public void onSuccess(String result) {
|
|||
|
//成功
|
|||
|
|
|||
|
Novel nv;
|
|||
|
nv = gson.fromJson(result, Novel.class);
|
|||
|
// nv = GsonUtil.getNovel(result);
|
|||
|
|
|||
|
if (!isLocalDbExist) {
|
|||
|
// nv.saveAsync();
|
|||
|
nv.save();
|
|||
|
mNovel =nv;
|
|||
|
} else {
|
|||
|
nv.checkAndUpdate();
|
|||
|
// nv.updateAll("novelId=?", novelId+""); //
|
|||
|
mNovel = Novel.getNovelBySvrId(novelId);
|
|||
|
}
|
|||
|
|
|||
|
if (null != mNovel) {
|
|||
|
handler.sendEmptyMessage(1);
|
|||
|
}
|
|||
|
|
|||
|
pageFactory.prepareBook(mNovel);
|
|||
|
|
|||
|
// Toast.makeText(BookActivity.this,"Novel 请求成功:"+result,Toast.LENGTH_SHORT).show();
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void onFault(String errorMsg) {
|
|||
|
//失败
|
|||
|
Toast.makeText(BookActivity.this, mNovel.getName() +" 加载失败", Toast.LENGTH_SHORT).show();
|
|||
|
mNovel = Novel.getNovelBySvrId(novelId);
|
|||
|
if (null != mNovel) {
|
|||
|
handler.sendEmptyMessage(1);
|
|||
|
pageFactory.prepareBook(mNovel);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}, BookActivity.this));
|
|||
|
|
|||
|
BookSubscribe.getNovelsRelated(novelId, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
|
|||
|
@Override
|
|||
|
public void onSuccess(String result) {
|
|||
|
//成功
|
|||
|
try {
|
|||
|
|
|||
|
mDataRelated = GsonUtil. parserJsonArray(result,Constants.BLOCK_TITLE_NOVELS);
|
|||
|
setNovelsRelated();
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void onFault(String errorMsg) {
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}, BookActivity.this));
|
|||
|
|
|||
|
BookSubscribe.getNovelsSameAuthor(novelId, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
|
|||
|
@Override
|
|||
|
public void onSuccess(String result) {
|
|||
|
//成功
|
|||
|
try {
|
|||
|
|
|||
|
mDataAuthor = GsonUtil. parserJsonArray(result,Constants.BLOCK_TITLE_NOVELS);
|
|||
|
setNovelsSameAuthor();
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void onFault(String errorMsg) {
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}, BookActivity.this));
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
void readChapters( String url){
|
|||
|
|
|||
|
|
|||
|
//to get mulu list
|
|||
|
|
|||
|
url = muluUrl;// "https://www.qu.la/book/161/";//"https://www.qu.la/book/746/";
|
|||
|
Request request = new Request.Builder()
|
|||
|
.url(url)
|
|||
|
// .header("User-Agent", "OkHttp Example")
|
|||
|
.build();
|
|||
|
HttpMethods.getOkClient().newCall(request).enqueue(new Callback() {
|
|||
|
@Override
|
|||
|
public void onFailure(Call call, IOException e) {
|
|||
|
Log.d(TAG, "onFailure: " + e.getMessage());
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void onResponse(Call call, Response response){
|
|||
|
ResponseBody body = response.body();
|
|||
|
if (body != null) {
|
|||
|
|
|||
|
try {
|
|||
|
String bodyStr = body.string();
|
|||
|
Log.d(TAG, "onResponse: " +bodyStr);
|
|||
|
onResponseProcess(bodyStr,url);
|
|||
|
ReadActivity.openBook(mNovel ,mChapter,BookActivity.this);
|
|||
|
} catch (IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}finally {
|
|||
|
body.close();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
void onResponseProcess( String content ,String url){
|
|||
|
// HttpResult result ;
|
|||
|
// HttpResult result2 = null;
|
|||
|
try {
|
|||
|
JSONObject siteJson = new JSONObject();
|
|||
|
siteJson.put("chapterUrlRegexOnMulu", "");
|
|||
|
siteJson.put("chapterUrlPattern", "/book/[\\d]+/[\\d]+\\.html$");
|
|||
|
siteJson.put("chapterUrlRegexOnMulu", "<dd> <a[^>]*href=\"(/book/[\\d]+/[\\d]+\\.html)\">([^<]+)</a></dd>");
|
|||
|
mChapters = NovelParseUtil.getChapters(url, content, siteJson);
|
|||
|
if (mChapters != null) {
|
|||
|
int lastReadChapt = mNovel.getLastReadChapt();
|
|||
|
// int index =lastReadChapt*2-2;
|
|||
|
|
|||
|
lastReadChapt = lastReadChapt >=mChapters.size() ? mChapters.size() -1:lastReadChapt;
|
|||
|
lastReadChapt = lastReadChapt <=0 ? 1:lastReadChapt;
|
|||
|
mChapter =mChapters.get(lastReadChapt-1);
|
|||
|
|
|||
|
}
|
|||
|
} catch (JSONException e) {
|
|||
|
// } catch (JSONException | IOException e) {
|
|||
|
e.printStackTrace();
|
|||
|
} finally {
|
|||
|
// result.close();
|
|||
|
// if (result2 != null) result2.close();
|
|||
|
}
|
|||
|
}*/
|
|||
|
|
|||
|
//----------------绑定列表
|
|||
|
|
|||
|
|
|||
|
|
|||
|
@Override
|
|||
|
protected void onResume() {
|
|||
|
super.onResume();
|
|||
|
registerReceiver(receiver,filter);
|
|||
|
if(mNovel!=null && mNovel.getId()>0) {
|
|||
|
mNovel = LitePal.find(Novel.class, mNovel.getId()); //更新最新进度
|
|||
|
if(pageFactory==null){
|
|||
|
pageFactory = PageFactory.getInstance(getApplicationContext());
|
|||
|
}
|
|||
|
if( pageFactory.isWorking() && ( pageFactory.getNovle()==null || mNovel.getId() !=pageFactory.getNovle().getId())){
|
|||
|
pageFactory.prepareBook(mNovel);
|
|||
|
}
|
|||
|
setShelfButtonText();
|
|||
|
}
|
|||
|
|
|||
|
// View v =findViewById(R.id.head_img);
|
|||
|
// v.measure(0,0);
|
|||
|
// BlurKit.getInstance().blur(v, 20);
|
|||
|
// BlurKit.getInstance().fastBlur(v,20, 0.3f);
|
|||
|
}
|
|||
|
@Override
|
|||
|
public void onPause() {
|
|||
|
super.onPause();
|
|||
|
unregisterReceiver(receiver);
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void fillData() {
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
protected void onStart() {
|
|||
|
super.onStart();
|
|||
|
// blurLayout.startBlur();
|
|||
|
// blurLayout.lockView();
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
protected void onStop() {
|
|||
|
super.onStop();
|
|||
|
// blurLayout.pauseBlur();
|
|||
|
}
|
|||
|
|
|||
|
private IntentFilter filter;
|
|||
|
DownloadProcessReceiver receiver;
|
|||
|
void initiDownloadReceiver(){
|
|||
|
if(filter==null) {
|
|||
|
filter = new IntentFilter("ServiceDownload.ChapterContent.finished");
|
|||
|
filter.addCategory(Intent.CATEGORY_DEFAULT);
|
|||
|
receiver = new DownloadProcessReceiver();
|
|||
|
}
|
|||
|
}
|
|||
|
class DownloadProcessReceiver extends BroadcastReceiver {
|
|||
|
|
|||
|
@Override
|
|||
|
public void onReceive(Context context, Intent intent){
|
|||
|
int novelId =0;
|
|||
|
int progress=0;
|
|||
|
if( intent.hasExtra("novelId")){
|
|||
|
novelId = intent.getIntExtra("novelId",0);
|
|||
|
}
|
|||
|
if( intent.hasExtra("progress")){
|
|||
|
progress = intent.getIntExtra("progress",0);
|
|||
|
}
|
|||
|
|
|||
|
if(novelId == mNovel.getId()){
|
|||
|
try {
|
|||
|
String cpsize = pageFactory.getChapters().size() >0 ? pageFactory.getChapters().size() +"":"--";
|
|||
|
btnCach.setText(progress + "/" + cpsize);
|
|||
|
}catch (Exception e){
|
|||
|
Log.e(TAG, "onReceive: ", e);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|