TODO reminder, Tomboy DBUS y sweetter con python y pynotify

Como todo ser humano tengo una gran lista de cosas por hacer, también llamada TO-DO list. Hace algún tiempo empecé a utilizar tomboy para tomar notas y tener apuntado cosas por hacer, pero nunca me acuerdo de mirarlo, por lo tanto el otro día decidí hacer un sencillo script que cada cierto tiempo me recordara mi TO-DO list.
Para conseguirlo he utilizado pynotify para mostrar un mensajito en el escritorio cada 10 minutos, y he realizado consultas al servicio DBUS que ofrece tomboy para encontrar la nota con título TODO y coger el texto que hay en esta.
La idea es lanzar este script al iniciar el escritorio para así tenerlo en segundo plano mostrando mensajitos cada cierto tiempo.
Luego pensé que podía hacer lo mismo con los TODO de sweetter.net. Así que lo he integrado con el script utilizando el modulo pysweetter que tira del servicio XML-RPC. Por otra parte he tenido que implementar una función especifica para el servicio xmlrpc de sweetter.
Aquí una imagen del tema en acción:

Y para quien esté interesado, aquí está el código:
#!/usr/bin/python import gtk, pygtk pygtk.require('2.0') import dbus import gobject import time import pynotify from pysweetter import Sweetter session_bus = dbus.SessionBus() uri = 'org.gnome.Tomboy' path = '/org/gnome/Tomboy/RemoteControl' sleep_time = 10 * 60 pynotify.init("Tomboy TODO notification") USER = 'danigm' while True: try: tomboy = session_bus.get_object(uri, path) note_uri = tomboy.FindNote('TODO') all_text = tomboy.GetNoteContents(note_uri) all_text = all_text.split('\n') except: all_text = [] try: s = Sweetter() todo_list = s.get_TODO_list(USER) all_text.append('\nSweetter TODO\n') for i, sweet in enumerate(todo_list): todo = '%d <a href="http://sweetter.net/%s?todo=1">%s</a>' % (i+1, USER, sweet.sweet) all_text.append(todo) except: pass note = pynotify.Notification("TODO list", '\n'.join(all_text[1:])) helper = gtk.Button() icon = helper.render_icon(gtk.STOCK_FILE, gtk.ICON_SIZE_DIALOG) note.set_icon_from_pixbuf(icon) note.set_timeout(30000) note.show() time.sleep(sleep_time)
Y para los más curiosos todavía aquí un repositorio del código:
bzr branch http://repo.danigm.net/todo-reminder
Los parches y comentarios son bienvenidos.



