Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Synopsis
- data ConversationActionTag
- data ConversationJoin = ConversationJoin {}
- data ConversationMemberUpdate = ConversationMemberUpdate {}
- type family HasConversationActionEffects (tag :: ConversationActionTag) r :: Constraint where ...
- type family HasConversationActionGalleyErrors (tag :: ConversationActionTag) :: EffectRow where ...
- updateLocalConversation :: forall tag r. (Member BackendNotificationQueueAccess r, Member ConversationStore r, Member (Error FederationError) r, Member (ErrorS ('ActionDenied (ConversationActionPermission tag))) r, Member (ErrorS 'InvalidOperation) r, Member (ErrorS 'ConvNotFound) r, Member ExternalAccess r, Member NotificationSubsystem r, Member (Input UTCTime) r, HasConversationActionEffects tag r, SingI tag) => Local ConvId -> Qualified UserId -> Maybe ConnId -> ConversationAction tag -> Sem r LocalConversationUpdate
- updateLocalConversationUnchecked :: forall tag r. (SingI tag, Member BackendNotificationQueueAccess r, Member (Error FederationError) r, Member (ErrorS ('ActionDenied (ConversationActionPermission tag))) r, Member (ErrorS 'ConvNotFound) r, Member (ErrorS 'InvalidOperation) r, Member ExternalAccess r, Member NotificationSubsystem r, Member (Input UTCTime) r, HasConversationActionEffects tag r) => Local Conversation -> Qualified UserId -> Maybe ConnId -> ConversationAction tag -> Sem r LocalConversationUpdate
- data NoChanges = NoChanges
- data LocalConversationUpdate = LocalConversationUpdate {}
- notifyTypingIndicator :: (Member (Input UTCTime) r, Member (Input (Local ())) r, Member NotificationSubsystem r, Member FederatorAccess r) => Conversation -> Qualified UserId -> Maybe ConnId -> TypingStatus -> Sem r TypingDataUpdated
- pushTypingIndicatorEvents :: Member NotificationSubsystem r => Qualified UserId -> UTCTime -> [UserId] -> Maybe ConnId -> Qualified ConvId -> TypingStatus -> Sem r ()
- ensureConversationActionAllowed :: forall tag mem x r. (IsConvMember mem, HasConversationActionEffects tag r, (Member (ErrorS ('ActionDenied (ConversationActionPermission tag))) r, Member (ErrorS 'InvalidOperation) r)) => Sing tag -> Local x -> ConversationAction (tag :: ConversationActionTag) -> Conversation -> mem -> Sem r ()
- addMembersToLocalConversation :: (Member MemberStore r, Member (Error NoChanges) r) => Local ConvId -> UserList UserId -> RoleName -> Sem r (BotsAndMembers, ConversationJoin)
- notifyConversationAction :: forall tag r. (Member BackendNotificationQueueAccess r, Member ExternalAccess r, Member (Error FederationError) r, Member NotificationSubsystem r, Member (Input UTCTime) r) => Sing tag -> Qualified UserId -> Bool -> Maybe ConnId -> Local Conversation -> BotsAndMembers -> ConversationAction (tag :: ConversationActionTag) -> Sem r LocalConversationUpdate
- updateLocalStateOfRemoteConv :: (Member BrigAccess r, Member NotificationSubsystem r, Member ExternalAccess r, Member (Input (Local ())) r, Member MemberStore r, Member TinyLog r) => Remote ConversationUpdate -> Maybe ConnId -> Sem r (Maybe Event)
- addLocalUsersToRemoteConv :: (Member BrigAccess r, Member MemberStore r, Member TinyLog r) => Remote ConvId -> Qualified UserId -> [UserId] -> Sem r (Set UserId)
- data ConversationUpdate
- getFederationStatus :: (Member (Error UnreachableBackends) r, Member FederatorAccess r) => RemoteDomains -> Sem r FederationStatus
- checkFederationStatus :: (Member (Error UnreachableBackends) r, Member (Error NonFederatingBackends) r, Member FederatorAccess r) => RemoteDomains -> Sem r ()
- firstConflictOrFullyConnected :: [Remote NonConnectedBackends] -> FederationStatus
Conversation action types
data ConversationActionTag Source #
Instances
data ConversationJoin Source #
Instances
data ConversationMemberUpdate Source #
Instances
type family HasConversationActionEffects (tag :: ConversationActionTag) r :: Constraint where ... Source #
type family HasConversationActionGalleyErrors (tag :: ConversationActionTag) :: EffectRow where ... Source #
Performing actions
updateLocalConversation :: forall tag r. (Member BackendNotificationQueueAccess r, Member ConversationStore r, Member (Error FederationError) r, Member (ErrorS ('ActionDenied (ConversationActionPermission tag))) r, Member (ErrorS 'InvalidOperation) r, Member (ErrorS 'ConvNotFound) r, Member ExternalAccess r, Member NotificationSubsystem r, Member (Input UTCTime) r, HasConversationActionEffects tag r, SingI tag) => Local ConvId -> Qualified UserId -> Maybe ConnId -> ConversationAction tag -> Sem r LocalConversationUpdate Source #
updateLocalConversationUnchecked :: forall tag r. (SingI tag, Member BackendNotificationQueueAccess r, Member (Error FederationError) r, Member (ErrorS ('ActionDenied (ConversationActionPermission tag))) r, Member (ErrorS 'ConvNotFound) r, Member (ErrorS 'InvalidOperation) r, Member ExternalAccess r, Member NotificationSubsystem r, Member (Input UTCTime) r, HasConversationActionEffects tag r) => Local Conversation -> Qualified UserId -> Maybe ConnId -> ConversationAction tag -> Sem r LocalConversationUpdate Source #
Similar to updateLocalConversationWithLocalUser
, but takes a
Conversation
value directly, instead of a ConvId
, and skips protocol
checks. All the other checks are still performed.
This is intended to be used by protocol-aware code, once all the protocol-specific checks and updates have been performed, to finally apply the changes to the conversation as seen by the backend.
data LocalConversationUpdate Source #
Instances
Show LocalConversationUpdate Source # | |
Defined in Galley.API.Action showsPrec :: Int -> LocalConversationUpdate -> ShowS # show :: LocalConversationUpdate -> String # showList :: [LocalConversationUpdate] -> ShowS # |
notifyTypingIndicator :: (Member (Input UTCTime) r, Member (Input (Local ())) r, Member NotificationSubsystem r, Member FederatorAccess r) => Conversation -> Qualified UserId -> Maybe ConnId -> TypingStatus -> Sem r TypingDataUpdated Source #
pushTypingIndicatorEvents :: Member NotificationSubsystem r => Qualified UserId -> UTCTime -> [UserId] -> Maybe ConnId -> Qualified ConvId -> TypingStatus -> Sem r () Source #
Utilities
ensureConversationActionAllowed :: forall tag mem x r. (IsConvMember mem, HasConversationActionEffects tag r, (Member (ErrorS ('ActionDenied (ConversationActionPermission tag))) r, Member (ErrorS 'InvalidOperation) r)) => Sing tag -> Local x -> ConversationAction (tag :: ConversationActionTag) -> Conversation -> mem -> Sem r () Source #
addMembersToLocalConversation :: (Member MemberStore r, Member (Error NoChanges) r) => Local ConvId -> UserList UserId -> RoleName -> Sem r (BotsAndMembers, ConversationJoin) Source #
Add users to a conversation without performing any checks. Return extra notification targets and the action performed.
notifyConversationAction :: forall tag r. (Member BackendNotificationQueueAccess r, Member ExternalAccess r, Member (Error FederationError) r, Member NotificationSubsystem r, Member (Input UTCTime) r) => Sing tag -> Qualified UserId -> Bool -> Maybe ConnId -> Local Conversation -> BotsAndMembers -> ConversationAction (tag :: ConversationActionTag) -> Sem r LocalConversationUpdate Source #
updateLocalStateOfRemoteConv :: (Member BrigAccess r, Member NotificationSubsystem r, Member ExternalAccess r, Member (Input (Local ())) r, Member MemberStore r, Member TinyLog r) => Remote ConversationUpdate -> Maybe ConnId -> Sem r (Maybe Event) Source #
Update the local database with information on conversation members joining or leaving. Finally, push out notifications to local users.
addLocalUsersToRemoteConv :: (Member BrigAccess r, Member MemberStore r, Member TinyLog r) => Remote ConvId -> Qualified UserId -> [UserId] -> Sem r (Set UserId) Source #
data ConversationUpdate Source #
Instances
getFederationStatus :: (Member (Error UnreachableBackends) r, Member FederatorAccess r) => RemoteDomains -> Sem r FederationStatus Source #
checkFederationStatus :: (Member (Error UnreachableBackends) r, Member (Error NonFederatingBackends) r, Member FederatorAccess r) => RemoteDomains -> Sem r () Source #
firstConflictOrFullyConnected :: [Remote NonConnectedBackends] -> FederationStatus Source #
"conflict" here means two remote domains that we are connected to but are not connected to each other.