Hello Eion, thanks a lot!!
On 10/07/2018 08:19 PM, Eion Robb wrote: > Hi Claudio, > > Your question is a bit more of a devel question than a support one, so cc'ing > in the devel list. > > You might find it easier to use the 'savedstatus' API, so that you're not > having to fluff around with presences and status. > https://developer.pidgin.im/doxygen/2.7.11/html/savedstatuses_8h.html > > I don't know the Python/dbus API well enough, but the C code for what you're > trying to do is: > > PurpleSavedStatus *saved_status; > PurpleStatusPrimitive primitive = PURPLE_STATUS_UNAVAILABLE; > const gchar *message = "claudio using resource5"; > saved_status = > purple_savedstatus_find_transient_by_type_and_message(primitive, message); > if (saved_status == NULL) { > saved_status = purple_savedstatus_new(NULL, primitive); > purple_savedstatus_set_message(saved_status, message); > } > purple_savedstatus_activate(saved_status); > > > Let us know how it goes :) > > Cheers, > Eion It went well, I had to use the "substatus" since on that machine I have to set the status for multiple accounts. The end result follows. Thanks a lot! Cheers, Claudio #! /usr/bin/python3 import sys import dbus from pydbus import SessionBus def usage(): text = ''' ./presence.py busy FIRSTNAME ACCOUNT ./presence.py avail FIRSTNAME ACCOUNT FIRSTNAME: first name. ACCOUNT: the name of the account presence to change Example: ./presence.py busy claudio resource5 --> sets resource5 to busy with msg: "claudio using resource5" ./presence.py avail claudio resource5 --> claudio frees up resource5, status set to avail. ''' print(text) sys.exit(1) def process_account(account, arg_status, arg_firstname, arg_account): prim = p.PurplePrimitiveGetTypeFromId(arg_status) msg = "" if (arg_status == "available"): msg = arg_firstname + " was last on " + arg_account else: msg = arg_firstname + " using " + arg_account saved_status = p.PurpleSavedstatusGetCurrent() status_type = p.PurpleAccountGetStatusTypeWithPrimitive(account, prim) p.PurpleSavedstatusSetSubstatus(saved_status, account, status_type, msg) p.PurpleSavedstatusActivate(saved_status) if len(sys.argv) != 4: usage() if (sys.argv[1]) == "busy": arg_status = "unavailable" elif (sys.argv[1]) == "avail": arg_status = "available" else: usage() arg_firstname = sys.argv[2] arg_account = sys.argv[3] print("presence: connecting to PurpleService") bus = SessionBus() try: p = bus.get("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") except: sys.exit("presence: failed to connect to PurpleService") accounts = p.PurpleAccountsGetAll() name = "" if len(accounts) == 0: sys.exit("presence: no account found.") for account in accounts: name = p.PurpleAccountGetAlias(account) #print(name + " is accountid " + str(account)) if (name == arg_account): print("presence: found account " + name + ", setting presence") process_account(account, arg_status, arg_firstname, arg_account) break if (name != arg_account): print("presence: could not find account " + arg_account) _______________________________________________ Support@pidgin.im mailing list Want to unsubscribe? Use this link: https://pidgin.im/cgi-bin/mailman/listinfo/support