| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- MWF.xDesktop.requireApp("IM", "Actions.RestActions", null, false);
- MWF.require("MWF.xDesktop.UserData", null, false);
- MWF.xApplication.IM = MWF.xApplication.IM || {};
- MWF.xApplication.IM.IMWidget = new Class({
- Extends: MWF.xApplication.Common.Widget,
- Implements: [Options, Events],
- options: {
- "style": "default",
- "appName": "IM",
- "name": "IMWidget"
- },
- initialize: function(desktop, options){
- this.setOptions(options);
- this.desktop = desktop;
- },
- loadContent: function(callback){
- this.ssoCount = 0;
- this.widget.node.setStyle("display", "none");
- this.userAction = new MWF.xApplication.IM.Actions.RestActions();
- this.users = {};
- this.unShowMessage = {};
- ////this.setTimeout();
- //this.action = new MWF.xApplication.VsettanMail.Actions.RestActions();
- //if (this.desktop.session.user.name!="xadmin") this.getUnreadCount();
- //this.doUnreadMessages();
- this.widget.close()
- },
- doUnreadMessages: function(){
- this.unShowMessage = MWF.UD.getDataJson("unreadChat") || {};
- layout.desktop.addEvent("unload", function(){
- MWF.UD.putData("unreadChat", this.unShowMessage);
- }.bind(this));
- },
- getOwner: function(callback){
- if (this.owner){
- if (callback) callback();
- }else{
- this.userAction.getPerson(function(json){
- this.owner = json.data;
- if (callback) callback();
- }.bind(this), null, layout.desktop.session.user.id);
- }
- },
- getPerson: function(id, callback){
- if (this.users[id]){
- if (callback) callback();
- }else{
- this.userAction.getPerson(function(json){
- this.users[id] = json.data;
- if (callback) callback();
- }.bind(this), null, id);
- }
- },
- getDialogue: function(chat, key, data, callback){
- var dialogue = chat.dialogues[key];
- if (!dialogue){
- this.getPerson(data.from, function(){
- dialogue = chat.addDialogueBack(this.owner, [this.users[data.from]]);
- if (callback) callback(dialogue);
- }.bind(this));
- }else{
- if (callback) callback(dialogue);
- }
- },
- receiveChatMessage: function(data){
- this.getOwner(function(){
- var chat = layout.desktop.apps["Chat"];
- //var im = layout.desktop.apps["IM"];
- if (chat){
- if (layout.desktop.currentApp==chat){
- var key = data.from+layout.desktop.session.user.distinguishedName;
- this.getDialogue(chat, key, data, function(dialogue){
- if (chat.current != dialogue){
- this.receiveMessageRecod(data);
- dialogue.addUnreadMessage(data);
- }else{
- dialogue.showMessage(data, data.from);
- layout.desktop.playMessageAudio();
- }
- }.bind(this));
- }else{
- var key = data.from+layout.desktop.session.user.distinguishedName;
- this.getDialogue(chat, key, data, function(dialogue){
- if (chat.current != dialogue){
- this.receiveMessageRecod(data);
- dialogue.addUnreadMessage(data);
- }else{
- dialogue.showMessage(data, data.from);
- layout.desktop.playMessageAudio();
- }
- }.bind(this));
- this.sendTooltipMessage(data);
- layout.desktop.playMessageAudio();
- }
- }else{
- this.receiveMessageRecod(data);
- }
- }.bind(this));
- },
- receiveMessageRecod: function(data){
- var key = data.from+layout.desktop.session.user.distinguishedName;
- if (!this.unShowMessage[key]) this.unShowMessage[key] = [];
- this.unShowMessage[key].push(data);
- //var userItem = this.users["online"+data.fromPerson];
- //if (userItem){
- // userItem.addUnreadMessage(data);
- //}else{
- // this.users["online"+data.fromPerson] = new MWF.xDesktop.UserPanel.User(this.userListOnlineAreaNode, this, data.fromPerson);
- // userItem = this.users["online"+data.fromPerson];
- // userItem.addUnreadMessage(data);
- //}
- this.setUnread();
- this.sendTooltipMessage(data);
- layout.desktop.playMessageAudio();
- },
- sendTooltipMessage: function(data){
- var content = "<div style=\"height: 20px; line-height: 20px\">"+data.text+"</div></div>"
- msg = {
- "subject": data.from+" "+MWF.LP.desktop.say+": ",
- "content": content
- };
- var tooltipItem = layout.desktop.message.addTooltip(msg);
- tooltipItem.contentNode.addEvent("click", function(e){
- this.openChat(e, data);
- }.bind(this));
- },
- openChat: function(e, data){
- this.getPerson(data.from, function(){
- var fromData = this.users[data.from];
- var chat = layout.desktop.apps["Chat"];
- if (chat){
- var key = data.from+layout.desktop.session.user.name;
- var dialogue = chat.dialogues[key];
- if (!dialogue) dialogue = chat.addDialogue(this.owner, [fromData]);
- //this.unreadDatas.each(function(data){
- // dialogue.showMessage(data, data.fromPerson);
- //});
- dialogue.setCurrent();
- //this.clearUnread();
- }
- var _self = this;
- layout.desktop.openApplication(e, "Chat", {
- "onPostLoad": function(){
- dialogue = this.addDialogue(_self.owner, [fromData]);
- //_self.unreadDatas.each(function(data){
- // dialogue.showMessage(data, data.fromPerson);
- //});
- //_self.clearUnread();
- }
- });
- }.bind(this));
- },
- setUnread: function(){
- var im = layout.desktop.apps["IM"];
- var count = 0;
- Object.each(this.unShowMessage, function(v, k){
- count += v.length;
- if (im) if (v.length) im.checkUnread(v[0].from);
- }.bind(this));
- if (count>0){
- if (!this.unreadNode){
- this.unreadNode = new Element("div", {"styles": layout.desktop.css.messageUnreadCountNode}).inject(layout.desktop.top.userChatNode);
- }
- this.unreadNode.set("text", count);
- }else{
- if (this.unreadNode){
- this.unreadNode.destroy();
- this.unreadNode = null;
- delete this.unreadNode;
- }
- }
- }
- });
|