150 lines
6.1 KiB
Markdown
150 lines
6.1 KiB
Markdown
# Contexto do Projeto - TatuChat (tatuchat)
|
|
|
|
## Visão Geral
|
|
|
|
**TatuChat** é um cliente de mensagens instantâneas open-source e sem fins lucrativos baseado no protocolo [Matrix](https://matrix.org). É um aplicativo multiplataforma que oferece mensagens cifradas ponta-a-ponta, chamadas de vídeo, mensagens de voz, compartilhamento de localização, e muito mais.
|
|
|
|
| Propriedade | Valor |
|
|
|-------------|-------|
|
|
| **Nome** | TatuChat |
|
|
| **Linguagem** | Dart |
|
|
| **Framework** | Flutter 3.47.3 (SDK Dart >=3.11.1 <4.0.0) |
|
|
| **Versão** | 2.9.5+3566 |
|
|
| **Licença** | AGPL-3.0-or-later |
|
|
| **Autor principal** | Christian Kussowski (krille-chan) |
|
|
| **Protocolo** | Matrix (cliente federado e descentralizado) |
|
|
| **Criptografia** | Olm/Megolm via Vodozemac (WASM) |
|
|
| **Chamadas** | Matrix RTC via LiveKit |
|
|
| **Plataformas** | Android, iOS, Linux, Windows, macOS, Web (PWA) |
|
|
|
|
## Estrutura do Projeto
|
|
|
|
```
|
|
tatuchat/
|
|
├── lib/ # Código-fonte principal (Dart)
|
|
│ ├── main.dart # Ponto de entrada da aplicação
|
|
│ ├── config/ # Configurações da app
|
|
│ ├── pages/ # 30 páginas/telas da app
|
|
│ ├── widgets/ # 28 widgets reutilizáveis
|
|
│ ├── utils/ # 43 arquivos de utilitários
|
|
│ └── l10n/ # 59 arquivos de localização (.arb)
|
|
├── android/ # Plataforma Android (Gradle Kotlin DSL)
|
|
├── ios/ # Plataforma iOS
|
|
├── macos/ # Plataforma macOS
|
|
├── linux/ # Plataforma Linux
|
|
├── windows/ # Plataforma Windows
|
|
├── web/ # Plataforma Web (PWA)
|
|
├── assets/ # Recursos estáticos
|
|
├── scripts/ # 12 scripts de build/deploy
|
|
├── test/ # Testes unitários/widget
|
|
├── integration_test/ # Testes de integração
|
|
├── fastlane/ # Metadata para app stores
|
|
├── snap/ # Pacote Snapcraft (Linux)
|
|
├── .github/ # CI/CD (GitHub Actions)
|
|
└── LICENSES/ # Licenças de dependências (REUSE)
|
|
```
|
|
|
|
## Arquitetura
|
|
|
|
- **Navegação:** GoRouter com rotas declarativas e ShellRoutes para layouts de duas colunas (desktop)
|
|
- **Estado:** Provider (via widget `Matrix` que é um InheritedWidget)
|
|
- **Layout Responsivo:** Modo coluna única (mobile) vs. duas colunas (desktop), detectado por `FluffyThemes.isColumnMode()`
|
|
- **Internacionalização:** 59 idiomas via ARB (Flutter L10N), com Weblate para tradução colaborativa
|
|
- **Segurança:** App lock com PIN/biometria, E2EE com Vodozemac, certificados CA embutidos (ISRG X1/X2)
|
|
|
|
## Dependências Principais
|
|
|
|
### Core / Matrix
|
|
| Dependência | Função |
|
|
|-------------|--------|
|
|
| `matrix` (git: famedly/matrix-dart-sdk) | SDK do protocolo Matrix (fork customizado) |
|
|
| `flutter_vodozemac` | Criptografia Olm/Megolm via WASM |
|
|
| `livekit_client` | Videochamadas Matrix RTC |
|
|
| `flutter_secure_storage` | Armazenamento seguro |
|
|
|
|
### UI / Navegação
|
|
| Dependência | Função |
|
|
|-------------|--------|
|
|
| `material_ui` | Material Design 3 / Material You |
|
|
| `go_router` | Sistema de rotas declarativo |
|
|
| `dynamic_color` | Cores dinâmicas do Android |
|
|
| `emoji_picker_flutter` | Seletor de emojis |
|
|
| `flutter_map` + `latlong2` | Mapas e localização |
|
|
| `lottie` | Animações |
|
|
| `chewie` + `video_player` | Reprodução de vídeo |
|
|
| `just_audio` | Reprodução de áudio |
|
|
|
|
### Plataforma / Device
|
|
| Dependência | Função |
|
|
|-------------|--------|
|
|
| `flutter_local_notifications` | Notificações locais |
|
|
| `flutter_callkit_incoming` | UI de chamadas entrantes |
|
|
| `flutter_foreground_task` | Serviço foreground para push |
|
|
| `unifiedpush` | Notificações push via UnifiedPush |
|
|
| `local_auth` | Autenticação biométrica |
|
|
| `geolocator` | Geolocalização |
|
|
|
|
### Mídia / Arquivos
|
|
| Dependência | Função |
|
|
|-------------|--------|
|
|
| `image_picker` + `crop_image` | Seleção e corte de imagens |
|
|
| `record` | Gravação de áudio |
|
|
| `light_compressor_v2` | Compressão de vídeo |
|
|
| `blurhash_dart` | BlurHash para placeholders |
|
|
|
|
## Build & Deploy
|
|
|
|
| Método | Plataforma |
|
|
|--------|------------|
|
|
| **Docker** | Web (build multi-stage com Nginx) |
|
|
| **Snapcraft** | Linux (core24, grade stable) |
|
|
| **Fastlane** | App Stores (Android, iOS) |
|
|
| **GitHub Actions** | CI/CD (5 workflows: integrate, release, deploy, notify, stale) |
|
|
|
|
## Comandos Úteis
|
|
|
|
```bash
|
|
# Instalar dependências
|
|
flutter pub get
|
|
|
|
# Executar em modo desenvolvimento
|
|
flutter run
|
|
|
|
# Build de release
|
|
flutter build apk # Android
|
|
flutter build ios # iOS
|
|
flutter build linux # Linux
|
|
flutter build windows # Windows
|
|
flutter build web # Web
|
|
|
|
# Testes
|
|
flutter test # Testes unitários/widget
|
|
flutter test integration_test/ # Testes de integração
|
|
|
|
# Análise de código
|
|
flutter analyze
|
|
dart format --set-exit-if-changed .
|
|
```
|
|
|
|
## Funcionalidades Principais
|
|
|
|
- Mensagens cifradas ponta-a-ponta (E2EE) via Olm/Megolm
|
|
- Chamadas de vídeo com Matrix RTC (via LiveKit)
|
|
- Mensagens de voz
|
|
- Compartilhamento de localização
|
|
- Grupos públicos e privados, spaces, emotes customizados
|
|
- Notificações push
|
|
- Material You (Material 3) design
|
|
- Backup de mensagens cifrado
|
|
- Verificação por emoji e cross-signing
|
|
- App lock com PIN/biometria
|
|
|
|
## Notas para Desenvolvedores
|
|
|
|
1. **SDK Matrix customizado:** O projeto usa um fork do `matrix-dart-sdk` no branch `krille/refactor-device-keys-list-storing`
|
|
2. **Certificados CA:** O projeto inclui certificados ISRG X1 e X2 embutidos para suporte a Let's Encrypt
|
|
3. **Vodozemac:** Biblioteca de criptografia compilada para WASM, localizada em `assets/vodozemac/`
|
|
4. **Configuração Web/MDM:** Exemplo em `config.sample.json` para configuração via MDM ou web
|
|
5. **Testes de integração:** Requer Docker com Synapse (servidor Matrix) para testes completos
|
|
6. **Homeservers recomendados:** Lista em `recommended_homeservers.json` (matrix.org, mozilla.org, tchncs.de)
|