private OutlookTaskFolders GetTaskHierarchy( Folder parent, OutlookTaskFolders container, string path = null) { var folder = new OutlookTaskFolder { Name = parent.Name, EntryID = parent.EntryID }; path = path == null ? parent.Name : $"{path}{OutlookTask.PathDelimeter}{parent.Name}"; var items = parent.Items; items.IncludeRecurrences = true; foreach (TaskItem item in items) { folder.Tasks.Add(new OutlookTask { Subject = item.Subject, EntryID = item.EntryID, Complete = item.Complete, CreationTime = item.CreationTime, DateCompleted = item.DateCompleted, DueDate = item.DueDate, Importance = (OutlookImportance)item.Importance, PercentComplete = item.PercentComplete, StartDate = item.StartDate, Status = (OutlookTaskStatus)item.Status, FolderPath = path, Year = item.DueDate.Year, WoYear = calendar.GetWeekOfYear(item.DueDate, weekRule, firstDay), OneNoteTaskID = item.UserProperties["OneNoteTaskID"]?.Value as string, OneNoteURL = item.UserProperties["OneNoteURL"]?.Value as string, OneNotePageID = item.UserProperties["OneNotePageID"]?.Value as string, OneNoteObjectID = item.UserProperties["OneNoteObjectID"]?.Value as string }); Marshal.ReleaseComObject(item); } container.Add(folder); foreach (Folder child in parent.Folders) { GetTaskHierarchy(child, folder.Folders, path); Marshal.ReleaseComObject(child); } Marshal.ReleaseComObject(parent); return(container); }
private IEnumerable <OutlookTask> Flatten(OutlookTaskFolders folders) { foreach (var folder in folders) { foreach (var task in folder.Tasks .Where(t => !string.IsNullOrEmpty(t.OneNoteTaskID))) { yield return(task); } foreach (var task in Flatten(folder.Folders) .Where(t => !string.IsNullOrEmpty(t.OneNoteTaskID))) { yield return(task); } } }
/// <summary> /// Initialize a new instance of this folder /// </summary> public OutlookTaskFolder() { Folders = new OutlookTaskFolders(); Tasks = new OutlookTasks(); }