Blame | Last modification | View Log | RSS feed
using System;using System.Collections;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions;using System.Xml;using System.Windows.Forms;using com.jamiehill;namespace OneNoteTime {class Program {static void Main(string[] args) {JPHOneNoteUtilities onp = new JPHOneNoteUtilities();string message = "";int totalSecs = 0;//string sectionId = DateTime.Now.Year.ToString();//XmlNodeList snl = GetSectionPages(ref sectionId, onp);// Contains 2-digit monthstring monthId = String.Format("{0:0#}", DateTime.Now.AddMonths(-1).Month);XmlNodeList[] snl = GetSectionPages(ref monthId, onp);int i = 0;for (i = 0; i < snl.Length; i++) {FindPages(snl[i], ref message, ref totalSecs, onp);}monthId = String.Format("{0:0#}", DateTime.Now.Month);snl = GetSectionPages(ref monthId, onp);for (i = 0; i < snl.Length; i++) {FindPages(snl[i], ref message, ref totalSecs, onp);}string sectionId = "Current";snl = GetSectionPages(ref sectionId, onp);for (i = 0; i < snl.Length; i++) {FindPages(snl[i], ref message, ref totalSecs, onp);}message += "\nTotal: " + String.Format("{0:#.##}", totalSecs / 3600.00) + " hours\n";MessageBox.Show(message, "Time Tracking", MessageBoxButtons.OK, MessageBoxIcon.None);}static public void FindPages(XmlNodeList snl, ref string message, ref int totalSecs, JPHOneNoteUtilities onp) {int dow = (int)DateTime.Now.DayOfWeek;Hashtable days = new Hashtable();string mydate = "";string tmp = "";for (int i=0; i<= dow; i++) {DateTime dt = DateTime.Now.Subtract(System.TimeSpan.FromDays(dow - i));mydate = String.Format("{0:####}", dt.Year) + String.Format("{0:0#}", dt.Month) + String.Format("{0:0#}", dt.Day);tmp += mydate + "\n";days.Add((string)mydate, 1);}int tp = snl.Count;for (int i = 0; i < tp; i++) {string pageDate = snl[i].Attributes.GetNamedItem("name").Value;if (!Regex.IsMatch(pageDate, @"\d{8}")) continue;if (!days.ContainsKey((string)pageDate)) continue;string pageId = snl[i].Attributes.GetNamedItem("ID").Value;OneNoteXMLObject ponxo = onp.GetOneNoteXMLObjectById(onp.GetNodeSet("Page"), ref pageId);string page = onp.GetPageContent(ponxo.id);XmlDocument xdp = null;XmlNamespaceManager nsmgrp = null;onp.LoadXmlDoc(ref page, out xdp, out nsmgrp);XmlNodeList pnl = xdp.GetElementsByTagName("one:T");ParsePagePanels(ref pnl, ref pageDate, ref message, ref totalSecs);}}static public XmlNodeList[] GetSectionPages(ref string sectionId, JPHOneNoteUtilities onp) {OneNoteXMLObject[] sonxo = onp.GetOneNoteXMLObjectsByPage(onp.GetNodeSet("Section"), ref sectionId);int count = sonxo.Length;XmlNodeList[] snl = new XmlNodeList[count];for (int i = 0; i < count; i++) {string section = onp.GetPageContent(sonxo[i].id);XmlDocument xds = null;XmlNamespaceManager nsmgrs = null;onp.LoadXmlDoc(ref section, out xds, out nsmgrs);snl[i] = xds.GetElementsByTagName("one:Page");}return (snl);}static public void ParsePagePanels(ref XmlNodeList pnls, ref string pageDate, ref string message, ref int totalSecs) {int seconds = 0;int te = pnls.Count;int lfh = -1;string oe = null;for (int j = 0; j < te; j++) {string e = pnls[j].InnerXml;// 7:35-10:00if (Regex.IsMatch(e, @"\d{1,2}:\d{2}-\d{1,2}:\d{2}")) {Regex re = new Regex(@"(?<h1>\d{1,2}):(?<m1>\d{2})-(?<h2>\d{1,2}):(?<m2>\d{2})");MatchCollection m = re.Matches(e);foreach (Match im in m) {int sh = System.Convert.ToInt32(im.Groups["h1"].ToString(), 10);int sm = System.Convert.ToInt32(im.Groups["m1"].ToString(), 10);int fh = System.Convert.ToInt32(im.Groups["h2"].ToString(), 10);int fm = System.Convert.ToInt32(im.Groups["m2"].ToString(), 10);if (lfh != -1) {if (lfh > sh) {MessageBox.Show("Start Hour (" + sh + ") is less than previous start hour (" + lfh + ")\n\nEntries:\n" + oe + "\n" + e, "Time Tracking", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);Environment.Exit(1);}}lfh = fh;int ssecs = (sh * 3600) + (sm * 60);int fsecs = (fh * 3600) + (fm * 60);seconds += fsecs - ssecs;}} else if (Regex.IsMatch(e, @"\d{1,2}:\d{2}-")) {Regex re = new Regex(@"(?<h1>\d{1,2}):(?<m1>\d{2})-");MatchCollection m = re.Matches(e);DateTime ct = DateTime.Now;foreach (Match im in m) {int sh = System.Convert.ToInt32(im.Groups["h1"].ToString(), 10);int sm = System.Convert.ToInt32(im.Groups["m1"].ToString(), 10);int fh = ct.Hour;int fm = ct.Minute;if (lfh != -1) {if (lfh > sh) {MessageBox.Show("Start Hour (" + sh + ") is less than previous start hour (" + lfh + ")\n\nEntries:\n" + oe + "\n" + e, "Time Tracking", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);Environment.Exit(1);}}lfh = fh;int ssecs = (sh * 3600) + (sm * 60);int fsecs = (fh * 3600) + (fm * 60);seconds += fsecs - ssecs;}}oe = e;}totalSecs += seconds;message += pageDate + ": " + String.Format("{0:#.##}", seconds / 3600.00)+" hours\n";}}}