FOXA-3113 : le service de chaîne n'écrit plus Watch Next pendant la lecture #1011

Merged
foXaCe merged 1 commit from passe-20261018-160000-watchnext into main 2026-10-18 16:10:53 +02:00
Owner

Résumé

FOXA-3113 — le service de chaîne du lanceur n'écrit plus « Watch Next » pendant la lecture.

  • 58a11250e FOXA-3113 : le service de chaine n'ecrit plus Watch Next pendant la lecture

Pourquoi

L'upsert « Watch Next » passe par une IPC vers le fournisseur Leanback, sur le fil de la boîte.
Deux chemins l'appellent :

chemin état
HomeViewModel gardé depuis FOXA-652 — combine(items, isPlaybackActive) { if (!isPlaying) … }
AndroidTvChannelSyncService.reconcileFromCache non gardé — et il est appelé aussi par le rafraîchissement périodique de la chaîne du lanceur, qui peut tomber en pleine lecture

C'était le seul écrivain non gardé. ⚠ Le ticket visait updateSingleWatchNextProgram, qui n'existe
plus
: la fonction a disparu, mais le principe — ne pas écrire pendant la lecture — restait à
appliquer au chemin qui écrit.

On ne perd rien : la position finale est poussée à l'arrêt par HomeViewModel, qui observe le même
drapeau. La chaîne du lanceur (manager.reconcile) reste réconciliée plus haut — ce n'est pas le même
fournisseur, et elle ne dépend pas de cette écriture.

Ce qui a été mesuré

2 tests :

ce qui est mesuré comment
la garde précède l'écriture if (TvRecommendationManager.isPlaybackActive.value) return@runCatching avant tvRecommendationManager.updateWatchNextFromCwItems(
les deux écrivains lisent le même drapeau HomeViewModel et le service contiennent tous deux TvRecommendationManager.isPlaybackActive — un drapeau recopié à côté divergerait au premier changement
./gradlew :app:testFullDebugUnitTest -Pnuvio.android.distribution=full \
    --tests '*LeWatchNextNeSEcritPasPendantLaLectureTest*' --tests '*CwSommeilPendantLectureTest*'
BUILD SUCCESSFUL — 0 échec

⚠ Le banc lit la source. Aucun banc du dépôt n'instancie ce service (DataStore, cache CW, manager
de chaîne, notifications). Ce qu'il interdit est le retour du trou.

⚠ Le défaut n'est pas constaté sur la boîte : le ticket le dit lui-même (« à mesurer : le défaut
n'est pas constaté sur la Freebox Pop »). Ce qui est livré est la règle — aucun upsert pendant la
lecture — pas une preuve de saccade évitée.

Porte jouée par la forge : « Porte / porte* » est le seul contexte qu'exige la protection de main.

Scope boundaries

manager.reconcile (la chaîne du lanceur) n'est pas touché. HomeViewModel n'est pas modifié : sa
garde existait déjà. Aucun autre écrivain Watch Next n'existe dans le dépôt.

## Résumé FOXA-3113 — le service de chaîne du lanceur n'écrit plus « Watch Next » pendant la lecture. - 58a11250e FOXA-3113 : le service de chaine n'ecrit plus Watch Next pendant la lecture ## Pourquoi L'upsert « Watch Next » passe par une **IPC** vers le fournisseur Leanback, sur le fil de la boîte. Deux chemins l'appellent : | chemin | état | |---|---| | `HomeViewModel` | **gardé depuis `FOXA-652`** — `combine(items, isPlaybackActive) { if (!isPlaying) … }` | | `AndroidTvChannelSyncService.reconcileFromCache` | **non gardé** — et il est appelé aussi par le rafraîchissement **périodique** de la chaîne du lanceur, qui peut tomber en pleine lecture | C'était le seul écrivain non gardé. ⚠ Le ticket visait `updateSingleWatchNextProgram`, qui **n'existe plus** : la fonction a disparu, mais le principe — ne pas écrire pendant la lecture — restait à appliquer au chemin qui écrit. On ne perd rien : la position finale est poussée à l'arrêt par `HomeViewModel`, qui observe le même drapeau. La chaîne du lanceur (`manager.reconcile`) reste réconciliée plus haut — ce n'est pas le même fournisseur, et elle ne dépend pas de cette écriture. ## Ce qui a été mesuré 2 tests : | ce qui est mesuré | comment | |---|---| | la garde précède l'écriture | `if (TvRecommendationManager.isPlaybackActive.value) return@runCatching` avant `tvRecommendationManager.updateWatchNextFromCwItems(` | | les deux écrivains lisent le **même** drapeau | `HomeViewModel` et le service contiennent tous deux `TvRecommendationManager.isPlaybackActive` — un drapeau recopié à côté divergerait au premier changement | ``` ./gradlew :app:testFullDebugUnitTest -Pnuvio.android.distribution=full \ --tests '*LeWatchNextNeSEcritPasPendantLaLectureTest*' --tests '*CwSommeilPendantLectureTest*' BUILD SUCCESSFUL — 0 échec ``` ⚠ **Le banc lit la source.** Aucun banc du dépôt n'instancie ce service (DataStore, cache CW, manager de chaîne, notifications). Ce qu'il interdit est le retour du trou. ⚠ **Le défaut n'est pas constaté sur la boîte** : le ticket le dit lui-même (« à mesurer : le défaut n'est pas constaté sur la Freebox Pop »). Ce qui est livré est la règle — aucun upsert pendant la lecture — pas une preuve de saccade évitée. Porte jouée par la forge : « Porte / porte* » est le seul contexte qu'exige la protection de `main`. ## Scope boundaries `manager.reconcile` (la chaîne du lanceur) n'est pas touché. `HomeViewModel` n'est pas modifié : sa garde existait déjà. Aucun autre écrivain Watch Next n'existe dans le dépôt.
FOXA-3113 : le service de chaine n'ecrit plus Watch Next pendant la lecture
All checks were successful
PR Template Check / validate_pr_body (pull_request) Successful in 0s
Porte / porte (pull_request) Successful in 12m47s
58a11250eb
L'upsert Watch Next passe par une IPC vers le fournisseur Leanback, sur le fil de la boite. Deux
chemins l'appellent :

- `HomeViewModel` — garde depuis `FOXA-652` : `combine(items, isPlaybackActive) { if (!isPlaying) … }` ;
- `AndroidTvChannelSyncService.reconcileFromCache` — appele aussi par le rafraichissement
  PERIODIQUE de la chaine du lanceur, qui pouvait tomber en pleine lecture. C'etait le seul
  ecrivain non garde.

On ne perd rien : la position finale est poussee a l'arret par `HomeViewModel`, qui observe le meme
drapeau. La chaine du lanceur (`manager.reconcile`) reste reconciliee plus haut — ce n'est pas le
meme fournisseur.

2 tests : la garde precede l'ecriture, et les deux ecrivains lisent le MEME drapeau — un drapeau
recopie a cote divergerait au premier changement.
foXaCe scheduled this pull request to auto merge when all checks succeed 2026-10-18 15:58:03 +02:00
foXaCe merged commit 4cf6b2edf9 into main 2026-10-18 16:10:53 +02:00
foXaCe deleted branch passe-20261018-160000-watchnext 2026-10-18 16:10:54 +02:00
Sign in to join this conversation.
No reviewers
No labels
montee-majeure
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/NuvioTV!1011
No description provided.