Pidgin/Gaim Status Logger Python
"""
Plugin that log buddies status on Pidgin/Gaim
"""
#!/usr/bin/env python
import logging
import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop
logging.basicConfig(level=logging.INFO,
format="%(asctime)s\t%(message)s",
filename='/var/log/pidgin_status.log',
filemode='a')
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
status_hash = {}
def update_status_hash(username, status):
global status_hash
if status_hash.has_key[username] and status_hash[username] == status:
return False
status_hash[username] = status
return True
def buddy_status_changed(buddy, old_status, status):
alias = purple.PurpleBuddyGetAlias(buddy)
name = purple.PurpleBuddyGetName(buddy)
status_id = purple.PurpleStatusGetId(status)
status_text = purple.PurpleStatusGetAttrString(status, "message")
if status_text and update_status_hash(alias, status_text):
s = "%s\t%s" % (alias, status_text)
logging.info(s)
def show_all_status():
for account in purple.PurpleAccountsGetAllActive():
for buddy in purple.PurpleFindBuddies(account, ""):
alias = purple.PurpleBuddyGetAlias(buddy)
name = purple.PurpleBuddyGetName(buddy)
presence = purple.PurpleBuddyGetPresence(buddy)
status = purple.PurplePresenceGetActiveStatus(presence)
status_id = purple.PurpleStatusGetId(status)
status_text = purple.PurpleStatusGetAttrString(status, "message")
if status_text and update_status_hash(alias, status_text):
s = "%s - %s" % (alias, status_text)
logging.info(s)
bus.add_signal_receiver(buddy_status_changed,
dbus_interface="im.pidgin.purple.PurpleInterface",
signal_name="BuddyStatusChanged")
gobject.MainLoop().run()