// 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/util/DBManager.java
// public class DBManager {
//     /**
//      * 管理器单例
//      */
//     private static DBManager sDBInstance;
//     /**
//      * 数据库配置上下文
//      */
//     private IDbApplication mDbApplication;
//     /**
//      * 全局数据库
//      */
//     private SQLiteDB mDB;
// 
// 
//     private DBManager() {
// 
//         mDbApplication = ApplicationHelper.getInstance().getDbApplication();
//     }
// 
//     public static DBManager getInstance() {
// 
//         if(sDBInstance == null) {
//             synchronized (DBManager.class) {
//                 if(sDBInstance == null) {
//                     sDBInstance = new DBManager();
//                 }
//             }
//         }
//         return  sDBInstance;
//     }
// 
//     /**
//      * 获取全局数据库操作对象
//      * @return
//      */
//     public SQLiteDB getSQLiteDB() {
// 
//         if(mDB == null) {
//             synchronized (this) {
//                 if(mDB == null) {
//                     SQLiteDBConfig config = mDbApplication.getGlobalDbConfig();
//                     mDB = SQLiteDBFactory.createSQLiteDB(config);
//                 }
//             }
//         }
//         return mDB;
//     }
// 
//     /**
//      * 关闭数据库
//      */
//     public void closeSQLiteDB() {
//         if(this.mDB != null) {
//             this.mDB.close();
//         }
//         this.mDB = null;
//     }
// }


import cn.ittiger.video.bean.VideoTabData;
import cn.ittiger.video.factory.ResultParseFactory;
import cn.ittiger.video.mvpview.VideoTabMvpView;
import cn.ittiger.video.util.DBManager;
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 on 2016/10/8
 * @site: http://ittiger.cn
 */
public abstract class VideoTabPresenter extends MvpBasePresenter<VideoTabMvpView> implements TypePresenter {

    public void queryVideoTab(final boolean pullToRefresh) {

        Observable.just(getType().value())
                .subscribeOn(Schedulers.io())
                .map(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {

                        String[] whereArgs = {String.valueOf(integer.intValue())};
                        return DBManager.getInstance().getSQLiteDB().queryIfExist(VideoTabData.class, "type=?", whereArgs);
                    }
                })
                .flatMap(new Func1<Boolean, Observable<List<VideoTabData>>>() {
                    @Override
                    public Observable<List<VideoTabData>> call(Boolean aBoolean) {

                        if(aBoolean.booleanValue()) {
                            String[] whereArgs = {String.valueOf(getType().value())};
                            List<VideoTabData> tabs = DBManager.getInstance().getSQLiteDB().query(VideoTabData.class, "type=?", whereArgs);
                            return Observable.just(tabs);
                        }
                        return getHttpCallObservable()
                                .flatMap(new Func1<String, Observable<List<VideoTabData>>>() {
                                    @Override
                                    public Observable<List<VideoTabData>> call(String s) {
// 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/util/DBManager.java
// public class DBManager {
//     /**
//      * 管理器单例
//      */
//     private static DBManager sDBInstance;
//     /**
//      * 数据库配置上下文
//      */
//     private IDbApplication mDbApplication;
//     /**
//      * 全局数据库
//      */
//     private SQLiteDB mDB;
// 
// 
//     private DBManager() {
// 
//         mDbApplication = ApplicationHelper.getInstance().getDbApplication();
//     }
// 
//     public static DBManager getInstance() {
// 
//         if(sDBInstance == null) {
//             synchronized (DBManager.class) {
//                 if(sDBInstance == null) {
//                     sDBInstance = new DBManager();
//                 }
//             }
//         }
//         return  sDBInstance;
//     }
// 
//     /**
//      * 获取全局数据库操作对象
//      * @return
//      */
//     public SQLiteDB getSQLiteDB() {
// 
//         if(mDB == null) {
//             synchronized (this) {
//                 if(mDB == null) {
//                     SQLiteDBConfig config = mDbApplication.getGlobalDbConfig();
//                     mDB = SQLiteDBFactory.createSQLiteDB(config);
//                 }
//             }
//         }
//         return mDB;
//     }
// 
//     /**
//      * 关闭数据库
//      */
//     public void closeSQLiteDB() {
//         if(this.mDB != null) {
//             this.mDB.close();
//         }
//         this.mDB = null;
//     }
// }


// Path: TigerVideo/src/main/java/cn/ittiger/video/presenter/VideoTabPresenter.java
import cn.ittiger.video.bean.VideoTabData;
import cn.ittiger.video.factory.ResultParseFactory;
import cn.ittiger.video.mvpview.VideoTabMvpView;
import cn.ittiger.video.util.DBManager;
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 on 2016/10/8
 * @site: http://ittiger.cn
 */
public abstract class VideoTabPresenter extends MvpBasePresenter<VideoTabMvpView> implements TypePresenter {

    public void queryVideoTab(final boolean pullToRefresh) {

        Observable.just(getType().value())
                .subscribeOn(Schedulers.io())
                .map(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {

                        String[] whereArgs = {String.valueOf(integer.intValue())};
                        return DBManager.getInstance().getSQLiteDB().queryIfExist(VideoTabData.class, "type=?", whereArgs);
                    }
                })
                .flatMap(new Func1<Boolean, Observable<List<VideoTabData>>>() {
                    @Override
                    public Observable<List<VideoTabData>> call(Boolean aBoolean) {

                        if(aBoolean.booleanValue()) {
                            String[] whereArgs = {String.valueOf(getType().value())};
                            List<VideoTabData> tabs = DBManager.getInstance().getSQLiteDB().query(VideoTabData.class, "type=?", whereArgs);
                            return Observable.just(tabs);
                        }
                        return getHttpCallObservable()
                                .flatMap(new Func1<String, Observable<List<VideoTabData>>>() {
                                    @Override
                                    public Observable<List<VideoTabData>> call(String s) {
                                        List<VideoTabData> tabs = ResultParseFactory.parseTab(s, getType());