public override IEnumerable<Entities.Tag> GetTaskTags(Entities.Task task) { List<Entities.Tag> result = new List<Entities.Tag>(); if (this.Stream != null) { using (TagManager tm = new TagManager()) { tm.Stream = this.TagStream; IEnumerable<Entities.Tag> tags = tm.GetTags(); XDocument doc = XDocument.Load(this.Stream); Task el = (Task)doc.Element("Task").Elements("Task").Where(x => x.Attribute("ID").Value == task.ID.ToString()).SingleOrDefault(); foreach (Guid id in el.TagIDs) { result.AddRange(tm.GetTags(t=>t.ID == id)); } } } return result; }
public override Entities.Task TagTask(Entities.Task task, IEnumerable<Entities.Tag> tags) { List<Entities.Tag> result = new List<Entities.Tag>(); if (this.Stream != null) { using (TagManager tm = new TagManager()) { tm.Stream = this.TagStream; XDocument doc = XDocument.Load(this.Stream); Task el = (Task)doc.Element("Task").Elements("Task").Where(x => x.Attribute("ID").Value == task.ID.ToString()).SingleOrDefault(); foreach (Entities.Tag tag in tags) { if (!el.TagIDs.Contains(tag.ID)) { el.TagIDs.Add(tag.ID); } } List<Guid> removeTags = new List<Guid>(); foreach (Guid tagid in el.TagIDs) { if (tags.FirstOrDefault(t => t.ID == tagid) == null) { removeTags.Add(tagid); } } if (removeTags.Count > 0) { foreach (Guid tag in removeTags) { el.TagIDs.Remove(tag); } } XElement el2 = doc.Element("Task").Elements("Task").Where(x => x.Attribute("ID").Value == task.ID.ToString()).SingleOrDefault(); if (el2 != null) { el2.SetElementValue("Tags", el.TagIDs); doc.Save(this.Stream); } return (Task)el2; } } return task; }