private List<Note> ParseNotes(string exportFile) { List<Note> noteList = new List<Note>(); if (cancelled) { return noteList; } XmlTextReader xtrInput; XmlDocument xmlDocItem; xtrInput = new XmlTextReader(exportFile); try { while (xtrInput.Read()) { while ((xtrInput.NodeType == XmlNodeType.Element) && (xtrInput.Name.ToLower() == "note")) { if (cancelled) { break; } xmlDocItem = new XmlDocument(); xmlDocItem.LoadXml(xtrInput.ReadOuterXml()); XmlNode node = xmlDocItem.FirstChild; // node is <note> element // node.FirstChild.InnerText is <title> node = node.FirstChild; Note note = new Note(); note.Title = node.InnerText; node = node.NextSibling; note.Content = node.InnerXml; XmlNodeList tagslist = xmlDocItem.GetElementsByTagName("tag"); foreach (XmlNode n in tagslist) { note.Tags.Add(n.InnerText); } XmlNodeList datelist = xmlDocItem.GetElementsByTagName("created"); foreach (XmlNode n in datelist) { try { note.Date = DateTime.ParseExact(n.InnerText, "yyyyMMddTHHmmssZ", null); } catch (System.FormatException) { } } XmlNodeList datelist2 = xmlDocItem.GetElementsByTagName("updated"); foreach (XmlNode n in datelist2) { try { note.Date = DateTime.ParseExact(n.InnerText, "yyyyMMddTHHmmssZ", null); } catch (System.FormatException) { } } noteList.Add(note); } } xtrInput.Close(); } catch (System.Xml.XmlException) { // happens if the notebook was empty or does not exist. } return noteList; }
private void GetMailsListRecursive(string folder, ref List<Note> noteList) { if (cancelled) { return; } if (folder.EndsWith("evernote trash")) return; client.RequestManager.SubmitAndWait(new FolderTreeRequest(folder, null), false); IFolder currentFolder = client.MailboxManager.GetFolderByPath(folder); if (currentFolder == null) { // folder does not exist cancelled = true; return; } client.RequestManager.SubmitAndWait(new MessageListRequest(currentFolder, null), false); client.RequestManager.SubmitAndWait(new MessageHeaderRequest(currentFolder, null), false); foreach (IMessage msg in currentFolder.Messages) { if (cancelled) { break; } Note note = new Note(); note.Title = msg.Subject; note.Date = msg.DateReceived; if (folder.IndexOf('/') >= 0) { note.Tags.Add(folder.Substring(folder.LastIndexOf('/') + 1)); } else { note.Tags.Add(string.Empty); } note.IMAPMessages.Add(msg); string hash = null; List<string> flags = msg.GetCustomFlags(); int eveImFlagCount = 0; foreach (string flag in flags) { if (flag.ToLower().StartsWith("xeveim")) { eveImFlagCount++; hash = flag.Substring(6); } } if (eveImFlagCount > 1) { // remove all XEveIm tags foreach (string flag in flags) { if (flag.ToLower().StartsWith("xeveim")) { client.MailboxManager.SetMessageFlag(msg, flag, false); } } hash = null; } bool toAdd = true; if ((hash != null) && (hash != string.Empty)) { // does this note already exist? note.ContentHash = hash; Note n = noteList.Find(delegate(Note findNote) { return findNote.ContentHash == note.ContentHash; }); if ((n != null) && (n.Title.Equals(note.Title))) { if (folder.IndexOf('/') >= 0) { n.Tags.Add(folder.Substring(folder.LastIndexOf('/') + 1)); } else { n.Tags.Add(string.Empty); } n.IMAPMessages.Add(note.IMAPMessages[0]); toAdd = false; } } if (toAdd) { noteList.Add(note); } } IFolder[] subFolders = client.MailboxManager.GetSubFolders(currentFolder); int subfolderCounter = 0; foreach (IFolder f in subFolders) { if (cancelled) { break; } subfolderCounter++; SetInfo(null, string.Format("scanning folder \"{0}\" ({1} of {2})", f.FullPath, subfolderCounter, subFolders.Length), subfolderCounter, subFolders.Length); GetMailsListRecursive(f.FullPath, ref noteList); } }