diff options
Diffstat (limited to 'js/dojo-1.6/dojox/xmpp/RosterService.js')
| -rw-r--r-- | js/dojo-1.6/dojox/xmpp/RosterService.js | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/xmpp/RosterService.js b/js/dojo-1.6/dojox/xmpp/RosterService.js new file mode 100644 index 0000000..d33a78b --- /dev/null +++ b/js/dojo-1.6/dojox/xmpp/RosterService.js @@ -0,0 +1,279 @@ +/*
+ Copyright (c) 2004-2011, 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);
+ }
+});
+
+}
|
