package com.llf.common.ui.girl.presenter; import android.content.Context; import com.llf.common.db.JcodeDao; import com.llf.common.entity.JcodeEntity; import com.llf.common.ui.girl.contract.GirlContract; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.util.ArrayList; import java.util.List; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action0; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by llf on 2017/3/28. * */ public class GirlPresenter implements GirlContract.Presenter { private GirlContract.View view; private List<JcodeEntity> jcodes = new ArrayList<>(); private JcodeDao mJcodeDao; public GirlPresenter(GirlContract.View view) { this.view = view; } @Override public void start() { } @Override public void loadData(String url) { Observable.just(url) .map(new Func1<String, List<JcodeEntity>>() { @Override public List<JcodeEntity> call(String s) { return getJcodes(s); } }) .subscribeOn(Schedulers.io()) .doOnSubscribe(new Action0() { @Override public void call() { // view.showLoading(); } }) .subscribeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<JcodeEntity>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { view.showErrorTip("您已进入没有网络的二次元"); } @Override public void onNext(List<JcodeEntity> jcodeEntities) { view.returnData(jcodeEntities); } }); } @Override public void addRecord(Context context, final JcodeEntity entity) { mJcodeDao = new JcodeDao(context); Observable.create(new Observable.OnSubscribe<Boolean>() { @Override public void call(Subscriber<? super Boolean> subscriber) { subscriber.onNext(mJcodeDao.insertRecord(entity) == 0 ? false : true); subscriber.onCompleted(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Boolean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { view.showErrorTip("添加发现出错"); } @Override public void onNext(Boolean result) { } }); } private List<JcodeEntity> getJcodes(String url) { jcodes.clear(); try { Document document = Jsoup.connect(url).get(); Elements contents = document.select(".archive-item"); for (Element e : contents) { JcodeEntity entity = new JcodeEntity(); entity.setTitle(e.select("a[href]").attr("title")); entity.setDetailUrl(e.select("h3").select("a[href]").attr("href")); entity.setImgUrl(e.select(".covercon").select("img[src]").attr("src")); entity.setContent(e.select(".archive-detail").select("p").text()); entity.setAuthor(e.select(".list-user").select("span").text()); entity.setAuthorImg(e.select(".list-user").select("img").attr("src")); entity.setAuthorUrl(e.select(".list-user").select("a").attr("href")); Elements msg = e.select(".glyphicon-class"); entity.setWatch(msg.get(0).text()); entity.setComments(msg.get(1).text()); entity.setLike(msg.get(2).text()); jcodes.add(entity); } } catch (IOException e) { view.showErrorTip("jsoup解析出错"); } return jcodes; } }