Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jsxc/jsxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsualko <klaus@jsxc.org>2022-01-02 19:49:37 +0300
committersualko <klaus@jsxc.org>2022-01-02 19:49:37 +0300
commitbcdb0adefda85029e5f63cd5421467d6e868126e (patch)
treec3fdbcba147720d1f2c3d34ff8679d1d93bbadfd
parentbe92eb22be7865ef61894f41a73409a7a1399fd3 (diff)
feat: add msg correction to menu
-rw-r--r--src/plugin/PluginAPI.interface.ts3
-rw-r--r--src/plugin/PluginAPI.ts5
-rw-r--r--src/plugins/LastMessageCorrectionPlugin.ts34
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;
+ };
}