fix: refresh Android widget after sync push and pull (#65) #66
No reviewers
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/simpl-liste#66
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-65-widget-sync-refresh"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #65
Problème
Le sync client (
syncClient.ts) écrit directement dans la DB via drizzle, contournant les fonctions du repository (tasks.ts) qui appellent normalementsyncWidgetData(). Résultat : les changements venant du web ne rafraîchissaient jamais le widget Android.Fix
syncWidgetData()à la fin depullChanges()après application de tous les changements distantssyncWidgetData()après unpushChanges()réussiUn seul appel par cycle de sync pour éviter le spam de mises à jour widget.
Test plan
Review — APPROVE
Resume
Correctif simple et cible qui ajoute deux appels a
syncWidgetData()danssyncClient.ts— un apres un push reussi, un apres un pull ayant applique au moins un changement. Resout directement l'incoherence ou le widget Android ne refletait pas les changements venant du web, car le sync client ecrit directement via drizzle en contournant le repository qui appelle habituellementsyncWidgetData().Points positifs
appliedChanges > 0danspullChanges()evite les refreshs inutiles..catch(() => {})fire-and-forget : coherent avec la nature non-critique du widget, ne bloque pas le flux de sync en cas d'erreur.syncWidgetData()est deja no-op sur iOS (Platform.OS !== 'android').syncWidgetData()lit seulement depuis la DB et ecrit dans AsyncStorage, jamais dans les tables synchronisees — donc ne declenche pas d'outbox entry.Suggestions non bloquantes
initialReset()appelle maintenant indirectementsyncWidgetData()viapullChanges()— comportement correct et gratuit, juste a noter.pushChanges()enPromise<boolean>pourrait permettre au caller de savoir si un refresh a eu lieu, mais hors scope.LGTM, pret a merger.