mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 06:58:14 +02:00
Rebaptise AJEAN en Loki (fork, lignée conservée)
- module github.com/R0m1k3/Loki, cmd/loki, internal/loki (package loki) - LOKI_HOME, LOKI_MODEL_DIRS, LOKI_SERVICE, LOKI_DL_CONNS ; /etc/loki ; units loki-engine / loki-ui ; binaire et aide CLI - updateRepo pointe sur R0m1k3/Loki (l'auto-update ne tirera plus les binaires AJEAN amont) Conservé à l'identique : le domaine ajean.link (service de tunnel amont), les littéraux de migration 0.7.x (migrate_07.go), RELEASE_NOTES.md et LICENSE (historique et licence de l'amont). go build/vet/test : verts.
This commit is contained in:
157 files changed
+928
-928
No files matched your search
@@ -0,0 +1,63 @@
|
||||
//go:build windows
|
||||
|
||||
package loki
|
||||
|
||||
// sys_tray_windows.go — icône de Loki dans la zone de notification Windows (system
|
||||
// tray). Quand on lance l'app (double-clic ou `loki app`), l'UI web s'ouvre dans
|
||||
// le navigateur ET une petite icône apparaît près de l'horloge : elle montre que
|
||||
// Loki tourne et offre un menu « Ouvrir Loki » / « 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("Loki")
|
||||
systray.SetTooltip("Loki — votre IA locale")
|
||||
mOpen := systray.AddMenuItem("Ouvrir Loki", "Ouvrir l'interface")
|
||||
systray.AddSeparator()
|
||||
mQuit := systray.AddMenuItem("Quitter", "Arrêter Loki et décharger le modèle")
|
||||
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-mOpen.ClickedCh:
|
||||
_ = openBrowser(url)
|
||||
case <-mQuit.ClickedCh:
|
||||
systray.Quit()
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
}, func() {
|
||||
// « Quitter » doit tout arrêter, moteur compris.
|
||||
//
|
||||
// Le moteur tourne dans un process DÉTACHÉ (voir svcStart) : il survit
|
||||
// délibérément à la fermeture de l'app pour que le modèle reste chargé
|
||||
// entre deux ouvertures de l'interface. Mais quand on quitte pour de
|
||||
// bon, il n'a plus rien pour le piloter et garde des dizaines de Go de
|
||||
// RAM, sans la moindre fenêtre pour l'expliquer. svcStop tue l'arbre
|
||||
// (taskkill /T), donc llama-server avec lui.
|
||||
//
|
||||
// Windows seulement : ici l'app EST le propriétaire du moteur. Sous
|
||||
// Linux et macOS c'est systemd ou launchd, et fermer une interface n'a
|
||||
// pas à arrêter un service système.
|
||||
_ = svcStop(false)
|
||||
os.Exit(0)
|
||||
})
|
||||
}
|
||||
|
||||
// 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) }
|
||||
Reference in new issue
Block a user