Absorb v1.2.1 - Sync & Progress Fixes
Multi-Device Sync
- Resume position now uses last-write-wins timestamp comparison between local and server
- Playing a book on device A, pausing, then pressing play on device B correctly picks up the newer position
- Server session created for downloaded books when online, enabling full sync during local playback
Absorbing Screen
- Unified Sync/Stop & Sync button replaces the two separate buttons
- No playback: Shows "Sync", pulls fresh progress from server
- During playback: Shows "Stop & Sync", stops playback, syncs, refreshes
- Offline: Shows "Stop", stops playback only
Progress Refresh
- Sync and refresh now updates progress bars, chapter indicators, and percentages across all screens immediately
- Home screen continue listening cards now reactively rebuild on progress changes
- Refreshing on any tab updates the absorbing cards too since IndexedStack keeps all tabs live
- Refresh flow: flush pending local, pull fresh server data, clear stale overrides, write server data to local, notify all listeners
Files Changed
lib/services/audio_player_service.dart- timestamp comparison in _playFromLocal and _playFromServerlib/providers/library_provider.dart- refresh() override clearing, SharedPreferences writebacklib/screens/absorbing_screen.dart- unified sync button, _pullRefreshlib/widgets/book_card.dart- context.read changed to context.watch