public override void Sync(ItemType item, MailboxSession mailboxSession, ExchangeService exchangeService) { CalendarItemType calendarItemType = item as CalendarItemType; if (calendarItemType == null) { ItemSynchronizer.Tracer.TraceDebug <CalendarItemSynchronizer, string>((long)this.GetHashCode(), "{0}: Found non-Calendar item in a Calendar folder: {1}. Skipping.", this, item.ItemId.Id); return; } CalendarItem calendarItem = base.FindLocalCopy(calendarItemType.ItemId.Id, mailboxSession) as CalendarItem; if (calendarItem == null) { ItemSynchronizer.Tracer.TraceDebug <CalendarItemSynchronizer, string>((long)this.GetHashCode(), "{0}: Item not found locally {1}.", this, calendarItemType.ItemId.Id); this.appointmentTranslator.CreateAppointment(exchangeService, mailboxSession, calendarItemType, this.localFolder); } else { try { this.appointmentTranslator.UpdateAppointment(exchangeService, mailboxSession, calendarItemType, calendarItem); } catch (LastOccurrenceDeletionException arg) { ItemSynchronizer.Tracer.TraceDebug <CalendarItemSynchronizer, string, LastOccurrenceDeletionException>((long)this.GetHashCode(), "{0}: All occurrences in the series were deleted - {1}, Error - {2}, We will delete the local item.", this, calendarItemType.ItemId.Id, arg); this.localFolder.SelectItemToDelete(calendarItem.Id.ObjectId); } finally { calendarItem.Dispose(); } } PerformanceCounters.CalendarItemsSynced.Increment(); }
public void CreateAppointment(ExchangeService exchangeService, MailboxSession session, CalendarItemType remoteItem, LocalFolder localFolder) { AppointmentTranslator.Tracer.TraceDebug <AppointmentTranslator, string>((long)this.GetHashCode(), "{0}: Creating appointment {1}", this, remoteItem.ItemId.Id); CalendarItem calendarItem = CalendarItem.Create(session, localFolder.Id); bool flag = false; try { this.UpdateAppointment(exchangeService, session, remoteItem, calendarItem); flag = true; } catch (LastOccurrenceDeletionException arg) { AppointmentTranslator.Tracer.TraceDebug <AppointmentTranslator, string, LastOccurrenceDeletionException>((long)this.GetHashCode(), "{0}: All occurrences in the series were deleted - {1}, Error - {2}, We will delete the local item because there are no instances.", this, remoteItem.ItemId.Id, arg); localFolder.SelectItemToDelete(calendarItem.Id.ObjectId); flag = true; } finally { if (!flag && calendarItem.Id != null) { localFolder.SelectItemToDelete(calendarItem.Id.ObjectId); } calendarItem.Dispose(); } }
public static CalendarItem CreateDraft(UserContext userContext, StoreObjectId folderId) { if (userContext == null) { throw new ArgumentNullException("userContext"); } ExTraceGlobals.CalendarTracer.TraceDebug(0L, "Creating new calendar item."); CalendarItem calendarItem = null; calendarItem = CalendarItem.Create(userContext.MailboxSession, (folderId != null) ? folderId : userContext.CalendarFolderId); calendarItem[ItemSchema.ConversationIndexTracking] = true; if (calendarItem != null) { try { calendarItem[ItemSchema.IsResponseRequested] = true; calendarItem[ItemSchema.ReminderMinutesBeforeStart] = userContext.CalendarSettings.DefaultReminderTime; } catch { if (calendarItem != null) { calendarItem.Dispose(); calendarItem = null; } throw; } } return(calendarItem); }
public void ChangeEndRecurrence() { OwaStoreObjectId owaStoreObjectId = (OwaStoreObjectId)base.GetParameter("Id"); string changeKey = (string)base.GetParameter("CK"); ExDateTime endRange = (ExDateTime)base.GetParameter("ET"); CalendarItem calendarItem = null; try { calendarItem = Utilities.GetItem <CalendarItem>(base.UserContext, owaStoreObjectId, changeKey, new PropertyDefinition[] { CalendarItemBaseSchema.IsMeeting, CalendarItemBaseSchema.MeetingRequestWasSent, StoreObjectSchema.EffectiveRights }); if (!ItemUtility.UserCanEditItem(calendarItem) || Utilities.IsItemInExternalSharedInFolder(base.UserContext, calendarItem)) { this.Writer.Write("<div id=divOp _sOp=\"np\"></div>"); } else { int num = MeetingUtilities.CancelRecurrence(calendarItem, endRange); if (num != -2147483648) { if (calendarItem.IsMeeting && calendarItem.MeetingRequestWasSent && calendarItem.IsOrganizer()) { base.ResponseContentType = OwaEventContentType.Html; this.Writer.Write("<div id=divOp _sOp=er></div>"); } else if (0 < num) { EndDateRecurrenceRange range = new EndDateRecurrenceRange(calendarItem.Recurrence.Range.StartDate, endRange.IncrementDays(-1)); calendarItem.Recurrence = new Recurrence(calendarItem.Recurrence.Pattern, range); Utilities.SaveItem(calendarItem); this.RenderPayload(new OwaStoreObjectId[] { (OwaStoreObjectId)base.GetParameter("fId") }); } else { calendarItem.DeleteMeeting(DeleteItemFlags.MoveToDeletedItems); this.RenderPayload(new OwaStoreObjectId[] { (OwaStoreObjectId)base.GetParameter("fId") }); } } } } finally { if (calendarItem != null) { calendarItem.Dispose(); calendarItem = null; } } }
internal static bool CancelCalendarItem(UserContext userContext, CalendarItemBase calendarItemBase, EditCalendarItemHelper.CancelRangeType cancelRange, ExDateTime cancelFromDateTime, out InfobarMessage infobarMessage) { bool result = true; infobarMessage = null; CalendarItem calendarItem = calendarItemBase as CalendarItem; try { if (calendarItem == null) { StoreObjectId masterStoreObjectId = CalendarUtilities.GetMasterStoreObjectId(calendarItemBase); calendarItem = Utilities.GetItem <CalendarItem>(userContext, masterStoreObjectId, new PropertyDefinition[0]); if (calendarItem != null) { calendarItem.OpenAsReadWrite(); } } if (cancelRange == EditCalendarItemHelper.CancelRangeType.Occurrence || cancelRange == EditCalendarItemHelper.CancelRangeType.None) { EditCalendarItemHelper.CancelCalendarItem(userContext, calendarItemBase); } else if (cancelRange == EditCalendarItemHelper.CancelRangeType.All) { EditCalendarItemHelper.CancelCalendarItem(userContext, calendarItem); } else if (cancelRange == EditCalendarItemHelper.CancelRangeType.FromDate) { int cancelRecurrenceCount = CalendarItemUtilities.GetCancelRecurrenceCount(calendarItem, cancelFromDateTime); if (cancelRecurrenceCount == 0) { EditCalendarItemHelper.CancelCalendarItem(userContext, calendarItem); } else if (cancelRecurrenceCount > 0) { calendarItem.Recurrence = new Recurrence(calendarItem.Recurrence.Pattern, new EndDateRecurrenceRange(calendarItem.Recurrence.Range.StartDate, cancelFromDateTime.IncrementDays(-1))); if (calendarItem.IsMeeting && calendarItem.MeetingRequestWasSent) { result = CalendarUtilities.SendMeetingMessages(userContext, calendarItem, true, out infobarMessage); } else { result = CalendarUtilities.SaveCalendarItem(calendarItem, userContext, out infobarMessage); } } } } finally { if (calendarItem != null && calendarItem != calendarItemBase) { calendarItem.Dispose(); } } return(result); }
protected internal override CalendarItemOccurrence RecoverDeletedOccurrence() { if (this.possibleDeletedOccurrenceId != null) { MailboxSession calendarMailboxSession = MeetingMessage.GetCalendarMailboxSession(this); for (int i = 0; i < 2; i++) { CalendarItem calendarItem = CalendarItem.Bind(calendarMailboxSession, StoreObjectId.FromProviderSpecificId(this.possibleDeletedOccurrenceId.ProviderLevelItemId, StoreObjectType.CalendarItem)); try { calendarItem.OpenAsReadWrite(); if (calendarItem.Recurrence != null) { InternalRecurrence internalRecurrence = (InternalRecurrence)calendarItem.Recurrence; ExDateTime occurrenceId = ((OccurrenceStoreObjectId)this.possibleDeletedOccurrenceId).OccurrenceId; if (internalRecurrence.IsValidOccurrenceId(occurrenceId)) { if (internalRecurrence.IsOccurrenceDeleted(occurrenceId)) { base.LocationIdentifierHelperInstance.SetLocationIdentifier(39541U, LastChangeAction.RecoverDeletedOccurance); calendarItem.RecoverDeletedOccurrence(this.possibleDeletedOccurrenceId); if (calendarItem.Save(SaveMode.ResolveConflicts).SaveStatus == SaveResult.IrresolvableConflict) { goto IL_136; } } CalendarItemOccurrence calendarItemOccurrence = CalendarItemOccurrence.Bind(calendarMailboxSession, this.possibleDeletedOccurrenceId, MeetingMessageSchema.Instance.AutoloadProperties); calendarItemOccurrence.OpenAsReadWrite(); ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.RecoverDeletedOccurrence: GOID={0}; occurrence recovered.", this.GlobalObjectId); return(calendarItemOccurrence); } ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.RecoverDeletedOccurrence: GOID={0}; occurrence id is invalid.", this.GlobalObjectId); return(null); } } catch (OccurrenceNotFoundException) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.RecoverDeletedOccurrence: GOID={0}; occurrence not found.", this.GlobalObjectId); return(null); } finally { calendarItem.Dispose(); } IL_136 :; } } ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingMessage.RecoverDeletedOccurrence: GOID={0}; occurrence not recovered.", this.GlobalObjectId); return(null); }
internal static List <MeetingData> GetMeetingsInRange(MailboxSession session, UserObject mailboxUser, CalendarFolder calendarFolder, ExDateTime rangeStart, ExDateTime rangeEnd, string locationToFilterWith, string subjectToFilterWith, List <MeetingValidationResult> results) { object[][] array = null; List <MeetingData> list = new List <MeetingData>(); HashSet <StoreId> hashSet = new HashSet <StoreId>(); if (results == null) { return(list); } array = CalendarQuery.GetRecurringMasters(calendarFolder, CalendarQuery.CalendarQueryProps); foreach (object[] array3 in array) { if (!ObjectClass.IsCalendarItemSeries((string)array3[29])) { string text; if (!CalendarQuery.ArePropertiesValid(array3, out text)) { StoreId storeId = (StoreId)array3[0]; MeetingData meetingData = MeetingData.CreateInstance(mailboxUser, storeId); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData, false, text)); } else { string location = (string)array3[8]; string text2 = (string)array3[9]; if (CalendarQuery.ShouldContinueLocationSubjectFilters(locationToFilterWith, subjectToFilterWith, location, text2)) { StoreId storeId = (StoreId)array3[0]; bool flag = (bool)array3[3]; if (flag) { CalendarItem calendarItem = null; string empty = string.Empty; try { calendarItem = CalendarItem.Bind(session, storeId, CalendarQuery.CalendarQueryProps); if (calendarItem.Recurrence != null) { IList <OccurrenceInfo> modifiedOccurrences = calendarItem.Recurrence.GetModifiedOccurrences(); foreach (OccurrenceInfo occurrenceInfo in modifiedOccurrences) { StoreId versionedId = occurrenceInfo.VersionedId; hashSet.Add(versionedId); } OccurrenceInfo firstOccurrence; OccurrenceInfo occurrenceInfo2; try { firstOccurrence = calendarItem.Recurrence.GetFirstOccurrence(); if (calendarItem.Recurrence.Range is NoEndRecurrenceRange) { occurrenceInfo2 = null; } else { occurrenceInfo2 = calendarItem.Recurrence.GetLastOccurrence(); } } catch (RecurrenceHasNoOccurrenceException) { goto IL_350; } catch (InvalidOperationException) { MeetingData meetingData2 = MeetingData.CreateInstance(mailboxUser, storeId); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData2, false, string.Format("GetMeetingsInRange: InvalidOperationException: no end occurence, Subject=\"{0}\"", text2))); goto IL_350; } if ((occurrenceInfo2 == null || !(occurrenceInfo2.StartTime < rangeStart)) && !(firstOccurrence.EndTime >= rangeEnd)) { QueryResultPropertyBag queryResultPropertyBag = new QueryResultPropertyBag(session, CalendarQuery.CalendarQueryProps); queryResultPropertyBag.SetQueryResultRow(array3); MeetingData item = MeetingData.CreateInstance(mailboxUser, calendarItem); list.Add(item); foreach (OccurrenceInfo occurrenceInfo3 in modifiedOccurrences) { if (!(occurrenceInfo3.StartTime > rangeEnd) && !(occurrenceInfo3.StartTime < rangeStart)) { MeetingData item2 = MeetingData.CreateInstance(mailboxUser, occurrenceInfo3.VersionedId, calendarItem.GlobalObjectId, CalendarItemType.Exception); list.Add(item2); } } } } } catch (RecurrenceFormatException exception) { MeetingData item3 = MeetingData.CreateInstance(mailboxUser, storeId, null, exception); list.Add(item3); } catch (ObjectNotFoundException exception2) { MeetingData meetingData3 = MeetingData.CreateInstance(mailboxUser, storeId, null, exception2); list.Add(meetingData3); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData3, false, string.Format("GetMeetingsInRange: ObjectNotFoundException - could not find this meeting, Subject=\"{0}\"", text2))); } catch (CorruptDataException arg) { text = string.Format("GetMeetingsInRange: Subject=\"{0}\", CorruptDataException: {1}", text2, arg); MeetingValidationResult mvresultWithMoreCalItemData = CalendarQuery.GetMVResultWithMoreCalItemData(session, mailboxUser, storeId, text, text2, rangeStart, rangeEnd); results.Add(mvresultWithMoreCalItemData); } catch (ArgumentException exception3) { MeetingData meetingData4 = MeetingData.CreateInstance(mailboxUser, storeId, null, exception3); list.Add(meetingData4); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData4, false, string.Format("GetMeetingsInRange: ArgumentException - could not bind this meeting, Subject=\"{0}\"", text2))); } catch (AccessDeniedException arg2) { MeetingData meetingData5 = MeetingData.CreateInstance(mailboxUser, storeId); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData5, false, string.Format("GetMeetingsInRange: AccessDeniedException: {0}", arg2))); } finally { if (calendarItem != null) { calendarItem.Dispose(); } } } } } } IL_350 :; } try { array = calendarFolder.GetCalendarView(rangeStart, rangeEnd, CalendarQuery.CalendarQueryProps); } catch (Exception arg3) { MeetingData meetingData6 = MeetingData.CreateInstance(mailboxUser, null); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData6, false, string.Format("GetMeetingsInRange: Exception: {0}", arg3))); return(list); } foreach (object[] array5 in array) { if (!ObjectClass.IsCalendarItemSeries((string)array5[29])) { string errorDescription; if (!CalendarQuery.ArePropertiesValid(array5, out errorDescription)) { StoreId storeId2 = (StoreId)array5[0]; MeetingData meetingData7 = MeetingData.CreateInstance(mailboxUser, storeId2); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData7, false, errorDescription)); } else { string location2 = (string)array5[8]; string subject = (string)array5[9]; if (CalendarQuery.ShouldContinueLocationSubjectFilters(locationToFilterWith, subjectToFilterWith, location2, subject)) { StoreId storeId2 = (StoreId)array5[0]; bool flag2 = (bool)array5[3]; if (flag2) { byte[] array6 = (byte[])array5[1]; GlobalObjectId globalObjectId; try { globalObjectId = new GlobalObjectId(array6); } catch (CorruptDataException arg4) { MeetingData meetingData8 = MeetingData.CreateInstance(mailboxUser, storeId2); results.Add(new MeetingValidationResult(rangeStart, rangeEnd, mailboxUser, meetingData8, false, string.Format("GetMeetingsInRange: CorruptDataException: The Global Object ID is invalid ({0}). Error: {1}", GlobalObjectId.ByteArrayToHexString(array6), arg4))); goto IL_54A; } int value = (int)array5[30]; CalendarItemType calendarItemType = (CalendarItemType)array5[5]; if (calendarItemType == CalendarItemType.Single) { int appointmentSequenceNumber = (int)array5[15]; ExDateTime lastModifiedTime = (ExDateTime)array5[14]; ExDateTime ownerCriticalChangeTime = (ExDateTime)array5[17]; int documentId = (int)array5[33]; MeetingData item4 = MeetingData.CreateInstance(mailboxUser, storeId2, globalObjectId, appointmentSequenceNumber, lastModifiedTime, ownerCriticalChangeTime, CalendarItemType.Single, subject, new int?(value), documentId); list.Add(item4); } else if (calendarItemType == CalendarItemType.Exception) { if (!hashSet.Contains(storeId2)) { MeetingData item5 = MeetingData.CreateInstance(mailboxUser, storeId2, globalObjectId, CalendarItemType.Exception); list.Add(item5); } } else if (calendarItemType == CalendarItemType.Occurrence) { MeetingData item6 = MeetingData.CreateInstance(mailboxUser, storeId2, globalObjectId, CalendarItemType.Occurrence); list.Add(item6); } } } } } IL_54A :; } return(list); }