Lounge parties: own tab, one file per party, watch/listen/lounge naming #28

Merged
kyuno merged 2 commits from feat/static-parties-tab-and-per-file-storage into master 2026-09-24 19:31:55 +02:00
Owner

Résumé

Suite de #27. La PR regroupe trois changements.

1. Les trois types de party

Libellé Quoi
Watch party party vidéo classique
Listen party party audio classique
Lounge party party statique (ex « watch party permanente »)
  • Seuls les libellés visibles changent : onglet, pages, boutons, toasts et messages d'erreur du serveur. Le code garde « static party » (StaticPartyService, route /static).
  • Accueil :
    • la section « Watch parties en cours » devient « Parties en cours » ;
    • chaque carte affiche un badge « Watch party » ou « Listen party ».
  • Les boutons de lancement musique affichent « Lancer une listen party ».
  • Correction au passage : en cas d'échec, un bouton de tuile remet son propre libellé. Avant, il affichait toujours « watch party », même sur une tuile audio.

2. Onglet « Lounge parties »

  • Route /static, présente dans la sidebar et dans le menu mobile.
  • Une carte par lounge party : progression, prochain élément, badge « N manqués », pastille « Séance en cours ».
  • L'onglet reste surligné sur la page d'une lounge party.
  • L'accueil n'affiche plus les lounge parties, et sa liste live exclut leurs séances.

3. Stockage : un fichier par party

  • Les données sont maintenant dans data/static-parties/<id>.json.
  • Une écriture ne touche que la party modifiée. Elle reste atomique, avec une attente avant écriture propre à chaque party.
  • Un fichier corrompu est isolé (renommé .corrupt) : seule cette party est perdue.
  • Au démarrage, les .tmp restants d'une écriture interrompue sont supprimés.
  • Supprimer une party supprime son fichier et annule toute sauvegarde encore en attente pour elle.
  • Migration : l'ancien data/static-parties.json est découpé une fois en un fichier par party, puis renommé en .migrated (il est conservé).

Vérification

  • typecheck et build des deux projets. Tests serveur : 179/179, dont les nouveaux tests du stockage.
  • Dans le navigateur, avec un faux serveur Emby :
    • migration réelle d'un ancien fichier ;
    • onglet et surlignage ;
    • une séance de lounge party apparaît dans l'onglet et plus sur l'accueil ;
    • titre « Parties en cours » et badge « Watch party » sur une party vidéo classique.
  • Non vérifié visuellement : le badge « Listen party » et les boutons « Lancer une listen party ». Le faux Emby n'a pas de musique.

🤖 Generated with Claude Code

## Résumé Suite de #27. La PR regroupe trois changements. ### 1. Les trois types de party | Libellé | Quoi | |---|---| | **Watch party** | party vidéo classique | | **Listen party** | party audio classique | | **Lounge party** | party statique (ex « watch party permanente ») | - Seuls les libellés visibles changent : onglet, pages, boutons, toasts et messages d'erreur du serveur. Le code garde « static party » (`StaticPartyService`, route `/static`). - Accueil : - la section « Watch parties en cours » devient « Parties en cours » ; - chaque carte affiche un badge « Watch party » ou « Listen party ». - Les boutons de lancement musique affichent « Lancer une listen party ». - Correction au passage : en cas d'échec, un bouton de tuile remet son propre libellé. Avant, il affichait toujours « watch party », même sur une tuile audio. ### 2. Onglet « Lounge parties » - Route `/static`, présente dans la sidebar et dans le menu mobile. - Une carte par lounge party : progression, prochain élément, badge « N manqués », pastille « Séance en cours ». - L'onglet reste surligné sur la page d'une lounge party. - L'accueil n'affiche plus les lounge parties, et sa liste live exclut leurs séances. ### 3. Stockage : un fichier par party - Les données sont maintenant dans `data/static-parties/<id>.json`. - Une écriture ne touche que la party modifiée. Elle reste atomique, avec une attente avant écriture propre à chaque party. - Un fichier corrompu est isolé (renommé `.corrupt`) : seule cette party est perdue. - Au démarrage, les `.tmp` restants d'une écriture interrompue sont supprimés. - Supprimer une party supprime son fichier et annule toute sauvegarde encore en attente pour elle. - **Migration** : l'ancien `data/static-parties.json` est découpé une fois en un fichier par party, puis renommé en `.migrated` (il est conservé). ## Vérification - typecheck et build des deux projets. Tests serveur : 179/179, dont les nouveaux tests du stockage. - Dans le navigateur, avec un faux serveur Emby : - migration réelle d'un ancien fichier ; - onglet et surlignage ; - une séance de lounge party apparaît dans l'onglet et plus sur l'accueil ; - titre « Parties en cours » et badge « Watch party » sur une party vidéo classique. - Non vérifié visuellement : le badge « Listen party » et les boutons « Lancer une listen party ». Le faux Emby n'a pas de musique. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-24 19:17:09 +02:00
Give static watch parties their own tab and one file per party
Some checks failed
Publier l'image Docker / test (pull_request) Failing after 4s
Publier l'image Docker / publish (pull_request) Has been skipped
1e437e4a91
- new "Parties permanentes" tab (/static, sidebar + mobile sheet),
  highlighted on a party's own page too; the home page no longer lists
  static parties, and its live "Watch parties en cours" list leaves
  their sessions out
- StaticPartyStore now writes data/static-parties/<id>.json - one file
  per party, debounced per party, so a write only touches the party that
  changed and a corrupt file only costs that party (moved aside to
  .corrupt, the rest still load); leftover .tmp files are cleaned up;
  deleting a party removes its file and cancels any pending save
- the first release's single static-parties.json is migrated once on
  load, then kept as .migrated

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kyuno added 1 commit 2026-09-24 19:22:20 +02:00
Name the three party kinds: watch, listen and lounge party
Some checks failed
Publier l'image Docker / test (pull_request) Failing after 4s
Publier l'image Docker / publish (pull_request) Has been skipped
58d51f5f74
- UI wording: "Watch party" = classic video, "Listen party" = classic
  audio, "Lounge party" = static party (tab, page, create buttons,
  toasts/confirms, server error messages); code names are unchanged
- home: "Parties en cours" with a Watch party / Listen party badge on
  each card
- music launch buttons say "Lancer une listen party"; a failed tile
  launch now restores its own label instead of always "watch party"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kyuno changed title from Static watch parties: own tab + one file per party to Lounge parties: own tab, one file per party, watch/listen/lounge naming 2026-09-24 19:22:29 +02:00
kyuno merged commit db3cf68843 into master 2026-09-24 19:31:55 +02:00
Sign in to join this conversation.
No reviewers
No labels
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: kyuno/watchparty#28
No description provided.