#!/usr/local/bin/python import Tkinter as tk from datetime import datetime,timedelta import bisect from sets import Set from gnosis.xml.objectify import XML_Objectify """here's what's in an event: """ datebookxml = "/home/drewp/zaurus-mirror/home/root/Applications/datebook/datebook.xml" def datetime_field(txt): return datetime.fromtimestamp(float(txt)) def sortedevents(filename=datebookxml): """read xml, get events, sort by date, and return the ones before now, and the ones after now""" events={} doc = XML_Objectify(filename).make_instance()[0] for ev in doc.events.event: start,end = [datetime.fromtimestamp(float(t)) for t in [ev.start,ev.end]] events[(start,end)] = ev events = events.items() events.sort() # by start, then end todaystart = datetime.now().date() todayend=datetime.now().date()+timedelta(days=1) i = bisect.bisect(events,((todaystart,todaystart),None)) j = bisect.bisect(events,((todayend,todayend),None)) events=[e[1] for e in events] # normal events again before,today,after = events[:i],events[i:j],events[j:] return before,today,after seendates=Set() def ev_widget(master,ev): global seendates now=datetime.now() f=tk.Frame(master,bd=2,relief='raised') start=datetime_field(ev.start) if start.date()9: displayed=displayed[2:] # lose the past events for ev in displayed: w=ev_widget(f,ev) w.pack(side='top',fill='x',exp=1) return f ea=None def redraw(): global ea if ea is not None: ea.destroy() ea=eventsarea(root,width=300) ea.pack(side='left',fill='y') root.after(3600*1000,redraw) redraw() root.mainloop()