fix: reliable first-message send, QR routing, auto-lock recovery

Fixes reported by testers and found in an app review:

- First message right after install no longer fails. Before the app
  finished registering with the relay, the outgoing message could crash on
  a null delivery address. The profile field is now optional and the send
  path throws a clear "still connecting, try again shortly" error while
  registration completes in the background.
- The QR code and share link now appear only once the delivery address is
  ready. Previously a link generated before the first connection lacked
  routing, so the other side could not send the first message. The screen
  now shows a connecting state and reactively swaps in the QR when ready.
- Incomplete contact links are rejected on import instead of failing at
  first send, with a clear prompt to ask for a fresh link.
- Auto-lock no longer silences the app: after locking and unlocking,
  messaging is restarted (it previously stayed dead until app restart).
- Group messages are marked failed on a non-per-member send error instead
  of hanging in the "sending" state forever.
- Hardened the relay client against a rare duplicate connection when
  toggling Tor or locking mid-connect, and fromShareString now rejects a
  delivery address of the wrong length.
- Pin unifiedpush below 6.2.0 to drop the webcrypto dependency (its native
  framework lacks LC_ENCRYPTION_INFO and blocked the iOS upload).
- Skip Android release lint (network dependency check hangs on the build
  host and adds no value for a Flutter app).
This commit is contained in:
Julius Joska
2026-07-18 19:53:41 +02:00
parent 7d7f589fc5
commit 90a1390716
29 changed files with 403 additions and 162 deletions
+4
View File
@@ -75,6 +75,8 @@
"chatEdited": "modificato",
"errorTrustRootChanged": "Il trust root del relay è cambiato! Comunicazione rifiutata.",
"errorRelayUnavailable": "Relay non disponibile (sender certificate)",
"errorNotYetRegistered": "Šepot si sta ancora connettendo al relay — riprova a inviare tra un istante.",
"errorContactLinkIncomplete": "Questo link è incompleto — l'altra persona l'ha creato prima di connettersi. Chiedile un nuovo link sepot://.",
"errorAttachmentTooLarge": "L'allegato è troppo grande (max {maxMb} MB)",
"errorGroupNeedsMember": "Il gruppo ha bisogno di almeno 1 membro",
"errorGroupMaxMembers": "Il gruppo può avere al massimo {maxMembers} membri",
@@ -294,6 +296,8 @@
"chatListArchive": "Archivia",
"qrShareTitle": "Il mio Šepot ID",
"qrIdentityNotFound": "Identità non trovata",
"qrShareConnectingTitle": "Connessione al relay…",
"qrShareConnectingBody": "Il tuo codice QR e il link appariranno appena Šepot si connette per la prima volta. Un istante — bastano pochi secondi.",
"commonCopiedToClipboard": "Copiato negli appunti",
"qrShareInviteMessage": "Aggiungimi su Šepot!\n\n{shareString}",
"commonShare": "Condividi",