|
|
|
@ -1459,7 +1459,7 @@ class ChatPage extends LitElement {
|
|
|
|
|
this.shadowRoot.querySelector("chat-scroller").shadowRoot.getElementById("downObserver") |
|
|
|
|
.scrollIntoView({ |
|
|
|
|
behavior: 'smooth', |
|
|
|
|
block: 'nearest', |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
}}> |
|
|
|
|
</vaadin-icon> |
|
|
|
@ -1832,8 +1832,7 @@ class ChatPage extends LitElement {
|
|
|
|
|
this.setUserName(""); |
|
|
|
|
this.setSelectedHead({}); |
|
|
|
|
}}
|
|
|
|
|
style=${ |
|
|
|
|
this.openUserInfo ? "display: block" : "display: none" |
|
|
|
|
style=${this.openUserInfo ? "display: block" : "display: none" |
|
|
|
|
}> |
|
|
|
|
<user-info |
|
|
|
|
.setOpenUserInfo=${(val) => this.setOpenUserInfo(val)} |
|
|
|
@ -1939,7 +1938,8 @@ class ChatPage extends LitElement {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
] |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
@ -1966,7 +1966,8 @@ class ChatPage extends LitElement {
|
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
] |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
@ -1993,7 +1994,8 @@ class ChatPage extends LitElement {
|
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
] |
|
|
|
|
}) |
|
|
|
|
document.addEventListener('keydown', this.initialChat); |
|
|
|
@ -2004,6 +2006,36 @@ class ChatPage extends LitElement {
|
|
|
|
|
timestamp: Date.now() |
|
|
|
|
})) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let callback = (entries, observer) => { |
|
|
|
|
entries.forEach(entry => { |
|
|
|
|
if (entry.isIntersecting) { |
|
|
|
|
|
|
|
|
|
this.isPageVisible = true |
|
|
|
|
if (this.chatId) { |
|
|
|
|
window.parent.reduxStore.dispatch(window.parent.reduxAction.addChatLastSeen({ |
|
|
|
|
key: this.chatId, |
|
|
|
|
timestamp: Date.now() |
|
|
|
|
})) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
this.isPageVisible = false |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
let options = { |
|
|
|
|
root: null, |
|
|
|
|
rootMargin: '0px', |
|
|
|
|
threshold: 0.5 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Create the observer with the callback function and options
|
|
|
|
|
this.observer = new IntersectionObserver(callback, options); |
|
|
|
|
const mainContainer = this.shadowRoot.querySelector('.main-container') |
|
|
|
|
|
|
|
|
|
this.observer.observe(mainContainer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
disconnectedCallback() { |
|
|
|
@ -2024,6 +2056,9 @@ class ChatPage extends LitElement {
|
|
|
|
|
if (this.editorImage) { |
|
|
|
|
this.editorImage.destroy() |
|
|
|
|
} |
|
|
|
|
if (this.observer) { |
|
|
|
|
this.observer.disconnect(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
document.removeEventListener('keydown', this.initialChat); |
|
|
|
|
document.removeEventListener('paste', this.pasteImage); |
|
|
|
@ -2774,7 +2809,7 @@ class ChatPage extends LitElement {
|
|
|
|
|
await this.renderNewMessage(msg) |
|
|
|
|
}) |
|
|
|
|
await Promise.all(renderEachMessage) |
|
|
|
|
if(this.chatId){ |
|
|
|
|
if (this.chatId && this.isPageVisible) { |
|
|
|
|
window.parent.reduxStore.dispatch(window.parent.reduxAction.addChatLastSeen({ |
|
|
|
|
key: this.chatId, |
|
|
|
|
timestamp: Date.now() |
|
|
|
@ -2832,8 +2867,10 @@ class ChatPage extends LitElement {
|
|
|
|
|
const findOriginalMessageIndex = this.messagesRendered.findIndex(msg => msg.signature === newMessage.chatReference || (msg.chatReference && msg.chatReference === newMessage.chatReference)) |
|
|
|
|
if (findOriginalMessageIndex !== -1 && this.messagesRendered[findOriginalMessageIndex].sender === newMessage.sender) { |
|
|
|
|
const newMessagesRendered = [...this.messagesRendered] |
|
|
|
|
newMessagesRendered[findOriginalMessageIndex] = {...newMessage, timestamp: newMessagesRendered[findOriginalMessageIndex].timestamp, senderName: newMessagesRendered[findOriginalMessageIndex].senderName, |
|
|
|
|
sender: newMessagesRendered[findOriginalMessageIndex].sender, editedTimestamp: newMessage.timestamp } |
|
|
|
|
newMessagesRendered[findOriginalMessageIndex] = { |
|
|
|
|
...newMessage, timestamp: newMessagesRendered[findOriginalMessageIndex].timestamp, senderName: newMessagesRendered[findOriginalMessageIndex].senderName, |
|
|
|
|
sender: newMessagesRendered[findOriginalMessageIndex].sender, editedTimestamp: newMessage.timestamp |
|
|
|
|
} |
|
|
|
|
this.messagesRendered = newMessagesRendered |
|
|
|
|
await this.getUpdateComplete(); |
|
|
|
|
} |
|
|
|
@ -2906,6 +2943,7 @@ class ChatPage extends LitElement {
|
|
|
|
|
async fetchChatMessages(chatId) { |
|
|
|
|
|
|
|
|
|
const initDirect = async (cid, noInitial) => { |
|
|
|
|
let timeoutId |
|
|
|
|
let initial = 0 |
|
|
|
|
|
|
|
|
|
let directSocketTimeout |
|
|
|
@ -2932,6 +2970,11 @@ class ChatPage extends LitElement {
|
|
|
|
|
|
|
|
|
|
// Message Event
|
|
|
|
|
this.webSocket.onmessage = async (e) => { |
|
|
|
|
if (e.data === 'pong') { |
|
|
|
|
clearTimeout(timeoutId); |
|
|
|
|
directSocketTimeout = setTimeout(pingDirectSocket, 45000) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
if (initial === 0) { |
|
|
|
|
if (noInitial) return |
|
|
|
|
const cachedData = null |
|
|
|
@ -2983,10 +3026,13 @@ class ChatPage extends LitElement {
|
|
|
|
|
|
|
|
|
|
const pingDirectSocket = () => { |
|
|
|
|
this.webSocket.send('ping') |
|
|
|
|
|
|
|
|
|
directSocketTimeout = setTimeout(pingDirectSocket, 295000) |
|
|
|
|
timeoutId = setTimeout(() => { |
|
|
|
|
this.webSocket.close(); |
|
|
|
|
clearTimeout(directSocketTimeout) |
|
|
|
|
}, 5000); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
const restartDirectWebSocket = () => { |
|
|
|
|
const noInitial = true |
|
|
|
@ -2999,6 +3045,7 @@ class ChatPage extends LitElement {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const initGroup = (gId, noInitial) => { |
|
|
|
|
let timeoutId |
|
|
|
|
let groupId = Number(gId) |
|
|
|
|
|
|
|
|
|
let initial = 0 |
|
|
|
@ -3029,7 +3076,11 @@ class ChatPage extends LitElement {
|
|
|
|
|
|
|
|
|
|
// Message Event
|
|
|
|
|
this.webSocket.onmessage = async (e) => { |
|
|
|
|
|
|
|
|
|
if (e.data === 'pong') { |
|
|
|
|
clearTimeout(timeoutId); |
|
|
|
|
groupSocketTimeout = setTimeout(pingGroupSocket, 45000) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
if (initial === 0) { |
|
|
|
|
if (noInitial) return |
|
|
|
|
const cachedData = null; |
|
|
|
@ -3078,12 +3129,15 @@ class ChatPage extends LitElement {
|
|
|
|
|
// Error Event
|
|
|
|
|
this.webSocket.onerror = () => { |
|
|
|
|
clearTimeout(groupSocketTimeout) |
|
|
|
|
this.webSocket.close(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const pingGroupSocket = () => { |
|
|
|
|
this.webSocket.send('ping') |
|
|
|
|
|
|
|
|
|
groupSocketTimeout = setTimeout(pingGroupSocket, 295000) |
|
|
|
|
timeoutId = setTimeout(() => { |
|
|
|
|
this.webSocket.close(); |
|
|
|
|
clearTimeout(groupSocketTimeout) |
|
|
|
|
}, 5000); // Close the WebSocket connection if no pong message is received within 5 seconds.
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|