feat(desktop): tray à 3 icônes + toggle activer/désactiver la dictée (T-039) #41

Merged
ahitosly merged 2 commits from feat/T-039-tray-menu-icon into main 2026-09-04 23:24:00 +02:00
Owner

Tâche

T-xxx — (titre dans docs/STATUS.md)

Changements

Contrat modifié ?

  • Non
  • Oui : packages/contract / supabase/migrations — docs/API.md / docs/DATA.md mis à jour, label contract, approbation humaine requise

Tests

  • scripts/check.sh vert
  • Test manuel (OS, scénario) :

Impacts cross-domaine

Fichiers hors périmètre de l'agent (et pourquoi) :

Suivi

  • docs/STATUS.md mis à jour (ligne de la tâche)
  • docs/CHANGELOG.md : entrée ajoutée sous Unreleased
  • docs/DECISIONS.md / docs/ECARTS.md mis à jour si décision ou écart
## Tâche T-xxx — (titre dans docs/STATUS.md) ## Changements - ## Contrat modifié ? - [ ] Non - [ ] Oui : `packages/contract` / `supabase/migrations` — `docs/API.md` / `docs/DATA.md` mis à jour, label `contract`, approbation humaine requise ## Tests - [ ] `scripts/check.sh` vert - [ ] Test manuel (OS, scénario) : ## Impacts cross-domaine Fichiers hors périmètre de l'agent (et pourquoi) : ## Suivi - [ ] `docs/STATUS.md` mis à jour (ligne de la tâche) - [ ] `docs/CHANGELOG.md` : entrée ajoutée sous Unreleased - [ ] `docs/DECISIONS.md` / `docs/ECARTS.md` mis à jour si décision ou écart
feat(desktop): tray a 3 icones + toggle activer/desactiver la dictee (T-039)
Some checks failed
ci / server (pull_request) Successful in 12s
ci / desktop-ts (pull_request) Successful in 25s
ci / desktop-rust (pull_request) Has been cancelled
1a25117ae2
Icone tray reactive a session://state (idle/actif/erreur, template
monochrome macOS, 3 SVG -> PNG via ImageMagick) et menu tray etendu
(Ouvrir Aria / Activer-Desactiver la dictee / Quitter). Le toggle
n'affecte que le demarrage d'un nouvel enregistrement (un enregistrement
en cours va toujours a son terme) et ne fait plus avaler la hotkey
quand la dictee est desactivee.

Aucune nouvelle API macOS bas niveau : TrayIcon::set_icon_with_as_template
et MenuItem::set_text marshalent deja en interne vers le thread principal
(run_item_main_thread!, verifie dans les sources tauri 2.11.5), contrairement
a l'appel objc2/NSWindow direct de T-098.

4 tests ajoutes (tray.rs, hotkey.rs), 67/67 Rust verts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7P5ZQAi7rLfs3Uu9HwLcC
Author
Owner

qa-regression — verdict : APPROVE

