From 87dfce75f795f89bdd9682a47ffe8eafb809cbff Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 28 Feb 2025 12:13:13 +0400 Subject: [PATCH] fix compilation, todos --- src/Simplex/Chat/Library/Commands.hs | 1 + src/Simplex/Chat/Library/Subscriber.hs | 31 ++++++++++++++------------ src/Simplex/Chat/Types.hs | 4 ++-- tests/Bots/DirectoryTests.hs | 3 ++- tests/ChatTests/Groups.hs | 4 ++-- 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index 5f75417898..3b431182ff 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -2023,6 +2023,7 @@ processChatCommand' vr = \case updateCIGroupInvitationStatus user g CIGISAccepted `catchChatError` (toView . CRChatError (Just user)) pure $ CRUserAcceptedGroupSent user g {membership = membership {memberStatus = GSMemAccepted}} Nothing Nothing -> throwChatError $ CEContactNotActive ct + -- TODO [knocking] APIAcceptMember APIAcceptMember groupId gmId memRole -> withUser $ \user -> do -- Group gInfo@GroupInfo {membership} members <- withFastStore $ \db -> getGroup db vr user groupId -- pure $ CRJoinedGroupMember user gInfo m {memberStatus = GSMemConnected} -- GSMemApproved? diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index 279ad24164..6f67bbfd5c 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -594,7 +594,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = ucl <- withStore $ \db -> getUserContactLinkById db userId userContactLinkId let (UserContactLink {autoAccept}, gli_) = ucl when (connChatVersion < batchSend2Version) $ sendAutoReply ct' autoAccept - forM_ gli_ $ \GroupLinkInfo {groupId, memberRole = gLinkMemRole, acceptance = _acceptance} -> do -- TODO + -- TODO [knocking] legacy branch - do nothing? + forM_ gli_ $ \GroupLinkInfo {groupId, memberRole = gLinkMemRole, acceptance = _acceptance} -> do groupInfo <- withStore $ \db -> getGroupInfo db vr user groupId subMode <- chatReadVar subscriptionMode groupConnIds <- createAgentConnectionAsync user CFCreateConnGrpInv True SCMInvitation subMode @@ -1330,7 +1331,6 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = messageError "processUserContactRequest: chat version range incompatible for accepting group join request" | otherwise -> do let profileMode = ExistingIncognito <$> incognitoMembershipProfile gInfo - -- useRole = userMemberRole gLinkMemRole $ acceptAsObserver cfg mem <- acceptGroupJoinRequestAsync user gInfo cReq useRole profileMode createInternalChatItem user (CDGroupRcv gInfo mem) (CIRcvGroupEvent RGEInvitedViaGroupLink) Nothing toView $ CRAcceptingGroupJoinRequestMember user gInfo mem @@ -1338,21 +1338,24 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = | v < groupJoinRejectVersion -> messageWarning $ "processUserContactRequest (group " <> groupName' gInfo <> "): joining of " <> displayName <> " is blocked" | otherwise -> do + -- TODO [knocking] reject via agent api without creating reply queue; revert rejection changes: + -- TODO protocol (XGrpLinkReject), status (GSMemRejected), processing on CON, INFO mem <- acceptGroupJoinSendRejectAsync user gInfo cReq rjctReason toViewTE $ TERejectingGroupJoinRequestMember user gInfo mem rjctReason _ -> toView $ CRReceivedContactRequest user cReq - where - -- rejectionReason ChatConfig {profileNameLimit, allowedProfileName} - -- | T.length displayName > profileNameLimit = Just GRRLongName - -- | maybe False (\f -> not $ f displayName) allowedProfileName = Just GRRBlockedName - -- | otherwise = Nothing - -- userMemberRole linkRole = \case - -- Just AOAll -> GRObserver - -- Just AONameOnly | noImage -> GRObserver - -- Just AOIncognito | noImage && isRandomName displayName -> GRObserver - -- _ -> linkRole - -- where - -- noImage = maybe True (\(ImageData i) -> i == "") image + -- TODO [knocking] move logic to bot + -- where + -- rejectionReason ChatConfig {profileNameLimit, allowedProfileName} + -- | T.length displayName > profileNameLimit = Just GRRLongName + -- | maybe False (\f -> not $ f displayName) allowedProfileName = Just GRRBlockedName + -- | otherwise = Nothing + -- userMemberRole linkRole = \case + -- Just AOAll -> GRObserver + -- Just AONameOnly | noImage -> GRObserver + -- Just AOIncognito | noImage && isRandomName displayName -> GRObserver + -- _ -> linkRole + -- where + -- noImage = maybe True (\(ImageData i) -> i == "") image memberCanSend :: GroupMember -> CM () -> CM () memberCanSend GroupMember {memberRole} a diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index 84d619d514..13ab915bde 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -1031,7 +1031,7 @@ memberActive m = case memberStatus m of GSMemIntroInvited -> False GSMemAccepted -> False GSMemAnnounced -> False - GSMemPendingApproval -> True -- TODO [knocking] ? + GSMemPendingApproval -> True -- TODO [knocking] False? GSMemConnected -> True GSMemComplete -> True GSMemCreator -> True @@ -1052,7 +1052,7 @@ memberCurrent' = \case GSMemIntroInvited -> True GSMemAccepted -> True GSMemAnnounced -> True - GSMemPendingApproval -> True + GSMemPendingApproval -> True -- TODO [knocking] False GSMemConnected -> True GSMemComplete -> True GSMemCreator -> True diff --git a/tests/Bots/DirectoryTests.hs b/tests/Bots/DirectoryTests.hs index 5bdc379cbf..f890f96086 100644 --- a/tests/Bots/DirectoryTests.hs +++ b/tests/Bots/DirectoryTests.hs @@ -86,12 +86,13 @@ mkDirectoryOpts TestParams {tmpPath = ps} superUsers ownersGroup = adminUsers = [], superUsers, ownersGroup, - directoryLog = Just $ ps "directory_service.log", blockedWordsFile = Nothing, blockedExtensionRules = Nothing, nameSpellingFile = Nothing, profileNameLimit = maxBound, acceptAsObserver = Nothing, + captchaGenerator = Nothing, + directoryLog = Just $ ps "directory_service.log", serviceName = "SimpleX-Directory", runCLI = False, searchResults = 3, diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 1ca2184095..05f4a54f39 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -20,7 +20,7 @@ import qualified Data.ByteString.Char8 as B import Data.List (intercalate, isInfixOf) import qualified Data.Map.Strict as M import qualified Data.Text as T -import Simplex.Chat.Controller (ChatConfig (..)) +import Simplex.Chat.Controller (ChatConfig (..), ChatHooks (..), defaultChatHooks) import Simplex.Chat.Library.Internal (uniqueMsgMentions, updatedMentionNames) import Simplex.Chat.Markdown (parseMaybeMarkdownList) import Simplex.Chat.Messages (CIMention (..), CIMentionMember (..), ChatItemId) @@ -2901,7 +2901,7 @@ testGroupLinkRejectBlockedName = bob <## "group link: known group #team" bob <## "use #team to send messages" where - cfg = testCfg {allowedProfileName = Just (const False)} + cfg = testCfg {chatHooks = defaultChatHooks {acceptMember = Just (\_ _ _ -> pure $ Left GRRBlockedName)}} testPlanGroupLinkKnown :: HasCallStack => TestParams -> IO () testPlanGroupLinkKnown =