Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.tcp.im.builtinDrivers.jabber.code.getPresenceInfo
on getPresenceInfo ( jabberId, connection = @system.temp.jabber.connection ) { <<Changes <<5/14/02; 1:51:34 PM by JB <<Changelog created. <<Returns presence information on the given resource. local ( jId = tcp.im.builtinDrivers.jabber.code.parseJabberId ( jabberId ) ); local ( userserver = jId[1] + "@" + jId[2] ); local ( presenceAdr = @connection^.presence[userserver] ); if not defined ( presenceAdr^ ) { return {"UNSUBSCRIBED", "", ""}}; if defined ( presenceAdr^.unknown ) { // only if we haven't received presence yet return {"UNKNOWN", "", ""}}; if jId[3] != "" { // handle when the user asked for a specific resource if not defined ( presenceAdr^[jId[3]] ) { // requested resource not found return {"UNKNOWN", "", ""}}; presenceAdr = @presenceAdr^[jId[3]]; local ( availability = "AVAILABLE", show = "", status = "" ); if presenceAdr^.JabberFrameworkAvailable == "unavailable" { availability = "UNAVAILABLE"}; try { show = presenceAdr^.JabberFrameworkShow }; try { status = presenceAdr^.JabberFrameworkStatus }; return {availability, show, status}}; if defined ( presenceAdr^.jabberFrameworkAvailable ) and presenceAdr^.jabberFrameworkAvailable == true { local ( show = "", status = "" ); try { show = presenceAdr^.JabberFrameworkShow }; try { status = presenceAdr^.JabberFrameworkStatus }; return {"AVAILABLE", show, status}}; // we have to scan the connections until we find a resource for element in presenceAdr { if typeOf ( element^ ) == tableType { if defined ( element^.JabberFrameworkAvailable ) and element^.JabberFrameworkAvailable == true { // we found an available resource local ( show = "", status = "" ); try { show = element^.JabberFrameworkShow }; try { status = element^.JabberFrameworkStatus }; return {"AVAILABLE", show, status}}}}; // if we made it here, we didn't find an available resource, so the account is unavailable return {"UNAVAILABLE", "", ""}}; bundle { //test code dialog.alert(getPresenceInfo(@system.temp.jabber.references[1], "dsheridan@jabber.xlogs.net"))}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.