/// <summary> /// Add appointments to destination /// </summary> /// <param name="syncProfile"></param> /// <param name="syncMetric"></param> /// <param name="destinationCalendarSpecificData"></param> /// <returns> /// </returns> private bool AddDestinationAppointments(CalendarSyncProfile syncProfile, SyncMetric syncMetric, IDictionary <string, object> destinationCalendarSpecificData) { //Update status for reading entries to add CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.ReadingEntriesToAdd, DestinationCalendarService.CalendarServiceName); //Get entries to add CalendarSyncEngine.GetDestEntriesToAdd(syncProfile, SourceAppointments, DestinationAppointments); var appointmentsToAdd = CalendarSyncEngine.DestAppointmentsToAdd; CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.EntriesToAdd, appointmentsToAdd.Count); if (appointmentsToAdd.Count == 0) { CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.Line); return(true); } CalendarSyncStatus = StatusHelper.GetMessage(SyncStateEnum.AddingEntries, DestinationCalendarService.CalendarServiceName); //Add entries to destination calendar var addedAppointments = DestinationCalendarService.AddCalendarEvents(appointmentsToAdd, syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Description), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Reminders), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.Attendees), syncProfile.CalendarEntryOptions.HasFlag(CalendarEntryOptionsEnum.AttendeesToDescription), destinationCalendarSpecificData) .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.DestMetric.AddCount = appointmentsToAdd.Count; LoadSourceId(addedAppointments, SourceAppointments.CalendarId); DestinationAppointments.AddRange(addedAppointments); if (syncProfile.SyncMode == SyncModeEnum.TwoWay) { //Add appointments to update var updateSourceList = UpdateWithChildId(addedAppointments, SourceAppointments); CalendarSyncEngine.SourceAppointmentsToUpdate.AddRangeCompareForUpdate(updateSourceList); } } 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); }