Exemplo n.º 1
0
        public static Conversation Load(MailboxSession session, ConversationId conversationId, IList <StoreObjectId> folderIds, bool useFolderIdsAsExclusionList, bool isIrmEnabled, params PropertyDefinition[] propertyDefinitions)
        {
            ConversationFactory conversationFactory = new ConversationFactory(session);

            return(conversationFactory.CreateConversation(conversationId, folderIds, useFolderIdsAsExclusionList, isIrmEnabled, propertyDefinitions));
        }
        // Token: 0x060015BF RID: 5567 RVA: 0x0004DD44 File Offset: 0x0004BF44
        protected override FindFlowConversationItemResponse InternalExecute()
        {
            QueryFilter         flowConversationFilter = GetFlowConversation.GetFlowConversationFilter(this.folderId, base.MailboxIdentityMailboxSession);
            IdAndSession        folderIdAndSession     = GetFlowConversation.GetFolderIdAndSession(this.folderId, base.MailboxIdentityMailboxSession, base.IdConverter);
            SortBy              sortBy = new SortBy(ItemSchema.ReceivedTime, SortOrder.Descending);
            List <FlowItem>     list   = new List <FlowItem>();
            ConversationFactory conversationFactory = new ConversationFactory(base.MailboxIdentityMailboxSession);

            using (Folder folder = Folder.Bind((MailboxSession)folderIdAndSession.Session, folderIdAndSession.Id))
            {
                using (QueryResult queryResult = folder.ItemQuery(ItemQueryType.None, flowConversationFilter, new SortBy[]
                {
                    sortBy
                }, FindFlowConversationItem.requiredProperties))
                {
                    IStorePropertyBag[] propertyBags = queryResult.GetPropertyBags(10000);
                    foreach (IStorePropertyBag storePropertyBag in propertyBags)
                    {
                        if ((long)list.Count == this.requestedItemCount)
                        {
                            break;
                        }
                        string text = this.GenerateParticipantsHash(storePropertyBag);
                        if (text.Equals(this.flowConversationId))
                        {
                            FlowItem       flowItem        = new FlowItem();
                            ExDateTime     valueOrDefault  = storePropertyBag.GetValueOrDefault <ExDateTime>(ItemSchema.ReceivedTime, ExDateTime.Now);
                            bool           valueOrDefault2 = storePropertyBag.GetValueOrDefault <bool>(MessageItemSchema.IsRead, true);
                            IParticipant   valueOrDefault3 = storePropertyBag.GetValueOrDefault <IParticipant>(ItemSchema.From, null);
                            VersionedId    valueOrDefault4 = storePropertyBag.GetValueOrDefault <VersionedId>(ItemSchema.Id, null);
                            ConversationId valueOrDefault5 = storePropertyBag.GetValueOrDefault <ConversationId>(ItemSchema.ConversationId, null);
                            flowItem.ItemId          = IdConverter.ConvertStoreItemIdToItemId(valueOrDefault4, base.MailboxIdentityMailboxSession);
                            flowItem.Sender          = FindFlowConversationItem.ConvertParticipantToEmailAddressWrapper(valueOrDefault3);
                            flowItem.IsRead          = valueOrDefault2;
                            flowItem.ReceivedTimeUtc = ExDateTimeConverter.ToSoapHeaderTimeZoneRelatedXsdDateTime(valueOrDefault);
                            Conversation key = conversationFactory.CreateConversation(valueOrDefault5, FindFlowConversationItem.ConversationCreatorRelevantProperties);
                            if (!this.conversationMap.ContainsKey(key))
                            {
                                this.conversationMap[key] = new List <StoreObjectId>();
                            }
                            this.conversationMap[key].Add(valueOrDefault4.ObjectId);
                            this.flowItemsMap[valueOrDefault4.ObjectId] = flowItem;
                            list.Add(flowItem);
                        }
                    }
                }
            }
            foreach (KeyValuePair <Conversation, List <StoreObjectId> > keyValuePair in this.conversationMap)
            {
                Conversation         key2  = keyValuePair.Key;
                List <StoreObjectId> value = keyValuePair.Value;
                key2.LoadItemParts(value);
                foreach (StoreObjectId storeObjectId in value)
                {
                    ItemPart itemPart = key2.GetItemPart(storeObjectId);
                    this.flowItemsMap[storeObjectId].ItemBody = itemPart.BodyPart;
                }
            }
            return(new FindFlowConversationItemResponse
            {
                Items = list.ToArray()
            });
        }