diff --git a/ts/components/conversation/SessionMessagesList.tsx b/ts/components/conversation/SessionMessagesList.tsx index d58d9f70b..491674e0a 100644 --- a/ts/components/conversation/SessionMessagesList.tsx +++ b/ts/components/conversation/SessionMessagesList.tsx @@ -9,7 +9,7 @@ import { } from '../../state/selectors/conversations'; import { useSelectedConversationKey } from '../../state/selectors/selectedConversation'; import { MessageDateBreak } from './message/message-item/DateBreak'; -import { CommunityInvitation } from './message/message-item/GroupInvitation'; +import { CommunityInvitation } from './message/message-item/CommunityInvitation'; import { GroupUpdateMessage } from './message/message-item/GroupUpdateMessage'; import { Message } from './message/message-item/Message'; import { MessageRequestResponse } from './message/message-item/MessageRequestResponse'; diff --git a/ts/components/conversation/TimerNotification.tsx b/ts/components/conversation/TimerNotification.tsx index ffa32ed42..3f5cfb7b4 100644 --- a/ts/components/conversation/TimerNotification.tsx +++ b/ts/components/conversation/TimerNotification.tsx @@ -42,10 +42,10 @@ const FollowSettingButton = styled.button` function useFollowSettingsButtonClick({ messageId }: WithMessageId) { const selectedConvoKey = useSelectedConversationKey(); - const timespanSeconds = useMessageExpirationUpdateTimespanSeconds(messageId) || 0; - const expirationMode = useMessageExpirationUpdateMode(messageId) || 'off'; - const disabled = useMessageExpirationUpdateDisabled(messageId) || false; - const timespanText = useMessageExpirationUpdateTimespanText(messageId) || ''; + const timespanSeconds = useMessageExpirationUpdateTimespanSeconds(messageId); + const expirationMode = useMessageExpirationUpdateMode(messageId); + const disabled = useMessageExpirationUpdateDisabled(messageId); + const timespanText = useMessageExpirationUpdateTimespanText(messageId); const dispatch = useDispatch(); const onExit = () => dispatch(updateConfirmModal(null)); @@ -108,9 +108,9 @@ function useFollowSettingsButtonClick({ messageId }: WithMessageId) { } function useAreSameThanOurSide({ messageId }: WithMessageId) { - const timespanSeconds = useMessageExpirationUpdateTimespanSeconds(messageId) || 0; - const expirationMode = useMessageExpirationUpdateMode(messageId) || 'off'; - const disabled = useMessageExpirationUpdateDisabled(messageId) || false; + const timespanSeconds = useMessageExpirationUpdateTimespanSeconds(messageId); + const expirationMode = useMessageExpirationUpdateMode(messageId); + const disabled = useMessageExpirationUpdateDisabled(messageId); const selectedMode = useSelectedConversationDisappearingMode(); const selectedTimespan = useSelectedExpireTimer(); @@ -129,7 +129,7 @@ const FollowSettingsButton = ({ messageId }: WithMessageId) => { const v2Released = ReleasedFeatures.isUserConfigFeatureReleasedCached(); const isPrivateAndFriend = useSelectedIsPrivateFriend(); - const expirationMode = useMessageExpirationUpdateMode(messageId) || 'off'; + const expirationMode = useMessageExpirationUpdateMode(messageId); const authorIsUs = useMessageAuthorIsUs(messageId); const click = useFollowSettingsButtonClick({ diff --git a/ts/interactions/conversations/unsendingInteractions.ts b/ts/interactions/conversations/unsendingInteractions.ts index f63b48387..01b0e07df 100644 --- a/ts/interactions/conversations/unsendingInteractions.ts +++ b/ts/interactions/conversations/unsendingInteractions.ts @@ -242,7 +242,7 @@ export async function deleteMessagesFromSwarmAndCompletelyLocally( // LEGACY GROUPS -- we cannot delete on the swarm (just unsend which is done separately) if (conversation.isClosedGroup() && PubKey.is05Pubkey(pubkey)) { window.log.info('Cannot delete message from a closed group swarm, so we just complete delete.'); - await deletesMessageLocallyOnly({ conversation, messages, deletionType: 'complete' }); + await deleteMessagesLocallyOnly({ conversation, messages, deletionType: 'complete' }); return; } window.log.info( @@ -257,7 +257,7 @@ export async function deleteMessagesFromSwarmAndCompletelyLocally( 'deleteMessagesFromSwarmAndCompletelyLocally: some messages failed to be deleted. Maybe they were already deleted?' ); } - await deletesMessageLocallyOnly({ conversation, messages, deletionType: 'complete' }); + await deleteMessagesLocallyOnly({ conversation, messages, deletionType: 'complete' }); } /** @@ -273,7 +273,7 @@ export async function deleteMessagesFromSwarmAndMarkAsDeletedLocally( window.log.info( 'Cannot delete messages from a legacy closed group swarm, so we just markDeleted.' ); - await deletesMessageLocallyOnly({ conversation, messages, deletionType: 'markDeleted' }); + await deleteMessagesLocallyOnly({ conversation, messages, deletionType: 'markDeleted' }); return; } @@ -290,7 +290,7 @@ export async function deleteMessagesFromSwarmAndMarkAsDeletedLocally( 'deleteMessagesFromSwarmAndMarkAsDeletedLocally: some messages failed to be deleted but still removing the messages content... ' ); } - await deletesMessageLocallyOnly({ conversation, messages, deletionType: 'markDeleted' }); + await deleteMessagesLocallyOnly({ conversation, messages, deletionType: 'markDeleted' }); } /** @@ -298,7 +298,7 @@ export async function deleteMessagesFromSwarmAndMarkAsDeletedLocally( * @param message Message to delete * @param deletionType 'complete' means completely delete the item from the database, markDeleted means empty the message content but keep an entry */ -async function deletesMessageLocallyOnly({ +async function deleteMessagesLocallyOnly({ conversation, messages, deletionType, @@ -380,7 +380,7 @@ const doDeleteSelectedMessagesInSOGS = async ( toDeleteLocallyIds.map(async id => { const msgToDeleteLocally = await Data.getMessageById(id); if (msgToDeleteLocally) { - return deletesMessageLocallyOnly({ + return deleteMessagesLocallyOnly({ conversation, messages: [msgToDeleteLocally], deletionType: 'complete', @@ -457,7 +457,7 @@ const doDeleteSelectedMessages = async ({ // delete just for me in a groupv2 only means delete locally (not even synced to our other devices) if (conversation.isClosedGroupV2()) { - await deletesMessageLocallyOnly({ + await deleteMessagesLocallyOnly({ conversation, messages: selectedMessages, deletionType: 'markDeleted', diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 929006bf7..a8515d74a 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -36,7 +36,7 @@ import { OpenGroupUtils } from '../session/apis/open_group_api/utils'; import { getOpenGroupV2FromConversationId } from '../session/apis/open_group_api/utils/OpenGroupUtils'; import { ExpirationTimerUpdateMessage } from '../session/messages/outgoing/controlMessage/ExpirationTimerUpdateMessage'; import { TypingMessage } from '../session/messages/outgoing/controlMessage/TypingMessage'; -import { GroupInvitationMessage } from '../session/messages/outgoing/visibleMessage/GroupInvitationMessage'; +import { CommunityInvitationMessage } from '../session/messages/outgoing/visibleMessage/CommunityInvitationMessage'; import { OpenGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/OpenGroupVisibleMessage'; import { VisibleMessage, @@ -494,7 +494,6 @@ export class ConversationModel extends Backbone.Model { * Fetches from the Database an update of what are the memory only informations like mentionedUs and the unreadCount, etc */ public async refreshInMemoryDetails(providedMemoryDetails?: SaveConversationReturn) { - if (!SessionUtilConvoInfoVolatile.isConvoToStoreInWrapper(this)) { return; } @@ -2145,7 +2144,7 @@ export class ConversationModel extends Backbone.Model { const communityInvitation = message.getCommunityInvitation(); if (communityInvitation && communityInvitation.url) { - const groupInviteMessage = new GroupInvitationMessage({ + const communityInviteMessage = new CommunityInvitationMessage({ identifier: id, createAtNetworkTimestamp: networkTimestamp, name: communityInvitation.name, @@ -2156,7 +2155,7 @@ export class ConversationModel extends Backbone.Model { // we need the return await so that errors are caught in the catch {} await MessageQueue.use().sendToPubKey( destinationPubkey, - groupInviteMessage, + communityInviteMessage, SnodeNamespaces.Default ); return; diff --git a/ts/models/message.ts b/ts/models/message.ts index e1befb6b9..0d7ad19b9 100644 --- a/ts/models/message.ts +++ b/ts/models/message.ts @@ -54,7 +54,7 @@ import { MessageModelPropsWithoutConvoProps, PropsForAttachment, PropsForExpirationTimer, - PropsForGroupInvitation, + PropsForCommunityInvitation, PropsForGroupUpdate, PropsForGroupUpdateAdd, PropsForGroupUpdateAvatarChange, @@ -125,7 +125,7 @@ export class MessageModel extends Backbone.Model { public getMessageModelProps(): MessageModelPropsWithoutConvoProps { const propsForDataExtractionNotification = this.getPropsForDataExtractionNotification(); - const propsForGroupInvitation = this.getPropsForGroupInvitation(); + const propsForCommunityInvitation = this.getPropsForCommunityInvitation(); const propsForGroupUpdateMessage = this.getPropsForGroupUpdateMessage(); const propsForTimerNotification = this.getPropsForTimerNotification(); const isMessageResponse = this.isMessageRequestResponse(); @@ -141,8 +141,8 @@ export class MessageModel extends Backbone.Model { if (isMessageResponse) { messageProps.propsForMessageRequestResponse = {}; } - if (propsForGroupInvitation) { - messageProps.propsForGroupInvitation = propsForGroupInvitation; + if (propsForCommunityInvitation) { + messageProps.propsForCommunityInvitation = propsForCommunityInvitation; } if (propsForGroupUpdateMessage) { messageProps.propsForGroupUpdateMessage = propsForGroupUpdateMessage; @@ -455,7 +455,7 @@ export class MessageModel extends Backbone.Model { return props; } - private getPropsForGroupInvitation(): PropsForGroupInvitation | null { + private getPropsForCommunityInvitation(): PropsForCommunityInvitation | null { const invitation = this.getCommunityInvitation(); if (!invitation || !invitation.url) { return null; diff --git a/ts/models/messageType.ts b/ts/models/messageType.ts index eb562d89f..f7ab0ba43 100644 --- a/ts/models/messageType.ts +++ b/ts/models/messageType.ts @@ -145,16 +145,6 @@ export type DataExtractionNotificationMsg = { export type PropsForDataExtractionNotification = DataExtractionNotificationMsg; -export type PropsForMessageRequestResponse = MessageRequestResponseMsg & { - conversationId?: string; - name?: string; - messageId: string; - receivedAt?: number; - isUnread: boolean; - isApproved?: boolean; - source?: string; -}; - export type MessageGroupUpdate = { left?: Array; joined?: Array; diff --git a/ts/session/messages/outgoing/visibleMessage/GroupInvitationMessage.ts b/ts/session/messages/outgoing/visibleMessage/CommunityInvitationMessage.ts similarity index 80% rename from ts/session/messages/outgoing/visibleMessage/GroupInvitationMessage.ts rename to ts/session/messages/outgoing/visibleMessage/CommunityInvitationMessage.ts index e647a2983..b3a597b28 100644 --- a/ts/session/messages/outgoing/visibleMessage/GroupInvitationMessage.ts +++ b/ts/session/messages/outgoing/visibleMessage/CommunityInvitationMessage.ts @@ -2,16 +2,16 @@ import { SignalService } from '../../../../protobuf'; import { DataMessage } from '../DataMessage'; import { ExpirableMessageParams } from '../ExpirableMessage'; -interface GroupInvitationMessageParams extends ExpirableMessageParams { +interface CommunityInvitationMessageParams extends ExpirableMessageParams { url: string; name: string; } -export class GroupInvitationMessage extends DataMessage { +export class CommunityInvitationMessage extends DataMessage { private readonly url: string; private readonly name: string; - constructor(params: GroupInvitationMessageParams) { + constructor(params: CommunityInvitationMessageParams) { super({ createAtNetworkTimestamp: params.createAtNetworkTimestamp, identifier: params.identifier, diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index c87e61cca..eb1b3b01a 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -33,13 +33,13 @@ import { WithConvoId, WithMessageHash, WithMessageId } from '../../session/types export type MessageModelPropsWithoutConvoProps = { propsForMessage: PropsForMessageWithoutConvoProps; - propsForGroupInvitation?: PropsForGroupInvitation; // plop: cleaned up - propsForTimerNotification?: PropsForExpirationTimer; // plop: cleaned up - propsForDataExtractionNotification?: PropsForDataExtractionNotification; // plop: cleaned up - propsForGroupUpdateMessage?: PropsForGroupUpdate; // plop: cleaned up - propsForCallNotification?: PropsForCallNotification; // plop: cleaned up - propsForMessageRequestResponse?: PropsForMessageRequestResponse; // plop: cleaned up - propsForInteractionNotification?: PropsForInteractionNotification; // plop: cleaned up + propsForCommunityInvitation?: PropsForCommunityInvitation; + propsForTimerNotification?: PropsForExpirationTimer; + propsForDataExtractionNotification?: PropsForDataExtractionNotification; + propsForGroupUpdateMessage?: PropsForGroupUpdate; + propsForCallNotification?: PropsForCallNotification; + propsForMessageRequestResponse?: PropsForMessageRequestResponse; + propsForInteractionNotification?: PropsForInteractionNotification; }; export type MessageModelPropsWithConvoProps = SortedMessageModelProps & { @@ -122,7 +122,7 @@ export type PropsForGroupUpdate = { change: PropsForGroupUpdateType; }; -export type PropsForGroupInvitation = { +export type PropsForCommunityInvitation = { serverName: string; fullUrl: string; }; diff --git a/ts/state/selectors/conversations.ts b/ts/state/selectors/conversations.ts index 6ac6f858e..9c7846bae 100644 --- a/ts/state/selectors/conversations.ts +++ b/ts/state/selectors/conversations.ts @@ -149,7 +149,7 @@ export const getSortedMessagesTypesOfSelectedConversation = createSelector( ? ('data-extraction' as const) : msg.propsForMessageRequestResponse ? ('message-request-response' as const) - : msg.propsForGroupInvitation + : msg.propsForCommunityInvitation ? ('group-invitation' as const) : msg.propsForGroupUpdateMessage ? ('group-notification' as const) diff --git a/ts/state/selectors/messages.ts b/ts/state/selectors/messages.ts index 4660220e3..a6042295f 100644 --- a/ts/state/selectors/messages.ts +++ b/ts/state/selectors/messages.ts @@ -194,20 +194,20 @@ export function useMessageSelected(messageId?: string) { * Return the full url needed to join a community through a community invitation message */ export function useMessageCommunityInvitationFullUrl(messageId: string) { - return useMessagePropsByMessageId(messageId)?.propsForGroupInvitation?.fullUrl; + return useMessagePropsByMessageId(messageId)?.propsForCommunityInvitation?.fullUrl; } /** * Return the community display name to have a guess of what a community is about */ export function useMessageCommunityInvitationCommunityName(messageId: string) { - return useMessagePropsByMessageId(messageId)?.propsForGroupInvitation?.serverName; + return useMessagePropsByMessageId(messageId)?.propsForCommunityInvitation?.serverName; } /** - * ========================================= - * Below are selectors for call notification - * ========================================= + * ========================================== + * Below are selectors for call notifications + * ========================================== */ /** @@ -224,7 +224,7 @@ export function useMessageCallNotificationType(messageId: string) { */ /** - * Return the call notification type linked to the specified message + * Return the data exrtaction type linked to the specified message */ export function useMessageDataExtractionType(messageId: string) { return useMessagePropsByMessageId(messageId)?.propsForDataExtractionNotification?.type; @@ -237,7 +237,7 @@ export function useMessageDataExtractionType(messageId: string) { */ /** - * Return the call notification type linked to the specified message + * Return the interaction notification type linked to the specified message */ export function useMessageInteractionNotification(messageId: string) { return useMessagePropsByMessageId(messageId)?.propsForInteractionNotification?.notificationType; @@ -253,7 +253,7 @@ export function useMessageInteractionNotification(messageId: string) { * Return the expiration update mode linked to the specified message */ export function useMessageExpirationUpdateMode(messageId: string) { - return useMessagePropsByMessageId(messageId)?.propsForTimerNotification?.expirationMode; + return useMessagePropsByMessageId(messageId)?.propsForTimerNotification?.expirationMode || 'off'; } /** @@ -265,7 +265,7 @@ export function useMessageExpirationUpdateDisabled(messageId: string) { } /** - * Return the timespan in seconds to which this expiration timer update is sett + * Return the timespan in seconds to which this expiration timer update is set */ export function useMessageExpirationUpdateTimespanSeconds(messageId: string) { return useMessagePropsByMessageId(messageId)?.propsForTimerNotification?.timespanSeconds; @@ -275,7 +275,7 @@ export function useMessageExpirationUpdateTimespanSeconds(messageId: string) { * Return the timespan in text (localised) built from the field timespanSeconds */ export function useMessageExpirationUpdateTimespanText(messageId: string) { - return useMessagePropsByMessageId(messageId)?.propsForTimerNotification?.timespanText; + return useMessagePropsByMessageId(messageId)?.propsForTimerNotification?.timespanText || ''; } /** diff --git a/ts/test/session/unit/messages/GroupInvitationMessage_test.ts b/ts/test/session/unit/messages/GroupInvitationMessage_test.ts index 3e7770ab6..75c2a2281 100644 --- a/ts/test/session/unit/messages/GroupInvitationMessage_test.ts +++ b/ts/test/session/unit/messages/GroupInvitationMessage_test.ts @@ -3,16 +3,16 @@ import { beforeEach } from 'mocha'; import { SignalService } from '../../../../protobuf'; import { Constants } from '../../../../session'; -import { GroupInvitationMessage } from '../../../../session/messages/outgoing/visibleMessage/GroupInvitationMessage'; +import { CommunityInvitationMessage } from '../../../../session/messages/outgoing/visibleMessage/CommunityInvitationMessage'; -describe('GroupInvitationMessage', () => { - let message: GroupInvitationMessage; +describe('CommunityInvitationMessage', () => { + let message: CommunityInvitationMessage; const createAtNetworkTimestamp = Date.now(); const url = 'http://localhost'; const name = 'test'; beforeEach(() => { - message = new GroupInvitationMessage({ + message = new CommunityInvitationMessage({ createAtNetworkTimestamp, url, name,