# HG changeset patch # User Will Thompson # Date 1215105586 0 # Node ID 0c66344d0ed5b515c5131b3f63694061a886a1b7 # Parent 0565c227608d79f5265c645f6befc85234520599 Give findaccount an option 'matcher' callback parameter, to match arbitrary account properties. In passing, fix bringing offline accounts online: there's no such method as PurpleAccountSetStatusVargs. diff -r 0565c227608d -r 0c66344d0ed5 libpurple/purple-url-handler --- a/libpurple/purple-url-handler Thu Jul 03 15:38:49 2008 +0000 +++ b/libpurple/purple-url-handler Thu Jul 03 17:19:46 2008 +0000 @@ -58,20 +58,39 @@ except: return value -def findaccount(protocolname, accountname=""): +def account_not_found(): + print "No matching account found." + sys.exit(1) + +def bring_account_online(account): + if not cpurple.PurpleAccountIsConnected(account): + # The last argument is meant to be a GList * but the D-Bus binding + # generator thing just wants a UInt32, which is pretty failing. + # Happily, passing a 0 to mean an empty list turns out to work anyway. + purple.PurpleAccountSetStatusList(account, "online", 1, 0) + purple.PurpleAccountConnect(account) + +def findaccount(protocolname, accountname="", matcher=None): + if matcher: + for account in cpurple.PurpleAccountsGetAll(): + if accountname != "" and accountname != cpurple.PurpleAccountGetUsername(a): + continue + if matcher(account): + bring_account_online(account) + return account + account_not_found() + # prefer connected accounts account = cpurple.PurpleAccountsFindConnected(accountname, protocolname) if (account != 0): - return account + return account # try to get any account and connect it account = cpurple.PurpleAccountsFindAny(accountname, protocolname) if (account == 0): - print "No matching account found." - sys.exit(1) + account_not_found() - purple.PurpleAccountSetStatusVargs(account, "online", 1) - purple.PurpleAccountConnect(account) + bring_account_online(account) return account def goim(account, screenname, message=None):