9985b79aa6
A message sent into a dead socket ended up as failed — attachments even stayed on "sending" forever — and only the user could send it again by hand. Mobile NAT drops idle TCP silently, so neither side knew. - pingInterval on the WebSocket, so the client notices a dead link itself - outbox: after every reconnect, stuck messages are re-sent (batch of 30, up to a day old); permanent errors are not retried - sendAttachment gained the try/catch it was missing, otherwise the attachment never reached the outbox - de-duplicate by message id: a retry re-sends the SAME message, which would otherwise show up twice on the other side
Šepot — Flutter client
The Šepot mobile client. See the repository README for the project overview, threat model, and license.
Quick start
flutter pub get
flutter run # against the default relay
flutter build apk --release # signed release APK (see key.properties)
Layout
| Path | Contents |
|---|---|
lib/core/ |
Crypto facade, storage (SQLCipher), relay client + transport, push, services |
lib/features/ |
Screens (onboarding, chat, contacts, groups, settings, safety…) |
lib/models/ lib/providers/ |
Data models and Riverpod providers |
lib/l10n/ |
Localization (app_*.arb, generated AppLocalizations) |
test/ integration_test/ |
Unit, storage, crypto, and on-device integration tests |
Localization
Strings are defined in lib/l10n/app_cs.arb (template) and translated into
app_en/de/ru/it.arb. After editing, run flutter gen-l10n. See the root
README for how to contribute a new language.