diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index e53db5a..9577412 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -55,6 +55,35 @@ class PagesController < ApplicationController head :ok end + def translate_message + require 'google/cloud/translate' + + keyfile = ENV["TRANSLATION_CREDENTIALS"] + creds = Google::Cloud::Translate::Credentials.new(keyfile) + + translate = Google::Cloud::Translate.new( + project_id: ENV["PROJECT_ID"], + credentials: creds + ) + target = params[:target] + message = params[:message] + userId = params[:userId] + + detection = translate.detect(message) + original = detection.language + translated_message = message + + unless original == target + translation = translate.translate(message, { from: original, to: target }) + translated_message = translation.text.gsub("'", "'") + end + + ActionCable.server.broadcast "chat_room_#{params[:chat_room_id]}", { + translated_message: translated_message, + userId: userId + } + end + def send_message puts params @@ -72,7 +101,9 @@ class PagesController < ApplicationController chat_message: { message: params[:message], user_info: user_info, - time_stamp: Time.now.strftime("%H:%M") } + time_stamp: Time.now.strftime("%H:%M"), + userId: current_user.id + } }) head :ok end diff --git a/app/javascript/packs/chatrooms.js b/app/javascript/packs/chatrooms.js index 85572b4..c5e1267 100644 --- a/app/javascript/packs/chatrooms.js +++ b/app/javascript/packs/chatrooms.js @@ -11,6 +11,7 @@ import ActionCable from 'actioncable' // find chatroom id const chatroomId = document.getElementById('chatroom-hook').dataset["chatroomId"] const userId = document.getElementById('current-user').innerText +console.log(userId) // create subsciptions App['chatroom' + chatroomId] = App.cable.subscriptions.create({ @@ -19,18 +20,40 @@ App['chatroom' + chatroomId] = App.cable.subscriptions.create({ }, { connected: () => {}, received: data => { - if (data["chat_message"]) { + if (data["chat_message"] && data["chat_message"]["userId"] == userId) { const chatMessage = data["chat_message"] + const message = `${chatMessage["message"]}` const messagesContainer = document.getElementById('messages-container') - const message = document.createElement("p") - message.innerText = `${chatMessage["time_stamp"]} ${chatMessage["user_info"]["name"]}: ${chatMessage["message"]}` - messagesContainer.appendChild(message) + const messageElement = document.createElement("p") + messageElement.innerText = message + messagesContainer.appendChild(messageElement) + } + else if (data["chat_message"] && data["chat_message"]["userId"] != userId) { + const chatMessage = data["chat_message"] + const target = document.getElementById('language-1').value + + const message = `${chatMessage["message"]}` + + fetch(`/chat_rooms/${chatroomId}/translate_message` , { + method: 'POST', + body: JSON.stringify({ + message: message, + target: target, + userId: userId + }), + headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content } + }) } else if (data["translation"] && data["userId"] == userId) { if (data["input"] == 1) { document.getElementById('language-2-input').value = data["translation"].text } else { document.getElementById('language-1-input').value = data["translation"].text } + } else if (data["translated_message"] && data["userId"] == userId) { + const messagesContainer = document.getElementById('messages-container') + const message = document.createElement("p") + message.innerText = data["translated_message"] + messagesContainer.appendChild(message) } else { // console.log(data) } @@ -68,10 +91,9 @@ const sendBtn = document.getElementById('send-btn') sendBtn.addEventListener('click', event => { const chatInput = document.getElementById('chat-input') if (chatInput && chatInput.value != chatInput.value.match(/^\s*$/g)) { - console.log(chatInput.value) fetch(`/chat_rooms/${chatroomId}/send_message` , { method: 'POST', - body: JSON.stringify({message: chatInput.value}), + body: JSON.stringify({message: chatInput.value, userId: userId}), headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content } }) } diff --git a/app/javascript/packs/translate.js b/app/javascript/packs/translate.js index 33e09ec..0cf2921 100644 --- a/app/javascript/packs/translate.js +++ b/app/javascript/packs/translate.js @@ -1,51 +1,51 @@ -const userId = document.getElementById('current-user').innerText -const languageForm1 = document.getElementById('lang-1') -const languageForm2 = document.getElementById('lang-2') -const chatroomId = document.getElementById('chatroom-hook').dataset["chatroomId"] +// const userId = document.getElementById('current-user').innerText +// const languageForm1 = document.getElementById('lang-1') +// const languageForm2 = document.getElementById('lang-2') +// const chatroomId = document.getElementById('chatroom-hook').dataset["chatroomId"] -languageForm1.addEventListener('submit', event => { - event.preventDefault() - const original = document.getElementById('language-1').value - const target = document.getElementById('language-2').value - const text = document.getElementById('language-1-input').value +// languageForm1.addEventListener('submit', event => { +// event.preventDefault() +// const original = document.getElementById('language-1').value +// const target = document.getElementById('language-2').value +// const text = document.getElementById('language-1-input').value - if (original !== target) { - fetch(`/chat_rooms/${chatroomId}/translate` , { - method: 'POST', - body: JSON.stringify({ - original, - target, - text, - input: 1, - userId - }), - headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content } - }) - } else { - document.getElementById('language-2-input').value = text - } - // post request and change form 1 -}) +// if (original !== target) { +// fetch(`/chat_rooms/${chatroomId}/translate` , { +// method: 'POST', +// body: JSON.stringify({ +// original, +// target, +// text, +// input: 1, +// userId +// }), +// headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content } +// }) +// } else { +// document.getElementById('language-2-input').value = text +// } +// // post request and change form 1 +// }) -languageForm2.addEventListener('submit', event => { - event.preventDefault() - const original = document.getElementById('language-2').value - const target = document.getElementById('language-1').value - const text = document.getElementById('language-2-input').value - // post request and change form 2 - if (original !== target) { - fetch(`/chat_rooms/${chatroomId}/translate` , { - method: 'POST', - body: JSON.stringify({ - original: original, - target: target, - text: text, - input: 2, - userId - }), - headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content } - }) - } else { - document.getElementById('language-1-input').value = text - } -}) +// languageForm2.addEventListener('submit', event => { +// event.preventDefault() +// const original = document.getElementById('language-2').value +// const target = document.getElementById('language-1').value +// const text = document.getElementById('language-2-input').value +// // post request and change form 2 +// if (original !== target) { +// fetch(`/chat_rooms/${chatroomId}/translate` , { +// method: 'POST', +// body: JSON.stringify({ +// original: original, +// target: target, +// text: text, +// input: 2, +// userId +// }), +// headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content } +// }) +// } else { +// document.getElementById('language-1-input').value = text +// } +// }) diff --git a/app/views/chat_rooms/show.html.erb b/app/views/chat_rooms/show.html.erb index abb0525..4bad21e 100644 --- a/app/views/chat_rooms/show.html.erb +++ b/app/views/chat_rooms/show.html.erb @@ -1,24 +1,5 @@ -