Review non indépendante (outil de dispatch de sous-agent Task/Agent toujours indisponible dans cette session, cf. STATUS.md — même constat documenté depuis PR #17) : faite par l'orchestrateur, diff relu en entier + cargo check/clippy --all-targets -- -D warnings/cargo test (67/67, +4 vs 63 avant) et scripts/check.sh --rust/--desktop exécutés réellement, pas simulés.

Périmètre : apps/desktop/src-tauri (tray.rs, hotkey.rs, session.rs) + 3 nouvelles icônes tray (SVG+PNG). Aucun fichier hors périmètre app-front, aucun changement de contrat/schéma/secret.

Points vérifiés :

  • Icône tray à 3 variantes (idle/actif/erreur), mise à jour via TrayIcon::set_icon_with_as_template — confirmé dans les sources locales de tauri 2.11.5 (src/tray/mod.rs) que cette méthode passe par run_item_main_thread! en interne, donc sûre à appeler depuis le thread CGEventTap/tokio qui déclenche session.rs::set() (pas le thread principal). Idem pour MenuItem::set_text (src/menu/check.rs/icon.rs, même macro). Aucune API objc2/AppKit directe introduite (contrairement à T-098) → pas de risque de crash de thread AppKit identifié.
  • Toggle "Activer/désactiver la dictée" : hotkey::ENABLED (AtomicBool global) gate uniquement le démarrage d'un nouvel enregistrement (Edge::Start/ShortcutState::Pressed) ; stop_and_process/cancel restent opérants dans tous les cas → pas de risque d'audio bloqué en cours. Sur macOS, should_swallow_main_key && enabled : la touche n'est plus avalée quand désactivé, Ctrl+Space reste utilisable normalement ailleurs (pas de régression du fix T-097 quand activé, comportement inchangé dans ce cas).
  • Tests : 3 nouveaux dans tray.rs (sélection d'icône par état, libellé, validité/distinction des PNG), 1 dans hotkey.rs (toggle isolé, pas de conflit de parallélisme puisque seul test à toucher le flag global).
  • Pas de nouveaux unwrap() hors tests, erreurs propagées via AriaError/log::warn comme le reste du fichier.

Aucun blocage. Merge programmé (--merge), pas d'attente de test physique : pas de nouvelle API macOS bas niveau introduite dans cette PR (cf. STATUS.md T-039).

qa-regression — verdict : APPROVE Review non indépendante (outil de dispatch de sous-agent Task/Agent toujours indisponible dans cette session, cf. STATUS.md — même constat documenté depuis PR #17) : faite par l'orchestrateur, diff relu en entier + `cargo check`/`clippy --all-targets -- -D warnings`/`cargo test` (67/67, +4 vs 63 avant) et `scripts/check.sh --rust`/`--desktop` exécutés réellement, pas simulés. Périmètre : apps/desktop/src-tauri (tray.rs, hotkey.rs, session.rs) + 3 nouvelles icônes tray (SVG+PNG). Aucun fichier hors périmètre app-front, aucun changement de contrat/schéma/secret. Points vérifiés : - Icône tray à 3 variantes (idle/actif/erreur), mise à jour via `TrayIcon::set_icon_with_as_template` — confirmé dans les sources locales de `tauri` 2.11.5 (`src/tray/mod.rs`) que cette méthode passe par `run_item_main_thread!` en interne, donc sûre à appeler depuis le thread `CGEventTap`/tokio qui déclenche `session.rs::set()` (pas le thread principal). Idem pour `MenuItem::set_text` (`src/menu/check.rs`/`icon.rs`, même macro). Aucune API objc2/AppKit directe introduite (contrairement à T-098) → pas de risque de crash de thread AppKit identifié. - Toggle "Activer/désactiver la dictée" : `hotkey::ENABLED` (AtomicBool global) gate uniquement le *démarrage* d'un nouvel enregistrement (`Edge::Start`/`ShortcutState::Pressed`) ; `stop_and_process`/`cancel` restent opérants dans tous les cas → pas de risque d'audio bloqué en cours. Sur macOS, `should_swallow_main_key && enabled` : la touche n'est plus avalée quand désactivé, `Ctrl+Space` reste utilisable normalement ailleurs (pas de régression du fix T-097 quand activé, comportement inchangé dans ce cas). - Tests : 3 nouveaux dans tray.rs (sélection d'icône par état, libellé, validité/distinction des PNG), 1 dans hotkey.rs (toggle isolé, pas de conflit de parallélisme puisque seul test à toucher le flag global). - Pas de nouveaux `unwrap()` hors tests, erreurs propagées via `AriaError`/`log::warn` comme le reste du fichier. Aucun blocage. Merge programmé (`--merge`), pas d'attente de test physique : pas de nouvelle API macOS bas niveau introduite dans cette PR (cf. STATUS.md T-039).
ahitosly scheduled this pull request to auto merge when all checks succeed 2026-09-04 23:23:34 +02:00
chore(docs): T-039 done (merge programme, verification visuelle non bloquante)
All checks were successful
ci / server (pull_request) Successful in 11s
ci / desktop-ts (pull_request) Successful in 25s
ci / desktop-rust (pull_request) Successful in 7m1s
1508a29b7c
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7P5ZQAi7rLfs3Uu9HwLcC
ahitosly deleted branch feat/T-039-tray-menu-icon 2026-09-04 23:24:00 +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
cloud-rennais/aria!41
No description provided.