#!/usr/bin/python2 # # simple d-busified evolution mail notifier # # notifies you about incoming mail with a sound and # displays a tray icon in the notification area until # you read some message in evolution again # # Thomas Perl 2007-03-28 # # See http://thpinfo.com/2007/hacks/ for updates # # Changes: # # 2007-04-20 # + Better unread tracking # + new_mail_folders handling # + Use pynotify for neat notifications # + Customizable wave sounds # # 2007-08-29 # + Add wave file playing limit # # 2007-09-13 # + Add support for getting X11 idle time # -> skip sound playback when idle # + Add support for getting X11 focused window class # -> skip notification display when evolution is focused # # http://www.pygtk.org/pygtk2reference/ import dbus import dbus.glib import dbus.decorators import pynotify import gobject import gtk import os import os.path import glob import random import time import sys pynotify.init('purple-imrecvd') notification = None flash_icon_timer = 0 bus = dbus.SessionBus() icon = gtk.StatusIcon() icon.set_visible( True) icon.set_from_icon_name( 'user-invisible') icon.set_tooltip( 'No new messages') def update_tooltip(show_notification = True): global notification, icon, flash_icon_timer message = 'You have new IM messages' notification = pynotify.Notification( 'New IM received!', message) icon.set_from_icon_name('user-available') icon.set_blinking(True) icon.set_tooltip( 'New messages received') if flash_icon_timer != 0: gobject.source_remove(flash_icon_timer) flash_icon_timer = 0 flash_icon_timer = gobject.timeout_add(5000, flash_icon) return False def flash_icon(): global flash_icon_timer, icon gobject.source_remove(flash_icon_timer) flash_icon_timer = 0 icon.set_blinking(False) # fired when new IM comes in via dBus def message_received(account, sender, message, conversation, flags): global notification gobject.idle_add(update_tooltip) # fired when new IM is sent def message_sent(account, message, id): global icon activate(icon); def newmail_read(): # this code never run global notification, icon update_tooltip() gobject.idle_add( update_tooltip, False) # stop flashing or indication that a message has been received def activate(icon): global notification if icon.get_tooltip_text() == 'New messages received': icon.set_blinking(False) icon.set_tooltip('No new messages') icon.set_from_icon_name( 'user-invisible') def destroyer(dialogobj, response_id, data=None): global loop, dialog if response_id == gtk.RESPONSE_OK: loop.quit() else: dialog.hide() def popup(button, widget, data=None): global icon, dialog dialog = gtk.MessageDialog( parent = None, flags = gtk.DIALOG_DESTROY_WITH_PARENT, type = gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK_CANCEL, message_format = "Do you want to Exit?") dialog.set_title('Popup Window') dialog.connect('response', destroyer) dialog.show() icon.connect("activate", activate) icon.connect("popup_menu", popup) bus.add_signal_receiver( message_received, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg") bus.add_signal_receiver( message_received, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedChatMsg") bus.add_signal_receiver( message_sent, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="SendingImMsg") bus.add_signal_receiver( message_sent, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="SendingChatMsg") loop = gobject.MainLoop() loop.run()