diff --git a/lib/shared/dm-ops/dm-op-specs.js b/lib/shared/dm-ops/dm-op-specs.js --- a/lib/shared/dm-ops/dm-op-specs.js +++ b/lib/shared/dm-ops/dm-op-specs.js @@ -13,6 +13,7 @@ import { editEntrySpec } from './edit-entry-spec.js'; import { joinThreadSpec } from './join-thread-spec.js'; import { leaveThreadSpec } from './leave-thread-spec.js'; +import { sendDeleteMessageSpec } from './send-delete-message-spec.js'; import { sendEditMessageSpec } from './send-edit-message-spec.js'; import { sendMultimediaMessageSpec } from './send-multimedia-message-spec.js'; import { sendReactionMessageSpec } from './send-reaction-message-spec.js'; @@ -40,4 +41,5 @@ [dmOperationTypes.DELETE_ENTRY]: deleteEntrySpec, [dmOperationTypes.EDIT_ENTRY]: editEntrySpec, [dmOperationTypes.UPDATE_RELATIONSHIP]: updateRelationshipSpec, + [dmOperationTypes.SEND_DELETE_MESSAGE]: sendDeleteMessageSpec, }); diff --git a/lib/shared/dm-ops/send-delete-message-spec.js b/lib/shared/dm-ops/send-delete-message-spec.js new file mode 100644 --- /dev/null +++ b/lib/shared/dm-ops/send-delete-message-spec.js @@ -0,0 +1,58 @@ +// @flow + +import type { + DMOperationSpec, + ProcessDMOperationUtilities, +} from './dm-op-spec.js'; +import { + type DMSendDeleteMessageOperation, + dmSendDeleteMessageOperationValidator, +} from '../../types/dm-ops.js'; +import { messageTypes } from '../../types/message-types-enum.js'; + +const sendDeleteMessageSpec: DMOperationSpec = + Object.freeze({ + processDMOperation: async (dmOperation: DMSendDeleteMessageOperation) => { + const { threadID, creatorID, time, targetMessageID, messageID } = + dmOperation; + const rawMessageInfo = { + type: messageTypes.DELETE_MESSAGE, + threadID, + creatorID, + time, + targetMessageID, + id: messageID, + }; + + return { + rawMessageInfos: [rawMessageInfo], + updateInfos: [], + blobOps: [], + notificationsCreationData: null, + }; + }, + canBeProcessed: async ( + dmOperation: DMSendDeleteMessageOperation, + utilities: ProcessDMOperationUtilities, + ) => { + const targetMessage = await utilities.fetchMessage( + dmOperation.targetMessageID, + ); + if (!targetMessage) { + return { + isProcessingPossible: false, + reason: { + type: 'missing_message', + messageID: dmOperation.targetMessageID, + }, + }; + } + return { + isProcessingPossible: true, + }; + }, + supportsAutoRetry: true, + operationValidator: dmSendDeleteMessageOperationValidator, + }); + +export { sendDeleteMessageSpec };