TODO reminder, Tomboy DBUS y sweetter con python y pynotify

danigm's picture
AttachmentSize
todo-reminder.png203.08 KB

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:



frontal

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 %s' % (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.