pidgin/pidgin

Make PurplePluginProtocolInfo definitions consistent
release-2.x.y
2020-05-20, David Woodhouse
159344ba2a49
Make PurplePluginProtocolInfo definitions consistent

Since we can't use C99 structure initialisers, we have to manually add
new NULL fields to all protocols whenever we extend the structure.

Make it slightly easier to script that, by making the current last
field (get_cb_alias) consistent in all cases. In particular, there's
no reason *not* to have the trailing comma, as most already do.

Now I can add a new field to the PRPL by doing something like this...

PROTOFILES=`grep -rl '[A-Za-z_][A-Za-z0-9_]*,[[:space:]]*/\* get_cb_alias \*/' libpurple/protocols/ `
sed '/\/\* get_cb_alias \*\//{p;s/[A-Za-z_][A-Za-
#!/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.
from __future__ import absolute_import, division, print_function
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()