protected override void InternalSetValue(PropertyBag.BasicPropertyStore propertyBag, object value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("OutlookBlockStatus");
            }
            EnumValidator.ThrowIfInvalid <BlockStatus>((BlockStatus)value, "value");
            int num = (int)value;

            if (num < 3)
            {
                propertyBag.SetValueWithFixup(InternalSchema.NativeBlockStatus, (BlockStatus)num);
                return;
            }
            ExDateTime valueOrDefault = propertyBag.GetValueOrDefault <ExDateTime>(InternalSchema.ReceivedTime, ExDateTime.MinValue);

            if (valueOrDefault != ExDateTime.MinValue)
            {
                double floatDate = ExTimeZone.UtcTimeZone.ConvertDateTime(valueOrDefault).ToOADate();
                int    num2      = OutlookBlockStatusProperty.ComputeBlockStatus(floatDate);
                propertyBag.SetValueWithFixup(InternalSchema.NativeBlockStatus, (BlockStatus)num2);
                return;
            }
            propertyBag.SetValueWithFixup(InternalSchema.NativeBlockStatus, BlockStatus.DontKnow);
        }
        protected override object InternalTryGetValue(PropertyBag.BasicPropertyStore propertyBag)
        {
            int valueOrDefault = propertyBag.GetValueOrDefault <int>(InternalSchema.NativeBlockStatus);

            if (valueOrDefault < 0)
            {
                return(new PropertyError(this, PropertyErrorCode.GetCalculatedPropertyError));
            }
            if (valueOrDefault <= 3)
            {
                return((BlockStatus)valueOrDefault);
            }
            ExDateTime valueOrDefault2 = propertyBag.GetValueOrDefault <ExDateTime>(InternalSchema.ReceivedTime, ExDateTime.MinValue);

            if (!(valueOrDefault2 != ExDateTime.MinValue))
            {
                return(BlockStatus.DontKnow);
            }
            double floatDate = ExTimeZone.UtcTimeZone.ConvertDateTime(valueOrDefault2).ToOADate();
            int    num       = OutlookBlockStatusProperty.ComputeBlockStatus(floatDate);
            int    num2      = (num >= valueOrDefault) ? (num - valueOrDefault) : (valueOrDefault - num);

            if (num2 < 1)
            {
                return(BlockStatus.NoNeverAgain);
            }
            return(BlockStatus.DontKnow);
        }