mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-17 04:10:04 +02:00
- mode agent : les outils write/edit/bash résolvent les chemins relatifs dans JEAN_HOME/workspace et le shell y démarre, au lieu du répertoire courant du processus (Bureau, ProgramData\jean\bin). Les chemins absolus demandés explicitement restent honorés. - Windows : le double-clic n'installe plus en silence. Boîte de dialogue unique, raccourcis menu Démarrer + Bureau, puis relance depuis la copie installée — un seul binaire fait foi. Désinstallation : retrait des raccourcis. - update : contrôle des droits AVANT le téléchargement (l'échec tombait sur le fichier temporaire, avec un message brut), message donnant la commande exacte, timeout UI porté de 30 s à 10 min. - jean where + bouton « Où sont mes fichiers ? » : emplacements, et alerte quand le binaire lancé n'est pas celui installé. - icônes : source unique (sys_brand_icon.go) pour la zone de notification, la barre de menus macOS et l'icône du .exe, alignée sur le favicon noir. macOS en icône template (une icône noire figée disparaît sur une barre sombre). - CI : le bundle macOS part de icon.png au lieu de convertir le .ico via sips, dont l'échec était masqué par « || true » ; notes de release versionnées.
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
//go:build windows
|
|
|
|
package jean
|
|
|
|
// sys_tray_windows.go — icône de Jean dans la zone de notification Windows (system
|
|
// tray). Quand on lance l'app (double-clic ou `jean app`), l'UI web s'ouvre dans
|
|
// le navigateur ET une petite icône apparaît près de l'horloge : elle montre que
|
|
// Jean tourne et offre un menu « Ouvrir Jean » / « Quitter ».
|
|
//
|
|
// getlantern/systray est pur Go sur Windows (Win32 via x/sys, aucun CGO) — le
|
|
// binaire reste statique. L'équivalent macOS vit dans sys_tray_darwin.go (Cocoa,
|
|
// donc CGO) ; les builds Linux ne touchent jamais systray.
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/getlantern/systray"
|
|
)
|
|
|
|
// runTray ouvre l'UI dans le navigateur puis fait tourner l'icône de la zone de
|
|
// notification. Bloque jusqu'à ce que l'utilisateur choisisse « Quitter ».
|
|
func runTray(url string) {
|
|
systray.Run(func() {
|
|
systray.SetIcon(trayIcon())
|
|
systray.SetTitle("AJEAN")
|
|
systray.SetTooltip("AJEAN — votre IA locale")
|
|
mOpen := systray.AddMenuItem("Ouvrir AJEAN", "Ouvrir l'interface")
|
|
systray.AddSeparator()
|
|
mQuit := systray.AddMenuItem("Quitter", "Arrêter AJEAN")
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-mOpen.ClickedCh:
|
|
_ = openBrowser(url)
|
|
case <-mQuit.ClickedCh:
|
|
systray.Quit()
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
}, func() {
|
|
os.Exit(0) // « Quitter » → arrête tout le process (serveur inclus)
|
|
})
|
|
}
|
|
|
|
// trayIcon : l'icône de marque en .ico, deux tailles pour rester nette selon
|
|
// l'échelle d'affichage. Le rendu vit dans sys_brand_icon.go, partagé avec
|
|
// l'icône du .exe.
|
|
func trayIcon() []byte { return BrandICO(16, trayIconSize) }
|