Search in sources :

Example 1 with MyQuery

use of com.nightonke.saver.ui.MyQuery in project CoCoin by Nightonke.

the class AccountBookTodayViewActivity method sync.

private void sync() {
    if (!SettingManager.getInstance().getLoggenOn()) {
        CoCoinUtil.showToast(mContext, R.string.login_tip);
    } else {
        syncSuccessNumber = 0;
        syncFailedNumber = 0;
        syncQueryDialog = new MaterialDialog.Builder(this).title(R.string.sync_querying_title).content(R.string.sync_querying_content).negativeText(R.string.cancel).progress(true, 0).onAny(new MaterialDialog.SingleButtonCallback() {

            @Override
            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                if (which == DialogAction.NEGATIVE) {
                }
            }
        }).show();
        final User user = BmobUser.getCurrentUser(CoCoinApplication.getAppContext(), User.class);
        final MyQuery myQuery = new MyQuery();
        myQuery.setTask(++TaskManager.QUERY_UPDATE_TASK);
        myQuery.query = new BmobQuery<>();
        myQuery.query.addWhereEqualTo("userId", user.getObjectId());
        myQuery.query.setLimit(1);
        myQuery.query.findObjects(CoCoinApplication.getAppContext(), new FindListener<UploadInfo>() {

            @Override
            public void onSuccess(List<UploadInfo> object) {
                if (myQuery.getTask() != TaskManager.QUERY_UPDATE_TASK)
                    return;
                else {
                    syncQueryDialog.dismiss();
                    cloudRecordNumber = 0;
                    Calendar cal = null;
                    if (object.size() == 0) {
                    } else {
                        cloudRecordNumber = object.get(0).getRecordNumber();
                        cloudOldDatabaseUrl = object.get(0).getDatabaseUrl();
                        cloudOldDatabaseFileName = object.get(0).getFileName();
                        uploadObjectId = object.get(0).getObjectId();
                        cal = Calendar.getInstance();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        try {
                            cal.setTime(sdf.parse(object.get(0).getUpdatedAt()));
                        } catch (ParseException p) {
                        }
                    }
                    String content = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_record_0) + cloudRecordNumber + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_record_1) + (cal == null ? CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_time_2) : CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_time_0) + CoCoinUtil.GetCalendarString(CoCoinApplication.getAppContext(), cal) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_cloud_time_1)) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_record_0) + RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_record_1) + (SettingManager.getInstance().getRecentlySyncTime() == null ? CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_time_2) : CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_time_0) + CoCoinUtil.GetCalendarString(CoCoinApplication.getAppContext(), SettingManager.getInstance().getRecentlySyncTime()) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_info_mobile_time_1)) + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sync_choose_content);
                    syncChooseDialog = new MaterialDialog.Builder(mContext).title(R.string.sync_choose_title).content(content).positiveText(R.string.sync_to_cloud).negativeText(R.string.sync_to_mobile).neutralText(R.string.cancel).onAny(new MaterialDialog.SingleButtonCallback() {

                        @Override
                        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                            syncChooseDialog.dismiss();
                            if (which == DialogAction.POSITIVE) {
                                // sync to cloud
                                String subContent = "";
                                if (RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() == 0) {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.mobile_record_empty);
                                    new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).show();
                                    return;
                                } else {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_cloud_0) + RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_cloud_1);
                                }
                                new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).negativeText(R.string.cancel).onAny(new MaterialDialog.SingleButtonCallback() {

                                    @Override
                                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                        if (which == DialogAction.POSITIVE) {
                                            syncProgressDialog = new MaterialDialog.Builder(mContext).title(R.string.syncing).content(CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.uploading_0) + "1" + CoCoinUtil.GetString(mContext, R.string.uploading_1)).progress(false, RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size(), true).cancelable(false).show();
                                            final String databasePath = CoCoinUtil.GetRecordDatabasePath(CoCoinApplication.getAppContext());
                                            //                                                                final BmobFile bmobFile = new BmobFile(new File(databasePath));
                                            //                                                                bmobFile.uploadblock(mContext, new UploadFileListener() {
                                            //
                                            //                                                                    @Override
                                            //                                                                    public void onSuccess() {
                                            //                                                                        if (BuildConfig.DEBUG) {
                                            //                                                                            Log.d("CoCoin", "Upload successfully fileName: " + databasePath);
                                            //                                                                            Log.d("CoCoin", "Upload successfully url: " + bmobFile.getFileUrl(mContext));
                                            //                                                                        }
                                            //                                                                        // the new database is uploaded successfully
                                            //                                                                        // delete the old database(if there is)
                                            //                                                                        if (cloudOldDatabaseUrl != null) {
                                            //                                                                            deleteOldDatabaseOnCloud(cloudOldDatabaseUrl);
                                            //                                                                        }
                                            //                                                                        // update the UploadInfo record for the new url
                                            //                                                                        if (uploadObjectId == null) {
                                            //                                                                            // first time
                                            //                                                                            UploadInfo uploadInfo = new UploadInfo();
                                            //                                                                            uploadInfo.setUserId(user.getObjectId());
                                            //                                                                            uploadInfo.setRecordNumber(RecordManager.getInstance(mContext).RECORDS.size());
                                            //                                                                            uploadInfo.setDatabaseUrl(bmobFile.getFileUrl(mContext));
                                            //                                                                            uploadInfo.save(mContext, new SaveListener() {
                                            //                                                                                @Override
                                            //                                                                                public void onSuccess() {
                                            //                                                                                    // upload successfully
                                            //                                                                                    syncProgressDialog.dismiss();
                                            //                                                                                    new MaterialDialog.Builder(mContext)
                                            //                                                                                            .title(R.string.sync_completely_title)
                                            //                                                                                            .content(RecordManager.getInstance(mContext).RECORDS.size() + CoCoinUtil.GetString(mContext, R.string.uploading_fail_1))
                                            //                                                                                            .positiveText(R.string.ok_1)
                                            //                                                                                            .show();
                                            //                                                                                }
                                            //                                                                                @Override
                                            //                                                                                public void onFailure(int code, String arg0) {
                                            //                                                                                    // 添加失败
                                            //                                                                                }
                                            //                                                                            });
                                            //                                                                        } else {
                                            //                                                                            UploadInfo uploadInfo = new UploadInfo();
                                            //                                                                            uploadInfo.setUserId(user.getObjectId());
                                            //                                                                            uploadInfo.setRecordNumber(RecordManager.getInstance(mContext).RECORDS.size());
                                            //                                                                            uploadInfo.setDatabaseUrl(bmobFile.getFileUrl(mContext));
                                            //                                                                            uploadInfo.update(mContext, uploadObjectId, new UpdateListener() {
                                            //                                                                                @Override
                                            //                                                                                public void onSuccess() {
                                            //                                                                                    // upload successfully
                                            //                                                                                    syncProgressDialog.dismiss();
                                            //                                                                                    new MaterialDialog.Builder(mContext)
                                            //                                                                                            .title(R.string.sync_completely_title)
                                            //                                                                                            .content(RecordManager.getInstance(mContext).RECORDS.size() + CoCoinUtil.GetString(mContext, R.string.uploading_fail_1))
                                            //                                                                                            .positiveText(R.string.ok_1)
                                            //                                                                                            .show();
                                            //                                                                                }
                                            //                                                                                @Override
                                            //                                                                                public void onFailure(int code, String msg) {
                                            //                                                                                    // upload failed
                                            //                                                                                    Log.i("bmob","更新失败:"+msg);
                                            //                                                                                }
                                            //                                                                            });
                                            //                                                                        }
                                            //                                                                    }
                                            //
                                            //                                                                    @Override
                                            //                                                                    public void onProgress(Integer value) {
                                            //                                                                        syncProgressDialog.setProgress(value);
                                            //                                                                    }
                                            //
                                            //                                                                    @Override
                                            //                                                                    public void onFailure(int code, String msg) {
                                            //                                                                        // upload failed
                                            //                                                                        if (BuildConfig.DEBUG) Log.d("CoCoin", "Upload database failed " + code + " " + msg);
                                            //                                                                        syncProgressDialog.dismiss();
                                            //                                                                        new MaterialDialog.Builder(mContext)
                                            //                                                                                .title(R.string.sync_failed)
                                            //                                                                                .content(R.string.uploading_fail_0)
                                            //                                                                                .positiveText(R.string.ok_1)
                                            //                                                                                .show();
                                            //                                                                    }
                                            //                                                                });
                                            BmobProFile.getInstance(CoCoinApplication.getAppContext()).upload(databasePath, new UploadListener() {

                                                @Override
                                                public void onSuccess(String fileName, String url, BmobFile file) {
                                                    CoCoinUtil.deleteBmobUploadCach(CoCoinApplication.getAppContext());
                                                    if (BuildConfig.DEBUG) {
                                                        Log.d("CoCoin", "Upload successfully fileName: " + fileName);
                                                        Log.d("CoCoin", "Upload successfully url: " + url);
                                                    }
                                                    // delete the old database(if there is)
                                                    if (cloudOldDatabaseFileName != null) {
                                                        deleteOldDatabaseOnCloud(cloudOldDatabaseFileName);
                                                    }
                                                    // update the UploadInfo record for the new url
                                                    UploadInfo uploadInfo = new UploadInfo();
                                                    uploadInfo.setUserId(user.getObjectId());
                                                    uploadInfo.setRecordNumber(RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size());
                                                    uploadInfo.setDatabaseUrl(file.getFileUrl(CoCoinApplication.getAppContext()));
                                                    uploadInfo.setFileName(fileName);
                                                    if (uploadObjectId == null) {
                                                        // insert
                                                        uploadInfo.save(CoCoinApplication.getAppContext(), new SaveListener() {

                                                            @Override
                                                            public void onSuccess() {
                                                                // upload successfully
                                                                syncProgressDialog.dismiss();
                                                                new MaterialDialog.Builder(mContext).title(R.string.sync_completely_title).content(RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.uploading_fail_1)).positiveText(R.string.ok_1).cancelable(false).show();
                                                            }

                                                            @Override
                                                            public void onFailure(int code, String arg0) {
                                                                uploadFailed(code, arg0);
                                                            }
                                                        });
                                                    } else {
                                                        // update
                                                        uploadInfo.update(CoCoinApplication.getAppContext(), uploadObjectId, new UpdateListener() {

                                                            @Override
                                                            public void onSuccess() {
                                                                // upload successfully
                                                                syncProgressDialog.dismiss();
                                                                new MaterialDialog.Builder(mContext).title(R.string.sync_completely_title).content(RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size() + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.uploading_fail_1)).positiveText(R.string.ok_1).cancelable(false).show();
                                                            }

                                                            @Override
                                                            public void onFailure(int code, String msg) {
                                                                uploadFailed(code, msg);
                                                            }
                                                        });
                                                    }
                                                }

                                                @Override
                                                public void onProgress(int progress) {
                                                    syncProgressDialog.setProgress((int) (progress * 1.0 / 100 * RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size()));
                                                }

                                                @Override
                                                public void onError(int statuscode, String errormsg) {
                                                    // upload failed
                                                    uploadFailed(statuscode, errormsg);
                                                }
                                            });
                                        }
                                    }
                                }).show();
                            } else if (which == DialogAction.NEGATIVE) {
                                // sync to mobile
                                String subContent = "";
                                if (cloudRecordNumber == 0) {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.cloud_record_empty);
                                    new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).show();
                                    return;
                                } else {
                                    subContent = CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_mobile_0) + cloudRecordNumber + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.sure_to_mobile_1);
                                }
                                new MaterialDialog.Builder(mContext).title(R.string.sync).content(subContent).positiveText(R.string.ok_1).negativeText(R.string.cancel).onAny(new MaterialDialog.SingleButtonCallback() {

                                    @Override
                                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                        if (which == DialogAction.POSITIVE) {
                                            syncProgressDialog = new MaterialDialog.Builder(mContext).title(R.string.syncing).content(CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.downloading_0) + "1" + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.downloading_1)).progress(false, cloudRecordNumber, true).cancelable(false).show();
                                            // download the database file to mobile
                                            BmobProFile.getInstance(CoCoinApplication.getAppContext()).download(cloudOldDatabaseFileName, new DownloadListener() {

                                                @Override
                                                public void onSuccess(String fullPath) {
                                                    // copy the new database to mobile
                                                    try {
                                                        Log.d("CoCoin", "Download successfully " + fullPath);
                                                        syncProgressDialog.setContent(R.string.sync_completely_content);
                                                        byte[] buffer = new byte[1024];
                                                        File file = new File(fullPath);
                                                        InputStream inputStream = new FileInputStream(file);
                                                        String outFileNameString = CoCoinUtil.GetRecordDatabasePath(CoCoinApplication.getAppContext());
                                                        OutputStream outputStream = new FileOutputStream(outFileNameString);
                                                        int length;
                                                        while ((length = inputStream.read(buffer)) > 0) {
                                                            outputStream.write(buffer, 0, length);
                                                        }
                                                        Log.d("CoCoin", "Download successfully copy completely");
                                                        outputStream.flush();
                                                        outputStream.close();
                                                        inputStream.close();
                                                        file.delete();
                                                        Log.d("CoCoin", "Download successfully delete completely");
                                                        // refresh data
                                                        RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.clear();
                                                        RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS = null;
                                                        RecordManager.getInstance(CoCoinApplication.getAppContext());
                                                        todayModeAdapter.notifyDataSetChanged();
                                                        Log.d("CoCoin", "Download successfully refresh completely");
                                                        syncProgressDialog.dismiss();
                                                        new MaterialDialog.Builder(mContext).title(R.string.sync_completely_title).content(cloudRecordNumber + CoCoinUtil.GetString(CoCoinApplication.getAppContext(), R.string.downloading_fail_1)).positiveText(R.string.ok_1).cancelable(false).show();
                                                    } catch (IOException i) {
                                                        i.printStackTrace();
                                                    }
                                                }

                                                @Override
                                                public void onProgress(String localPath, int percent) {
                                                    syncProgressDialog.setProgress((int) (((float) percent / 100) * RecordManager.getInstance(CoCoinApplication.getAppContext()).RECORDS.size()));
                                                }

                                                @Override
                                                public void onError(int statuscode, String errormsg) {
                                                    downloadFailed(statuscode, errormsg);
                                                }
                                            });
                                        }
                                    }
                                }).show();
                            } else {
                            }
                        }
                    }).show();
                }
            }

            @Override
            public void onError(int code, String msg) {
                syncQueryDialog.dismiss();
                if (BuildConfig.DEBUG)
                    Log.d("CoCoin", "Query: " + msg);
                if (syncQueryDialog != null)
                    syncQueryDialog.dismiss();
                new MaterialDialog.Builder(mContext).title(R.string.sync_querying_fail_title).content(R.string.sync_querying_fail_content).positiveText(R.string.ok_1).show();
            }
        });
    }
}
Also used : SaveListener(cn.bmob.v3.listener.SaveListener) BmobUser(cn.bmob.v3.BmobUser) User(com.nightonke.saver.model.User) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) UploadListener(com.bmob.btp.callback.UploadListener) NonNull(android.support.annotation.NonNull) UpdateListener(cn.bmob.v3.listener.UpdateListener) BmobFile(cn.bmob.v3.datatype.BmobFile) UploadInfo(com.nightonke.saver.model.UploadInfo) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Calendar(java.util.Calendar) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DownloadListener(com.bmob.btp.callback.DownloadListener) DialogAction(com.afollestad.materialdialogs.DialogAction) FileOutputStream(java.io.FileOutputStream) MyQuery(com.nightonke.saver.ui.MyQuery) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat) BmobFile(cn.bmob.v3.datatype.BmobFile) BmobProFile(com.bmob.BmobProFile) File(java.io.File)

Aggregations

NonNull (android.support.annotation.NonNull)1 BmobUser (cn.bmob.v3.BmobUser)1 BmobFile (cn.bmob.v3.datatype.BmobFile)1 SaveListener (cn.bmob.v3.listener.SaveListener)1 UpdateListener (cn.bmob.v3.listener.UpdateListener)1 DialogAction (com.afollestad.materialdialogs.DialogAction)1 MaterialDialog (com.afollestad.materialdialogs.MaterialDialog)1 BmobProFile (com.bmob.BmobProFile)1 DownloadListener (com.bmob.btp.callback.DownloadListener)1 UploadListener (com.bmob.btp.callback.UploadListener)1 UploadInfo (com.nightonke.saver.model.UploadInfo)1 User (com.nightonke.saver.model.User)1 MyQuery (com.nightonke.saver.ui.MyQuery)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 ParseException (java.text.ParseException)1