update detech new message and auto sync conversations

This commit is contained in:
Admin 2025-09-08 14:30:52 +07:00
parent 9dfa87e2c0
commit 83785fdf0a
5 changed files with 95 additions and 50 deletions

File diff suppressed because one or more lines are too long

View File

@ -44,3 +44,7 @@ contentService.detectNewMessage();
// SYNC CONVERSASIONS (INTERVAL)
contentService.startSyncConversations();
// const a = new TeamsChatService();
// a.start();

View File

@ -447,49 +447,90 @@ export class ContentService {
async detectNewMessage(interval = 2000) {
console.log("[Monitor] Starting...");
// this.initialHistories = this.extractAllMessages();
// this.lastMessage = this.initialHistories.pop();
// await messageApi.sendBulkMessages(this.initialHistories);
setInterval(async () => {
const aria_value = document
// Lưu lịch sử ban đầu
this.service.initialHistories = this.service.extractAllMessages();
this.service.lastMessage = this.service.initialHistories.pop();
setInterval(() => {
queue.add(async () => {
try {
const currentRoom = this.service.getCurrentRoomInfo();
// Lấy attribute aria-labelledby
const ariaValue = document
.querySelector(
'[aria-labelledby^="cn-normal-notification-main-content-"]'
)
?.getAttribute("aria-labelledby");
if (!aria_value) {
console.log("No new message...");
// **CASE 1: Không có popup notification**
if (!ariaValue) {
const newCurrentMessage = await this.service.detectNewMessages();
if (!newCurrentMessage) {
console.log("[Monitor] No new message...");
return;
}
const room_id = aria_value
if (currentRoom.room_id !== newCurrentMessage?.room_id) {
console.log("[Monitor] Message from another room → skip");
return;
}
console.log("[Monitor] Found new message:", newCurrentMessage);
await this._sendLastMessage(newCurrentMessage);
return;
}
// **CASE 2: Có popup → cần click để sync**
const roomId = ariaValue
.split(" ")[0]
.replaceAll("cn-normal-notification-main-content-", "");
.replace("cn-normal-notification-main-content-", "");
if (!room_id) return;
if (!roomId) {
console.warn(
"[Monitor] Could not extract room_id from aria-labelledby"
);
return;
}
console.log({ room_id, aria_value });
console.log("[Monitor] Notification detected:", {
roomId,
ariaValue,
});
queue.add(async () => {
console.log("[Queue] Handling SYNC NEW MESSAGE");
this._clickToConversation(room_id);
await delay(2000);
// Click vào conversation và xử lý
this._clickToConversation(roomId);
await delay(2000); // chờ load messages
const allMessages = this.service.extractAllMessages();
const lastMessage = allMessages.at(-1);
if (!lastMessage) return;
if (!lastMessage) {
console.log("[Queue] No last message found after sync");
return;
}
await messageApi.sendSingleMessage(lastMessage);
console.log("[Queue] Sending last message:", lastMessage);
await this._sendLastMessage(lastMessage);
} catch (error) {
console.error("[Monitor] Error detecting new message:", error);
}
});
}, interval);
}
// Helper gửi tin nhắn cuối cùng
async _sendLastMessage(message: IMessage) {
try {
await messageApi.sendSingleMessage(message);
console.log("[API] Sent message successfully:", message);
} catch (err) {
console.error("[API] Failed to send message:", err);
}
}
startSyncConversations() {
setInterval(() => this.getConversations(), 20000);
}

View File

@ -1,9 +1,7 @@
import { messageApi } from "@/api/message-api.service";
export class TeamsChatService {
private readonly MY_NAME = "Apactech com";
private lastMessage?: IMessage;
private initialHistories: IMessage[] = [];
public lastMessage?: IMessage;
public initialHistories: IMessage[] = [];
public elTags = {
container_scroll:
@ -124,7 +122,7 @@ export class TeamsChatService {
console.log("%c[New incoming message]", "color: #007acc;", message);
}
private async detectNewMessages() {
public async detectNewMessages() {
const allMessages = this.extractAllMessages();
const lastIndex = allMessages.findIndex(
@ -139,16 +137,18 @@ export class TeamsChatService {
const newMsg = newMessages[0];
if (newMsg.name === this.MY_NAME) {
console.log("[Monitor] My new message:", newMsg);
await messageApi.sendSingleMessage(newMsg);
} else {
console.log("[Monitor] New incoming message:", newMsg);
this.handleNewMessage(newMsg);
messageApi.sendSingleMessage(newMsg);
}
// if (newMsg.name === this.MY_NAME) {
// console.log("[Monitor] My new message:", newMsg);
// await messageApi.sendSingleMessage(newMsg);
// } else {
// console.log("[Monitor] New incoming message:", newMsg);
// this.handleNewMessage(newMsg);
// messageApi.sendSingleMessage(newMsg);
// }
this.lastMessage = allMessages.pop();
return newMsg;
}
public async start(interval = 10000) {