示例#1
0
        public static XDocument GetPageContent(ref Application oneNoteApp, string pageId, PageInfo pageInfo, out XmlNamespaceManager xnm)
        {
            string xml = null;

            UseOneNoteAPI(ref oneNoteApp, (oneNoteAppSafe) =>
            {
                oneNoteAppSafe.GetPageContent(pageId, out xml, pageInfo, Constants.CurrentOneNoteSchema);
            });

            return(OneNoteUtils.GetXDocument(xml, out xnm));
        }
示例#2
0
        private static void UpdatePageContentSafeInternal(ref Application oneNoteApp, XDocument pageContent, XmlNamespaceManager xnm, int?attemptsCount)
        {
            var inkNodes = pageContent.Root.XPathSelectElements("one:InkDrawing", xnm)
                           .Union(pageContent.Root.XPathSelectElements("//one:OE[.//one:InkDrawing]", xnm))
                           .Union(pageContent.Root.XPathSelectElements("one:Outline[.//one:InkWord]", xnm)).ToArray();

            foreach (var inkNode in inkNodes)
            {
                if (inkNode.XPathSelectElement(".//one:T", xnm) == null)
                {
                    inkNode.Remove();
                }
                else
                {
                    var inkWords = inkNode.XPathSelectElements(".//one:InkWord", xnm).Where(ink => ink.XPathSelectElement(".//one:CallbackID", xnm) == null).ToArray();
                    inkWords.Remove();
                }
            }

            var pageTitleEl = pageContent.Root.XPathSelectElement("one:Title", xnm);                // могли случайно удалить заголовок со страницы

            if (pageTitleEl != null && !pageTitleEl.HasElements && !pageTitleEl.HasAttributes)
            {
                pageTitleEl.Remove();
            }

            try
            {
                UseOneNoteAPI(ref oneNoteApp, (oneNoteAppSafe) =>
                {
                    oneNoteAppSafe.UpdatePageContent(pageContent.ToString(), DateTime.MinValue, Constants.CurrentOneNoteSchema);
                });
            }
            catch (COMException ex)
            {
                if (attemptsCount.GetValueOrDefault(int.MaxValue) < 30 &&                                    // 15 секунд - но каждое обновление требует времени. поэтому на самом деле дольше
                    (OneNoteUtils.IsError(ex, Error.hrPageReadOnly) || OneNoteUtils.IsError(ex, Error.hrSectionReadOnly)))
                {
                    Thread.Sleep(500);
                    UpdatePageContentSafeInternal(ref oneNoteApp, pageContent, xnm, attemptsCount + 1);
                }
                else
                {
                    throw;
                }
            }
        }