Feat : tag system
This commit is contained in:
46
README.md
46
README.md
@@ -40,9 +40,13 @@ IP publique nécessaire, et obs-websocket reste sur `127.0.0.1`.
|
||||
réglables VM par VM : de « Économe » à « Sans perte ».
|
||||
- [Vignette du flux en direct](#vignette-du-flux-en-direct) sur la fiche compacte de chaque
|
||||
profil en direct, agrandie au survol.
|
||||
- [Étiquettes](#étiquettes) libres sur les streamers, créées à la volée, avec filtrage de la
|
||||
liste par étiquette.
|
||||
- [Frise des diffusions](#frise-des-diffusions) : l'historique des streams de chaque profil
|
||||
suivi, avec en surimpression ce qui en a été capturé — par profil sur sa fiche, ou tous
|
||||
ensemble dans l'onglet « Timeline ».
|
||||
ensemble dans l'onglet « Timeline ». Une
|
||||
[vignette est conservée par diffusion](#une-vignette-par-diffusion-conservée), visible au
|
||||
survol des mois après.
|
||||
|
||||
## Prérequis
|
||||
|
||||
@@ -637,6 +641,40 @@ l'ordre de sondage qui décide qui tente sa chance en premier sur une VM libre :
|
||||
hasard laisserait un profil mineur s'en emparer, pour se faire couper dans la foulée par son
|
||||
aîné — même résultat, au prix d'un fichier de quelques secondes.
|
||||
|
||||
## Étiquettes
|
||||
|
||||
Des libellés libres posés sur les profils, pour trier une liste qui grandit. Ils se créent
|
||||
**en les saisissant** sur la fiche d'un streamer (onglet Streamers → clic sur une vignette →
|
||||
section « Étiquettes ») : rien ne distingue à la frappe un nom neuf d'un nom déjà connu, donc
|
||||
un nom inconnu crée l'étiquette au passage, et un nom déjà pris la réutilise. Les étiquettes
|
||||
existantes sont proposées juste en dessous du champ, pour éviter d'en créer une seconde à une
|
||||
lettre près.
|
||||
|
||||
**La casse ne crée pas de doublon** : « Blonde » et « blonde » sont la même étiquette, garanti
|
||||
par un index unique `COLLATE NOCASE`. Les espaces multiples sont réduits et les extrémités
|
||||
coupées pour la même raison — deux entrées indiscernables à l'œil dans la liste des filtres
|
||||
seraient pires qu'un refus.
|
||||
|
||||
La barre de filtres de l'onglet Streamers les reprend toutes. **Entre étiquettes le filtre est
|
||||
une union** : en cocher une seconde élargit la sélection, ce qui est le geste attendu quand on
|
||||
empile des critères de même nature. Le filtre de statut (Tous / Favoris / En direct), lui, se
|
||||
**cumule** avec — « en direct » ET portant l'une des étiquettes retenues.
|
||||
|
||||
**La couleur d'une étiquette est calculée depuis son nom**, jamais choisie : demander une
|
||||
couleur à chaque création alourdirait un geste qui doit rester une frappe au clavier. Le même
|
||||
nom donnant toujours la même teinte, une étiquette se reconnaît d'une fiche à l'autre sans que
|
||||
rien ne soit stocké pour ça.
|
||||
|
||||
Le bouton **⚙ Étiquettes** de la barre de filtres ouvre le seul écran qui les gère globalement :
|
||||
renommer (répercuté partout) et supprimer (retirée de tous les profils qui la portaient, sans
|
||||
en supprimer aucun). Sans lui, une étiquette mal nommée serait définitive. Le renommage
|
||||
**refuse une collision** plutôt que de fusionner en silence : corriger une faute de frappe
|
||||
n'est pas demander à faire disparaître l'autre étiquette des profils qui la portent.
|
||||
|
||||
Une étiquette survit à la suppression du dernier profil qui la portait — elle reste disponible
|
||||
pour la suite. Inversement, ne plus suivre un profil n'emporte que ses rattachements
|
||||
(`ON DELETE CASCADE` des deux côtés de la table de liaison).
|
||||
|
||||
## Vignette du flux en direct
|
||||
|
||||
Chaque fiche compacte d'un profil **en direct** (onglet Streamers) affiche une image du
|
||||
@@ -812,7 +850,11 @@ Toutes les routes hors `/api/login` exigent `Authorization: Bearer <jeton de ses
|
||||
| `GET` | `/api/agents` | Liste des agents et de leur état |
|
||||
| `POST` | `/api/agents` | Provisionne un agent, renvoie son jeton **une seule fois** |
|
||||
| `PATCH` | `/api/agents/:id` | Nom, notes, paramètres OBS, auto-connexion, surveillance, navigateur, preset |
|
||||
| `PATCH` | `/api/watchlist/:id` | Libellé, agent assigné, notifications, automatisme, favori, priorité, interruption |
|
||||
| `PATCH` | `/api/watchlist/:id` | Libellé, agent assigné, notifications, automatisme, favori, priorité, interruption, étiquettes (`tagIds`, remplacement en bloc) |
|
||||
| `GET` | `/api/tags` | Étiquettes existantes |
|
||||
| `POST` | `/api/tags` | Crée l'étiquette, ou renvoie celle qui porte déjà ce nom |
|
||||
| `PATCH` | `/api/tags/:id` | Renomme (409 si le nom est déjà pris) |
|
||||
| `DELETE` | `/api/tags/:id` | Supprime, et la retire de tous les profils |
|
||||
| `GET` | `/api/timeline?days=&targetId=` | Diffusions et captures ; sans `targetId`, tous les profils |
|
||||
| `GET` | `/api/timeline/sessions/:id/preview` | Vignette conservée d'une diffusion (jeton accepté en query) |
|
||||
| `POST` | `/api/agents/:id/token` | Régénère le jeton (coupe la session en cours) |
|
||||
|
||||
Reference in New Issue
Block a user