#!/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()