// Path: TigerVideo/src/main/java/cn/ittiger/video/bean/VideoData.java
// @Table(name = "VideoTable")
// public class VideoData {
// 
// 
//     private String id;//视频id
//     private String duration;//视频时长
//     private String title;//视频标题
//     private String imageUrl;//视频预览图地址
//     private String videoUrl;//视频播放地址
//     private int mDataType;//视频数据类型
// 
//     public String getId() {
// 
//         return id;
//     }
// 
//     public void setId(String id) {
// 
//         this.id = id;
//     }
// 
//     public String getDuration() {
// 
//         return duration;
//     }
// 
//     public void setDuration(String duration) {
// 
//         this.duration = duration;
//     }
// 
//     public String getTitle() {
// 
//         return title;
//     }
// 
//     public void setTitle(String title) {
// 
//         this.title = title;
//     }
// 
//     public String getImageUrl() {
// 
//         return imageUrl;
//     }
// 
//     public void setImageUrl(String imageUrl) {
// 
//         this.imageUrl = imageUrl;
//     }
// 
//     public String getVideoUrl() {
// 
//         return videoUrl;
//     }
// 
//     public void setVideoUrl(String videoUrl) {
// 
//         this.videoUrl = videoUrl;
//     }
// 
//     public int getDataType() {
// 
//         return mDataType;
//     }
// 
//     public void setDataType(int dataType) {
// 
//         mDataType = dataType;
//     }
// }
// 
// Path: TigerVideo/src/main/java/cn/ittiger/video/factory/ResultParseFactory.java
// public class ResultParseFactory {
// 
//     public static ResultParse create(DataType type) {
// 
//         ResultParse parse = null;
//         switch (type) {
//             case NET_EASY:
//                 parse = new NetEasyResultParse();
//                 break;
//             case TTKB:
//                 parse = new TtKbResultParse();
//                 break;
//             case IFENG:
//                 parse = new IFengTabResultParse();
//                 break;
//         }
//         return parse;
//     }
// 
//     public static List<VideoData> parse(String value, DataType type) {
// 
//         try {
//             JSONObject json = new JSONObject(value);
//             ResultParse parse = create(type);
//             return parse.parse(json);
//         } catch(Exception e) {
//             return new ArrayList<>(0);
//         }
//     }
// 
//     public static List<VideoTabData> parseTab(String value, DataType type) {
// 
//         try {
//             JSONObject json = new JSONObject(value);
//             ResultParse parse = create(type);
//             return parse.parseTab(json);
//         } catch(Exception e) {
//             return new ArrayList<>(0);
//         }
//     }
// }


import cn.ittiger.video.bean.VideoData;
import cn.ittiger.video.factory.ResultParseFactory;
import cn.ittiger.video.mvpview.VideoMvpView;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import com.hannesdorfmann.mosby.mvp.MvpBasePresenter;
import java.util.List;
package cn.ittiger.video.presenter;




/**
 * @author laohu
 * @site http://ittiger.cn
 */
public abstract class VideoPresenter extends MvpBasePresenter<VideoMvpView>
        implements TypePresenter {

    private int mCurPage = 1;

    public void refreshData(boolean pullToRefresh) {

        mCurPage = 1;
        request(false, pullToRefresh);
    }

    public void loadMoreData() {

        request(true, false);
    }

    @Override
    public void detachView(boolean retainInstance) {

        super.detachView(retainInstance);
        mCurPage = 1;
    }

    public abstract Observable<String> getHttpCallObservable(int curPage);

    void request(final boolean loadMore, final boolean pullToRefresh) {

        getHttpCallObservable(mCurPage)
                .subscribeOn(Schedulers.io())
                .map(new Func1<String, List<VideoData>>() {

                    @Override
                    public List<VideoData> call(String s) {

// Path: TigerVideo/src/main/java/cn/ittiger/video/bean/VideoData.java
// @Table(name = "VideoTable")
// public class VideoData {
// 
// 
//     private String id;//视频id
//     private String duration;//视频时长
//     private String title;//视频标题
//     private String imageUrl;//视频预览图地址
//     private String videoUrl;//视频播放地址
//     private int mDataType;//视频数据类型
// 
//     public String getId() {
// 
//         return id;
//     }
// 
//     public void setId(String id) {
// 
//         this.id = id;
//     }
// 
//     public String getDuration() {
// 
//         return duration;
//     }
// 
//     public void setDuration(String duration) {
// 
//         this.duration = duration;
//     }
// 
//     public String getTitle() {
// 
//         return title;
//     }
// 
//     public void setTitle(String title) {
// 
//         this.title = title;
//     }
// 
//     public String getImageUrl() {
// 
//         return imageUrl;
//     }
// 
//     public void setImageUrl(String imageUrl) {
// 
//         this.imageUrl = imageUrl;
//     }
// 
//     public String getVideoUrl() {
// 
//         return videoUrl;
//     }
// 
//     public void setVideoUrl(String videoUrl) {
// 
//         this.videoUrl = videoUrl;
//     }
// 
//     public int getDataType() {
// 
//         return mDataType;
//     }
// 
//     public void setDataType(int dataType) {
// 
//         mDataType = dataType;
//     }
// }
// 
// Path: TigerVideo/src/main/java/cn/ittiger/video/factory/ResultParseFactory.java
// public class ResultParseFactory {
// 
//     public static ResultParse create(DataType type) {
// 
//         ResultParse parse = null;
//         switch (type) {
//             case NET_EASY:
//                 parse = new NetEasyResultParse();
//                 break;
//             case TTKB:
//                 parse = new TtKbResultParse();
//                 break;
//             case IFENG:
//                 parse = new IFengTabResultParse();
//                 break;
//         }
//         return parse;
//     }
// 
//     public static List<VideoData> parse(String value, DataType type) {
// 
//         try {
//             JSONObject json = new JSONObject(value);
//             ResultParse parse = create(type);
//             return parse.parse(json);
//         } catch(Exception e) {
//             return new ArrayList<>(0);
//         }
//     }
// 
//     public static List<VideoTabData> parseTab(String value, DataType type) {
// 
//         try {
//             JSONObject json = new JSONObject(value);
//             ResultParse parse = create(type);
//             return parse.parseTab(json);
//         } catch(Exception e) {
//             return new ArrayList<>(0);
//         }
//     }
// }


// Path: TigerVideo/src/main/java/cn/ittiger/video/presenter/VideoPresenter.java
import cn.ittiger.video.bean.VideoData;
import cn.ittiger.video.factory.ResultParseFactory;
import cn.ittiger.video.mvpview.VideoMvpView;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import com.hannesdorfmann.mosby.mvp.MvpBasePresenter;
import java.util.List;

package cn.ittiger.video.presenter;




/**
 * @author laohu
 * @site http://ittiger.cn
 */
public abstract class VideoPresenter extends MvpBasePresenter<VideoMvpView>
        implements TypePresenter {

    private int mCurPage = 1;

    public void refreshData(boolean pullToRefresh) {

        mCurPage = 1;
        request(false, pullToRefresh);
    }

    public void loadMoreData() {

        request(true, false);
    }

    @Override
    public void detachView(boolean retainInstance) {

        super.detachView(retainInstance);
        mCurPage = 1;
    }

    public abstract Observable<String> getHttpCallObservable(int curPage);

    void request(final boolean loadMore, final boolean pullToRefresh) {

        getHttpCallObservable(mCurPage)
                .subscribeOn(Schedulers.io())
                .map(new Func1<String, List<VideoData>>() {

                    @Override
                    public List<VideoData> call(String s) {

                        return ResultParseFactory.parse(s, getType());