MainPresenter.java 13.5 KB
/*
 * Copyright (c) 2016 wugian
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.xgimi.gimicinema.presenter;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
import com.gimi.common.cinema.model.ClassificationItem;
import com.gimi.common.cinema.model.Constant;
import com.gimi.common.cinema.model.LocalMovieMessage;
import com.gimi.common.cinema.model.RoomInfo;
import com.gimi.common.cinema.model.RoomQrCodeInfo;
import com.gimi.common.cinema.model.RoomStatusInfo;
import com.gimi.common.cinema.model.WrongMsg;
import com.gimi.common.cinema.utils.AuthUtils;
import com.gimi.common.cinema.utils.LocalDataUtils;
import com.gimi.common.cinema.utils.SambaFileCharge;
import com.gimi.common.cinema.utils.SystemUtils;
import com.gimi.common.cinema.utils.Utils;
import com.gimi.common.cinema.utils.coreprogress.helper.ProgressHelper;
import com.gimi.common.cinema.utils.coreprogress.listener.impl.UIProgressListener;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.xgimi.gimicinema.BuildConfig;
import com.xgimi.gimicinema.model.AdsModelImpl;
import com.xgimi.gimicinema.model.IAdsModel;
import com.xgimi.gimicinema.model.IMainModel;
import com.xgimi.gimicinema.model.IOtherModel;
import com.xgimi.gimicinema.model.IRoomInfoModel;
import com.xgimi.gimicinema.model.ISambaModel;
import com.xgimi.gimicinema.model.IUpdateModel;
import com.xgimi.gimicinema.model.MainModelImpl;
import com.xgimi.gimicinema.model.OtherModelImpl;
import com.xgimi.gimicinema.model.RoomInfoModelImpl;
import com.xgimi.gimicinema.model.SambaModelImpl;
import com.xgimi.gimicinema.model.UpdateModelImpl;
import com.xgimi.gimicinema.mview.IMainView;

import java.io.IOException;
import java.util.List;

/**
 * Created by wugian on 2016/9/23
 */
