From dfd3bb4adf8350d74f767a174a4cf8e6ec28ab80 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Thu, 12 Nov 2015 16:16:01 +0100 Subject: [PATCH] Added agent info on reconnect. --- app/models/chat.rb | 30 +++++++++++++++++----- lib/sessions/event/chat_session_message.rb | 2 +- lib/sessions/event/chat_session_typing.rb | 2 +- public/assets/chat/chat.coffee | 20 +++++++++------ 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/app/models/chat.rb b/app/models/chat.rb index 0ce10aaa8..5c5f7ad2d 100644 --- a/app/models/chat.rb +++ b/app/models/chat.rb @@ -8,11 +8,28 @@ class Chat < ApplicationModel return { state: 'chat_disabled' } if !Setting.get('chat') if session_id + chat_session = Chat::Session.find_by(session_id: session_id) + user = nil + if chat_session && chat_session.user_id + chat_user = User.find(chat_session.user_id) + url = nil + if chat_user.image && chat_user.image != 'none' + url = "/api/v1/users/image/#{chat_user.image}" + end + user = { + name: chat_user.fullname, + avatar: url, + } + end + session = Chat.session_state(session_id) - return { - state: 'reconnect', - session: session, - } + if session + return { + state: 'reconnect', + session: session, + agent: user, + } + end end if Chat::Agent.where(active: true).where('updated_at > ?', Time.zone.now - 2.minutes).count > 0 @@ -31,8 +48,9 @@ class Chat < ApplicationModel def self.session_state(session_id) session_attributes = [] - chat_session_id = Chat::Session.find_by(session_id: session_id) - Chat::Message.where(chat_session_id: chat_session_id.id).each { |message| + chat_session = Chat::Session.find_by(session_id: session_id) + return if !chat_session + Chat::Message.where(chat_session_id: chat_session.id).each { |message| session_attributes.push message.attributes } session_attributes diff --git a/lib/sessions/event/chat_session_message.rb b/lib/sessions/event/chat_session_message.rb index dc3071d1b..b454f7e17 100644 --- a/lib/sessions/event/chat_session_message.rb +++ b/lib/sessions/event/chat_session_message.rb @@ -16,7 +16,7 @@ class Sessions::Event::ChatSessionMessage < Sessions::Event::ChatBase return { event: 'chat_session_message', data: { - state: "No such session id #{data['data']['session_id']}", + state: "No such session id #{@data['data']['session_id']}", }, } end diff --git a/lib/sessions/event/chat_session_typing.rb b/lib/sessions/event/chat_session_typing.rb index f8e72fa09..c7180ce00 100644 --- a/lib/sessions/event/chat_session_typing.rb +++ b/lib/sessions/event/chat_session_typing.rb @@ -16,7 +16,7 @@ class Sessions::Event::ChatSessionTyping < Sessions::Event::ChatBase return { event: 'chat_session_typing', data: { - state: "No such session id #{data['data']['session_id']}", + state: "No such session id #{@data['data']['session_id']}", }, } end diff --git a/public/assets/chat/chat.coffee b/public/assets/chat/chat.coffee index 7e16a872f..8098412da 100644 --- a/public/assets/chat/chat.coffee +++ b/public/assets/chat/chat.coffee @@ -108,7 +108,7 @@ do($ = window.jQuery, window) -> when 'chat_session_start' @onConnectionEstablished pipe.data when 'chat_session_queue' - @onQueue pipe.data + @onQueueScreen pipe.data when 'chat_session_closed' @onSessionClosed pipe.data when 'chat_session_left' @@ -126,17 +126,19 @@ do($ = window.jQuery, window) -> @log 'debug', 'Zammad Chat: Too many clients in queue. Clients in queue: ', pipe.data.queue when 'reconnect' @log 'debug', 'old messages', pipe.data.session - @openSession pipe.data.session + @reopenSession pipe.data onReady: => if @options.show @show() - openSession: (session) => + reopenSession: (data) => unfinishedMessage = sessionStorage.getItem 'unfinished_message' - - for message in session - console.log "message in session", message + + @onConnectionEstablished(data) + + for message in data.session + @log 'debug', "message in session", message @renderMessage message: message.content id: message.id @@ -434,8 +436,10 @@ do($ = window.jQuery, window) -> clearTimeout @onInitialQueueDelayId @inQueue = false - @agent = data.agent - @setSessionId data.session_id + if data.agent + @agent = data.agent + if data.session_id + @setSessionId data.session_id @el.find('.zammad-chat-agent').html @view('agent') agent: @agent