Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Edit / delete message callbacks #2788

Merged
merged 7 commits into from
Jul 23, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Added onMessageEdit() and onMessageDelete() event notifications
ghayman committed Jul 12, 2024
commit e756ed32b96fbb1834fcf67ae127170ea596707d
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -834,7 +834,17 @@ client.onAnyMessage(message => {

// Listen to messages
client.onMessage(message => {
...
...
})

// Listen for messages that have been edited
client.onMessageEdit(message => {
...
})

// Listen for messages that have been deleted
client.onMessageDelete(message => {
...
})

// Listen to state changes
2 changes: 2 additions & 0 deletions src/api/helpers/exposed.enum.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
export enum ExposedFn {
OnMessage = 'onMessage',
OnMessageEdit = 'onMessageEdit',
OnMessageDelete = 'onMessageDelete',
OnAnyMessage = 'onAnyMessage',
onAck = 'onAck',
onParticipantsChanged = 'onParticipantsChanged',
68 changes: 65 additions & 3 deletions src/api/layers/listener.layer.ts
Original file line number Diff line number Diff line change
@@ -22,6 +22,8 @@ declare global {
interface Window {
onMessage: any;
onAnyMessage: any;
onMessageEdit: any;
onMessageDelete: any;
onStateChange: any;
onIncomingCall: any;
onAck: any;
@@ -75,7 +77,7 @@ export class ListenerLayer extends ProfileLayer {
}
}

this.addMsg();
await this.addMsg();
await this.page
.evaluate(() => {
window.WAPI.onInterfaceChange((e: any) => {
@@ -104,6 +106,12 @@ export class ListenerLayer extends ProfileLayer {
window.WAPI.onAck((e: any) => {
window.onAck(e);
});
window.WAPI.onMessageEdit((e: any) => {
window.onMessageEdit(e);
});
window.WAPI.onMessageDelete((e: any) => {
window.onMessageDelete(e);
});
window.WAPI.onPoll((e: any) => {
window.onPoll(e);
});
@@ -129,6 +137,25 @@ export class ListenerLayer extends ProfileLayer {
}
}
});

window.Store.Msg.on(
'change:body change:caption',
async (newMessage) => {
if (newMessage && newMessage.isNewMsg) {
const processMessageObj = await window.WAPI.processMessageObj(
newMessage,
true,
false
);

if (newMessage.type == 'revoked') {
window.onMessageDelete(processMessageObj);
} else {
window.onMessageEdit(processMessageObj);
}
}
}
);
// } catch { }
})
.catch(() => {});
@@ -150,8 +177,7 @@ export class ListenerLayer extends ProfileLayer {

/**
* @event Listens to all new messages
* @param to callback
* @fires Message
* @param fn
*/
public async onAnyMessage(fn: (message: Message) => void) {
this.listenerEmitter.on(ExposedFn.OnAnyMessage, (msg) => {
@@ -167,6 +193,42 @@ export class ListenerLayer extends ProfileLayer {
};
}

/**
* @event Listens for edited message
* @param fn
*/
public async onMessageEdit(fn: (message: Message) => void) {
this.listenerEmitter.on(ExposedFn.OnMessageEdit, (msg) => {
fn(msg);
});

return {
dispose: () => {
this.listenerEmitter.off(ExposedFn.OnMessageEdit, (msg) => {
fn(msg);
});
}
};
}

/**
* @event Listens for deleted message
* @param fn
*/
public async onMessageDelete(fn: (message: Message) => void) {
this.listenerEmitter.on(ExposedFn.OnMessageDelete, (msg) => {
fn(msg);
});

return {
dispose: () => {
this.listenerEmitter.off(ExposedFn.OnMessageDelete, (msg) => {
fn(msg);
});
}
};
}

/**
* @event Listens to messages received
* @returns Observable stream of messages
2 changes: 2 additions & 0 deletions src/types/WAPI.d.ts
Original file line number Diff line number Diff line change
@@ -14,6 +14,8 @@ import {
interface WAPI {
addParticipant: (groupId: string, contactId: string | string[]) => boolean;
onAnyMessage: (callback: Function) => void;
onMessageEdit: (callback: Function) => void;
onMessageDelete: (callback: Function) => void;
archiveChat: (chatId: string, option: boolean) => boolean;
arrayBufferToBase64: (buffer: ArrayBuffer) => string;
blockContact: (messageId: string) => boolean;