private void StartTaskSyncTask(TaskSyncProfile syncProfile) { lock (LockerObject) { if (IsSettingsLoading) { MessageService.ShowMessageAsync("Unable to do the operation as settings are loading."); return; } IsSyncInProgress = true; IsSettingsVisible = false; syncProfile.LastSync = DateTime.Now; ShowNotification(true); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.SyncStarted, syncProfile.LastSync)); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.Line)); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.Profile, syncProfile.Name)); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.Line)); var syncMetric = new SyncMetric { StartTime = syncProfile.LastSync.GetValueOrDefault(), ProfileName = syncProfile.Name, CalendarSyncDirection = syncProfile.SyncDirection.ToString() }; SyncSummary.SyncMetrics.Add(syncMetric); var result = SyncStartService.SyncNow(syncProfile, syncMetric, SyncCallback); OnSyncCompleted(syncProfile, syncMetric, result); } }
private async Task StartPeriodicSync() { if (IsPeriodicSyncStarted) { SyncStartService.Stop(OnTimerElapsed); IsPeriodicSyncStarted = false; UpdateStatus($"Periodic Sync Stopped : {DateTime.Now}"); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.LogSeparator)); } else { var result = await SyncStartService.Start(OnTimerElapsed); if (result) { foreach (var syncProfile in ScheduledSyncProfiles) { if (syncProfile.IsSyncEnabled && syncProfile.SyncFrequency != null) { syncProfile.NextSync = syncProfile.SyncFrequency.GetNextSyncTime(DateTime.Now); } } IsPeriodicSyncStarted = true; UpdateStatus($"Periodic Sync Started : {DateTime.Now}"); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.LogSeparator)); } } }
/// <summary> /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="sourceCalendarSpecificData"></param> /// <param name="destinationCalendarSpecificData"></param> /// <returns></returns> private bool UpdateEntries(CalendarSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> sourceCalendarSpecificData, IDictionary <string, object> destinationCalendarSpecificData) { var isSuccess = true; if (CalendarSyncEngine.SourceAppointmentsToUpdate.Any()) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); //Update status for reading entries to update CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToUpdate, CalendarSyncEngine.SourceAppointmentsToUpdate.Count, SourceCalendarService.CalendarServiceName); var updatedAppointments = SourceCalendarService.UpdateCalendarEvents(CalendarSyncEngine.SourceAppointmentsToUpdate, syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Description), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Reminders), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Attendees), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.AttendeesToDescription), sourceCalendarSpecificData).Result; isSuccess = updatedAppointments.IsSuccess; CalendarSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.UpdateEntriesSuccess : SyncStateEnum.UpdateEntriesFailed); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); syncMetric.SourceMetric.UpdateCount = CalendarSyncEngine.SourceAppointmentsToUpdate.Count; syncMetric.SourceMetric.UpdateFailedCount = CalendarSyncEngine.SourceAppointmentsToUpdate.Count - updatedAppointments.Count; } if (CalendarSyncEngine.DestAppointmentsToUpdate.Any()) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); //Update status for reading entries to update CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToUpdate, CalendarSyncEngine.DestAppointmentsToUpdate.Count, DestinationCalendarService.CalendarServiceName); var updatedAppointments = DestinationCalendarService.UpdateCalendarEvents(CalendarSyncEngine.DestAppointmentsToUpdate, syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Description), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Reminders), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Attendees), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.AttendeesToDescription), destinationCalendarSpecificData).Result; isSuccess = updatedAppointments.IsSuccess; CalendarSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.UpdateEntriesSuccess : SyncStateEnum.UpdateEntriesFailed); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); syncMetric.DestMetric.UpdateCount = CalendarSyncEngine.DestAppointmentsToUpdate.Count; syncMetric.DestMetric.UpdateFailedCount = CalendarSyncEngine.DestAppointmentsToUpdate.Count - updatedAppointments.Count; } return(isSuccess); }
/// <summary> /// Delete appointments from source /// </summary> /// <param name="syncProfile"></param> /// <param name="sourceCalendarSpecificData"></param> /// <param name="syncCallback"></param> /// <returns> /// </returns> private bool DeleteSourceTasks(TaskSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> sourceCalendarSpecificData, SyncCallback syncCallback) { //if (syncProfile.SyncSettings.DisableDelete) //{ // return true; //} //Updating entry isDeleteOperation status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.ReadingEntriesToDelete, SourceTaskService.TaskServiceName); //Getting appointments to isDeleteOperation TaskSyncEngine.GetSourceEntriesToDelete(syncProfile, SourceTasks, DestinationTasks); var appointmentsToDelete = TaskSyncEngine.SourceTasksToDelete; //Updating Get entry isDeleteOperation status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToDelete, appointmentsToDelete.Count); if (appointmentsToDelete.Count == 0) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); } //Updating isDeleteOperation status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DeletingEntries, SourceTaskService.TaskServiceName); //Deleting entries var deletedTasks = SourceTaskService.DeleteReminderTasks(appointmentsToDelete, sourceCalendarSpecificData).Result; var isSuccess = deletedTasks.IsSuccess; //Update status if entries were successfully deleted TaskSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.DeletingEntriesComplete : SyncStateEnum.DeletingEntriesFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); if (isSuccess) { syncMetric.SourceMetric.DeleteCount = appointmentsToDelete.Count; syncMetric.SourceMetric.DeleteFailedCount = appointmentsToDelete.Count - deletedTasks.Count; for (var index = 0; index < appointmentsToDelete.Count; index++) { SourceTasks.Remove(appointmentsToDelete[index]); } } return(isSuccess); }
/// <summary> /// /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="sourceCalendarSpecificData"></param> /// <param name="destinationCalendarSpecificData"></param> /// <returns></returns> private bool UpdateEntries(TaskSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> sourceCalendarSpecificData, IDictionary <string, object> destinationCalendarSpecificData) { var isSuccess = true; if (TaskSyncEngine.SourceTasksToUpdate.Any()) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); //Update status for reading entries to update TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToUpdate, TaskSyncEngine.SourceTasksToUpdate.Count, SourceTaskService.TaskServiceName); var updatedTasks = SourceTaskService.UpdateReminderTasks(TaskSyncEngine.SourceTasksToUpdate, sourceCalendarSpecificData).Result; isSuccess = updatedTasks.IsSuccess; TaskSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.UpdateEntriesSuccess : SyncStateEnum.UpdateEntriesFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); syncMetric.SourceMetric.UpdateCount = TaskSyncEngine.SourceTasksToUpdate.Count; syncMetric.SourceMetric.UpdateFailedCount = TaskSyncEngine.SourceTasksToUpdate.Count - updatedTasks.Count; } if (TaskSyncEngine.DestTasksToUpdate.Any()) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); //Update status for reading entries to update TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToUpdate, TaskSyncEngine.DestTasksToUpdate.Count, DestinationTaskService.TaskServiceName); var updatedTasks = DestinationTaskService.UpdateReminderTasks(TaskSyncEngine.DestTasksToUpdate, destinationCalendarSpecificData).Result; isSuccess = updatedTasks.IsSuccess; TaskSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.UpdateEntriesSuccess : SyncStateEnum.UpdateEntriesFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); syncMetric.DestMetric.UpdateCount = TaskSyncEngine.DestTasksToUpdate.Count; syncMetric.DestMetric.UpdateFailedCount = TaskSyncEngine.DestTasksToUpdate.Count - updatedTasks.Count; } return(isSuccess); }
/// <summary> /// Add appointments to source /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="sourceCalendarSpecificData"></param> /// <returns> /// </returns> private bool AddSourceAppointments(CalendarSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> sourceCalendarSpecificData) { //Update status for reading entries to add CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.ReadingEntriesToAdd, SourceCalendarService.CalendarServiceName); //Get entries to add CalendarSyncEngine.GetSourceEntriesToAdd(syncProfile, SourceAppointments, DestinationAppointments); var appointmentsToAdd = CalendarSyncEngine.SourceAppointmentsToAdd; CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToAdd, appointmentsToAdd.Count); if (appointmentsToAdd.Count == 0) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); } CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.AddingEntries, SourceCalendarService.CalendarServiceName); //Add entries to calendar var addedAppointments = SourceCalendarService.AddCalendarEvents(appointmentsToAdd, syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Description), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Reminders), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Attendees), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.AttendeesToDescription), sourceCalendarSpecificData) .Result; var isSuccess = addedAppointments.IsSuccess; //Update status if entries were successfully added CalendarSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.AddEntriesComplete : SyncStateEnum.AddEntriesFailed); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); if (isSuccess) { syncMetric.SourceMetric.AddCount = appointmentsToAdd.Count; LoadSourceId(addedAppointments, DestinationAppointments.CalendarId); SourceAppointments.AddRange(addedAppointments); if (syncProfile.SyncMode == SyncModeEnum.TwoWay) { var updateDestList = UpdateWithChildId(addedAppointments, DestinationAppointments); CalendarSyncEngine.DestAppointmentsToUpdate.AddRangeCompareForUpdate(updateDestList); } } return(isSuccess); }
/// <summary> /// Add appointments to source /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="sourceCalendarSpecificData"></param> /// <returns> /// </returns> private bool AddSourceTasks(TaskSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> sourceCalendarSpecificData) { //Update status for reading entries to add TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.ReadingEntriesToAdd, SourceTaskService.TaskServiceName); //Get entries to add TaskSyncEngine.GetSourceEntriesToAdd(syncProfile, SourceTasks, DestinationTasks); var appointmentsToAdd = TaskSyncEngine.SourceTasksToAdd; TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToAdd, appointmentsToAdd.Count); if (appointmentsToAdd.Count == 0) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); } TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.AddingEntries, SourceTaskService.TaskServiceName); //Add entries to calendar var addedTasks = SourceTaskService.AddReminderTasks(appointmentsToAdd, sourceCalendarSpecificData) .Result; var isSuccess = addedTasks.IsSuccess; //Update status if entries were successfully added TaskSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.AddEntriesComplete : SyncStateEnum.AddEntriesFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); if (isSuccess) { syncMetric.SourceMetric.AddCount = appointmentsToAdd.Count; //LoadSourceId(addedTasks, DestinationTasks.TaskListId); SourceTasks.AddRange(addedTasks); if (syncProfile.SyncMode == SyncModeEnum.TwoWay) { //var updateDestList = UpdateWithChildId(addedTasks, DestinationTasks); //TaskSyncEngine.DestTasksToUpdate.AddRangeCompareForUpdate(updateDestList); } } return(isSuccess); }
/// <summary> /// </summary> /// <param name="endDate"></param> /// <param name="skipPrivateEntries"></param> /// <param name="sourceCalendarSpecificData"></param> /// <param name="destinationCalendarSpecificData"></param> /// <param name="startDate"></param> /// <returns> /// </returns> private bool LoadAppointments(DateTime startDate, DateTime endDate, bool skipPrivateEntries, IDictionary <string, object> sourceCalendarSpecificData, IDictionary <string, object> destinationCalendarSpecificData) { //Update status CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SourceReading, SourceCalendarService.CalendarServiceName); //Get source calendar SourceAppointments = SourceCalendarService.GetCalendarEventsInRangeAsync(startDate, endDate, skipPrivateEntries, sourceCalendarSpecificData) .Result; if (SourceAppointments == null) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SourceReadFailed); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(false); } //Update status CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SourceRead, SourceCalendarService.CalendarServiceName, SourceAppointments.Count); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DestReading, DestinationCalendarService.CalendarServiceName); //Get destination calendar DestinationAppointments = DestinationCalendarService.GetCalendarEventsInRangeAsync(startDate, endDate, skipPrivateEntries, destinationCalendarSpecificData).Result; if (DestinationAppointments == null) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DestReadFailed); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(false); } CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DestRead, DestinationCalendarService.CalendarServiceName, DestinationAppointments.Count); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); }
private void OnSyncCompleted(SyncProfile syncProfile, SyncMetric syncMetric, string result) { UpdateStatus(string.IsNullOrEmpty(result) ? StatusHelper.GetMessage(SyncStateEnum.SyncSuccess, DateTime.Now) : StatusHelper.GetMessage(SyncStateEnum.SyncFailed, result)); var totalSeconds = (int)DateTime.Now.Subtract(syncProfile.LastSync.GetValueOrDefault()).TotalSeconds; UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.Line)); UpdateStatus($"Time Elapsed : {totalSeconds} s"); UpdateStatus(StatusHelper.GetMessage(SyncStateEnum.LogSeparator)); syncMetric.ElapsedSeconds = totalSeconds; ShowNotification(false); syncProfile.NextSync = syncProfile.SyncFrequency.GetNextSyncTime( DateTime.Now); IsSyncInProgress = false; CheckForUpdates(); }
/// <summary> /// </summary> /// <param name="endDate"></param> /// <param name="sourceCalendarSpecificData"></param> /// <param name="destinationCalendarSpecificData"></param> /// <param name="startDate"></param> /// <returns> /// </returns> private bool LoadTasks(IDictionary <string, object> sourceCalendarSpecificData, IDictionary <string, object> destinationCalendarSpecificData) { //Update status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SourceReading, SourceTaskService.TaskServiceName); //Get source calendar SourceTasks = SourceTaskService.GetReminderTasksInRangeAsync(sourceCalendarSpecificData) .Result; if (SourceTasks == null) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SourceReadFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(false); } //Update status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SourceRead, SourceTaskService.TaskServiceName, SourceTasks.Count); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DestReading, DestinationTaskService.TaskServiceName); //Get destination calendar DestinationTasks = DestinationTaskService.GetReminderTasksInRangeAsync( destinationCalendarSpecificData).Result; if (DestinationTasks == null) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DestReadFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(false); } TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DestRead, DestinationTaskService.TaskServiceName, DestinationTasks.Count); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); }
public bool SyncTask(TaskSyncProfile syncProfile, SyncMetric syncMetric, SyncCallback syncCallback) { InitiatePreSyncSetup(syncProfile); var isSuccess = false; if (syncProfile != null) { TaskSyncEngine.Clear(); //Add log for sync mode TaskSyncStatus = string.Format("Calendar Sync : {0} {2} {1}", SourceTaskService.TaskServiceName, DestinationTaskService.TaskServiceName, syncProfile.SyncMode == SyncModeEnum.TwoWay ? "<===>" : "===>"); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); DateTime startDate, endDate; GetDateRange(syncProfile, out startDate, out endDate); //Add log for date range TaskSyncStatus = $"Date Range : {startDate.ToString("d")} - {endDate.ToString("d")}"; //Load calendar specific data var sourceCalendarSpecificData = GetCalendarSpecificData(syncProfile.Source, syncProfile); var destinationCalendarSpecificData = GetCalendarSpecificData(syncProfile.Destination, syncProfile); //Get source and destination Tasks isSuccess = LoadTasks(sourceCalendarSpecificData, destinationCalendarSpecificData); if (isSuccess) { syncMetric.SourceMetric.OriginalCount = SourceTasks.Count; syncMetric.DestMetric.OriginalCount = DestinationTasks.Count; //LoadSourceId(DestinationTasks, SourceTasks.TaskListId); //LoadSourceId(SourceTasks, DestinationTasks.TaskListId); } if (isSuccess) { //Delete destination Tasks isSuccess = DeleteDestinationTasks(syncProfile, syncMetric, destinationCalendarSpecificData, syncCallback); } if (isSuccess) { //Add Tasks to destination isSuccess = AddDestinationTasks(syncProfile, syncMetric, destinationCalendarSpecificData); } if (isSuccess && syncProfile.SyncMode == SyncModeEnum.TwoWay) { //Delete destination appointments isSuccess = DeleteSourceTasks(syncProfile, syncMetric, sourceCalendarSpecificData, syncCallback); if (isSuccess) { //If sync mode is two way... add events to source isSuccess = AddSourceTasks(syncProfile, syncMetric, sourceCalendarSpecificData); } } if (isSuccess) { isSuccess = UpdateEntries(syncProfile, syncMetric, sourceCalendarSpecificData, destinationCalendarSpecificData); } } syncMetric.IsSuccess = isSuccess; SourceTasks = null; DestinationTasks = null; SourceTaskService = null; DestinationTaskService = null; return(isSuccess); }
/// <summary> /// Delete appointments in destination /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="destinationCalendarSpecificData"></param> /// <param name="syncCallback"></param> /// <returns> /// </returns> private bool DeleteDestinationTasks(TaskSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> destinationCalendarSpecificData, SyncCallback syncCallback) { //if (syncProfile.SyncSettings.DisableDelete) //{ // return true; //} //Updating entry isDeleteOperation status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.ReadingEntriesToDelete, DestinationTaskService.TaskServiceName); //Getting appointments to isDeleteOperation TaskSyncEngine.GetDestEntriesToDelete(syncProfile, SourceTasks, DestinationTasks); var appointmentsToDelete = TaskSyncEngine.DestTasksToDelete; if (syncProfile.SyncMode == SyncModeEnum.OneWay) { //if (syncProfile.SyncSettings.ConfirmOnDelete && syncCallback != null) //{ // var orphanEntries = Environment.NewLine + // string.Join(Environment.NewLine, TaskSyncEngine.DestOrphanEntries); // //Log Orphan Entries // Logger.Warn("Orphan entries to delete: " + orphanEntries); // var message = string.Format("Are you sure you want to delete {0} orphan entries from {1}?{2}", // appointmentsToDelete.Count, DestinationTaskService.TaskServiceName, // orphanEntries); // var e = new SyncEventArgs(message, UserActionEnum.ConfirmDelete); // var task = syncCallback(e); // if (task.Result) // { // appointmentsToDelete.AddRange(TaskSyncEngine.DestOrphanEntries); // } //} //else if (!syncProfile.SyncSettings.DisableDelete) //{ // appointmentsToDelete.AddRange(TaskSyncEngine.DestOrphanEntries); //} } //Updating Get entry isDeleteOperation status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToDelete, appointmentsToDelete.Count); if (appointmentsToDelete.Count == 0) { TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); } //Updating isDeleteOperation status TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DeletingEntries, DestinationTaskService.TaskServiceName); //Deleting entries var deletedTasks = DestinationTaskService.DeleteReminderTasks(appointmentsToDelete, destinationCalendarSpecificData) .Result; var isSuccess = deletedTasks.IsSuccess; //Update status if entries were successfully deleted TaskSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.DeletingEntriesComplete : SyncStateEnum.DeletingEntriesFailed); TaskSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); if (isSuccess) { syncMetric.DestMetric.DeleteCount = appointmentsToDelete.Count; syncMetric.DestMetric.DeleteFailedCount = appointmentsToDelete.Count - deletedTasks.Count; for (var index = 0; index < appointmentsToDelete.Count; index++) { DestinationTasks.Remove(appointmentsToDelete[index]); } } return(isSuccess); }
/// <summary> /// Delete appointments in destination /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="destinationCalendarSpecificData"></param> /// <param name="syncCallback"></param> /// <returns> /// </returns> private bool DeleteDestinationAppointments(CalendarSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> destinationCalendarSpecificData, SyncCallback syncCallback) { //Updating entry isDeleteOperation status CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.ReadingEntriesToDelete, DestinationCalendarService.CalendarServiceName); //Getting appointments to isDeleteOperation CalendarSyncEngine.GetDestEntriesToDelete(syncProfile, SourceAppointments, DestinationAppointments); var appointmentsToDelete = CalendarSyncEngine.DestAppointmentsToDelete; if (syncProfile.SyncMode == SyncModeEnum.OneWay && CalendarSyncEngine.DestOrphanEntries.Any()) { if (syncProfile.SyncSettings.ConfirmOnDelete && syncCallback != null) { var orphanEntries = Environment.NewLine + string.Join(Environment.NewLine, CalendarSyncEngine.DestOrphanEntries); //Log Orphan Entries Logger.Warn("Orphan entries to delete: " + orphanEntries); var message = $"Are you sure you want to delete {appointmentsToDelete.Count} orphan entries from {DestinationCalendarService.CalendarServiceName}?{orphanEntries}"; var e = new SyncEventArgs(message, UserActionEnum.ConfirmDelete); var task = syncCallback(e); if (task.Result) { appointmentsToDelete.AddRange(CalendarSyncEngine.DestOrphanEntries); } } else { if (!syncProfile.SyncSettings.DisableDelete) { appointmentsToDelete.AddRange(CalendarSyncEngine.DestOrphanEntries); } else { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.SkipDelete); } } } //Updating Get entry isDeleteOperation status CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToDelete, appointmentsToDelete.Count); if (appointmentsToDelete.Count == 0) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); } //Updating isDeleteOperation status CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.DeletingEntries, DestinationCalendarService.CalendarServiceName); //Deleting entries var deletedAppointments = DestinationCalendarService.DeleteCalendarEvents(appointmentsToDelete, destinationCalendarSpecificData) .Result; var isSuccess = deletedAppointments.IsSuccess; //Update status if entries were successfully deleted CalendarSyncStatus = StatusHelper.GetMessage(isSuccess ? SyncStateEnum.DeletingEntriesComplete : SyncStateEnum.DeletingEntriesFailed); CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); if (isSuccess) { syncMetric.DestMetric.DeleteCount = appointmentsToDelete.Count; syncMetric.DestMetric.DeleteFailedCount = appointmentsToDelete.Count - deletedAppointments.Count; for (var index = 0; index < appointmentsToDelete.Count; index++) { DestinationAppointments.Remove(appointmentsToDelete[index]); } } return(isSuccess); }