/// <summary> /// headerを検索 /// </summary> /// <param name="folder"></param> /// <param name="header"></param> /// <returns></returns> private BookmarkThread Search(BookmarkFolder folder, ThreadHeader header) { foreach (BookmarkEntry entry in folder.Children) { if (entry.IsLeaf) { BookmarkThread item = (BookmarkThread)entry; bool equal = item.HeaderInfo.Equals(header); if (equal) { return(item); } } else { BookmarkThread r = Search((BookmarkFolder)entry, header); if (r != null) { return(r); } } } return(null); }
/// <summary> /// このフォルダを複製 /// </summary> /// <returns></returns> public override BookmarkEntry Clone() { BookmarkFolder clone = new BookmarkFolder(name); clone.Children.AddRange(children); return(clone); }
private void LoadRecursive(XmlNode node, BookmarkFolder folder) { // フォルダを作成 folder.Name = node.Attributes["Name"].Value; folder.Expanded = Boolean.Parse(node.Attributes["Expanded"].Value); XmlAttribute id = node.Attributes["ID"]; if (id != null) { BookmarkEntry.SetEntryId(folder, Int32.Parse(id.Value)); } // 子ノードを検索 foreach (XmlNode subNode in node.SelectNodes("Children/Folder")) { BookmarkFolder subFolder = new BookmarkFolder(); folder.Children.Add(subFolder); LoadRecursive(subNode, subFolder); } // お気に入りコレクションを検索 foreach (XmlNode child in node.SelectNodes("Children/Item")) { string url = child.Attributes["URL"].Value; ThreadHeader header = URLParser.ParseThread(url); if (header != null) { //XmlAttribute idattr = child.Attributes["ID"]; BookmarkEntry entry = null; header.Subject = child.InnerText; //if (idattr != null) // entry = new BookmarkThread(header, Int32.Parse(idattr.Value)); //else entry = new BookmarkThread(header); folder.Children.Add(entry); } } }
/// <summary> /// このフォルダのお気に入りを取得 /// </summary> /// <param name="includeSubChildren">サブフォルダも含める場合はtrue</param> /// <returns></returns> public List <ThreadHeader> GetBookmarks(bool includeSubChildren) { List <ThreadHeader> items = new List <ThreadHeader>(); foreach (BookmarkEntry entry in children) { if (entry.IsLeaf) { BookmarkThread thread = (BookmarkThread)entry; items.Add(thread.HeaderInfo); } else if (includeSubChildren) { BookmarkFolder folder = (BookmarkFolder)entry; items.AddRange(folder.GetBookmarks(includeSubChildren)); } } return(items); }
/// <summary> /// 再起検索を利用してサブフォルダとお気に入りの要素をelementに追加 /// </summary> /// <param name="doc"></param> /// <param name="parent"></param> /// <param name="folders"></param> private void AppendRecursive(XmlDocument doc, XmlElement parent, BookmarkFolder folder) { // フォルダ名の属性を作成 XmlAttribute attr1 = doc.CreateAttribute("Name"); attr1.Value = folder.Name; // 識別ID属性を作成 XmlAttribute attr2 = doc.CreateAttribute("ID"); attr2.Value = folder.Id.ToString(); // 展開されているかどうかの属性を作成 XmlAttribute attr3 = doc.CreateAttribute("Expanded"); attr3.Value = folder.Expanded.ToString(); // サブフォルダコレクションノードを作成 XmlElement children = doc.CreateElement("Children"); foreach (BookmarkEntry entry in folder.Children) { // お気に入りの場合 if (entry.IsLeaf) { BookmarkThread item = (BookmarkThread)entry; // URL属性を作成 XmlAttribute url = doc.CreateAttribute("URL"); url.Value = item.HeaderInfo.Url; //XmlAttribute id = doc.CreateAttribute("ID"); //id.Value = entry.Id.ToString(); // お気に入りノードを作成 XmlElement node = doc.CreateElement("Item"); node.Attributes.Append(url); //node.Attributes.Append(id); // beta18 //node.InnerText = item.HeaderInfo.Subject; node.InnerText = item.Name; // お気に入りコレクションノードに追加 children.AppendChild(node); } // フォルダであれば潜る else { AppendRecursive(doc, children, (BookmarkFolder)entry); } } // 最後にフォルダノードの作成 XmlElement folderNode = doc.CreateElement("Folder"); folderNode.Attributes.Append(attr1); folderNode.Attributes.Append(attr2); folderNode.Attributes.Append(attr3); folderNode.AppendChild(children); // 親ノードに追加 parent.AppendChild(folderNode); }