Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
            }
        }