Mercurial > pidgin.yaz
view libpurple/purple-notifications-example @ 23325:8c315f969600
Patch from Andrew Gaul that fixes another leak:
==24860== 61,150 (15,900 direct, 45,250 indirect) bytes in 124 blocks are definitely lost in loss record 294 of 317
==24860== at 0x4A07A7E: malloc (vg_replace_malloc.c:207)
==24860== by 0x331303F8A2: g_malloc (in /lib64/libglib-2.0.so.0.1600.3)
==24860== by 0x3313055397: g_slice_alloc (in /lib64/libglib-2.0.so.0.1600.3)
==24860== by 0x3BC001B0D9: gdk_color_copy (in /usr/lib64/libgdk-x11-2.0.so.0.1200.9)
==24860== by 0x3313408E2B: (within /lib64/libgobject-2.0.so.0.1600.3)
==24860== by 0x331340FC95: g_object_get_valist (in /lib64/libgobject-2.0.so.0.1600.3)
==24860== by 0x331340FF03: g_object_get (in /lib64/libgobject-2.0.so.0.1600.3)
==24860== by 0x47C1A1: tag_to_html_start (gtkimhtml.c:5023)
==24860== by 0x47C5EF: text_tag_data_new (gtkimhtml.c:5114)
==24860== by 0x47CA50: gtk_imhtml_get_markup_range (gtkimhtml.c:5198)
==24860== by 0x47CEF8: gtk_imhtml_get_markup (gtkimhtml.c:5314)
==24860== by 0x44BC3B: send_cb (gtkconv.c:548)
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 08 Jun 2008 22:18:14 +0000 |
parents | 61c2d36a38a3 |
children |
line wrap: on
line source
#!/usr/bin/env python # This is a simple purple notification server. # It shows notifications when your buddy signs on or you get an IM message. # # This script requires Python 2.4 and PyGTK bindings # # Note that all function names are resolved dynamically, no # purple-specific library is needed. import dbus import dbus.glib import dbus.decorators import gobject import os def ensureimconversation(conversation, account, name): if conversation != 0: return conversation else: # 1 = PURPLE_CONV_IM return purple.PurpleConversationNew(1, account, name) def receivedimmsg(account, name, message, conversation, flags): buddy = purple.PurpleFindBuddy(account, name) if buddy != 0: alias = purple.PurpleBuddyGetAlias(buddy) else: alias = name text = "%s says %s" % (alias, message) code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons", "'So what?','Show me',Close,Abuse", text) if code == 101: # so what? pass else: conversation = ensureimconversation(conversation, account, name) if code == 102: # show me window = purple.PurpleConversationGetWindow(conversation) purple.PurpleConvWindowRaise(window) if code == 103: # close purple.PurpleConversationDestroy(conversation) if code == 104: # abuse im = purple.PurpleConversationGetImData(conversation) purple.PurpleConvImSend(im, "Go away you f...") def buddysignedon(buddyid): alias = purple.PurpleBuddyGetAlias(buddyid) text = "%s is online" % alias code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons", "'So what?','Let's talk'", text) if code == 101: # so what? pass if code == 102: # talk name = purple.PurpleBuddyGetName(buddyid) account = purple.PurpleBuddyGetAccount(buddyid) purple.PurpleConversationNew(1, account, name) bus = dbus.SessionBus() obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") bus.add_signal_receiver(receivedimmsg, dbus_interface = "im.pidgin.purple.PurpleInterface", signal_name = "ReceivedImMsg") bus.add_signal_receiver(buddysignedon, dbus_interface = "im.pidgin.purple.PurpleInterface", signal_name = "BuddySignedOn") print "This is a simple purple notification server." print "It shows notifications when your buddy signs on or you get an IM message." loop = gobject.MainLoop() loop.run()