Page MenuHomePhorge

D6963.1765301738.diff
No OneTemporary

Size
5 KB
Referenced Files
None
Subscribers
None

D6963.1765301738.diff

diff --git a/lib/shared/messages/edit-message-spec.js b/lib/shared/messages/edit-message-spec.js
new file mode 100644
--- /dev/null
+++ b/lib/shared/messages/edit-message-spec.js
@@ -0,0 +1,143 @@
+// @flow
+
+import invariant from 'invariant';
+
+import { type MessageSpec, type MessageTitleParam } from './message-spec.js';
+import type { PlatformDetails } from '../../types/device-types.js';
+import {
+ assertMessageType,
+ messageTypes,
+ type ClientDBMessageInfo,
+} from '../../types/message-types.js';
+import type {
+ EditMessageData,
+ RawEditMessageInfo,
+ EditMessageInfo,
+} from '../../types/messages/edit.js';
+import type { RawUnsupportedMessageInfo } from '../../types/messages/unsupported.js';
+import type { RelativeUserInfo } from '../../types/user-types.js';
+import { ET } from '../../utils/entity-text.js';
+import { hasMinCodeVersion } from '../version-utils.js';
+
+export const editMessageSpec: MessageSpec<
+ EditMessageData,
+ RawEditMessageInfo,
+ EditMessageInfo,
+> = Object.freeze({
+ messageContentForServerDB(
+ data: EditMessageData | RawEditMessageInfo,
+ ): string {
+ return JSON.stringify({
+ text: data.text,
+ });
+ },
+
+ messageContentForClientDB(data: RawEditMessageInfo): string {
+ return JSON.stringify({
+ targetMessageID: data.targetMessageID,
+ text: data.text,
+ });
+ },
+
+ messageTitle({ messageInfo }: MessageTitleParam<EditMessageInfo>) {
+ const creator = ET.user({ userInfo: messageInfo.creator });
+ return ET`${creator} edited a message`;
+ },
+
+ rawMessageInfoFromServerDBRow(row: Object): RawEditMessageInfo {
+ invariant(
+ row.targetMessageID !== null && row.targetMessageID !== undefined,
+ 'targetMessageID should be set',
+ );
+
+ const content = JSON.parse(row.content);
+
+ return {
+ type: messageTypes.EDIT_MESSAGE,
+ id: row.id.toString(),
+ threadID: row.threadID.toString(),
+ time: row.time,
+ creatorID: row.creatorID.toString(),
+ targetMessageID: row.targetMessageID.toString(),
+ text: content.text,
+ };
+ },
+
+ rawMessageInfoFromClientDB(
+ clientDBMessageInfo: ClientDBMessageInfo,
+ ): RawEditMessageInfo {
+ const messageType = assertMessageType(parseInt(clientDBMessageInfo.type));
+ invariant(
+ messageType === messageTypes.EDIT_MESSAGE,
+ 'message must be of type EDIT_MESSAGE',
+ );
+ invariant(
+ clientDBMessageInfo.content !== undefined &&
+ clientDBMessageInfo.content !== null,
+ 'content must be defined for EditMessage',
+ );
+ const content = JSON.parse(clientDBMessageInfo.content);
+
+ const rawEditMessageInfo: RawEditMessageInfo = {
+ type: messageTypes.EDIT_MESSAGE,
+ id: clientDBMessageInfo.id,
+ threadID: clientDBMessageInfo.thread,
+ time: parseInt(clientDBMessageInfo.time),
+ creatorID: clientDBMessageInfo.user,
+ targetMessageID: content.targetMessageID,
+ text: content.text,
+ };
+
+ return rawEditMessageInfo;
+ },
+
+ createMessageInfo(
+ rawMessageInfo: RawEditMessageInfo,
+ creator: RelativeUserInfo,
+ ): EditMessageInfo {
+ return {
+ type: messageTypes.EDIT_MESSAGE,
+ id: rawMessageInfo.id,
+ threadID: rawMessageInfo.threadID,
+ creator,
+ time: rawMessageInfo.time,
+ targetMessageID: rawMessageInfo.targetMessageID,
+ text: rawMessageInfo.text,
+ };
+ },
+
+ rawMessageInfoFromMessageData(
+ messageData: EditMessageData,
+ id: ?string,
+ ): RawEditMessageInfo {
+ invariant(id, 'RawEditMessageInfo needs id');
+ return { ...messageData, id };
+ },
+
+ shimUnsupportedMessageInfo(
+ rawMessageInfo: RawEditMessageInfo,
+ platformDetails: ?PlatformDetails,
+ ): RawEditMessageInfo | RawUnsupportedMessageInfo {
+ if (hasMinCodeVersion(platformDetails, 1000)) {
+ return rawMessageInfo;
+ }
+ const { id } = rawMessageInfo;
+ invariant(id !== null && id !== undefined, 'id should be set on server');
+
+ return {
+ type: messageTypes.UNSUPPORTED,
+ id,
+ threadID: rawMessageInfo.threadID,
+ creatorID: rawMessageInfo.creatorID,
+ time: rawMessageInfo.time,
+ robotext: 'edited a message',
+ unsupportedMessageInfo: rawMessageInfo,
+ };
+ },
+
+ unshimMessageInfo(unwrapped: RawEditMessageInfo): RawEditMessageInfo {
+ return unwrapped;
+ },
+
+ generatesNotifs: async () => undefined,
+});
diff --git a/lib/shared/messages/message-specs.js b/lib/shared/messages/message-specs.js
--- a/lib/shared/messages/message-specs.js
+++ b/lib/shared/messages/message-specs.js
@@ -9,6 +9,7 @@
import { createThreadMessageSpec } from './create-thread-message-spec.js';
import { deleteEntryMessageSpec } from './delete-entry-message-spec.js';
import { editEntryMessageSpec } from './edit-entry-message-spec.js';
+import { editMessageSpec } from './edit-message-spec.js';
import { joinThreadMessageSpec } from './join-thread-message-spec.js';
import { leaveThreadMessageSpec } from './leave-thread-message-spec.js';
import { type MessageSpec } from './message-spec.js';
@@ -45,4 +46,5 @@
[messageTypes.SIDEBAR_SOURCE]: sidebarSourceMessageSpec,
[messageTypes.CREATE_SIDEBAR]: createSidebarMessageSpec,
[messageTypes.REACTION]: reactionMessageSpec,
+ [messageTypes.EDIT_MESSAGE]: editMessageSpec,
});

File Metadata

Mime Type
text/plain
Expires
Tue, Dec 9, 5:35 PM (2 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5856243
Default Alt Text
D6963.1765301738.diff (5 KB)

Event Timeline