IMWidget.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. debugger;
  31. layout.desktop.addEvent("unload", function(){
  32. MWF.UD.putData("unreadChat", this.unShowMessage);
  33. }.bind(this));
  34. },
  35. getOwner: function(callback){
  36. if (this.owner){
  37. if (callback) callback();
  38. }else{
  39. this.userAction.getPersonComplex(function(json){
  40. this.owner = json.data;
  41. if (callback) callback();
  42. }.bind(this), null, layout.desktop.session.user.id);
  43. }
  44. },
  45. getPerson: function(id, callback){
  46. if (this.users[id]){
  47. if (callback) callback();
  48. }else{
  49. this.userAction.getPersonComplex(function(json){
  50. this.users[id] = json.data;
  51. if (callback) callback();
  52. }.bind(this), null, id);
  53. }
  54. },
  55. getDialogue: function(chat, key, data, callback){
  56. var dialogue = chat.dialogues[key];
  57. if (!dialogue){
  58. this.getPerson(data.from, function(){
  59. dialogue = chat.addDialogueBack(this.owner, [this.users[data.from]]);
  60. if (callback) callback(dialogue);
  61. }.bind(this));
  62. }else{
  63. if (callback) callback(dialogue);
  64. }
  65. },
  66. receiveChatMessage: function(data){
  67. this.getOwner(function(){
  68. var chat = layout.desktop.apps["Chat"];
  69. //var im = layout.desktop.apps["IM"];
  70. if (chat){
  71. if (layout.desktop.currentApp==chat){
  72. var key = data.from+layout.desktop.session.user.name;
  73. this.getDialogue(chat, key, data, function(dialogue){
  74. if (chat.current != dialogue){
  75. this.receiveMessageRecod(data);
  76. dialogue.addUnreadMessage(data);
  77. }else{
  78. dialogue.showMessage(data, data.from);
  79. layout.desktop.playMessageAudio();
  80. }
  81. }.bind(this));
  82. }else{
  83. var key = data.from+layout.desktop.session.user.name;
  84. this.getDialogue(chat, key, data, function(dialogue){
  85. if (chat.current != dialogue){
  86. this.receiveMessageRecod(data);
  87. dialogue.addUnreadMessage(data);
  88. }else{
  89. dialogue.showMessage(data, data.from);
  90. layout.desktop.playMessageAudio();
  91. }
  92. }.bind(this));
  93. this.sendTooltipMessage(data);
  94. layout.desktop.playMessageAudio();
  95. }
  96. }else{
  97. this.receiveMessageRecod(data);
  98. }
  99. }.bind(this));
  100. },
  101. receiveMessageRecod: function(data){
  102. var key = data.from+layout.desktop.session.user.name;
  103. if (!this.unShowMessage[key]) this.unShowMessage[key] = [];
  104. this.unShowMessage[key].push(data);
  105. //var userItem = this.users["online"+data.fromPerson];
  106. //if (userItem){
  107. // userItem.addUnreadMessage(data);
  108. //}else{
  109. // this.users["online"+data.fromPerson] = new MWF.xDesktop.UserPanel.User(this.userListOnlineAreaNode, this, data.fromPerson);
  110. // userItem = this.users["online"+data.fromPerson];
  111. // userItem.addUnreadMessage(data);
  112. //}
  113. this.setUnread();
  114. this.sendTooltipMessage(data);
  115. layout.desktop.playMessageAudio();
  116. },
  117. sendTooltipMessage: function(data){
  118. var content = "<div style=\"height: 20px; line-height: 20px\">"+data.text+"</div></div>"
  119. msg = {
  120. "subject": data.from+" "+MWF.LP.desktop.say+": ",
  121. "content": content
  122. };
  123. var tooltipItem = layout.desktop.message.addTooltip(msg);
  124. tooltipItem.contentNode.addEvent("click", function(e){
  125. this.openChat(e, data);
  126. }.bind(this));
  127. },
  128. openChat: function(e, data){
  129. this.getPerson(data.from, function(){
  130. var fromData = this.users[data.from];
  131. var chat = layout.desktop.apps["Chat"];
  132. if (chat){
  133. var key = data.from+layout.desktop.session.user.name;
  134. var dialogue = chat.dialogues[key];
  135. if (!dialogue) dialogue = chat.addDialogue(this.owner, [fromData]);
  136. //this.unreadDatas.each(function(data){
  137. // dialogue.showMessage(data, data.fromPerson);
  138. //});
  139. dialogue.setCurrent();
  140. //this.clearUnread();
  141. }
  142. var _self = this;
  143. layout.desktop.openApplication(e, "Chat", {
  144. "onPostLoad": function(){
  145. dialogue = this.addDialogue(_self.owner, [fromData]);
  146. //_self.unreadDatas.each(function(data){
  147. // dialogue.showMessage(data, data.fromPerson);
  148. //});
  149. //_self.clearUnread();
  150. }
  151. });
  152. }.bind(this));
  153. },
  154. setUnread: function(){
  155. debugger;
  156. var im = layout.desktop.apps["IM"];
  157. var count = 0;
  158. Object.each(this.unShowMessage, function(v, k){
  159. count += v.length;
  160. if (im) if (v.length) im.checkUnread(v[0].from);
  161. }.bind(this));
  162. if (count>0){
  163. if (!this.unreadNode){
  164. this.unreadNode = new Element("div", {"styles": layout.desktop.css.messageUnreadCountNode}).inject(layout.desktop.top.userChatNode);
  165. }
  166. this.unreadNode.set("text", count);
  167. }else{
  168. if (this.unreadNode){
  169. this.unreadNode.destroy();
  170. this.unreadNode = null;
  171. delete this.unreadNode;
  172. }
  173. }
  174. }
  175. });