#!/usr/bin/env python import dbus import sys title = "" artist = "" album = "" if len(sys.argv) > 3: album = sys.argv[3] if len(sys.argv) > 2: artist = sys.argv[2] if len(sys.argv) > 1: title = sys.argv[1] print "%s %s %s" % (title, artist, album) obj = dbus.SessionBus().get_object('im.pidgin.purple.PurpleService', '/im/pidgin/purple/PurpleObject') purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") accounts = purple.PurpleAccountsGetAll() def setStatus(status, attr, value): # this doesn't actually work, for some reason the getter always return "" if purple.PurpleStatusGetAttrString(status, attr) != value: purple.PurpleStatusSetAttrString(status, attr, value) return True return False for account in accounts: if purple.PurpleAccountIsConnected(account) != True: continue p = purple.PurpleAccountGetPresence(account) status = purple.PurplePresenceGetStatus(p, "tune") if status != 0: updated = False if len(title) + len(artist) + len(album) == 0: if purple.PurpleStatusIsActive(status): purple.PurpleStatusSetActive(status, False) else: purple.PurpleStatusSetActive(status, True) updated |= setStatus(status, "tune_title", title); updated |= setStatus(status, "tune_artist", title); updated |= setStatus(status, "tune_album", title); if updated: active = purple.PurplePresenceGetActiveStatus(p) purple.PurplePrplChangeAccountStatus(account, active, status)