mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-02 13:35:14 +00:00
An invitation being accepted is a fact about the invitation, not about the view that shows it, but each view kept its own flag. The chat list row, the long-press menu, the accept alert, the composer banner, the chat item "tap to join" and the notification action therefore disagreed: accepting from one left the others fully enabled, and the second accept reached the core with an invitation the first one had already used. ChatModel now records which contact requests are being accepted and which groups are being joined. The shared acceptContactRequest and the new joinGroup maintain it, so every caller participates without changing its call site, and every view derives from it instead of owning a flag. The record is taken before the request is sent, so a second tap in the same view is blocked as well. The connect composer no longer renders in a group's support scope: on desktop that is a second view of the same group next to the main one, and it offered its own Join button.