public class MainPresenter extends BasePresenter
        implements MainModelImpl.OnGetCtrlListener,
        SambaModelImpl.OnSambaMountListener,
        MainModelImpl.OnMainRecommendListener,
        MainModelImpl.OnClassificationListener,
        AdsModelImpl.OnGetAdsPathListener,
        OtherModelImpl.OnUpdateClazzListener {

    private Context context;

    private IMainView mainView;
    private ISambaModel sambaModel;
    private IMainModel mainModel;
    private IUpdateModel updateModel;
    private IAdsModel adsModel;
    private IOtherModel otherModel;

    private IRoomInfoModel roomInfoModel;

    public MainPresenter(IMainView mainView) {
        this.mainView = mainView;
        sambaModel = new SambaModelImpl();
        mainModel = new MainModelImpl();
        updateModel = new UpdateModelImpl();
        adsModel = new AdsModelImpl();
        otherModel = new OtherModelImpl();
        roomInfoModel = new RoomInfoModelImpl();
    }

    public void load(final Context context) {
        this.context = context;
        loadCtrl(context);
        mountSamba(context);
        loadRecommend(context);
        loadClassification(context);
        getVideoAdsPath(context);

        updatePoster(context);
        updateVideoInfo(context);
        updateAgentInfo(context);
        updateAppVersion(context);
        updateClazz(context);
        updateDb(context);
        updateRoomInfo(context);
//        mainView.showMsg("abc");
    }

    private void updateAgentInfo(Context context) {
        updateModel.updateAgentInfo(context);
    }

    private void download() {

        OkHttpClient client = new OkHttpClient();
        //这个是ui线程回调,可直接操作UI
        final UIProgressListener uiProgressResponseListener = new UIProgressListener() {
            @Override
            public void onUIProgress(long bytesRead, long contentLength, boolean done) {
                Log.e("TAG", "bytesRead:" + bytesRead);
                Log.e("TAG", "contentLength:" + contentLength);
                Log.e("TAG", "done:" + done);
                if (contentLength != -1) {
                    //长度未知的情况下回返回-1
                    Log.e("TAG", (100 * bytesRead) / contentLength + "% done");
                }
                Log.e("TAG", "================================");
                //ui层回调
//                downloadProgeress.setProgress((int) ((100 * bytesRead) / contentLength));
                //Toast.makeText(getApplicationContext(), bytesRead + " " + contentLength + " " + done, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onUIStart(long bytesRead, long contentLength, boolean done) {
                super.onUIStart(bytesRead, contentLength, done);
                Toast.makeText(context, "start", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onUIFinish(long bytesRead, long contentLength, boolean done) {
                super.onUIFinish(bytesRead, contentLength, done);
                Toast.makeText(context, "end", Toast.LENGTH_SHORT).show();
            }
        };

        //构造请求
        final Request request1 = new Request.Builder()
//                .url("http://pan.baidu.com/s/1gfdpZX5")
                .url("http://qnbar-test.oss-cn-hangzhou.aliyuncs.com/fbms/upload/default_img/57aa89d281dbf.jpg")
                .build();

        //包装Response使其支持进度回调
        ProgressHelper.addProgressResponseListener(client, uiProgressResponseListener).newCall(request1).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                Log.e("TAG", "error ", e);
            }

            @Override
            public void onResponse(Response response) throws IOException {
                Log.e("TAG", response.body().string());
            }
        });
    }


    public void loadCtrl(Context context) {
        mainModel.loadCtrlImg(context, this);
    }

    public void mountSamba(Context context) {
        if (!BuildConfig.MACHINE_TYPE.equals("himedia")) {
            Log.d("lovely", "╟  main presenter if");
            sambaModel.mountSamba(context, this);
        }
    }

    public void loadRecommend(Context context) {
        mainModel.loadRecommend(context, this);
    }

    public void loadClassification(Context context) {
        mainModel.loadClassification(context, this);
    }

    public void updatePoster(Context context) {
        updateModel.updatePoster(context);
    }

    public void updateVideoInfo(Context context) {
        updateModel.updateVideoAdsInfo(context);
    }

    public void updateAppVersion(Context context) {
        updateModel.updateAppVersion(context, false);
    }

    public void getVideoAdsPath(Context context) {
        adsModel.getVideoAds(context, this);
    }

    public void updateClazz(Context context) {
        SharedPreferences sp = Utils.getSp(context);
        otherModel.updateClazz(sp, this);
    }

    public void updateDb(Context context) {
        new LocalDataUtils(context).updateDb();
    }

    public void updateRoomInfo(Context context) {
        String imei = SystemUtils.getPid(context, BuildConfig.BUILD_TYPE);
        roomInfoModel.getRoomInfo(imei, true, new RoomInfoModelImpl.GetRoomInfoListener() {
            @Override
            public void onGetRoomInfoSuccess(RoomInfo info) {
                mainView.notifyGetRoomInfo(info);
                Log.d("room-info", "get success:" + info.toString());
            }

            @Override
            public void onGetRoomInfoUpdate(RoomInfo info) {
                Log.d("room-info", "update success:" + info.toString());
                mainView.notifyUpdateRoomInfo(info);
            }

            @Override
            public void onGetRoomInfoFailure(WrongMsg wrongMsg) {
                Log.d("room-info", "get failure:" + wrongMsg.toString());
            }
        });
    }

    public void reportOpenDoorStatus(String orderSn) {
        roomInfoModel.reportOpenDoorStatus(orderSn, new RoomInfoModelImpl.OpenDoorStatusListener() {
            @Override
            public void onOpenDoorSuccess() {
                mainView.reportResult(true);
                Log.d("room-info", "report success");
            }

            @Override
            public void onOpenDoorFailure() {
                mainView.reportResult(false);
                Log.d("room-info", "report failure");
            }
        });
    }

    public void getOrderInfo() {
        String imei = SystemUtils.getPid(context, BuildConfig.BUILD_TYPE);
        roomInfoModel.getRoomInfo(imei, false, new RoomInfoModelImpl.GetRoomInfoListener() {
            @Override
            public void onGetRoomInfoSuccess(RoomInfo info) {
                roomInfoModel.getRoomStatus(info.getData().getRoom_sn(), new RoomInfoModelImpl.GetRoomStatusListener() {
                    @Override
                    public void onGetRoomStatusSuccess(RoomStatusInfo info) {
                        RoomStatusInfo.DataEntity data = info.getData();
                        int durationMinutes = data.getEnd_time() - data.getBegin_time();
                        Log.d("CountService", "durationMinutes:" + durationMinutes);
                        mainView.updateOrderInfo(info);
                        roomInfoModel.getRoomQrCode(data.getOrder_sn(), new RoomInfoModelImpl.GetRoomQrCodeListener() {
                            @Override
                            public void onGetRoomQrCodeSuccess(RoomQrCodeInfo info) {
                                mainView.prepareRoomQrCodeInfo(info);
                            }

                            @Override
                            public void onGetRoomQrCodeFailure(WrongMsg wrongMsg) {
                                Log.d("room-info", "onGetRoomQrCodeFailure:" + wrongMsg.toString());
                            }
                        });
                    }

                    @Override
                    public void onGetRoomStatusFailure(WrongMsg wrongMsg) {
                        Log.d("room-info", "onGetRoomStatusFailure :" + wrongMsg.toString());
                    }
                });
            }

            @Override
            public void onGetRoomInfoUpdate(RoomInfo info) {
                Log.d("room-info", "update success:" + info.toString());
            }

            @Override
            public void onGetRoomInfoFailure(WrongMsg wrongMsg) {
                Log.d("room-info", "get failure:" + wrongMsg.toString());
            }
        });
    }

    @Override
    public void onGetControlImageSuccess(Bitmap bitmap) {
        mainView.loadCtrlImg(bitmap);
    }

    @Override
    public void onGetControlImageFailure(Exception e) {
        Log.e("lovely", "╟  " + e.getMessage());
    }

    @Override
    public void onSambaMountSuccess() {
        Log.d("lovely", "╟  onSambaMountSuccess ");
    }

    @Override
    public void onSambaMountFailure(int code, String wrongMsg) {
        Log.e("lovely", "╟  " + code + "," + wrongMsg);
        mainView.showMountFailure(wrongMsg);
    }

    @Override
    public void onMainSuccess(List<LocalMovieMessage> list) {
        mainView.loadRecommendMovie(list);
    }

    @Override
    public void onMainFailure() {
        Log.e("lovely", "╟  onMainFailure ");
    }

    @Override
    public void onClazzSuccess(List<ClassificationItem> list) {
        mainView.loadClazz(list);
    }

    @Override
    public void onClazzFailure() {
        Log.e("lovely", "╟  onClazzFailure ");
    }


    public void openClazz(int position) {
        int size = mainView.getClazzData().size();
        if (position < size) {
            mainView.openClazz(mainView.getClazzData().get(position));
        } else {
            mainView.openPlayList();
        }
    }

    public void checkAuth() {
        if (new SystemUtils().getYbProp() == 3 || Utils.getInt(context, "agent-type", 0) == 5) {
            return;
        }
        if (!Constant.gimiAuth) {
            mainView.showUnauthorized();
        }
        if (!AuthUtils.checkOfflineAuthTime(context)) {
            if (AuthUtils.isFinish(context)) {
                mainView.showUnauthorizedTimeOut();
            }
        }


    }

    @Override
    public void onSuccess(String path) {
    }

    @Override
    public void onFailure() {

    }


    @Override
    public void onUpdateClazzSuccess() {
        loadClassification(context);
    }

    public void jumpToDetail(LocalMovieMessage msg) {
        if (BuildConfig.BUILD_TYPE.equals("himedia")) {
            if (!SambaFileCharge.fileExist(com.xgimi.gimicinema.activity.CinemaConfig.BASIC_ROOT)) {
                mountSamba(context);
            }
        }
        if (SambaFileCharge.fileExist(msg.getPlayPath())) {
            mainView.jumpToDetail(msg);
        } else {
            if (!TextUtils.isEmpty(msg.getMd5())
                    && msg.getMd5().equals("qnyb_abc_test")) {
                mainView.jumpTo1905Detail(msg);
            } else {
                mainView.showMsg("电影被移除");
            }
        }
    }

    public void jumpToSearch() {
        mainView.jumpToSearch();
    }

    public void umountSamba() {
        sambaModel.umountSamba();
    }
}