From 2b26c65f5f200982d95ce4e9ece0028d7ebf6038 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Mon, 13 Jan 2025 10:52:48 +1100 Subject: [PATCH] fix: declining convo mark it as hidden --- ts/hooks/useParamSelector.ts | 1 + ts/interactions/conversationInteractions.ts | 5 ++--- ts/models/conversation.ts | 8 +++++++- ts/receiver/groupv2/handleGroupV2Message.ts | 4 ++-- ts/session/conversations/ConversationController.ts | 14 ++++++++------ ts/state/selectors/conversations.ts | 4 +++- 6 files changed, 23 insertions(+), 13 deletions(-) diff --git a/ts/hooks/useParamSelector.ts b/ts/hooks/useParamSelector.ts index 6f5954029..55bdc46e8 100644 --- a/ts/hooks/useParamSelector.ts +++ b/ts/hooks/useParamSelector.ts @@ -272,6 +272,7 @@ export function useIsIncomingRequest(convoId?: string) { didApproveMe: convoProps.didApproveMe || false, activeAt: convoProps.activeAt || 0, invitePending, + priority: convoProps.priority, }) ); } diff --git a/ts/interactions/conversationInteractions.ts b/ts/interactions/conversationInteractions.ts index 6226cedd0..3fcb8326b 100644 --- a/ts/interactions/conversationInteractions.ts +++ b/ts/interactions/conversationInteractions.ts @@ -199,9 +199,8 @@ export async function declineConversationWithoutConfirm({ `declineConversationWithoutConfirm of ${ed25519Str(conversationId)}, alsoBlock:${alsoBlock}, conversationIdOrigin:${conversationIdOrigin ? ed25519Str(conversationIdOrigin) : ''}` ); - // Note: do not set the active_at undefined as this would make that conversation not synced with the libsession wrapper - await conversationToDecline.setIsApproved(false, false); - await conversationToDecline.setDidApproveMe(false, false); + // Note: declining a message request just hides it. + await conversationToDecline.setHidden(false); if (conversationToDecline.isClosedGroupV2()) { // this can only be done for groupv2 convos diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 93a88876a..97edd41ef 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -727,6 +727,7 @@ export class ConversationModel extends Backbone.Model { activeAt: this.getActiveAt(), didApproveMe: this.didApproveMe(), invitePending, + priority: this.getPriority(), }); } @@ -2817,6 +2818,7 @@ export function hasValidIncomingRequestValues({ activeAt, didApproveMe, invitePending, + priority, }: { id: string; isMe: boolean; @@ -2826,16 +2828,20 @@ export function hasValidIncomingRequestValues({ didApproveMe: boolean; invitePending: boolean; activeAt: number | undefined; + priority: number | undefined; }): boolean { // if a convo is not active, it means we didn't get any messages nor sent any. const isActive = activeAt && isFinite(activeAt) && activeAt > 0; + const priorityWithDefault = priority ?? CONVERSATION_PRIORITIES.default; + const isHidden = priorityWithDefault < 0; return Boolean( (isPrivate || (PubKey.is03Pubkey(id) && invitePending)) && !isMe && !isApproved && !isBlocked && isActive && - didApproveMe + didApproveMe && + !isHidden ); } diff --git a/ts/receiver/groupv2/handleGroupV2Message.ts b/ts/receiver/groupv2/handleGroupV2Message.ts index 794e53352..6c6ec0b0d 100644 --- a/ts/receiver/groupv2/handleGroupV2Message.ts +++ b/ts/receiver/groupv2/handleGroupV2Message.ts @@ -3,7 +3,7 @@ import { isEmpty, isFinite, isNumber } from 'lodash'; import { Data } from '../../data/data'; import { deleteAllMessagesByConvoIdNoConfirmation } from '../../interactions/conversationInteractions'; import { deleteMessagesFromSwarmOnly } from '../../interactions/conversations/unsendingInteractions'; -import { ConversationTypeEnum } from '../../models/types'; +import { CONVERSATION_PRIORITIES, ConversationTypeEnum } from '../../models/types'; import { HexString } from '../../node/hexStrings'; import { SignalService } from '../../protobuf'; import { getSwarmPollingInstance } from '../../session/apis/snode_api'; @@ -69,7 +69,7 @@ async function getInitializedGroupObject({ authData: null, joinedAtSeconds: Math.floor(Date.now() / 1000), name: groupName, - priority: 0, + priority: CONVERSATION_PRIORITIES.default, pubkeyHex: groupPk, secretKey: null, kicked: false, diff --git a/ts/session/conversations/ConversationController.ts b/ts/session/conversations/ConversationController.ts index f293f706e..2b5acaa12 100644 --- a/ts/session/conversations/ConversationController.ts +++ b/ts/session/conversations/ConversationController.ts @@ -213,8 +213,7 @@ class ConvoController { // we remove the messages left in this convo. The caller has to merge them if needed await deleteAllMessagesByConvoIdNoConfirmation(conversation.id); - await conversation.setIsApproved(false, false); - await conversation.setDidApproveMe(false, false); + await conversation.setHidden(false); await conversation.commit(); } @@ -400,8 +399,7 @@ class ConvoController { // We do this so that if we get reinvited to the group, we will // fetch and display all the messages from the group's swarm again. if (clearFetchedHashes) { - await getSwarmPollingInstance().resetLastHashesForConversation(groupPk); - await Data.emptySeenMessageHashesForConversation(groupPk); + await this.resetLastHashesForConversation(groupPk); } await LibSessionUtil.saveDumpsToDb(UserUtils.getOurPubKeyStrFromCache()); @@ -417,6 +415,11 @@ class ConvoController { window.inboxStore?.dispatch(groupInfoActions.removeGroupDetailsFromSlice({ groupPk })); } + async resetLastHashesForConversation(groupPk: GroupPubkeyType) { + await getSwarmPollingInstance().resetLastHashesForConversation(groupPk); + await Data.emptySeenMessageHashesForConversation(groupPk); + } + public async deleteCommunity(convoId: string) { const conversation = await this.deleteConvoInitialChecks(convoId, 'Community', false); if (!conversation || !conversation.isPublic()) { @@ -455,8 +458,7 @@ class ConvoController { } else { window.log.info(`deleteContact isPrivate, reset fields and removing from wrapper: ${id}`); - await conversation.setIsApproved(false, false); - await conversation.setDidApproveMe(false, false); + await conversation.setHidden(); conversation.set('active_at', 0); await BlockedNumberController.unblockAll([conversation.id]); await conversation.commit(); // first commit to DB so the DB knows about the changes diff --git a/ts/state/selectors/conversations.ts b/ts/state/selectors/conversations.ts index 40d1f2a42..9a50650d5 100644 --- a/ts/state/selectors/conversations.ts +++ b/ts/state/selectors/conversations.ts @@ -399,7 +399,8 @@ const _getConversationRequests = ( sortedConversations: Array ): Array => { return filter(sortedConversations, conversation => { - const { isApproved, isBlocked, isPrivate, isMe, activeAt, didApproveMe, id } = conversation; + const { isApproved, isBlocked, isPrivate, isMe, activeAt, didApproveMe, id, priority } = + conversation; const invitePending = PubKey.is03Pubkey(id) ? UserGroupsWrapperActions.getCachedGroup(id)?.invitePending || false : false; @@ -412,6 +413,7 @@ const _getConversationRequests = ( activeAt: activeAt || 0, didApproveMe: didApproveMe || false, invitePending, + priority, }); return isIncomingRequest; });