diff options
author | sualko <klaus@jsxc.org> | 2022-01-02 19:49:37 +0300 |
---|---|---|
committer | sualko <klaus@jsxc.org> | 2022-01-02 19:49:37 +0300 |
commit | bcdb0adefda85029e5f63cd5421467d6e868126e (patch) | |
tree | c3fdbcba147720d1f2c3d34ff8679d1d93bbadfd | |
parent | be92eb22be7865ef61894f41a73409a7a1399fd3 (diff) |
feat: add msg correction to menu
-rw-r--r-- | src/plugin/PluginAPI.interface.ts | 3 | ||||
-rw-r--r-- | src/plugin/PluginAPI.ts | 5 | ||||
-rw-r--r-- | src/plugins/LastMessageCorrectionPlugin.ts | 34 |
3 files changed, 42 insertions, 0 deletions
diff --git a/src/plugin/PluginAPI.interface.ts b/src/plugin/PluginAPI.interface.ts index b65caddd..d9bb1bd7 100644 --- a/src/plugin/PluginAPI.interface.ts +++ b/src/plugin/PluginAPI.interface.ts @@ -12,6 +12,7 @@ import Pipe from '@util/Pipe'; import CommandRepository, { CommandAction } from '@src/CommandRepository'; import IStorage from '@src/Storage.interface'; import CallManager from '@src/CallManager'; +import IMenuItemFactory from '@src/MenuItemFactory.interface'; export interface IPluginAPI { Log: ILog; @@ -105,4 +106,6 @@ export interface IPluginAPI { getAccountUid(): string; getCallManager(): CallManager; + + registerChatMessageMenuItem(menuItem: IMenuItemFactory<[IContact, IMessage]>): void; } diff --git a/src/plugin/PluginAPI.ts b/src/plugin/PluginAPI.ts index 0acf9f8a..bf332910 100644 --- a/src/plugin/PluginAPI.ts +++ b/src/plugin/PluginAPI.ts @@ -18,6 +18,7 @@ import IStorage from '@src/Storage.interface'; import CommandRepository, { CommandAction } from '@src/CommandRepository'; import { IAvatar } from '@src/Avatar.interface'; import CallManager from '@src/CallManager'; +import IMenuItemFactory from '@src/MenuItemFactory.interface'; export default class PluginAPI implements IPluginAPI { private storage: IStorage; @@ -234,4 +235,8 @@ export default class PluginAPI implements IPluginAPI { public getCallManager(): CallManager { return this.account.getCallManager(); } + + public registerChatMessageMenuItem(menuItem: IMenuItemFactory<[IContact, IMessage]>): void { + this.account.getChatMessageMenu().registerMenuItem(menuItem); + } } diff --git a/src/plugins/LastMessageCorrectionPlugin.ts b/src/plugins/LastMessageCorrectionPlugin.ts index 39786f53..c3db4c46 100644 --- a/src/plugins/LastMessageCorrectionPlugin.ts +++ b/src/plugins/LastMessageCorrectionPlugin.ts @@ -54,6 +54,10 @@ export default class LastMessageCorrectionPlugin extends AbstractPlugin { pluginAPI.addPreSendMessageStanzaProcessor(this.addReplaceElementToStanza, 90); pluginAPI.addAfterReceiveMessageProcessor(this.checkMessageCorrection, 90); + + pluginAPI.registerChatMessageMenuItem({ + generate: this.generateCorrectMessageMenuItem, + }); } private commandHandler = async (args: string[], contact: IContact, messageString: string) => { @@ -148,4 +152,34 @@ export default class LastMessageCorrectionPlugin extends AbstractPlugin { return [contact, message, stanza]; }; + + private generateCorrectMessageMenuItem = (contact: IContact, message: IMessage) => { + if (message.isOutgoing()) { + const lastOutgoingMessage = contact.getTranscript().getFirstOutgoingMessage().getLastVersion(); + + if (lastOutgoingMessage.getUid() === message.getUid()) { + const chatWindow = contact.getChatWindow(); + + return { + id: 'lmc-edit', + label: '', + icon: 'edit', + handler: () => { + let plaintextMessage = message.getPlaintextMessage(); + + if (message.hasAttachment()) { + const attachment = message.getAttachment(); + + chatWindow.setAttachment(attachment); + plaintextMessage = plaintextMessage.replace(attachment.getData() + '\n', ''); + } + + chatWindow.setInput(CORRECTION_CMD + ' ' + plaintextMessage); + }, + }; + } + } + + return false; + }; } |