diff --git a/lib/shared/dm-ops/change-thread-settings-spec.js b/lib/shared/dm-ops/change-thread-settings-spec.js --- a/lib/shared/dm-ops/change-thread-settings-spec.js +++ b/lib/shared/dm-ops/change-thread-settings-spec.js @@ -15,11 +15,15 @@ import type { DMChangeThreadSettingsOperation } from '../../types/dm-ops.js'; import { messageTypes } from '../../types/message-types-enum.js'; import type { RawMessageInfo } from '../../types/message-types.js'; +import type { AddMembersMessageData } from '../../types/messages/add-members.js'; +import type { ChangeSettingsMessageData } from '../../types/messages/change-settings.js'; import type { RawThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js'; +import type { NotificationsCreationData } from '../../types/notif-types.js'; import type { LegacyRawThreadInfo } from '../../types/thread-types.js'; import { updateTypes } from '../../types/update-types-enum.js'; import type { ClientUpdateInfo } from '../../types/update-types.js'; import { values } from '../../utils/objects.js'; +import { firstLine } from '../../utils/string-utils.js'; function createAddMembersOperation( dmOperation: DMChangeThreadSettingsOperation, @@ -166,6 +170,66 @@ utilities, ); }, + notificationsCreationData( + dmOp: DMChangeThreadSettingsOperation, + ): NotificationsCreationData { + const { + existingThreadDetails: { threadID }, + editorID: creatorID, + time, + changes, + } = dmOp; + const messageDatas: Array< + ChangeSettingsMessageData | AddMembersMessageData, + > = []; + + const normalizedChanges: { + [string]: string, + } = {}; + + const { name, color, description, avatar, newMemberIDs } = changes; + + if (name) { + normalizedChanges.name = firstLine(name); + } + + if (color) { + normalizedChanges.color = color.toLowerCase(); + } + + if (description) { + normalizedChanges.description = description; + } + + if (avatar) { + normalizedChanges.avatar = JSON.stringify(avatar); + } + + for (const field in normalizedChanges) { + const value = normalizedChanges[field]; + messageDatas.push({ + type: messageTypes.CHANGE_SETTINGS, + threadID, + creatorID, + time, + value, + field, + }); + } + + if (newMemberIDs && newMemberIDs.length > 0) { + messageDatas.push({ + type: messageTypes.ADD_MEMBERS, + threadID, + creatorID, + time, + addedUserIDs: [...newMemberIDs], + }); + } + return { + messageDatas, + }; + }, }); export { changeThreadSettingsSpec };