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; }
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(); }
/// <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]); }
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); } }