Archive for Tag "gaim"

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()