root / trunk / web / dojo / dojox / xmpp / PresenceService.js @ 13
History | View | Annotate | Download (6.26 KB)
| 1 |
/*
|
|---|---|
| 2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
| 3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
| 4 |
see: http://dojotoolkit.org/license for details
|
| 5 |
*/
|
| 6 |
|
| 7 |
|
| 8 |
if(!dojo._hasResource["dojox.xmpp.PresenceService"]){ |
| 9 |
dojo._hasResource["dojox.xmpp.PresenceService"]=true; |
| 10 |
dojo.provide("dojox.xmpp.PresenceService");
|
| 11 |
dojox.xmpp.presence={UPDATE:201,SUBSCRIPTION_REQUEST:202,SUBSCRIPTION_SUBSTATUS_NONE:204,SUBSCRIPTION_NONE:"none",SUBSCRIPTION_FROM:"from",SUBSCRIPTION_TO:"to",SUBSCRIPTION_BOTH:"both",SUBSCRIPTION_REQUEST_PENDING:"pending",STATUS_ONLINE:"online",STATUS_AWAY:"away",STATUS_CHAT:"chat",STATUS_DND:"dnd",STATUS_EXTENDED_AWAY:"xa",STATUS_OFFLINE:"offline",STATUS_INVISIBLE:"invisible"};
|
| 12 |
dojo.declare("dojox.xmpp.PresenceService",null,{constructor:function(_1){ |
| 13 |
this.session=_1;
|
| 14 |
this.isInvisible=false; |
| 15 |
this.avatarHash=null; |
| 16 |
this.presence=null; |
| 17 |
this.restrictedContactjids={};
|
| 18 |
},publish:function(_2){ |
| 19 |
this.presence=_2;
|
| 20 |
this._setPresence();
|
| 21 |
},sendAvatarHash:function(_3){ |
| 22 |
this.avatarHash=_3;
|
| 23 |
this._setPresence();
|
| 24 |
},_setPresence:function(){ |
| 25 |
var _4=this.presence; |
| 26 |
var p={xmlns:"jabber:client"}; |
| 27 |
if(_4&&_4.to){
|
| 28 |
p.to=_4.to; |
| 29 |
} |
| 30 |
if(_4.show&&_4.show==dojox.xmpp.presence.STATUS_OFFLINE){
|
| 31 |
p.type="unavailable";
|
| 32 |
} |
| 33 |
if(_4.show&&_4.show==dojox.xmpp.presence.STATUS_INVISIBLE){
|
| 34 |
this._setInvisible();
|
| 35 |
this.isInvisible=true; |
| 36 |
return;
|
| 37 |
} |
| 38 |
if(this.isInvisible){ |
| 39 |
this._setVisible();
|
| 40 |
} |
| 41 |
var _5=new dojox.string.Builder(dojox.xmpp.util.createElement("presence",p,false)); |
| 42 |
if(_4.show&&_4.show!=dojox.xmpp.presence.STATUS_OFFLINE){
|
| 43 |
_5.append(dojox.xmpp.util.createElement("show",{},false)); |
| 44 |
_5.append(_4.show); |
| 45 |
_5.append("</show>");
|
| 46 |
} |
| 47 |
if(_4.status){
|
| 48 |
_5.append(dojox.xmpp.util.createElement("status",{},false)); |
| 49 |
_5.append(_4.status); |
| 50 |
_5.append("</status>");
|
| 51 |
} |
| 52 |
if(this.avatarHash){ |
| 53 |
_5.append(dojox.xmpp.util.createElement("x",{xmlns:"vcard-temp:x:update"},false)); |
| 54 |
_5.append(dojox.xmpp.util.createElement("photo",{},false)); |
| 55 |
_5.append(this.avatarHash);
|
| 56 |
_5.append("</photo>");
|
| 57 |
_5.append("</x>");
|
| 58 |
} |
| 59 |
if(_4.priority&&_4.show!=dojox.xmpp.presence.STATUS_OFFLINE){
|
| 60 |
if(_4.priority>127||_4.priority<-128){ |
| 61 |
_4.priority=5;
|
| 62 |
} |
| 63 |
_5.append(dojox.xmpp.util.createElement("priority",{},false)); |
| 64 |
_5.append(_4.priority); |
| 65 |
_5.append("</priority>");
|
| 66 |
} |
| 67 |
_5.append("</presence>");
|
| 68 |
this.session.dispatchPacket(_5.toString());
|
| 69 |
},toggleBlockContact:function(_6){ |
| 70 |
if(!this.restrictedContactjids[_6]){ |
| 71 |
this.restrictedContactjids[_6]=this._createRestrictedJid(); |
| 72 |
} |
| 73 |
this.restrictedContactjids[_6].blocked=!this.restrictedContactjids[_6].blocked; |
| 74 |
this._updateRestricted();
|
| 75 |
return this.restrictedContactjids; |
| 76 |
},toggleContactInvisiblity:function(_7){ |
| 77 |
if(!this.restrictedContactjids[_7]){ |
| 78 |
this.restrictedContactjids[_7]=this._createRestrictedJid(); |
| 79 |
} |
| 80 |
this.restrictedContactjids[_7].invisible=!this.restrictedContactjids[_7].invisible; |
| 81 |
this._updateRestricted();
|
| 82 |
return this.restrictedContactjids; |
| 83 |
},_createRestrictedJid:function(){ |
| 84 |
return {invisible:false,blocked:false}; |
| 85 |
},_updateRestricted:function(){ |
| 86 |
var _8={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"}; |
| 87 |
var _9=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_8,false)); |
| 88 |
_9.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false)); |
| 89 |
_9.append(dojox.xmpp.util.createElement("list",{name:"iwcRestrictedContacts"},false)); |
| 90 |
var _a=1; |
| 91 |
for(var _b in this.restrictedContactjids){ |
| 92 |
var _c=this.restrictedContactjids[_b]; |
| 93 |
if(_c.blocked||_c.invisible){
|
| 94 |
_9.append(dojox.xmpp.util.createElement("item",{value:dojox.xmpp.util.encodeJid(_b),action:"deny",order:_a++},false)); |
| 95 |
if(_c.blocked){
|
| 96 |
_9.append(dojox.xmpp.util.createElement("message",{},true)); |
| 97 |
} |
| 98 |
if(_c.invisible){
|
| 99 |
_9.append(dojox.xmpp.util.createElement("presence-out",{},true)); |
| 100 |
} |
| 101 |
_9.append("</item>");
|
| 102 |
}else{
|
| 103 |
delete this.restrictedContactjids[_b]; |
| 104 |
} |
| 105 |
} |
| 106 |
_9.append("</list>");
|
| 107 |
_9.append("</query>");
|
| 108 |
_9.append("</iq>");
|
| 109 |
var _d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_8,false)); |
| 110 |
_d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false)); |
| 111 |
_d.append(dojox.xmpp.util.createElement("active",{name:"iwcRestrictedContacts"},true)); |
| 112 |
_d.append("</query>");
|
| 113 |
_d.append("</iq>");
|
| 114 |
this.session.dispatchPacket(_9.toString());
|
| 115 |
this.session.dispatchPacket(_d.toString());
|
| 116 |
},_setVisible:function(){ |
| 117 |
var _e={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"}; |
| 118 |
var _f=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_e,false)); |
| 119 |
_f.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false)); |
| 120 |
_f.append(dojox.xmpp.util.createElement("active",{},true)); |
| 121 |
_f.append("</query>");
|
| 122 |
_f.append("</iq>");
|
| 123 |
this.session.dispatchPacket(_f.toString());
|
| 124 |
},_setInvisible:function(){ |
| 125 |
var _10={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"}; |
| 126 |
var req=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_10,false)); |
| 127 |
req.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false)); |
| 128 |
req.append(dojox.xmpp.util.createElement("list",{name:"invisible"},false)); |
| 129 |
req.append(dojox.xmpp.util.createElement("item",{action:"deny",order:"1"},false)); |
| 130 |
req.append(dojox.xmpp.util.createElement("presence-out",{},true)); |
| 131 |
req.append("</item>");
|
| 132 |
req.append("</list>");
|
| 133 |
req.append("</query>");
|
| 134 |
req.append("</iq>");
|
| 135 |
_10={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
|
| 136 |
var _11=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_10,false)); |
| 137 |
_11.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false)); |
| 138 |
_11.append(dojox.xmpp.util.createElement("active",{name:"invisible"},true)); |
| 139 |
_11.append("</query>");
|
| 140 |
_11.append("</iq>");
|
| 141 |
this.session.dispatchPacket(req.toString());
|
| 142 |
this.session.dispatchPacket(_11.toString());
|
| 143 |
},_manageSubscriptions:function(_12,_13){ |
| 144 |
if(!_12){
|
| 145 |
return;
|
| 146 |
} |
| 147 |
if(_12.indexOf("@")==-1){ |
| 148 |
_12+="@"+this.session.domain; |
| 149 |
} |
| 150 |
var req=dojox.xmpp.util.createElement("presence",{to:_12,type:_13},true); |
| 151 |
this.session.dispatchPacket(req);
|
| 152 |
},subscribe:function(_14){ |
| 153 |
this._manageSubscriptions(_14,"subscribe"); |
| 154 |
},approveSubscription:function(_15){ |
| 155 |
this._manageSubscriptions(_15,"subscribed"); |
| 156 |
},unsubscribe:function(_16){ |
| 157 |
this._manageSubscriptions(_16,"unsubscribe"); |
| 158 |
},declineSubscription:function(_17){ |
| 159 |
this._manageSubscriptions(_17,"unsubscribed"); |
| 160 |
},cancelSubscription:function(_18){ |
| 161 |
this._manageSubscriptions(_18,"unsubscribed"); |
| 162 |
}}); |
| 163 |
} |