diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 92e566e130..54a75f3ec5 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -3355,9 +3355,9 @@ subscribeUserConnections vr onlyNeeded user = do (conns, ctConns, ucs, gs, mConns, sfts, rfts, pcConns) <- if onlyNeeded then do - (conns, entities) <- withStore' $ \a -> getConnectionsToSubscribe a vr user - let (ctConns, ucs, mConns, sfts, rfts, pcConns) = foldl' addEntity ([], [], [], M.empty, M.empty, []) entities - pure (conns, ctConns, ucs, [], mConns, sfts, rfts, pcConns) + (conns, entities) <- withStore' $ \db -> getConnectionsToSubscribe db vr user + let (cts, ucs, ms, sfts, rfts, pcs) = foldl' addEntity ([], [], [], M.empty, M.empty, []) entities + pure (conns, cts, ucs, [], ms, sfts, rfts, pcs) else do withStore' (`unsetConnectionToSubscribe` user) ctConns <- getContactConns diff --git a/src/Simplex/Chat/Store/Connections.hs b/src/Simplex/Chat/Store/Connections.hs index a35e65de78..a92dfc350b 100644 --- a/src/Simplex/Chat/Store/Connections.hs +++ b/src/Simplex/Chat/Store/Connections.hs @@ -214,9 +214,11 @@ getContactConnEntityByConnReqHash db vr user@User {userId} (cReqHash1, cReqHash2 getConnectionsToSubscribe :: DB.Connection -> VersionRangeChat -> User -> IO ([ConnId], [ConnectionEntity]) getConnectionsToSubscribe db vr user@User {userId} = do - connIds <- map fromOnly <$> DB.query db "SELECT agent_conn_id FROM connections WHERE user_id = ? AND to_subscribe = 1" (Only userId) + aConnIds <- map fromOnly <$> DB.query db "SELECT agent_conn_id FROM connections WHERE to_subscribe = 1 AND user_id = ?" (Only userId) + entities <- forM aConnIds $ \acId -> + eitherToMaybe <$> runExceptT (getConnectionEntity db vr user acId) unsetConnectionToSubscribe db user - entities <- forM connIds $ fmap eitherToMaybe . runExceptT . getConnectionEntity db vr user . AgentConnId + let connIds = map (\(AgentConnId connId) -> connId) aConnIds pure (connIds, catMaybes entities) unsetConnectionToSubscribe :: DB.Connection -> User -> IO ()