IMWidget.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. MWF.xDesktop.requireApp("IM", "Actions.RestActions", null, false);
  2. MWF.require("MWF.xDesktop.UserData", null, false);
  3. MWF.xApplication.IM = MWF.xApplication.IM || {};
  4. MWF.xApplication.IM.IMWidget = new Class({
  5. Extends: MWF.xApplication.Common.Widget,
  6. Implements: [Options, Events],
  7. options: {
  8. "style": "default",
  9. "appName": "IM",
  10. "name": "IMWidget"
  11. },
  12. initialize: function(desktop, options){
  13. this.setOptions(options);
  14. this.desktop = desktop;
  15. },
  16. loadContent: function(callback){
  17. this.ssoCount = 0;
  18. this.widget.node.setStyle("display", "none");
  19. this.userAction = new MWF.xApplication.IM.Actions.RestActions();
  20. this.users = {};
  21. this.unShowMessage = {};
  22. ////this.setTimeout();
  23. //this.action = new MWF.xApplication.VsettanMail.Actions.RestActions();
  24. //if (this.desktop.session.user.name!="xadmin") this.getUnreadCount();
  25. //this.doUnreadMessages();
  26. this.widget.close()
  27. },
  28. doUnreadMessages: function(){
  29. this.unShowMessage = MWF.UD.getDataJson("unreadChat") || {};
  30. layout.desktop.addEvent("unload", function(){
  31. MWF.UD.putData("unreadChat", this.unShowMessage);
  32. }.bind(this));
  33. },
  34. getOwner: function(callback){
  35. if (this.owner){
  36. if (callback) callback();
  37. }else{
  38. this.userAction.getPerson(function(json){
  39. this.owner = json.data;
  40. if (callback) callback();
  41. }.bind(this), null, layout.desktop.session.user.id);
  42. }
  43. },
  44. getPerson: function(id, callback){
  45. if (this.users[id]){
  46. if (callback) callback();
  47. }else{
  48. this.userAction.getPerson(function(json){
  49. this.users[id] = json.data;
  50. if (callback) callback();
  51. }.bind(this), null, id);
  52. }
  53. },
  54. getDialogue: function(chat, key, data, callback){
  55. var dialogue = chat.dialogues[key];
  56. if (!dialogue){
  57. this.getPerson(data.from, function(){
  58. dialogue = chat.addDialogueBack(this.owner, [this.users[data.from]]);
  59. if (callback) callback(dialogue);
  60. }.bind(this));
  61. }else{
  62. if (callback) callback(dialogue);
  63. }
  64. },
  65. receiveChatMessage: function(data){
  66. this.getOwner(function(){
  67. var chat = layout.desktop.apps["Chat"];
  68. //var im = layout.desktop.apps["IM"];
  69. if (chat){
  70. if (layout.desktop.currentApp==chat){
  71. var key = data.from+layout.desktop.session.user.distinguishedName;
  72. this.getDialogue(chat, key, data, function(dialogue){
  73. if (chat.current != dialogue){
  74. this.receiveMessageRecod(data);
  75. dialogue.addUnreadMessage(data);
  76. }else{
  77. dialogue.showMessage(data, data.from);
  78. layout.desktop.playMessageAudio();
  79. }
  80. }.bind(this));
  81. }else{
  82. var key = data.from+layout.desktop.session.user.distinguishedName;
  83. this.getDialogue(chat, key, data, function(dialogue){
  84. if (chat.current != dialogue){
  85. this.receiveMessageRecod(data);
  86. dialogue.addUnreadMessage(data);
  87. }else{
  88. dialogue.showMessage(data, data.from);
  89. layout.desktop.playMessageAudio();
  90. }
  91. }.bind(this));
  92. this.sendTooltipMessage(data);
  93. layout.desktop.playMessageAudio();
  94. }
  95. }else{
  96. this.receiveMessageRecod(data);
  97. }
  98. }.bind(this));
  99. },
  100. receiveMessageRecod: function(data){
  101. var key = data.from+layout.desktop.session.user.distinguishedName;
  102. if (!this.unShowMessage[key]) this.unShowMessage[key] = [];
  103. this.unShowMessage[key].push(data);
  104. //var userItem = this.users["online"+data.fromPerson];
  105. //if (userItem){
  106. // userItem.addUnreadMessage(data);
  107. //}else{
  108. // this.users["online"+data.fromPerson] = new MWF.xDesktop.UserPanel.User(this.userListOnlineAreaNode, this, data.fromPerson);
  109. // userItem = this.users["online"+data.fromPerson];
  110. // userItem.addUnreadMessage(data);
  111. //}
  112. this.setUnread();
  113. this.sendTooltipMessage(data);
  114. layout.desktop.playMessageAudio();
  115. },
  116. sendTooltipMessage: function(data){
  117. var content = "<div style=\"height: 20px; line-height: 20px\">"+data.text+"</div></div>"
  118. msg = {
  119. "subject": data.from+" "+MWF.LP.desktop.say+": ",
  120. "content": content
  121. };
  122. var tooltipItem = layout.desktop.message.addTooltip(msg);
  123. tooltipItem.contentNode.addEvent("click", function(e){
  124. this.openChat(e, data);
  125. }.bind(this));
  126. },
  127. openChat: function(e, data){
  128. this.getPerson(data.from, function(){
  129. var fromData = this.users[data.from];
  130. var chat = layout.desktop.apps["Chat"];
  131. if (chat){
  132. var key = data.from+layout.desktop.session.user.name;
  133. var dialogue = chat.dialogues[key];
  134. if (!dialogue) dialogue = chat.addDialogue(this.owner, [fromData]);
  135. //this.unreadDatas.each(function(data){
  136. // dialogue.showMessage(data, data.fromPerson);
  137. //});
  138. dialogue.setCurrent();
  139. //this.clearUnread();
  140. }
  141. var _self = this;
  142. layout.desktop.openApplication(e, "Chat", {
  143. "onPostLoad": function(){
  144. dialogue = this.addDialogue(_self.owner, [fromData]);
  145. //_self.unreadDatas.each(function(data){
  146. // dialogue.showMessage(data, data.fromPerson);
  147. //});
  148. //_self.clearUnread();
  149. }
  150. });
  151. }.bind(this));
  152. },
  153. setUnread: function(){
  154. var im = layout.desktop.apps["IM"];
  155. var count = 0;
  156. Object.each(this.unShowMessage, function(v, k){
  157. count += v.length;
  158. if (im) if (v.length) im.checkUnread(v[0].from);
  159. }.bind(this));
  160. if (count>0){
  161. if (!this.unreadNode){
  162. this.unreadNode = new Element("div", {"styles": layout.desktop.css.messageUnreadCountNode}).inject(layout.desktop.top.userChatNode);
  163. }
  164. this.unreadNode.set("text", count);
  165. }else{
  166. if (this.unreadNode){
  167. this.unreadNode.destroy();
  168. this.unreadNode = null;
  169. delete this.unreadNode;
  170. }
  171. }
  172. }
  173. });