From f86d74d8b9858e0b7ccff1fc1a99e3f0aeaa68d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 25 Apr 2019 22:18:12 -0400 Subject: [PATCH] fix: #7424 --- public/src/modules/chat.js | 58 +++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 47bda91e50..d6a69c1056 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -55,28 +55,7 @@ define('chat', [ newMessage = data.self === 0; if (module.modalExists(data.roomId)) { - require(['forum/chats/messages'], function (ChatsMessages) { - var modal = module.getModal(data.roomId); - - ChatsMessages.appendChatMessage(modal.find('.chat-content'), data.message); - - if (modal.is(':visible')) { - taskbar.updateActive(modal.attr('data-uuid')); - ChatsMessages.scrollToBottom(modal.find('.chat-content')); - } else if (!ajaxify.data.template.chats) { - module.toggleNew(modal.attr('data-uuid'), true, true); - } - - if (!isSelf && (!modal.is(':visible') || !app.isFocused)) { - updateTitleAndPlaySound(data.message.mid, username); - taskbar.push('chat', modal.attr('data-uuid'), { - title: '[[modules:chat.chatting_with]] ' + (data.roomName || username), - touid: data.message.fromUser.uid, - roomId: data.roomId, - isSelf: false, - }); - } - }); + addMessageToModal(data); } else if (!ajaxify.data.template.chats) { socket.emit('modules.chats.loadRoom', { roomId: data.roomId, @@ -91,15 +70,44 @@ define('chat', [ roomData.silent = true; roomData.uid = app.user.uid; roomData.isSelf = isSelf; - module.createModal(roomData, function () { + module.createModal(roomData, function (modal) { if (!isSelf) { updateTitleAndPlaySound(data.message.mid, username); } + if (!modal) { + addMessageToModal(data); + } }); }); } }; + function addMessageToModal(data) { + var modal = module.getModal(data.roomId); + var username = data.message.fromUser.username; + var isSelf = data.self === 1; + require(['forum/chats/messages'], function (ChatsMessages) { + ChatsMessages.appendChatMessage(modal.find('.chat-content'), data.message); + + if (modal.is(':visible')) { + taskbar.updateActive(modal.attr('data-uuid')); + ChatsMessages.scrollToBottom(modal.find('.chat-content')); + } else if (!ajaxify.data.template.chats) { + module.toggleNew(modal.attr('data-uuid'), true, true); + } + + if (!isSelf && (!modal.is(':visible') || !app.isFocused)) { + updateTitleAndPlaySound(data.message.mid, username); + taskbar.push('chat', modal.attr('data-uuid'), { + title: '[[modules:chat.chatting_with]] ' + (data.roomName || username), + touid: data.message.fromUser.uid, + roomId: data.roomId, + isSelf: false, + }); + } + }); + } + function updateTitleAndPlaySound(mid, username) { app.alternatingTitle('[[modules:chat.user_has_messaged_you, ' + username + ']]'); require(['sounds'], function (sounds) { @@ -128,8 +136,12 @@ define('chat', [ }; module.createModal = function (data, callback) { + callback = callback || function () {}; require(['scrollStop', 'forum/chats', 'forum/chats/messages'], function (scrollStop, Chats, ChatsMessages) { app.parseAndTranslate('chat', data, function (chatModal) { + if (module.modalExists(data.roomId)) { + return callback(null); + } var uuid = utils.generateUUID(); var dragged = false;