SyntaxGameServer/RCCService2018/content/internal/Chat/Modules/LuaChat/Models/Message.lua

122 lines
2.8 KiB
Lua

local CoreGui = game:GetService("CoreGui")
local Players = game:GetService("Players")
local Modules = CoreGui.RobloxGui.Modules
local LuaApp = Modules.LuaApp
local LuaChat = Modules.LuaChat
local MockId = require(LuaApp.MockId)
local DateTime = require(LuaChat.DateTime)
local FFlagEnableChatMessageType = settings():GetFFlag("EnableChatMessageType")
local Message = {}
if FFlagEnableChatMessageType then
Message = {
MessageTypes = {
PlainText = 'PlainText'
}
}
Message.__index = Message
end
function Message.new()
local self = {}
if FFlagEnableChatMessageType then
setmetatable(self, Message)
end
return self
end
function Message.mock(mergeTable)
local self = Message.new()
self.id = MockId()
self.senderTargetId = MockId()
self.conversationId = MockId()
self.senderType = "MESSAGE SENDERTYPE"
self.content = "MESSAGE CONTENT"
self.read = false
self.sent = DateTime.now()
self.previousMessageId = nil
self.filteredForReceivers = false
if mergeTable ~= nil then
for key, value in pairs(mergeTable) do
self[key] = value
end
end
return self
end
function Message.fromWeb(data, conversationId, previousMessageId)
if FFlagEnableChatMessageType then
if not Message.DoRequiredFieldsPresent(data) then
return nil
end
end
local self = Message.new()
self.id = data.id
self.senderTargetId = tostring(data.senderTargetId)
self.senderType = data.senderType
self.read = data.read
self.sent = DateTime.fromIsoDate(data.sent)
self.conversationId = tostring(conversationId)
self.previousMessageId = previousMessageId
self.filteredForReceivers = false
if FFlagEnableChatMessageType then
self:parseContent(data)
else
self.content = data.content
end
return self
end
function Message.fromSentWeb(data, conversationId, previousMessageId)
if FFlagEnableChatMessageType then
if not Message.DoRequiredFieldsPresent(data) then
return nil
end
end
local self = Message.new()
self.id = data.messageId
self.senderTargetId = tostring(Players.LocalPlayer.UserId)
self.senderType = "User"
self.read = true
self.sent = DateTime.fromIsoDate(data.sent)
self.conversationId = tostring(conversationId)
self.previousMessageId = previousMessageId
self.filteredForReceivers = data.filteredForReceivers
if FFlagEnableChatMessageType then
self:parseContent(data)
else
self.content = data.content
end
return self
end
if FFlagEnableChatMessageType then
function Message.DoRequiredFieldsPresent(data)
return data and data.id and data.messageType and data.senderTargetId and data.sent
end
function Message:parseContent(data)
self.messageType = data.messageType
if data.messageType == Message.MessageTypes.PlainText then
self.content = data.content
else
-- UI will decide on which placeholder to use
self.content = nil
end
end
end
return Message