private void CollectDeleteForeverTasks(SyncTaskBean syncTaskBean, Dictionary<String, Tasks> localTasks, TaskSyncModel taskSyncModel)
        {
            // DELETED_FOREVER操作直接删除本地task,并清楚TaskSyncedJson
            List<TasksProjects> deletedForeverTasks = syncTaskBean.DeletedForever;//DeleteChangeToTaskProjects(syncTaskBean.Delete);
            foreach (var taskProject in deletedForeverTasks)
            {
                String taskSid = taskProject.TaskId;
                if (!localTasks.ContainsKey(taskSid))
                {
                    continue;
                }
                Tasks localTask = localTasks[taskSid];
                if (localTask != null)
                {
                    taskSyncModel.AddDeletedForeverTask(localTask);
                    localTasks.Remove(taskSid);
                    // delete original task
                    TaskSyncedJson json = new TaskSyncedJson();
                    json.UserId = localTask.UserId;
                    json.TaskSID = taskSid;
                    taskSyncModel.AddDeletedTaskSyncedJson(json);
                }
            }

        }
        private async Task CollectDeleteInTrash(SyncTaskBean syncTaskBean, Dictionary<String, Tasks> localTasks, TaskSyncModel taskSyncModel)
        {

            //DELETED_IN_TRASH操作需要和本地task进行Merge
            List<TasksProjects> deletedTrashTasks = syncTaskBean.DeletedInTrash;//DeleteChangeToTaskProjects(syncTaskBean.Delete);//此处有坑DeletedInTrash;

            if (deletedTrashTasks.Count <= 0)
            {
                return;
            }

            HashSet<String> RestoreTaskIds = await SyncStatusBll.GetEntityIdsByType(UserId, ModelStatusEnum.SYNC_TYPE_TASK_RESTORE);

            foreach (var taskProject in deletedTrashTasks)
            {
                String taskSid = taskProject.TaskId;
                //本地restore操作覆盖remote删除操作
                if (RestoreTaskIds.Contains(taskSid))
                {
                    continue;
                }
                Tasks localTask = localTasks[taskSid];
                if (localTask != null)
                {
                    taskSyncModel.AddDeletedInTrashTask(localTask);
                }
            }
        }
        private async Task CollectDeletedTasksFromRemoteModel(SyncTaskBean syncTaskBean, Dictionary<String, Tasks> localTasks, TaskSyncModel taskSyncModel)
        {

            CollectDeleteForeverTasks(syncTaskBean, localTasks, taskSyncModel);

            await CollectDeleteInTrash(syncTaskBean, localTasks, taskSyncModel);

        }
        public async Task<TaskSyncModel> CollectSyncTaskBean(SyncTaskBean syncTaskBean, Dictionary<String, Tasks> localTasks)
        {
            TaskSyncModel taskSyncModel = new TaskSyncModel();

            await CollectDeletedTasksFromRemoteModel(syncTaskBean, localTasks, taskSyncModel);

            List<TasksServer> update = syncTaskBean.Update;//UpdateChangeToTasks(syncTaskBean.Update);

            if (update.Count <= 0)
            {
                return taskSyncModel;
            }
            await MergeUpdatedTasksFromService(localTasks, taskSyncModel, update);
            return taskSyncModel;
        }
Example #5
0
 public static List<SyncTaskBean> DescribleSyncTaskBean(List<Tasks> created, List<Tasks> updated, List<Tasks> deleted)
 {
     List<SyncTaskBean> syncTaskBeans = new List<SyncTaskBean>();
     int count = 0;
     SyncTaskBean syncTaskBean = new SyncTaskBean();
     foreach (var task in created)
     {
         if (count++ >= LIMIT_COUNT)
         {
             count = 0;
             syncTaskBeans.Add(syncTaskBean);
             syncTaskBean = new SyncTaskBean();
         }
         syncTaskBean.Add.Add(ConvertLocalToServer(task));
         AppendTaskAttachments(task, syncTaskBean);
     }
     foreach (Tasks task in updated)
     {
         if (count++ >= LIMIT_COUNT)
         {
             count = 0;
             syncTaskBeans.Add(syncTaskBean);
             syncTaskBean = new SyncTaskBean();
         }
         syncTaskBean.Update.Add(ConvertLocalToServer(task));
         AppendTaskAttachments(task, syncTaskBean);
     }
     foreach (Tasks task in deleted)
     {
         if (count++ >= LIMIT_COUNT)
         {
             count = 0;
             syncTaskBeans.Add(syncTaskBean);
             syncTaskBean = new SyncTaskBean();
         }
         syncTaskBean.Delete.Add(new TasksProjects(task.ProjectSid, task.SId));
     }
     syncTaskBeans.Add(syncTaskBean);
     return syncTaskBeans;
 }
        public async Task MergeWithServer(SyncTaskBean syncTaskBean)
        {
            Dictionary<string, Tasks> localTasks = await TaskBll.GetFullTasksToMap(userId);

            TaskSyncModel taskSyncModel = await TaskSyncCollector.CollectSyncTaskBean(syncTaskBean, localTasks);

            await BatchSaveTaskSyncModel(taskSyncModel);

            //尝试删除同步产生的已删除Attachment和文件清理 
            // TODO 暂时不实现
            //new AttachmentFileHelper().TryCleanDeletedAttachmentFile();
        }
Example #7
0
 /// <summary>
 /// 更新Task
 /// </summary>
 /// <param name="data"></param>
 /// <returns></returns>
 public async Task<BatchUpdateResult> BatchUpdateTask(SyncTaskBean data)
 {
     return await HttpHelper.PostForObject<BatchUpdateResult>(GetUri("/api/v2/batch/task"), data);
     //return (BatchUpdateResult)getRestTemplate().postForObject(getUrl("/api/v2/batch/task"), data, 
     //  BatchUpdateResult.class, new Object[0]);
 }
Example #8
0
        private static void AppendTaskAttachments(Tasks task, SyncTaskBean syncTaskBean)
        {
            List<Attachment> addedRemotes = new List<Attachment>();
            List<Attachment> deletedRemotes = new List<Attachment>();
            foreach (Attachment localAttach in task.Attachments)
            {
                if (localAttach.Status == ModelStatusEnum.SYNC_NEW
                        && localAttach.Deleted == ModelStatusEnum.DELETED_NO)
                {
                    addedRemotes.Add(AttachmentTransfer.ConvertLocalToRemote(localAttach));
                }
                else if (localAttach.Status != ModelStatusEnum.SYNC_NEW
                        && localAttach.Deleted == ModelStatusEnum.DELETED_TRASH)
                {
                    deletedRemotes.Add(AttachmentTransfer.ConvertLocalToRemote(localAttach));
                }
            }

            if (addedRemotes.Count > 0)
            {
                Tasks remote = new Tasks();
                remote.Id = Convert.ToInt32(task.SId);
                remote.ProjectId = task.ProjectSid;
                remote.Attachments = addedRemotes;
                syncTaskBean.AddAttachments.Add(remote);
            }
            if (deletedRemotes.Count > 0)
            {
                Tasks remote = new Tasks();
                remote.Id = Convert.ToInt32(task.SId);
                remote.ProjectId = task.ProjectSid;
                remote.Attachments = deletedRemotes;
                syncTaskBean.DeleteAttachments.Add(remote);
            }
        }