Skip to content

Commit c97ae4c

Browse files
committed
Fix issue where message would be delayed posting when waiting for open graph data
1 parent ea000fb commit c97ae4c

File tree

4 files changed

+41
-18
lines changed

4 files changed

+41
-18
lines changed

server/sockets/peerSocket.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
const socketio = require("socket.io");
22
const {addUser, setUserHost, changeUserName, changeWebcamStatus, removeUser, getUsersInRoom} = require("../utils/users");
33
const {addRoom, updateRoom, getRoom, removeRoom} = require("../utils/rooms");
4-
const {addMessageRoom, addMessage, getRoomMessages, removeMessageRoom} = require("../utils/messages");
4+
const {
5+
addMessageRoom,
6+
addMessage,
7+
updateMessageOG,
8+
messageHasLink,
9+
getRoomMessages,
10+
removeMessageRoom
11+
} = require("../utils/messages");
512

613
const peerSocketConnection = (server) => {
714
const io = socketio(server, {
@@ -86,8 +93,13 @@ const peerSocketConnection = (server) => {
8693
});
8794

8895
socket.on("send-message", async (message) => {
89-
const newMessage = await addMessage(roomID, message);
96+
const newMessage = addMessage(roomID, message);
9097
io.to(roomID).emit("message-received", newMessage);
98+
const linksArray = messageHasLink(roomID, newMessage);
99+
if(linksArray) {
100+
const updatedMessage = await updateMessageOG(roomID, newMessage, linksArray);
101+
io.to(roomID).emit("updated-message", updatedMessage);
102+
}
91103
});
92104

93105
socket.on("get-older-messages", offset => {

server/utils/messages.js

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,31 @@ const addMessageRoom = (id) => {
1515
};
1616

1717
const addMessage = (id, message) => {
18-
let messageArr = message.message.replace(/\n/g, " ").split(" ");
19-
let linksArray = messageArr.filter(msg => isURL(msg, {require_protocol: true}));
20-
21-
if(!linksArray.length) {
22-
message.id = uuidV4() + message.createdAt;
23-
messages[id].messages.push(message);
24-
return message;
25-
}
18+
message.id = uuidV4() + message.createdAt;
19+
messages[id].messages.push(message);
20+
return message;
21+
};
2622

23+
const updateMessageOG = (id, message, linksArray) => {
2724
const options = {url: linksArray[0]};
25+
2826
return ogs(options).then(data => {
2927
const {error, result} = data;
30-
message.id = uuidV4() + message.createdAt;
31-
messages[id].messages.push(message);
3228
message.ogMeta = {...result};
3329
return message;
3430
}).catch(err => {
3531
console.log(err);
36-
message.id = uuidV4() + message.createdAt;
37-
messages[id].messages.push(message);
3832
return message;
3933
});
4034
};
4135

36+
const messageHasLink = (id, message) => {
37+
let messageArr = message.message.replace(/\n/g, " ").split(" ");
38+
let linksArray = messageArr.filter(msg => isURL(msg, {require_protocol: true}));
39+
if(!linksArray.length) return false;
40+
return linksArray;
41+
};
42+
4243
const getRoomMessages = (id) => {
4344
if(!messages[id]) return [];
4445
return messages[id].messages;
@@ -53,6 +54,8 @@ const removeMessageRoom = (id) => {
5354
module.exports = {
5455
addMessageRoom,
5556
addMessage,
57+
updateMessageOG,
58+
messageHasLink,
5659
getRoomMessages,
5760
removeMessageRoom
5861
};

streams-react/src/components/ChatHeader/ChatHeader.module.css

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
justify-content: center;
55
align-items: center;
66
border-bottom: 2px solid #212121;
7+
padding: 5px;
8+
padding-bottom: 10px;
79
width: 100%;
810
flex: none;
911
background-color: #5C9EAD;
@@ -16,15 +18,12 @@
1618
-webkit-box-orient: vertical;
1719
max-height: 100px;
1820
width: 100%;
19-
margin-top: 15px;
21+
margin-top: 10px;
2022
margin-bottom: 10px;
21-
padding-left: 5px;
22-
padding-right: 5px;
2323
text-decoration: underline;
2424
overflow: hidden;
2525
text-align: center;
2626
}
2727
.chat__online {
2828
align-self: flex-start;
29-
padding: 5px;
3029
}

streams-react/src/context/ChatContext.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const ChatContextProvider = ({children}) => {
3535
}
3636
socket.on("joined-room", handleJoinedRoom);
3737
socket.on("message-received", handleMessageReceived);
38+
socket.on("updated-message", handleUpdatedMessage);
3839
socket.on("older-messages-received", handleOlderMessagesReceived);
3940
socket.on("messages-list", handleMessagesList);
4041
socket.on("all-older-messages-received", handleAllOlderMessagesReceived);
@@ -44,6 +45,7 @@ const ChatContextProvider = ({children}) => {
4445
if(socket) {
4546
socket.removeListener("joined-room", handleJoinedRoom);
4647
socket.removeListener("message-received", handleMessageReceived);
48+
socket.removeListener("updated-message", handleUpdatedMessage);
4749
socket.removeListener("older-messages-received", handleOlderMessagesReceived);
4850
socket.removeListener("messages-list", handleMessagesList);
4951
socket.removeListener("all-older-messages-received", handleAllOlderMessagesReceived);
@@ -61,6 +63,13 @@ const ChatContextProvider = ({children}) => {
6163
setMessageList(messages => [...messages, message]);
6264
};
6365

66+
const handleUpdatedMessage = (message) => {
67+
setMessageList(msgs => msgs.map(msg => {
68+
if(msg.id === message.id) return message;
69+
return msg;
70+
}));
71+
};
72+
6473
const handleOlderMessagesReceived = (messages) => {
6574
setMessageList(msgs => [...messages]);
6675
setIsAtTop(false);

0 commit comments

Comments
 (0)