protected override void UpdateCalendarItemInternal(ref CalendarItemBase originalCalendarItem) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingCancellation.UpdateCalendarItemInternal: GOID={0}", this.GlobalObjectId); CalendarItemBase calendarItemBase = originalCalendarItem; if (base.IsOutOfDate(calendarItemBase)) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingCancellation.UpdateCalendarItemInternal: GOID={0}; NOOP because message is out of date.", this.GlobalObjectId); return; } calendarItemBase = base.GetCalendarItemToUpdate(calendarItemBase); base.AdjustAppointmentState(); calendarItemBase.LocationIdentifierHelperInstance.SetLocationIdentifier(49781U); CalendarItemBase.CopyPropertiesTo(this, calendarItemBase, MeetingMessage.MeetingMessageProperties); this.CopyParticipantsToCalendarItem(calendarItemBase); string valueOrDefault = base.GetValueOrDefault <string>(InternalSchema.AppointmentClass); if (valueOrDefault != null && ObjectClass.IsDerivedClass(valueOrDefault, "IPM.Appointment")) { calendarItemBase.ClassName = valueOrDefault; } Microsoft.Exchange.Data.Storage.Item.CopyCustomPublicStrings(this, calendarItemBase); if (!base.IsRepairUpdateMessage) { calendarItemBase.LocationIdentifierHelperInstance.SetLocationIdentifier(65013U); Body.CopyBody(this, calendarItemBase, false); calendarItemBase.LocationIdentifierHelperInstance.SetLocationIdentifier(56821U); base.ReplaceAttachments(calendarItemBase); } calendarItemBase.FreeBusyStatus = BusyType.Free; calendarItemBase.LocationIdentifierHelperInstance.SetLocationIdentifier(40437U); calendarItemBase[InternalSchema.AppointmentState] = base.AppointmentState; originalCalendarItem = calendarItemBase; }
private static void DefaultCopy(PreservablePropertyContext context, StorePropertyDefinition prop) { CalendarItemBase.CopyPropertiesTo(context.MeetingRequest, context.CalendarItem, new PropertyDefinition[] { prop }); }
protected override void InitializeMeetingRequest(Action <MeetingRequest> setBodyAndAdjustFlags, MeetingRequest meetingRequest) { base.InitializeMeetingRequest(setBodyAndAdjustFlags, meetingRequest); Microsoft.Exchange.Data.Storage.Item.CopyCustomPublicStrings(this, meetingRequest); this.ClearCounterProposal(); if (base.CalendarItemType == CalendarItemType.RecurringMaster) { CalendarItemBase.CopyPropertiesTo(this, meetingRequest, new PropertyDefinition[] { InternalSchema.AppointmentRecurrenceBlob }); } }
private void Initialize(MeetingRequest request, string className) { base.Initialize(); this.ClassName = className; base.Recipients.Add(request.From); CalendarItemBase.CopyPropertiesTo(request, this, MeetingForwardNotification.MeetingForwardNotificationProperties); List <BlobRecipient> list = new List <BlobRecipient>(); foreach (Recipient recipient in request.Recipients) { BlobRecipient item = new BlobRecipient(recipient); list.Add(item); } this.SetForwardedAttendees(list); this.Subject = base.GetValueOrDefault <string>(InternalSchema.NormalizedSubjectInternal, string.Empty); }
private void CopyRecurrenceBlob(CalendarItem calendarItem, byte[] recurrenceBlob, bool preserveLocalExceptions) { InternalRecurrence originalRecurrence = preserveLocalExceptions ? CalendarItem.GetRecurrenceFromItem(calendarItem) : null; calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(46197U); calendarItem[InternalSchema.AppointmentRecurrenceBlob] = recurrenceBlob; if (preserveLocalExceptions) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, string>((long)this.GetHashCode(), "Storage.MeetingRequest.CopyMeetingRequestProperties: GOID={0}; {1}", this.GlobalObjectId, "Will merge the recurrence blob."); CalendarItemBase.CopyPropertiesTo(this, calendarItem, new PropertyDefinition[] { CalendarItemBaseSchema.TimeZone, CalendarItemBaseSchema.TimeZoneBlob, CalendarItemBaseSchema.TimeZoneDefinitionRecurring }); InternalRecurrence recurrenceFromItem = CalendarItem.GetRecurrenceFromItem(calendarItem); if (RecurrenceBlobMerger.Merge(base.Session, calendarItem, this.GlobalObjectId, originalRecurrence, recurrenceFromItem)) { calendarItem[InternalSchema.AppointmentRecurrenceBlob] = recurrenceFromItem.ToByteArray(); } } }
protected override void CopyMeetingRequestProperties(MeetingRequest meetingRequest) { base.CopyMeetingRequestProperties(meetingRequest); CalendarItemBase.CopyPropertiesTo(this, meetingRequest, MeetingMessage.WriteOnCreateSeriesProperties); }
private void CopyMeetingRequestProperties(CalendarItemBase calendarItem, bool preserveLocalExceptions) { long size = calendarItem.Body.Size; calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(42101U); if (!base.IsRepairUpdateMessage || (this.ChangeHighlight & ChangeHighlightProperties.BodyProps) == ChangeHighlightProperties.BodyProps) { Body.CopyBody(this, calendarItem, false); this.CopyNlgPropertiesTo(calendarItem); } ChangeHighlightProperties changeHighlight = this.ChangeHighlight; this.ProcessChangeHighlights(calendarItem, calendarItem.Body.Size, size); MeetingMessageType meetingMessageType = base.GetValueOrDefault <MeetingMessageType>(InternalSchema.MeetingRequestType, MeetingMessageType.NewMeetingRequest); if (meetingMessageType == MeetingMessageType.PrincipalWantsCopy) { if (calendarItem.IsNew) { meetingMessageType = MeetingMessageType.NewMeetingRequest; ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId>((long)this.GetHashCode(), "Storage.MeetingRequest.CopyMeetingRequestProperties: GOID={0}; Meeting type is PrincipalWantsCopy and calendar item just created.", this.GlobalObjectId); } else { meetingMessageType = base.GetValueOrDefault <MeetingMessageType>(InternalSchema.OriginalMeetingType, MeetingMessageType.NewMeetingRequest); ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, MeetingMessageType>((long)this.GetHashCode(), "Storage.MeetingRequest.CopyMeetingRequestProperties: GOID={0}; Meeting type is PrincipalWantsCopy. Will use OriginalMeetingType {1}", this.GlobalObjectId, meetingMessageType); } } base.LocationIdentifierHelperInstance.SetLocationIdentifier(60533U, LastChangeAction.CopyMeetingRequestProperties); calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(35957U, LastChangeAction.CopyMeetingRequestProperties); if (MeetingMessageType.NewMeetingRequest == meetingMessageType || calendarItem.IsNew) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, string>((long)this.GetHashCode(), "Storage.MeetingRequest.CopyMeetingRequestProperties: GOID={0}; {1}", this.GlobalObjectId, "Copying WriteOnCreate properties onto calendar item."); calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(52341U); CalendarItemBase.CopyPropertiesTo(this, calendarItem, MeetingMessage.WriteOnCreateProperties); if (base.IsSeriesMessage) { CalendarItemBase.CopyPropertiesTo(this, calendarItem, MeetingMessage.WriteOnCreateSeriesProperties); } Reminder.EnsureMinutesBeforeStartIsInRange(calendarItem, this.consumerDefaultMinutesBeforeStart); if (base.IsRepairUpdateMessage) { int?valueAsNullable = base.GetValueAsNullable <int>(CalendarItemBaseSchema.ItemVersion); if (valueAsNullable != null) { calendarItem[CalendarItemBaseSchema.ItemVersion] = valueAsNullable; } } } if (meetingMessageType == MeetingMessageType.NewMeetingRequest || (!base.IsRepairUpdateMessage && meetingMessageType == MeetingMessageType.FullUpdate)) { calendarItem.ResponseType = ResponseType.NotResponded; BusyType valueOrDefault = base.GetValueOrDefault <BusyType>(InternalSchema.IntendedFreeBusyStatus, BusyType.Busy); BusyType valueOrDefault2 = base.GetValueOrDefault <BusyType>(InternalSchema.FreeBusyStatus, BusyType.Tentative); calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(58485U); calendarItem[InternalSchema.IntendedFreeBusyStatus] = valueOrDefault; calendarItem[InternalSchema.FreeBusyStatus] = ((valueOrDefault != BusyType.Free) ? valueOrDefault2 : BusyType.Free); } ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, string>((long)this.GetHashCode(), "Storage.MeetingRequest.CopyMeetingRequestProperties: GOID={0}; {1}", this.GlobalObjectId, "Copying properties onto calendar item."); byte[] largeBinaryProperty = base.PropertyBag.GetLargeBinaryProperty(InternalSchema.AppointmentRecurrenceBlob); CalendarItem calendarItem2 = calendarItem as CalendarItem; bool flag = false; if (largeBinaryProperty != null && calendarItem2 != null) { calendarItem2.SuppressUpdateRecurrenceTimeOffset = true; this.CopyRecurrenceBlob(calendarItem2, largeBinaryProperty, preserveLocalExceptions); flag = true; } else if (calendarItem.CalendarItemType == CalendarItemType.RecurringMaster) { CalendarItem calendarItem3 = calendarItem as CalendarItem; if (calendarItem3 != null) { calendarItem3.Recurrence = null; } } calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(62581U); if (calendarItem is CalendarItem) { PropertyChangeMetadataProcessingFlags propertyChangeMetadataProcessingFlags = calendarItem.GetValueOrDefault <PropertyChangeMetadataProcessingFlags>(CalendarItemSchema.PropertyChangeMetadataProcessingFlags, PropertyChangeMetadataProcessingFlags.None); propertyChangeMetadataProcessingFlags |= PropertyChangeMetadataProcessingFlags.OverrideMetadata; calendarItem[CalendarItemSchema.PropertyChangeMetadataProcessingFlags] = propertyChangeMetadataProcessingFlags; } if (this.ShouldPreserveAttendeesChanges(calendarItem)) { ExTraceGlobals.MeetingMessageTracer.Information <GlobalObjectId, string>((long)this.GetHashCode(), "Storage.MeetingRequest.CopyMeetingRequestProperties: GOID={0}; {1}", this.GlobalObjectId, "Will copy properties trying to preserve attendee's changes."); CalendarItemBase.CopyPropertiesTo(this, calendarItem, CalendarItemProperties.NonPreservableMeetingMessageProperties); PreservableMeetingMessageProperty.CopyPreserving(new PreservablePropertyContext(this, calendarItem, changeHighlight)); if (calendarItem is CalendarItem) { PropertyChangeMetadata valueOrDefault3 = calendarItem.GetValueOrDefault <PropertyChangeMetadata>(InternalSchema.PropertyChangeMetadata); PropertyChangeMetadata valueOrDefault4 = base.GetValueOrDefault <PropertyChangeMetadata>(InternalSchema.PropertyChangeMetadata); PropertyChangeMetadata propertyChangeMetadata = PropertyChangeMetadata.Merge(valueOrDefault3, valueOrDefault4); if (propertyChangeMetadata != null) { calendarItem[InternalSchema.PropertyChangeMetadata] = propertyChangeMetadata; } } } else { if (calendarItem.CalendarItemType == CalendarItemType.RecurringMaster || calendarItem.CalendarItemType == CalendarItemType.Single) { calendarItem.DeleteProperties(MeetingMessage.DisplayTimeZoneProperties); } if (calendarItem is CalendarItem) { CalendarItemBase.CopyPropertiesTo(this, calendarItem, new PropertyDefinition[] { InternalSchema.PropertyChangeMetadataRaw }); } CalendarItemBase.CopyPropertiesTo(this, calendarItem, MeetingMessage.MeetingMessageProperties); } string valueOrDefault5 = base.GetValueOrDefault <string>(InternalSchema.AppointmentClass); if (valueOrDefault5 != null && ObjectClass.IsDerivedClass(valueOrDefault5, "IPM.Appointment")) { calendarItem.ClassName = valueOrDefault5; } Microsoft.Exchange.Data.Storage.Item.CopyCustomPublicStrings(this, calendarItem); calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(54389U); CalendarItemBase.CopyPropertiesTo(this, calendarItem, new PropertyDefinition[] { InternalSchema.TimeZoneDefinitionRecurring }); if (meetingMessageType == MeetingMessageType.InformationalUpdate && !calendarItem.IsCalendarItemTypeOccurrenceOrException) { Sensitivity?valueAsNullable2 = base.GetValueAsNullable <Sensitivity>(InternalSchema.Sensitivity); if (valueAsNullable2 != null && calendarItem.Sensitivity != Sensitivity.Private && Enum.IsDefined(typeof(Sensitivity), valueAsNullable2.Value)) { calendarItem.Sensitivity = valueAsNullable2.Value; } } calendarItem.LocationIdentifierHelperInstance.SetLocationIdentifier(50293U); calendarItem.Reminder.Adjust(); if (flag && calendarItem2 != null) { calendarItem2.ReloadRecurrence(); } }