From 1da2b02dd8bcd944774f1eef1364f42b5e33ade4 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 4 May 2026 15:26:48 +0400 Subject: [PATCH] update --- .../common/views/chat/item/ChatItemView.kt | 2 ++ src/Simplex/Chat/Library/Subscriber.hs | 25 ++++++++----------- src/Simplex/Chat/Store/Delivery.hs | 8 +++--- src/Simplex/Chat/Store/Messages.hs | 1 + 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 15b0a12822..92c7928812 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -156,6 +156,8 @@ fun ChatItemView( fun showReactionsMenu() { when (cInfo) { is ChatInfo.Group -> { + val g = cInfo.groupInfo + if (g.useRelays && !g.isOwner) return withBGApi { try { val members = controller.apiGetReactionMembers(rhId, cInfo.groupInfo.groupId, cItem.id, r.reaction) diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 51b9949d0c..a765be6862 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -1924,10 +1924,12 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = groupMsgReaction :: GroupInfo -> Maybe GroupMember -> SharedMsgId -> Maybe MemberId -> Maybe MsgScope -> MsgReaction -> Bool -> RcvMessage -> UTCTime -> CM (Maybe DeliveryTaskContext) groupMsgReaction g m_ sharedMsgId itemMemberId scope_ reaction add RcvMessage {msgId} brokerTs | groupFeatureAllowed SGFReactions g = case m_ of - Nothing -> - updateChannelReaction `catchCINotFound` \_ -> - withStore' (\db -> setGroupReactionNoMember db g itemMemberId sharedMsgId reaction add msgId brokerTs) - $> Nothing + Nothing + | useRelays' g -> + updateChannelReaction `catchCINotFound` \_ -> + withStore' (\db -> setGroupReactionNoMember db g itemMemberId sharedMsgId reaction add msgId brokerTs) + $> Nothing + | otherwise -> pure Nothing Just m -> do rs <- withStore' $ \db -> getGroupReactions db g m itemMemberId sharedMsgId False if reactionAllowed add reaction rs @@ -3557,11 +3559,6 @@ runDeliveryTaskWorker a deliveryKey Worker {doWork} = do forM_ taskIds $ \taskId -> updateDeliveryTaskStatus db taskId DTSProcessed forM_ largeTaskIds $ \taskId -> setDeliveryTaskErrStatus db taskId "large" lift . void $ getDeliveryJobWorker True deliveryKey - where - singleSenderGMId_ :: NonEmpty MessageDeliveryTask -> Maybe GroupMemberId - singleSenderGMId_ (MessageDeliveryTask {senderGMId = senderGMId'} :| ts) - | all (\MessageDeliveryTask {senderGMId} -> senderGMId == senderGMId') ts = Just senderGMId' - | otherwise = Nothing DJReaction -> withWorkItems a doWork (withStore' $ \db -> getNextDeliveryTasks db gInfo task) $ \nextTasks -> do let (body, taskIds, largeTaskIds) = batchDeliveryTasks1 vr maxEncodedMsgLength nextTasks @@ -3575,11 +3572,6 @@ runDeliveryTaskWorker a deliveryKey Worker {doWork} = do forM_ taskIds $ \taskId -> updateDeliveryTaskStatus db taskId DTSProcessed forM_ largeTaskIds $ \taskId -> setDeliveryTaskErrStatus db taskId "large" lift . void $ getDeliveryJobWorker True deliveryKey - where - singleSenderGMId_ :: NonEmpty MessageDeliveryTask -> Maybe GroupMemberId - singleSenderGMId_ (MessageDeliveryTask {senderGMId = senderGMId'} :| ts) - | all (\MessageDeliveryTask {senderGMId} -> senderGMId == senderGMId') ts = Just senderGMId' - | otherwise = Nothing DJRelayRemoved | workerScope /= DWSGroup -> throwChatError $ CEInternalError "delivery task worker: relay removed task in wrong worker scope" @@ -3591,6 +3583,11 @@ runDeliveryTaskWorker a deliveryKey Worker {doWork} = do createMsgDeliveryJob db gInfo jobScope (Just senderGMId) body Nothing updateDeliveryTaskStatus db (deliveryTaskId task) DTSProcessed lift . void $ getDeliveryJobWorker True deliveryKey + where + singleSenderGMId_ :: NonEmpty MessageDeliveryTask -> Maybe GroupMemberId + singleSenderGMId_ (MessageDeliveryTask {senderGMId = senderGMId'} :| ts) + | all (\MessageDeliveryTask {senderGMId} -> senderGMId == senderGMId') ts = Just senderGMId' + | otherwise = Nothing startDeliveryJobWorkers :: CM () startDeliveryJobWorkers = do diff --git a/src/Simplex/Chat/Store/Delivery.hs b/src/Simplex/Chat/Store/Delivery.hs index 903b2718ce..2773613813 100644 --- a/src/Simplex/Chat/Store/Delivery.hs +++ b/src/Simplex/Chat/Store/Delivery.hs @@ -182,7 +182,7 @@ getNextDeliveryTasks db gInfo task = MessageDeliveryTask {jobScope, senderGMId} = task getTaskIds :: IO [Int64] getTaskIds - | useRelays' gInfo, not (isSenderFiltered jobScope) = + | useRelays' gInfo, not (needsSenderFiltering jobScope) = map fromOnly <$> DB.query db @@ -221,9 +221,9 @@ getNextDeliveryTasks db gInfo task = ORDER BY delivery_task_id ASC |] ((Only groupId) :. jobScopeRow_ jobScope :. (senderGMId, DTSNew)) - isSenderFiltered :: DeliveryJobScope -> Bool - isSenderFiltered (DJSGroup {jobSpec = DJReaction}) = True - isSenderFiltered _ = False + needsSenderFiltering :: DeliveryJobScope -> Bool + needsSenderFiltering (DJSGroup {jobSpec = DJReaction}) = True + needsSenderFiltering _ = False updateDeliveryTaskStatus :: DB.Connection -> Int64 -> DeliveryTaskStatus -> IO () updateDeliveryTaskStatus db taskId status = updateDeliveryTaskStatus_ db taskId status Nothing diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 947ffb7917..6775b1a941 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -3478,6 +3478,7 @@ getReactionMembers db vr user groupId itemSharedMId reaction = do SELECT group_member_id, reaction_ts FROM chat_item_reactions WHERE group_id = ? AND shared_msg_id = ? AND reaction = ? + AND group_member_id IS NOT NULL |] (groupId, itemSharedMId, reaction) rights <$> mapM (runExceptT . toMemberReaction) reactions