diff options
Diffstat (limited to 'js/dojo/dojox/xmpp/ChatService.js')
| -rw-r--r-- | js/dojo/dojox/xmpp/ChatService.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/js/dojo/dojox/xmpp/ChatService.js b/js/dojo/dojox/xmpp/ChatService.js new file mode 100644 index 0000000..c070337 --- /dev/null +++ b/js/dojo/dojox/xmpp/ChatService.js @@ -0,0 +1,146 @@ +//>>built +// wrapped by build app +define("dojox/xmpp/ChatService", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){ +dojo.provide("dojox.xmpp.ChatService"); + +dojox.xmpp.chat = { + CHAT_STATE_NS: 'http://jabber.org/protocol/chatstates', + + ACTIVE_STATE: 'active', + COMPOSING_STATE: 'composing', + INACTIVE_STATE: 'inactive', + PAUSED_STATE: 'paused', + GONE_STATE: 'gone' +} + +dojo.declare("dojox.xmpp.ChatService", null, { + state: "", + + constructor: function(){ + this.state=""; + this.chatid = Math.round(Math.random() * 1000000000000000); + }, + + recieveMessage: function(msg,initial){ + if (msg&&!initial){ + this.onNewMessage(msg); + } + }, + + setSession: function(session){ + this.session = session; + }, + + setState: function(state){ + if (this.state != state){ + this.state = state; + } + }, + + invite: function(contact){ + if (this.uid){return;} + + + if(!contact || contact==''){ + throw new Error("ChatService::invite() contact is NULL"); + } + + this.uid = contact; + + var req = { + xmlns: "jabber:client", + to: this.uid, + from: this.session.jid + "/" + this.session.resource, + type: "chat" + } + var request = new dojox.string.Builder(dojox.xmpp.util.createElement("message", req, false)); + request.append(dojox.xmpp.util.createElement("thread",{},false)); + request.append(this.chatid); + request.append("</thread>"); + request.append(dojox.xmpp.util.createElement("active",{xmlns: dojox.xmpp.chat.CHAT_STATE_NS},true)); + request.append("</message>"); + this.session.dispatchPacket(request.toString()); + + this.onInvite(contact); + this.setState(dojox.xmpp.chat.CHAT_STATE_NS); + }, + + + sendMessage: function(msg){ + if (!this.uid){ + //console.log("ChatService::sendMessage() - Contact Id is null, need to invite to chat"); + return; + } + + if ((!msg.body || msg.body=="") && !msg.xhtml){return;} + + var req = { + xmlns: "jabber:client", + to: this.uid, + from: this.session.jid + "/" + this.session.resource, + type: "chat" + } + + var message = new dojox.string.Builder(dojox.xmpp.util.createElement("message",req,false)); + var html = dojox.xmpp.util.createElement("html", { "xmlns":dojox.xmpp.xmpp.XHTML_IM_NS},false) + + var bodyTag = dojox.xmpp.util.createElement("body", {"xml:lang":this.session.lang, "xmlns":dojox.xmpp.xmpp.XHTML_BODY_NS}, false) + msg.body + "</body>"; + var bodyPlainTag = dojox.xmpp.util.createElement("body", {}, false) + dojox.xmpp.util.stripHtml(msg.body) + "</body>"; +/* + if (msg.xhtml){ + if (msg.xhtml.getAttribute('xmlns') != dojox.xmpp.xmpp.XHTML_IM_NS){ + //console.log("ChatService::sendMessage() - Cannot use this xhtml without the propper xmlns"); + }else{ + //FIXME do this in some portable way + //console.log("ChatService::sendMessage() - FIXME Serialize XHTML to string: ", msg.xhtml.toString()); + } + } +*/ + if (message.subject && message.subject != ""){ + message.append(dojox.xmpp.util.createElement("subject",{},false)); + message.append(message.subject); + message.append("</subject>"); + } + message.append(bodyPlainTag); + message.append(html); + message.append(bodyTag); + message.append("</html>"); + message.append(dojox.xmpp.util.createElement("thread", {}, false)); + message.append(this.chatid); + message.append("</thread>"); + + if (this.useChatStates){ + message.append(dojox.xmpp.util.createElement("active",{xmlns: dojox.xmpp.chat.CHAT_STATE_NS},true)); + } + message.append("</message>"); + + this.session.dispatchPacket(message.toString()); + }, + + sendChatState: function(state){ + if (!this.useChatState || this.firstMessage){return;} + if (state==this._currentState){return;} + + var req={ + xmlns: "jabber:client", + to: this.uid, + from: this.session.jid + "/" + this.session.resource, + type: "chat" + } + + var request = new dojox.string.Builder(dojox.xmpp.util.createElement("message",req,false)); + request.append(dojox.xmpp.util.createElement(state, {xmlns: dojox.xmpp.chat.CHAT_STATE_NS},true)); + this._currentState = state; + request.append("<thread>"); + request.append(this.chatid); + request.append("</thread></message>"); + + this.session.dispatchPacket(request.toString()); + }, + + //EVENTS + onNewMessage: function(msg){}, + onInvite: function(contact){} +}); + +}); |
