Blame | Last modification | View Log | RSS feed
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop.OneNote;
using System.Xml;
namespace com.jamiehill {
public class JPHOneNoteUtilities {
private ApplicationClass oneNote = null;
//private static string oneNoteNamespace = "http://schemas.microsoft.com/office/onenote/12/2004/onenote";
private static string oneNoteNamespace = "http://schemas.microsoft.com/office/onenote/2007/onenote";
private Hashtable nodeSet = new Hashtable();
public JPHOneNoteUtilities() {
oneNote = new ApplicationClass();
nodeSet["Notebook"] = "one:Notebook";
nodeSet["Folder"] = "one:Folder";
nodeSet["Section"] = "one:Section";
nodeSet["Page"] = "one:Page";
}
/*
~JPHOneNoteUtilities() {
oneNote = null;
}
*/
public string GetOneNoteNamespace() {
return (oneNoteNamespace);
}
/* Recursive parser. I haven't gotten around to building a data structure to hold the information.
* This would make implementing an XML browser a piece of cake */
/*
public void GetOneNoteTree(bool refresh) {
if (refresh || oneNoteTree.Count == 0) {
if (oneNoteTree.Count != 0) {
try {
oneNoteTree.Clear();
} catch {
throw new SystemException("GetOneNoteTree clear failed: "+ e);
}
}
InitializeOneNoteTree();
}
}
private void InitializeOneNoteTree() {
string xml = null;
this.GetPages(out xml);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref xml, out xmlDoc, out nsmgr);
XmlNodeList nl = xmlDoc.GetElementsByTagName("one:Notebook");
RecurseOneNoteTree(nl[0], 0);
}
private static void RecurseOneNoteTree(XmlNode n, int level) {
if (n == null) return;
string indent = null;
for (int i = 0; i < level; i++) indent += " ";
OneNoteXMLObject onxo = GetOneNoteXMLAttributes(n);
//System.Console.WriteLine(onxo);
string name = (n.Name == null) ? "Untitled page" : n.Name;
string value = (n.Attributes.GetNamedItem("name") == null) ? "Untitled" : n.Attributes.GetNamedItem("name").Value;
System.Console.WriteLine(indent + (level+1) + ": " + value + " -> " + name + " -> " + n.HasChildNodes);
if (n.HasChildNodes) {
RecurseOneNoteTree(n.FirstChild, level+1);
RecurseOneNoteTree(n.NextSibling, level);
} else {
XmlNode n_next = n.NextSibling;
XmlNode n_last = null;
while (true) {
if (n_next == null || n_next == n_last) break;
n_last = n_next;
OneNoteXMLObject onxo1 = GetOneNoteXMLAttributes(n);
string name1 = (n_next.Name == null) ? "Untitled page" : n_next.Name;
string value1 = (n_next.Attributes.GetNamedItem("name") == null) ? "Untitled" : n_next.Attributes.GetNamedItem("name").Value;
System.Console.WriteLine(indent + (level+1) + ": " + value1 + " -> " + name1 + " -> " + n_next.HasChildNodes);
n_next = n_next.NextSibling;
}
}
}
*/
public static OneNoteXMLObject[] GetOneNoteXMLAttributes(XmlNodeList nl) {
int count = nl.Count;
OneNoteXMLObject[] onxo = new OneNoteXMLObject[count];
for (int i=0; i<count; i++) {
onxo[i] = GetOneNoteXMLAttributes(nl[i]);
}
return (onxo);
}
public static OneNoteXMLObject GetOneNoteXMLAttributes(XmlNode n) {
OneNoteXMLObject onxo = new OneNoteXMLObject(null, null, null, null, null, null, null, false);
if (n.Attributes.GetNamedItem("ID") != null) onxo.id = n.Attributes.GetNamedItem("ID").Value;
if (n.Attributes.GetNamedItem("name") != null) onxo.name = n.Attributes.GetNamedItem("name").Value;
if (n.Attributes.GetNamedItem("nickname") != null)
onxo.nickname = n.Attributes.GetNamedItem("nickname").Value;
if (n.Attributes.GetNamedItem("path") != null) onxo.path = n.Attributes.GetNamedItem("path").Value;
if (n.Attributes.GetNamedItem("lastModifiedTime") != null)
onxo.timestamp = n.Attributes.GetNamedItem("lastModifiedTime").Value;
if (n.Attributes.GetNamedItem("color") != null) onxo.color = n.Attributes.GetNamedItem("color").Value;
if (n.Attributes.GetNamedItem("isCurrentlyViewed") != null)
onxo.currentlyViewed = (string.Compare(n.Attributes.GetNamedItem("isCurrentlyViewed").Value, "true", true) == 0) ? true : false;
if (n.Name != null) onxo.type = n.Name;
return (onxo);
}
public string GetNodeSet(string ns) {
return ((string)nodeSet[ns]);
}
public OneNoteXMLObject CreatePage(ref OneNoteXMLObject onxo) {
string id = null;
try {
oneNote.CreateNewPage(onxo.id, out id, NewPageStyle.npsBlankPageWithTitle);
} catch (Exception e) {
throw new SystemException("Create page failed: "+ e);
}
OneNoteXMLObject nonxo = GetOneNoteXMLObjectById(GetNodeSet("Page"), ref id);
return (nonxo);
}
public void UpdatePage(string oneNoteXML) {
try {
oneNote.UpdatePageContent(oneNoteXML, System.DateTime.MinValue);
} catch (Exception e) {
throw new SystemException("Update page failed: " + e);
}
}
public void DeletePage(ref OneNoteXMLObject onxo) {
try {
oneNote.DeleteHierarchy(onxo.id, System.DateTime.MinValue);
} catch (Exception e) {
throw new SystemException("Delete page failed: " + e);
}
}
public OneNoteXMLObject GetOneNoteXMLObjectForActivePage() {
string oneNoteXML = null;
GetPages(out oneNoteXML);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref oneNoteXML, out xmlDoc, out nsmgr);
//XmlElement xmlActivePage = (XmlElement)xmlDoc.SelectSingleNode("//one:Page[@isCurrentlyViewed=\"true\"]", nsmgr);
XmlNode n = xmlDoc.SelectSingleNode("//one:Page[@isCurrentlyViewed=\"true\"]", nsmgr);
return (GetOneNoteXMLAttributes(n));
}
public OneNoteXMLObject[] GetOneNoteXMLObjectsByPage(string ns, ref string name) {
string oneNoteXML = null;
GetPages(out oneNoteXML);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref oneNoteXML, out xmlDoc, out nsmgr);
//XmlNode n = xmlDoc.SelectSingleNode("//" + ns + "[@name='" + name + "']", nsmgr);
XmlNodeList nl = xmlDoc.SelectNodes("//" + ns + "[@name='" + name + "']", nsmgr);
return (GetOneNoteXMLAttributes(nl));
}
public OneNoteXMLObject GetOneNoteXMLObjectByPage(string ns, ref string name) {
string oneNoteXML = null;
GetPages(out oneNoteXML);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref oneNoteXML, out xmlDoc, out nsmgr);
XmlNode n = xmlDoc.SelectSingleNode("//" + ns + "[@name='" + name + "']", nsmgr);
return (GetOneNoteXMLAttributes(n));
}
public string GetPageContent(string id) {
return(GetPageContent(id, PageInfo.piBinaryData));
}
public string GetPageContent(string id, PageInfo pi) {
string oneNoteXML = null;
oneNote.GetPageContent(id, out oneNoteXML, pi);
/*
StreamWriter os = new StreamWriter(@"c:\pagecontent.xml", false);
os.Write(oneNoteXML);
os.Close();
System.Console.WriteLine(oneNoteXML);
*/
return (oneNoteXML);
}
public OneNoteXMLObject GetOneNoteXMLObjectById(string ns, ref string id) {
string oneNoteXML = null;
GetPages(out oneNoteXML);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref oneNoteXML, out xmlDoc, out nsmgr);
XmlNode n = xmlDoc.SelectSingleNode("//"+ns+"[@ID='" + id + "']", nsmgr);
return (GetOneNoteXMLAttributes(n));
}
public OneNoteXMLObject GetUnfiledNotesSection() {
string path = null;
string oneNoteXML = null;
oneNote.GetSpecialLocation(SpecialLocation.slUnfiledNotesSection, out path);
GetSections(out oneNoteXML);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref oneNoteXML, out xmlDoc, out nsmgr);
XmlNode n = xmlDoc.SelectSingleNode("//one:Section[@path='" + path + "']", nsmgr);
return (GetOneNoteXMLAttributes(n));
}
public string GetDefaultNotebookPath() {
string path = null;
oneNote.GetSpecialLocation(SpecialLocation.slDefaultNotebookFolder, out path);
return (path);
}
public void GetNotebooks(out string oneNoteXML) {
oneNote.GetHierarchy(null, HierarchyScope.hsNotebooks, out oneNoteXML);
}
public void GetSections(out string oneNoteXML) {
oneNote.GetHierarchy(null, HierarchyScope.hsSections, out oneNoteXML);
}
public void GetPages(out string oneNoteXML) {
oneNote.GetHierarchy(null, HierarchyScope.hsPages, out oneNoteXML);
}
public void LoadXmlDoc(ref string xml, out XmlDocument xd, out XmlNamespaceManager nsmgr) {
xd = new XmlDocument();
xd.LoadXml(xml);
nsmgr = new XmlNamespaceManager(xd.NameTable);
nsmgr.AddNamespace("one", this.GetOneNoteNamespace());
}
public void GetNotebookNames(out string[] notebookNames) {
string xml = null;
this.GetNotebooks(out xml);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
LoadXmlDoc(ref xml, out xmlDoc, out nsmgr);
XmlNodeList nl = xmlDoc.GetElementsByTagName("one:Notebook");
int nl_len = nl.Count;
notebookNames = new string[nl_len];
for (int i = 0; i < nl_len; i++) {
notebookNames[i] = nl[i].Attributes.GetNamedItem("name").Value;
}
}
}
public struct OneNoteXMLObject {
private string xID;
private string xType;
private string xName;
private string xNickname;
private string xPath;
private string xTimestamp;
private string xColor;
private bool xCurrentlyViewed;
public OneNoteXMLObject(string xid, string xtype, string xname, string xnn, string xpath, string xts, string xcolor, bool xcv) {
xID = (xid != null) ? xid : null;
xType = (xid != null) ? xtype : null;
xName = (xname != null) ? xname : null;
xNickname = (xnn != null) ? xnn : null;
xPath = (xpath != null) ? xpath : null;
xTimestamp = (xts != null) ? xts : null;
xColor = (xcolor != null) ? xcolor : null;
xCurrentlyViewed = xcv; // (string.Compare(xcv, "true", true) == 0 || string.Compare(xcv, "1") == 0) ? true : false;
}
public string id {
get {
return xID;
}
set {
xID = value;
}
}
public string type {
get {
return xType;
}
set {
xType = value;
}
}
public string name {
get {
return xName;
}
set {
xName = value;
}
}
public string nickname {
get {
return xNickname;
}
set {
xNickname = value;
}
}
public string path {
get {
return xPath;
}
set {
xPath = value;
}
}
public string timestamp {
get {
return xTimestamp;
}
set {
xTimestamp = value;
}
}
public string color {
get {
return xColor;
}
set {
xColor = value;
}
}
public bool currentlyViewed {
get {
return xCurrentlyViewed;
}
set {
xCurrentlyViewed = value;
}
}
public override string ToString() {
return (String.Format("OneNoteXMLObject: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}",
xType, xName, xNickname, xID, xPath, xTimestamp, xColor, xCurrentlyViewed.ToString()));
}
}
public struct XY {
private int xx;
private int yy;
public XY(int x, int y) {
xx = x;
yy = y;
}
public int x {
get {
return xx;
}
set {
xx = value;
}
}
public int y {
get {
return yy;
}
set {
yy = value;
}
}
public override string ToString() {
return (String.Format("Width: {0} x Height: {1}", xx, yy));
}
}
}