# -*- Mode: python -*- import dbus import gtk def add_note(msg): def get_reminder(desc): get_reminder.reminder = None # callback functions for the GUI def no_reminder(button, ww): get_reminder.reminder = "" ww.destroy() def date_time_cb(button, ww, cal, cb, hours, minutes): ymd = list(cal.get_date()) ymd[1] += 1 get_reminder.reminder = "/".join([str(v) for v in ymd]) if cb.get_active(): get_reminder.reminder += "".join([" at ", "%02d" % hours.get_value_as_int(), ":", "%02d" % minutes.get_value_as_int()]) ww.destroy() def day_selected(cal, exp): ymd = list(cal.get_date()) ymd[1] += 1 exp.set_label("/".join(str(vv) for vv in ymd)) def custom(button, ww, entry): get_reminder.reminder = entry.get_text() ww.destroy() # Check if the user wants a reminder in a dialog box win = gtk.Window() win.set_title("Reminder") win.connect("destroy", gtk.main_quit) win.set_position(gtk.WIN_POS_CENTER) table = gtk.Table(2,7) win.add(table) table.attach(gtk.Label(desc), 0, 2, 0, 1) # no reminder button = gtk.Button("No reminder") button.connect("clicked", no_reminder, win) table.attach(button, 0, 1, 1, 2, xoptions=gtk.FILL, yoptions=0, ypadding=4) table.attach(gtk.HSeparator(), 0, 2, 2, 3) # date / time reminder button = gtk.Button("Date/Time") table.attach(button, 0, 1, 3, 4, xoptions=gtk.FILL, yoptions=gtk.EXPAND | gtk.FILL, ypadding=4) hbox = gtk.HBox() table.attach(hbox, 1, 2, 3, 4) cal = gtk.Calendar() exp = gtk.Expander() day_selected(cal, exp) cal.connect("day-selected", day_selected, exp) exp.add(cal) hbox.pack_start(exp) cb = gtk.CheckButton("at") hbox.pack_start(cb, False, False) hours = gtk.SpinButton(gtk.Adjustment(12.0, 0.0, 24.0, 1.0, 5.0, 0.0)) hours.set_numeric(True) hours.set_wrap(True) hbox.pack_start(hours, False, False) hbox.pack_start(gtk.Label(":"), False, False) minutes = gtk.SpinButton(gtk.Adjustment(0.0, 0.0, 59.0, 1.0, 5.0, 0.0)) minutes.set_numeric(True) minutes.set_wrap(True) hbox.pack_start(minutes, False, False) button.connect("clicked", date_time_cb, win, cal, cb, hours, minutes) # custom button = gtk.Button("custom") table.attach(button, 0, 1, 4, 5, xoptions=gtk.FILL, yoptions=0, ypadding=4) entry = gtk.Entry() button.connect("clicked", custom, win, entry) table.attach(entry, 1, 2, 4, 5) # "Show note" toggle option table.attach(gtk.HSeparator(), 0, 2, 5, 6) cb = gtk.CheckButton("Show note") table.attach(cb, 0, 2, 6, 7) win.show_all() win.present() gtk.main() return (get_reminder.reminder, cb.get_active()) title = msg.Subject # set up contents: opening tag content = [""] # title content.append(title) content.append("\n\n") # reminder if wanted (reminder, show_note) = get_reminder("\n".join([msg.From, msg.Subject])) if reminder == None: return if reminder: content.extend(["!", reminder, "\n"]) # link back to email msgid = msg.MessageID if msgid[0] != "<": msgid = "<" + msgid if msgid[-1] != ">": msgid += ">" msgid = msgid.replace("<", "<").replace(">", ">") link = '%s' % (clawsmail.get_folderview_selected_folder().get_identifier(), msgid, msg.Subject) content.append(link) #closing tag content.append("") # create a tomboy note bus = dbus.SessionBus() rc = bus.get_object('org.gnome.Tomboy', '/org/gnome/Tomboy/RemoteControl') rc_iface = dbus.Interface(rc, dbus_interface='org.gnome.Tomboy.RemoteControl') uri = rc_iface.CreateNamedNote(title) rc_iface.SetNoteContentsXml(uri, "".join(content)) rc_iface.DisplayNote(uri) if not show_note: rc_iface.HideNote(uri) # iterate over all notes for msg in clawsmail.get_summaryview_selected_message_list(): add_note(msg)