0byt3m1n1
Path:
/
data
/
applications
/
aps
/
phprojekt
/
6.0.6-0
/
standard
/
htdocs
/
htdocs
/
dojo
/
dojox
/
xmpp
/
[
Home
]
File: RosterService.js
/* Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ if(!dojo._hasResource["dojox.xmpp.RosterService"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojox.xmpp.RosterService"] = true; dojo.provide("dojox.xmpp.RosterService"); dojox.xmpp.roster = { ADDED: 101, CHANGED: 102, REMOVED: 103 } dojo.declare("dojox.xmpp.RosterService", null, { constructor: function(xmppSession){ this.session = xmppSession; }, addRosterItem: function(jid, name, groups){ if(!jid){ throw new Error ("Roster::addRosterItem() - User ID is null"); } var iqId = this.session.getNextIqId(); var req = { id: iqId, from: this.session.jid + "/" + this.session.resource, type: "set" } var request = new dojox.string.Builder(dojox.xmpp.util.createElement("iq", req, false)); request.append(dojox.xmpp.util.createElement("query",{xmlns: 'jabber:iq:roster'},false)); jid = dojox.xmpp.util.encodeJid(jid); if (jid.indexOf('@')== -1){ jid = jid + '@' + this.session.domain; } request.append(dojox.xmpp.util.createElement("item",{jid:jid,name:dojox.xmpp.util.xmlEncode(name)},false)); if (groups){ for (var i=0; i<groups.length; i++){ request.append("<group>"); request.append(groups[i]); request.append("</group>"); } } request.append("</item></query></iq>"); //console.log(request.toString()); var def = this.session.dispatchPacket(request.toString(),"iq",req.id); def.addCallback(this, "verifyRoster"); return def; }, updateRosterItem: function(jid, name, groups){ if (jid.indexOf('@') == -1){ jid += jid + '@' + this.session.domain; } var req = { id: this.session.getNextIqId(), from: this.session.jid + "/" + this.session.resource, type: "set" } var request = new dojox.string.Builder(dojox.xmpp.util.createElement("iq", req, false)); request.append(dojox.xmpp.util.createElement("query",{xmlns: 'jabber:iq:roster'},false)); var i = this.session.getRosterIndex(jid); //item not found if (i==-1){return;} var item = { jid:jid }; if(name){ item.name = name; } else if(this.session.roster[i].name){ item.name = this.session.roster[i].name; } if(item.name) { item.name = dojox.xmpp.util.xmlEncode(item.name); } request.append(dojox.xmpp.util.createElement("item",item,false)); var newGroups = groups ? groups : this.session.roster[i].groups; if (newGroups){ for (var x=0;x<newGroups.length;x++){ request.append("<group>"); request.append(newGroups[x]); request.append("</group>"); } } request.append("</item></query></iq>"); var def = this.session.dispatchPacket(request.toString(),"iq",req.id); def.addCallback(this, "verifyRoster"); return def; }, verifyRoster: function(res){ if (res.getAttribute('type')=='result'){ //this.onAddRosterItem(res.getAttribute('id')); }else{ var err=this.session.processXmppError(res); this.onAddRosterItemFailed(err); } return res; }, addRosterItemToGroup: function(jid, group){ if (!jid) throw new Error("Roster::addRosterItemToGroup() JID is null or undefined"); if (!group) throw new Error("Roster::addRosterItemToGroup() group is null or undefined"); var index = this.session.getRosterIndex(jid); if (index==-1){return;} var item = this.session.roster[index]; var tgroups = []; var found = false; for (var i=0; ((item<item.groups.length) && (!found)); i++){ if (item.groups[i]!=group){continue;} found=true; } if(!found){ return this.updateRosterItem(jid, item.name, item.groups.concat(group),index); } return dojox.xmpp.xmpp.INVALID_ID; }, removeRosterGroup: function(group) { var roster = this.session.roster; for(var i=0;i<roster.length;i++){ var item = roster[i]; if(item.groups.length > 0) { //var found = false; for(var j = 0;j < item.groups.length; j++) { if (item.groups[j]==group){ item.groups.splice(j,1); this.updateRosterItem(item.jid, item.name, item.groups); //found=true; } } } } }, renameRosterGroup: function(group, newGroup) { var roster = this.session.roster; for(var i=0;i<roster.length;i++){ var item = roster[i]; if(item.groups.length > 0) { //var found = false; for(var j = 0;j < item.groups.length; j++) { if (item.groups[j]==group){ item.groups[j] = newGroup; this.updateRosterItem(item.jid, item.name, item.groups); // found=true; } } } } }, removeRosterItemFromGroup: function(jid, group){ if (!jid) throw new Error("Roster::addRosterItemToGroup() JID is null or undefined"); if (!group) throw new Error("Roster::addRosterItemToGroup() group is null or undefined"); var index = this.session.getRosterIndex(jid); if (index==-1){return;} var item = this.session.roster[index]; var found = false; for (var i=0; ((i<item.groups.length) && (!found)); i++){ if (item.groups[i]!=group){continue;} found=true; index = i; } if(found==true){ item.groups.splice(index,1); return this.updateRosterItem(jid, item.name, item.groups); } return dojox.xmpp.xmpp.INVALID_ID; }, rosterItemRenameGroup: function(jid, oldGroup, newGroup){ if (!jid) throw new Error("Roster::rosterItemRenameGroup() JID is null or undefined"); if (!newGroup) throw new Error("Roster::rosterItemRenameGroup() group is null or undefined"); var index = this.session.getRosterIndex(jid); if (index==-1){return;} var item = this.session.roster[index]; var found = false; for (var i=0; ((i<item.groups.length) && (!found)); i++){ if (item.groups[i]==oldGroup){ item.groups[i] = newGroup; found=true; } } if(found==true){ return this.updateRosterItem(jid, item.name, item.groups); } return dojox.xmpp.xmpp.INVALID_ID; }, renameRosterItem: function(jid,newName){ if (!jid) throw new Error("Roster::addRosterItemToGroup() JID is null or undefined"); if (!newName) throw new Error("Roster::addRosterItemToGroup() New Name is null or undefined"); var index = this.session.getRosterIndex(jid); if (index==-1){return;} return this.updateRosterItem(jid, newName, this.session.roster.groups,index); }, removeRosterItem: function(jid){ if (!jid) throw new Error("Roster::addRosterItemToGroup() JID is null or undefined"); var req={ id: this.session.getNextIqId(), from: this.session.jid + "/" + this.session.resource, type: 'set' }; var request = new dojox.string.Builder(dojox.xmpp.util.createElement("iq", req, false)); request.append(dojox.xmpp.util.createElement("query",{xmlns: "jabber:iq:roster"},false)); if (jid.indexOf('@')== -1){ jid += jid + '@' + this.session.domain; } request.append(dojox.xmpp.util.createElement('item',{jid:jid,subscription:"remove"},true)); request.append("</query></iq>"); var def = this.session.dispatchPacket(request.toString(),"iq",req.id); def.addCallback(this, "verifyRoster"); return def; }, //Avatar functions...I removed this stuff for now..can we even do anything useful //with this data even if we have it? getAvatar: function(jid){ }, publishAvatar: function(type,binval){ }, //EVENTS onVerifyRoster: function(id){ //console.log("Roster::onVerifyRoster() - ", id); }, onVerifyRosterFailed: function(err){ //console.log("onVerifyRosterFailed: ", err); } }); }