Mercurial > pidgin
view libpurple/dbus-analyze-signals.py @ 30420:4ed390927f9d
The Yahoo prpl makes unnecessary callbacks to the Yahoo servers if the
buddy's alias is set to the same as their uid when initialising the buddy
list. For large buddy lists, this can lock up computers as each callback
makes a seperate dns lookup and seperate http request.
This patch checks that the buddy's alias isn't the same as their uid
(something which seems to be fairly normal) before making the callback.
This speeds up initial logins to the Yahoo service.
Fixes #12532.
committer: John Bailey <rekkanoryo@rekkanoryo.org>
author | eion@robbmob.com |
---|---|
date | Sun, 22 Aug 2010 16:42:09 +0000 |
parents | 3a0552df3379 |
children | 9f6b8e5998ec |
line wrap: on
line source
# This program takes a C source as the input and produces the list of # all signals registered. # # Output is: # <signal name="Changed"> # <arg name="new_value" type="b"/> # </signal> import re import sys # List "excluded" contains signals that shouldn't be exported via # DBus. If you remove a signal from this list, please make sure # that it does not break "make" with the configure option # "--enable-dbus" turned on. excluded = [\ # purple_dbus_signal_emit_purple prevents our "dbus-method-called" # signal from being propagated to dbus. "dbus-method-called", ] registerregex = re.compile("purple_signal_register[^;]+\"([\w\-]+)\"[^;]+(purple_marshal_\w+)[^;]+;") nameregex = re.compile('[-_][a-z]') print "/* Generated by %s. Do not edit! */" % sys.argv[0] print "const char *dbus_signals = " for match in registerregex.finditer(sys.stdin.read()): signal = match.group(1) marshal = match.group(2) if signal in excluded: continue signal = nameregex.sub(lambda x:x.group()[1].upper(), '-'+signal) print "\"<signal name='%s'>\\n\""%signal args = marshal.split('_') # ['purple', 'marshal', <return type>, '', args...] if len(args) > 4: for arg in args[4:]: if arg == "POINTER": type = 'p' elif arg == "ENUM": type = 'i' elif arg == "INT": type = 'i' elif arg == "UINT": type = 'u' elif arg == "INT64": type = 'x' elif arg == "UINT64": type = 't' elif arg == "BOOLEAN": type = 'b' print "\"<arg type='%s'/>\\n\""%type print "\"</signal>\\n\"" print ";"