protected override ConversationAggregationResult ConstructResult(ConversationIndex.FixupStage bySubjectResultingStage, ConversationIndex bySubjectResultingIndex, IStorePropertyBag parentItem, bool participantRemoved)
        {
            ConversationAggregationResult conversationAggregationResult = this.ConstructResult(bySubjectResultingStage, bySubjectResultingIndex, parentItem);

            if (participantRemoved)
            {
                conversationAggregationResult.Stage |= ConversationIndex.FixupStage.TC;
                conversationAggregationResult.ConversationFamilyId = ConversationId.Create(Guid.NewGuid());
            }
            return(conversationAggregationResult);
        }
        protected override ConversationAggregationResult ConstructResult(ConversationIndex.FixupStage bySubjectResultingStage, ConversationIndex bySubjectResultingIndex, IStorePropertyBag parentItem)
        {
            ConversationAggregationResult conversationAggregationResult = base.ConstructResult(bySubjectResultingStage, bySubjectResultingIndex, parentItem);

            if (AudienceBasedConversationAggregator.IsMessageCreatingNewConversation(parentItem, bySubjectResultingStage))
            {
                conversationAggregationResult.SupportsSideConversation = true;
                conversationAggregationResult.ConversationFamilyId     = ConversationId.Create(bySubjectResultingIndex);
            }
            else
            {
                conversationAggregationResult.SupportsSideConversation = AudienceBasedConversationAggregator.SupportsSideConversation(parentItem);
                conversationAggregationResult.ConversationFamilyId     = parentItem.GetValueOrDefault <ConversationId>(ItemSchema.ConversationFamilyId, null);
            }
            return(conversationAggregationResult);
        }
 public override ConversationAggregationResult Aggregate(ICoreItem message)
 {
     return(this.diagnosticsFrame.TrackAggregation(base.GetType().Name, delegate(IConversationAggregationLogger logger)
     {
         bool shouldSearchForDuplicatedMessage = this.ShouldSearchForDuplicatedMessage(message.PropertyBag);
         logger.LogMailboxOwnerData(this.mailboxOwner, shouldSearchForDuplicatedMessage);
         logger.LogDeliveredMessageData(message.PropertyBag);
         IStorePropertyBag storePropertyBag;
         ConversationIndex bySubjectResultingIndex;
         ConversationIndex.FixupStage fixupStage;
         this.ReferencesProcessor.Aggregate(message.PropertyBag, shouldSearchForDuplicatedMessage, out storePropertyBag, out bySubjectResultingIndex, out fixupStage);
         logger.LogParentMessageData(storePropertyBag);
         bool participantRemoved = false;
         if (this.participantProcessor.ShouldAggregate(message.PropertyBag, storePropertyBag, fixupStage))
         {
             participantRemoved = this.participantProcessor.Aggregate(logger, message.PropertyBag, storePropertyBag);
         }
         ConversationAggregationResult conversationAggregationResult = this.ConstructResult(fixupStage, bySubjectResultingIndex, storePropertyBag, participantRemoved);
         logger.LogAggregationResultData(conversationAggregationResult);
         return conversationAggregationResult;
     }));
 }