示例#1
0
        /// <summary>
        /// 根据通过RegisterTaskSyncService方法注册的同步服务,对任务进行双向同步
        /// </summary>
        /// <param name="tasks">与某个账号相关的所有任务</param>
        /// <param name="syncInfos">与某个账号相关的所有同步信息</param>
        /// <returns>同步结果,包含本地任务数据的增删改,以及外部数据源数据的增删改</returns>
        public TaskSyncResult SyncTasks(IEnumerable <TaskSyncData> tasks, IEnumerable <SyncInfo> syncInfos)
        {
            TaskSyncResult syncResult = new TaskSyncResult();

            foreach (var taskSyncService in _taskSyncServices)
            {
                TaskSyncResult result  = null;
                bool           success = false;
                try
                {
                    _logger.InfoFormat("----开始使用同步服务【{0}】比对任务数据", taskSyncService.GetType().FullName);
                    result = taskSyncService.ProcessTwoWaySynchronization(tasks, syncInfos);
                    _logger.InfoFormat("----结束使用同步服务【{0}】比对任务数据", taskSyncService.GetType().FullName);
                    success = true;
                }
                catch (Exception ex)
                {
                    _logger.Error(string.Format("{0}.ProcessTwoWaySynchronization has exception.", taskSyncService.GetType().Name), ex);
                }

                if (success)
                {
                    syncResult.MergeResult(result);
                }
            }

            return(syncResult);
        }
示例#2
0
        /// <summary>
        /// 根据通过RegisterTaskSyncService方法注册的同步服务,对任务进行双向同步
        /// </summary>
        /// <param name="tasks">与某个账号相关的所有任务</param>
        /// <param name="syncInfos">与某个账号相关的所有同步信息</param>
        /// <returns>同步结果,包含本地任务数据的增删改,以及外部数据源数据的增删改</returns>
        public TaskSyncResult SyncTasks(IEnumerable<TaskSyncData> tasks, IEnumerable<SyncInfo> syncInfos)
        {
            TaskSyncResult syncResult = new TaskSyncResult();

            foreach (var taskSyncService in _taskSyncServices)
            {
                TaskSyncResult result = null;
                bool success = false;
                try
                {
                    _logger.InfoFormat("----开始使用同步服务【{0}】比对任务数据", taskSyncService.GetType().FullName);
                    result = taskSyncService.ProcessTwoWaySynchronization(tasks, syncInfos);
                    _logger.InfoFormat("----结束使用同步服务【{0}】比对任务数据", taskSyncService.GetType().FullName);
                    success = true;
                }
                catch (Exception ex)
                {
                    _logger.Error(string.Format("{0}.ProcessTwoWaySynchronization has exception.", taskSyncService.GetType().Name), ex);
                }

                if (success)
                {
                    syncResult.MergeResult(result);
                }
            }

            return syncResult;
        }
示例#3
0
        /// <summary>
        /// 持久化本地需要增删改的任务
        /// </summary>
        private void PersistLocalTaskDatas(TaskSyncResult taskSyncResult, Account account)
        {
            if (taskSyncResult.LocalDatasToCreate.Count() == 0 && taskSyncResult.LocalDatasToUpdate.Count() == 0 && taskSyncResult.LocalDatasToDelete.Count() == 0)
            {
                return;
            }
            //处理在本地需要新增的任务
            foreach (var taskData in taskSyncResult.LocalDatasToCreate)
            {
                //TODO, 以后下面这三步需要放在一个Transaction中实现

                //创建任务
                CooperTask task = new CooperTask(account);

                task.SetSubject(taskData.Subject ?? string.Empty);
                task.SetBody(FormatTaskBody(taskData.Body));
                task.SetDueTime(FormatTaskDueTime(taskData.DueTime));
                if (taskData.IsCompleted)
                {
                    task.MarkAsCompleted();
                }
                else
                {
                    task.MarkAsInCompleted();
                }
                task.SetPriority(ConvertToPriority(taskData.Priority));

                _taskService.Create(task);

                //任务创建后更新最后更新时间,更新为和这条任务关联的外部系统任务的最后更新时间
                task.SetLastUpdateTime(taskData.LastUpdateLocalTime);
                _taskService.Update(task);

                //创建同步信息
                if (taskData.IsFromDefault)
                {
                    SyncInfo syncInfo = new SyncInfo();
                    syncInfo.AccountId    = account.ID;
                    syncInfo.LocalDataId  = task.ID.ToString();
                    syncInfo.SyncDataId   = taskData.SyncId;
                    syncInfo.SyncDataType = taskData.SyncType;
                    InsertSyncInfo(syncInfo);
                }
            }

            //处理在本地需要更新的任务
            foreach (var taskData in taskSyncResult.LocalDatasToUpdate)
            {
                //更新任务
                CooperTask task = _taskService.GetTask(long.Parse(taskData.Id));

                task.SetSubject(taskData.Subject ?? string.Empty);
                task.SetBody(FormatTaskBody(taskData.Body));
                task.SetDueTime(FormatTaskDueTime(taskData.DueTime));
                if (taskData.IsCompleted)
                {
                    task.MarkAsCompleted();
                }
                else
                {
                    task.MarkAsInCompleted();
                }
                task.SetPriority(ConvertToPriority(taskData.Priority));

                _taskService.Update(task);

                //任务更新后更新最后更新时间,更新为和这条任务关联的外部系统任务的最后更新时间
                task.SetLastUpdateTime(taskData.LastUpdateLocalTime);
                _taskService.Update(task);
            }

            //暂时去掉删除本地数据的功能
            ////处理在本地需要删除的任务
            //foreach (var taskData in taskSyncResult.LocalDatasToDelete)
            //{
            //    Cooper.Model.Tasks.Task task = _taskService.GetTask(long.Parse(taskData.Id));
            //    _taskService.Delete(task);

            //    //删除同步信息
            //    SyncInfo syncInfo = new SyncInfo();
            //    syncInfo.AccountId = account.ID;
            //    syncInfo.LocalDataId = task.ID.ToString();
            //    syncInfo.SyncDataId = taskData.SyncId;
            //    syncInfo.SyncDataType = taskData.SyncType;
            //    DeleteSyncInfo(syncInfo);
            //}
        }