Esempio n. 1
0
        private void CopyNlgPropertiesTo(CalendarItemBase calendarItem)
        {
            bool flag = false;

            foreach (PropertyExistenceTracker propertyDefinition in MeetingRequest.NlgExtractedExistenceProperties)
            {
                if (base.GetValueOrDefault <bool>(propertyDefinition, false))
                {
                    flag = true;
                    break;
                }
            }
            if (flag)
            {
                base.Load(MeetingRequest.NlgExtractedProperties);
            }
            foreach (StorePropertyDefinition storePropertyDefinition in MeetingRequest.NlgExtractedProperties)
            {
                object obj = flag ? base.TryGetProperty(storePropertyDefinition) : null;
                if (obj != null && !PropertyError.IsPropertyError(obj))
                {
                    calendarItem[storePropertyDefinition] = obj;
                }
                else
                {
                    calendarItem.DeleteProperties(new PropertyDefinition[]
                    {
                        storePropertyDefinition
                    });
                }
            }
        }
Esempio n. 2
0
        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();
            }
        }