private ConversationDTO GetRelatedItems(OutlookItem sourceItem, bool latestFirst, bool currentFolderOnly = true) { Conversation c = ((dynamic)sourceItem.InnerObject).GetConversation(); ConversationDTO dto = new ConversationDTO() { Topic = sourceItem.ConversationTopic }; var table = c.GetTable(); if (table.GetRowCount() == 0) { dto.Items = new List <OutlookItem> { sourceItem }; dto.FirstRootItem = sourceItem; } else { table.MoveToStart(); var row = table.GetNextRow(); var item = new OutlookItem(table.Session.GetItemFromID(row["EntryID"])); dto.FirstRootItem = item; SortedDictionary <DateTime, OutlookItem> ordered = new SortedDictionary <DateTime, OutlookItem>(); while (true) { if (!ordered.Values.Any(i => i.EntryID == item.EntryID) && (!currentFolderOnly || item.Parent.Name.Equals(Folder.Name, StringComparison.OrdinalIgnoreCase))) { DateTime sfield = item.TryGetPropertyValue("ReceivedTime", out sfield) ? sfield : item.LastModificationTime; ordered.Add(sfield, item); } if (table.EndOfTable) { break; } row = table.GetNextRow(); item = new OutlookItem(table.Session.GetItemFromID(row["EntryID"])); } var list = ordered.Values.ToList(); if (latestFirst) { list.Reverse(); } dto.Items = list; } return(dto); }
private ConversationDTO GetRelatedItems(OutlookItem sourceItem, bool latestFirst, bool currentFolderOnly = true) { Conversation c = ((dynamic)sourceItem.InnerObject).GetConversation(); ConversationDTO dto = new ConversationDTO() { Topic = sourceItem.ConversationTopic }; var table = c.GetTable(); if (table.GetRowCount() == 0) { dto.Items = new List<OutlookItem> { sourceItem }; dto.FirstRootItem = sourceItem; } else { table.MoveToStart(); var row = table.GetNextRow(); var item = new OutlookItem(table.Session.GetItemFromID(row["EntryID"])); dto.FirstRootItem = item; SortedDictionary<DateTime, OutlookItem> ordered = new SortedDictionary<DateTime, OutlookItem>(); while (true) { if (!ordered.Values.Any(i => i.EntryID == item.EntryID) && (!currentFolderOnly || item.Parent.Name.Equals(Folder.Name, StringComparison.OrdinalIgnoreCase))) { DateTime sfield = item.TryGetPropertyValue("ReceivedTime", out sfield) ? sfield : item.LastModificationTime; ordered.Add(sfield, item); } if (table.EndOfTable) break; row = table.GetNextRow(); item = new OutlookItem(table.Session.GetItemFromID(row["EntryID"])); } var list = ordered.Values.ToList(); if (latestFirst) list.Reverse(); dto.Items = list; } return dto; }