private static BodyTagInfo DeserializeBodyTagInfoFromString(string bodyTagInfoString) { if (string.IsNullOrEmpty(bodyTagInfoString)) { return(null); } byte[] bytes = CTSGlobals.AsciiEncoding.GetBytes(bodyTagInfoString); return(BodyTagInfo.FromByteArray(bytes)); }
public bool IsBodyPartPresent(BodyFragmentInfo childBodyFragment, IStorePropertyBag parentPropertyBag, bool ignoreCache, out ExtractionData extractionData) { StoreObjectId objectId = ((VersionedId)parentPropertyBag.TryGetProperty(ItemSchema.Id)).ObjectId; KeyValuePair <ConversationBodyScanner, StoreObjectId> key = new KeyValuePair <ConversationBodyScanner, StoreObjectId>(childBodyFragment.BodyScanner, objectId); if (this.loadStatus.TryGetValue(key, out extractionData)) { bool flag = extractionData != null && extractionData.BodyFragment != null; if (flag || !ignoreCache) { return(flag); } } if (!ignoreCache && this.loadedItemParts.ContainsKey(objectId)) { extractionData = new ExtractionData(); } else { byte[] array = parentPropertyBag.TryGetProperty(ItemSchema.BodyTag) as byte[]; if (array == null && ignoreCache) { LoadedItemPart loadedItemPart = null; if (this.loadedItemParts.TryGetValue(objectId, out loadedItemPart) && loadedItemPart.BodyFragmentInfo != null && loadedItemPart.BodyFragmentInfo.BodyTag != null) { array = loadedItemPart.BodyFragmentInfo.BodyTag.ToByteArray(); } } this.optimizationInfo.IncrementBodyTagMatchingAttempts(); if (array != null) { extractionData = new ExtractionData(childBodyFragment, BodyTagInfo.FromByteArray(array)); if (extractionData.BodyFragment != null) { this.loadStatus[key] = extractionData; if (!extractionData.IsFormatReliable) { this.optimizationInfo.UpdateItemBodyFormatMismatched(objectId); this.optimizationInfo.IncrementBodyTagMatchingIssues(); } } else { this.optimizationInfo.UpdateItemBodyTagMismatched(objectId); this.optimizationInfo.IncrementBodyTagMatchingIssues(); } } else { extractionData = new ExtractionData(); this.optimizationInfo.UpdateItemBodyTagNotPresent(objectId); this.optimizationInfo.IncrementBodyTagMatchingIssues(); } } this.loadStatus[key] = extractionData; return(extractionData.BodyFragment != null); }
private ItemId PopulateItemIdFromItemExtendedPropertyValues(ExtendedPropertyType[] extendedProperties) { string id = null; string parentFolder = null; string primaryItemId = null; uint size = 0U; string subject = null; int documentId = 0; string text = null; string sender = null; string senderSmtpAddress = null; DateTime minValue = DateTime.MinValue; DateTime minValue2 = DateTime.MinValue; string importance = null; bool isRead = false; string text2 = null; BodyTagInfo btInfo = null; bool sentItems = false; if (extendedProperties != null) { foreach (ExtendedPropertyType extendedPropertyType in extendedProperties) { if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertySetId, Constants.MailboxItemIdPropertyIdSet, StringComparison.OrdinalIgnoreCase) == 0) { if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ItemIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ItemIdExtendedProperty.PropertyType) { id = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ParentFolderIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ParentFolderIdExtendedProperty.PropertyType) { parentFolder = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.PrimaryItemIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.PrimaryItemIdExtendedProperty.PropertyType) { primaryItemId = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ItemSizeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ItemSizeExtendedProperty.PropertyType) { uint.TryParse(extendedPropertyType.Item as string, out size); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.DocumentIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.DocumentIdExtendedProperty.PropertyType) { int.TryParse(extendedPropertyType.Item as string, out documentId); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SubjectExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SubjectExtendedProperty.PropertyType) { subject = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SenderExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SenderExtendedProperty.PropertyType) { sender = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SenderSmtpAddressExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SenderExtendedProperty.PropertyType) { senderSmtpAddress = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ReceivedTimeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ReceivedTimeExtendedProperty.PropertyType) { DateTime.TryParse(extendedPropertyType.Item as string, out minValue); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.SentTimeExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.SentTimeExtendedProperty.PropertyType) { DateTime.TryParse(extendedPropertyType.Item as string, out minValue2); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ImportanceExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ImportanceExtendedProperty.PropertyType) { importance = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.IsReadExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.IsReadExtendedProperty.PropertyType) { bool.TryParse(extendedPropertyType.Item as string, out isRead); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.InternetMessageIdExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.InternetMessageIdExtendedProperty.PropertyType) { text = (string)extendedPropertyType.Item; } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.ConversationTopicExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.ConversationTopicExtendedProperty.PropertyType) { text2 = MailboxItemIdList.DecodeDataFromEws((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.IsSentItemsExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.IsSentItemsExtendedProperty.PropertyType) { sentItems = bool.Parse((string)extendedPropertyType.Item); } else if (string.Compare(extendedPropertyType.ExtendedFieldURI.PropertyName, MailboxItemIdList.BodyTagInfoExtendedProperty.PropertyName, StringComparison.OrdinalIgnoreCase) == 0 && extendedPropertyType.ExtendedFieldURI.PropertyType == MailboxItemIdList.BodyTagInfoExtendedProperty.PropertyType) { string s = (string)extendedPropertyType.Item; byte[] byteArray = Convert.FromBase64String(s); btInfo = BodyTagInfo.FromByteArray(byteArray); } } } string uniqueHash = null; if (!string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(text2)) { uniqueHash = new UniqueItemHash(text, text2, btInfo, sentItems).ToString(); } return(new ItemId { Id = id, ParentFolder = parentFolder, PrimaryItemId = primaryItemId, Size = size, Subject = subject, DocumentId = documentId, InternetMessageId = text, Sender = sender, SenderSmtpAddress = senderSmtpAddress, ReceivedTime = minValue, SentTime = minValue2, Importance = importance, IsRead = isRead, UniqueHash = uniqueHash, SourceId = this.sourcePrimarySmtpAddress }); } return(null); }
public static UniqueItemHash Create(IStorePropertyBag propertyBag, bool isOnSentItems) { string internetMsgId = propertyBag.TryGetProperty(ItemSchema.InternetMessageId) as string; string text = propertyBag.TryGetProperty(ItemSchema.ConversationTopic) as string; byte[] array = propertyBag.TryGetProperty(ItemSchema.BodyTag) as byte[]; return(new UniqueItemHash(internetMsgId, string.IsNullOrEmpty(text) ? string.Empty : text, (array != null) ? BodyTagInfo.FromByteArray(array) : null, isOnSentItems)); }
private static UniqueItemHash CalculateUniqueItemHash(StoreSession mailboxSession, object[] row, PagingInfo pagingInfo, StoreId sentItemsFolderId) { UniqueItemHash result = null; Dictionary <PropertyDefinition, object> dictionary = new Dictionary <PropertyDefinition, object>(4); int num = 0; foreach (PropertyDefinition key in pagingInfo.DataColumns) { dictionary.Add(key, row[num]); num++; } object obj = null; object obj2 = null; object obj3 = null; object obj4 = null; object obj5 = null; object obj6 = null; object obj7 = null; dictionary.TryGetValue(ItemSchema.Id, out obj); dictionary.TryGetValue(StoreObjectSchema.ParentItemId, out obj2); dictionary.TryGetValue(ItemSchema.InternetMessageId, out obj3); dictionary.TryGetValue(ItemSchema.ConversationId, out obj4); dictionary.TryGetValue(ItemSchema.ConversationTopic, out obj5); dictionary.TryGetValue(ItemSchema.BodyTag, out obj6); dictionary.TryGetValue(StoreObjectSchema.ItemClass, out obj7); if (obj != null && obj2 != null && obj3 != null && obj4 != null && obj5 != null) { StoreId storeId = (StoreId)obj; string internetMsgId = obj3 as string; string text = obj5 as string; StoreId storeId2 = obj2 as StoreId; bool flag = storeId2 != null && sentItemsFolderId != null && storeId2.Equals(sentItemsFolderId); if (obj6 == null && !flag && ObjectClass.IsMessage(obj7 as string, false)) { using (Item item = Item.Bind(mailboxSession, storeId)) { if (item.Body != null) { obj6 = item.Body.CalculateBodyTag(); } } } byte[] array = obj6 as byte[]; result = new UniqueItemHash(internetMsgId, text ?? string.Empty, (array != null) ? BodyTagInfo.FromByteArray(array) : null, flag); } return(result); }