Blame | Last modification | View Log | RSS feed
using System;
using System.IO;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using com.jamiehill;
using System.Windows.Forms;
namespace OneNoteInsertFile {
public class OneNoteInsertFile {
private string defaultTemplatePostfix = "templates";
private DirectoryInfo defaultTemplateDir = null;
private string defaultSelection = null;
private int defaultSelectionIndex = 0;
private string defaultFileExt = ".txt";
private JPHOneNoteUtilities onu = null;
private Hashtable fileInfo = new Hashtable();
private FileInfo[] files = null;
private XY topPosition = new XY(25, 72);
private bool defaultChecked = false;
public OneNoteInsertFile() {
onu = new JPHOneNoteUtilities();
}
public void setDefaults(string[] defs) {
int len = defs.Length;
string templated = null;
for (int i=0; i < len; i++) {
if (defs[i].Equals("-e")) {
if (len >= i+1 && Regex.IsMatch(defs[i+1],@"^\.")) {
defaultFileExt = defs[i+1];
} else if (len >= i+1) {
defaultFileExt = "."+defs[i+1];
}
} else if (defs[i].Equals("-s")) {
if (len >= i+1) {
defaultSelection = defs[i+1];
}
} else if (defs[i].Equals("-t")) {
if (len >= i + 1) {
templated = defs[i + 1];
}
} else if (defs[i].Equals("-c")) {
defaultChecked = true;
}
}
DirectoryInfo di = new DirectoryInfo(templated);
if (di.Exists) {
defaultTemplateDir = di;
} else {
di = new DirectoryInfo(onu.GetDefaultNotebookPath() + @"\" + templated);
if (di.Exists) {
defaultTemplateDir = di;
} else {
di = new DirectoryInfo(onu.GetDefaultNotebookPath() + @"\" + defaultTemplatePostfix);
if (di.Exists) defaultTemplateDir = di;
}
}
if (defaultTemplateDir == null) throw new Exception("Failed to find the template directory. Please make sure it is valid and exists.\nYou specify the location using the command line argument -t.");
int k = 0;
if (defaultTemplateDir != null) {
files = defaultTemplateDir.GetFiles();
Array.Sort(files, new CompareFileNameByExtension());
if (files.Length <= 0) {
defaultSelectionIndex = -1;
defaultFileExt = null;
defaultSelection = null;
} else {
foreach (FileInfo fi in files) {
Hashtable ht = new Hashtable();
ht["FileInfo"] = fi;
ht["Index"] = k;
fileInfo[fi.Extension.ToLower()] = (Hashtable)ht;
if (defaultSelection.Equals(fi.Name)) defaultSelectionIndex = k;
k++;
}
}
}
}
public bool GetCheckboxState() {
return (defaultChecked);
}
public FileInfo[] GetTemplateFiles() {
return (files);
}
public Hashtable GetTemplateFileInfo() {
return (fileInfo);
}
public DirectoryInfo GetTemplateDir() {
return (defaultTemplateDir);
}
public string GetDefaultSelection() {
return (defaultSelection);
}
public int GetDefaultSelectionIndex() {
return (defaultSelectionIndex);
}
public string GetDefaultFileExt() {
return (defaultFileExt);
}
public void InsertFileOnActivePage(Form1 form1) {
OneNoteXMLObject onxo = onu.GetOneNoteXMLObjectForActivePage();
string page = onu.GetPageContent(onxo.id);
XmlDocument xmlDoc = null;
XmlNamespaceManager nsmgr = null;
onu.LoadXmlDoc(ref page, out xmlDoc, out nsmgr);
XmlNode pn = xmlDoc.SelectSingleNode("//one:Page[@ID=\"" + onxo.id + "\"]", nsmgr);
string filename = form1.GetFilename();
string templateFile = form1.GetTemplateName();
string temp = Environment.GetEnvironmentVariable("TEMP");
if (temp == null || temp.Length <= 0) temp = defaultTemplateDir.FullName;
if (filename == null || filename.Length <= 0) throw new Exception("Filename was not specified.");
FileInfo fi = new FileInfo(temp+@"\"+filename);
if (templateFile == null || templateFile.Length <= 0) {
// If we get here, then we need to assume the user knows what they are doing and create the empty file.
if (fi.Extension.Length <= 0) fi = new FileInfo(temp + @"\" + filename + defaultFileExt);
StreamWriter os1 = new StreamWriter(fi.FullName);
os1.Close();
} else {
FileInfo tfi = new FileInfo(defaultTemplateDir.FullName + @"\" + templateFile);
if (tfi.Exists) {
if (fi.Extension.Length <= 0) fi = new FileInfo(temp + @"\" + filename + tfi.Extension);
tfi.CopyTo(fi.FullName, true);
} else throw new Exception("Template "+tfi.Name+" does not exist.");
}
XmlNode xn = xmlDoc.CreateNode(XmlNodeType.Element, "one:InsertedFile", onu.GetOneNoteNamespace());
XmlAttribute xa = xmlDoc.CreateAttribute("preferredName");
xa.Value = fi.Name;
xn.Attributes.Append(xa);
xa = xmlDoc.CreateAttribute("pathSource");
xa.Value = fi.FullName;
xn.Attributes.Append(xa);
if (form1.GetInsertLocation()) {
XmlNode pos = xmlDoc.CreateNode(XmlNodeType.Element, "one:Position", onu.GetOneNoteNamespace());
XmlAttribute x = xmlDoc.CreateAttribute("x");
x.Value = topPosition.x.ToString();
pos.Attributes.Append(x);
x = xmlDoc.CreateAttribute("y");
x.Value = topPosition.y.ToString();
pos.Attributes.Append(x);
xn.AppendChild(pos);
}
pn.AppendChild(xn);
onu.UpdatePage("<?xml version=\"1.0\"?>\n" + pn.OuterXml);
fi.Delete();
}
}
class CompareFileNameByExtension : IComparer {
public int Compare(object x, object y) {
FileInfo f1 = (FileInfo)x;
FileInfo f2 = (FileInfo)y;
//return (f1.Name.CompareTo(f2.Name));
return (f1.Extension.CompareTo(f2.Extension));
}
}
class MyMain {
static void Main(string[] args) {
OneNoteInsertFile onif = new OneNoteInsertFile();
DialogResult dr;
try {
onif.setDefaults(args);
} catch (Exception e) {
dr = MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Environment.Exit(0);
}
Form1 form1 = new Form1(onif);
dr = form1.ShowDialog();
if (dr.ToString().Equals("Cancel")) Environment.Exit(0);
try {
onif.InsertFileOnActivePage(form1);
} catch (Exception e) {
dr = MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Environment.Exit(0);
}
}
}
}