WhatsApp Android Delta Uploader — plan techniczny
Cel
Celem jest aplikacja na Androida, która monitoruje foldery WhatsApp, wykrywa zmiany, buduje paczki delta, wysyła je do Wasabi przez interfejs zgodny z S3, a następnie zapisuje rekord zadania do kolejki w Supabase przez REST API.[cite:46][cite:45][cite:60][cite:72]
Architektura
Aplikacja składa się z czterech głównych modułów:
- Watcher — monitoruje katalogi przez
FileObserveri zapisuje zdarzenia zmian do lokalnej kolejki.[cite:46] - Snapshot engine — okresowo wykonuje pełny rescan metadanych plików, aby potwierdzić stan i skorygować ewentualnie pominięte eventy obserwatora.[cite:46][cite:45]
- Packager — buduje paczkę delta, np. ZIP oraz
manifest.json, zawierający listę zmienionych i usuniętych plików. - Uploader — wysyła paczkę do bucketu Wasabi i po sukcesie dodaje wpis do kolejki w Supabase przez endpoint REST.[cite:60][cite:72]
Harmonogram pracy
Do uruchamiania zadań w tle należy użyć WorkManager, ponieważ jest to zalecany mechanizm do trwałej pracy w tle na Androidzie.[cite:45] PeriodicWorkRequest wspiera zadania cykliczne, a minimalny interwał dla pracy okresowej wynosi 15 minut, więc interwał godzinny mieści się w tym modelu.[cite:45]
Rekomendowany model działania:
FileObserverdziała stale i zapisuje zdarzenia do lokalnej bazy.[cite:46]WorkManagerco 60 minut uruchamia batch: rescan, delta, ZIP, upload, enqueue job.[cite:45]- Po większej liczbie zmian można dodatkowo użyć
OneTimeWorkRequest, aby przyspieszyć wysyłkę bez czekania do pełnej godziny.[cite:45]
Format paczki
Każda paczka delta powinna zawierać:
manifest.json- katalog
files/ze zmienionymi plikami - listę usuniętych plików
- metadane wersji schematu
Przykładowy manifest:
{
"schema_version": 1,
"device_id": "android-01",
"snapshot_id": "2026-06-25T09:00:00Z",
"previous_snapshot_id": "2026-06-25T08:00:00Z",
"created_at": "2026-06-25T09:00:08Z",
"files": [
{
"path": "WhatsApp Images/IMG-20260625-WA0001.jpg",
"size": 248392,
"mtime": "2026-06-25T08:57:14Z",
"sha256": "..."
}
],
"deleted": [
"Voice Notes/old-note.opus"
]
}Upload do Wasabi
Wasabi udostępnia interfejs zgodny z S3, więc warstwa uploadu powinna działać jak standardowy klient S3. Paczki powinny trafiać do uporządkowanej ścieżki, np.:
delta/YYYY/MM/DD/<snapshot_id>.zip
Po poprawnym uploadzie aplikacja powinna oznaczyć lokalny batch jako uploaded i dopiero wtedy zgłosić zadanie do kolejki.
Kolejka na Supabase
Supabase wystawia Data REST API pod ścieżką /rest/v1/, a insert nowego wiersza do tabeli realizuje się przez POST na endpoint tabeli.[cite:60][cite:72] Dla kolejki rekomendowana jest tabela ingest_queue oraz endpoint:
POST https://<project_ref>.supabase.co/rest/v1/ingest_queue[cite:60][cite:72]
Wymagane nagłówki:
apikey: <SUPABASE_KEY>Authorization: Bearer <SUPABASE_KEY>Content-Type: application/jsonPrefer: return=representation[cite:62][cite:70]
Przykładowe body:
{
"device_id": "android-01",
"snapshot_id": "2026-06-25T09:00:00Z",
"bucket": "whatsapp-archive",
"object_key": "delta/2026/06/25/2026-06-25T09-00-00Z.zip",
"status": "uploaded",
"payload_hash": "sha256:...",
"source": "android-whatsapp-uploader"
}Przepływ end-to-end
- Android monitoruje foldery WhatsApp przez
FileObserver.[cite:46] WorkManageruruchamia zadanie godzinowe.[cite:45]- Worker wykonuje rescan i wylicza deltę względem poprzedniego snapshotu.
- Paczka ZIP trafia do Wasabi.
- Po udanym uploadzie aplikacja wykonuje
POSTdo Supabaseingest_queue.[cite:60][cite:72] - Backend lub automatyzacja nasłuchuje kolejki i pobiera obiekt z Wasabi do dalszego przetwarzania.
Klasy aplikacji
Proponowany podział klas w Kotlinie:
WhatsAppPathProviderChangeEventRepositoryFolderObserverServiceSnapshotScannerDeltaBuilderZipPackagerWasabiUploaderSupabaseQueueClientHourlyIngestWorkerUploadRetryWorker
Dane lokalne
Lokalnie warto trzymać lekką bazę Room z tabelami:
file_snapshotchange_eventupload_batchupload_batch_item
To pozwoli bezpiecznie obsłużyć retry, tryb offline i idempotencję uploadów.
Ryzyka
FileObserver nadaje się do monitoringu katalogów, ale nie powinien być jedynym źródłem prawdy; dlatego potrzebny jest okresowy rescan.[cite:46] WorkManager nie gwarantuje uruchomienia dokładnie o wybranej minucie, bo Android stosuje ograniczenia pracy w tle i optymalizacje baterii.[cite:45]
Drugim ryzykiem są ograniczenia dostępu do folderów WhatsApp na nowych wersjach Androida. W praktyce trzeba potwierdzić na docelowym urządzeniu, które ścieżki są rzeczywiście dostępne dla aplikacji.
MVP
Pierwsza wersja powinna obejmować:
- ręcznie skonfigurowane ścieżki katalogów,
- monitoring zmian,
- godzinowy batch przez
WorkManager, - ZIP delta,
- upload do Wasabi,
- insert do
ingest_queuew Supabase,[cite:60][cite:72] - prosty ekran statusu: ostatni scan, ostatni upload, liczba plików, ostatni błąd.
Kolejny krok
Po MVP warto dodać szyfrowanie paczek, hashowanie plików dla deduplikacji, podpisywanie webhooków oraz dashboard stanu urządzeń.