mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
- 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.
56 lines
2.0 KiB
Go
56 lines
2.0 KiB
Go
//go:build darwin
|
|
|
|
package loki
|
|
|
|
// sys_tray_darwin.go — icône de Loki dans la barre de menus macOS (en haut à
|
|
// droite, à côté de l'horloge), pendant exact du system tray Windows : quand on
|
|
// ouvre Loki.app, l'UI web s'ouvre dans le navigateur ET l'icône apparaît, avec
|
|
// le menu « Ouvrir Loki » / « Quitter ».
|
|
//
|
|
// Contrairement à Windows, systray passe ici par Cocoa → CGO obligatoire : les
|
|
// binaires macOS sont donc compilés sur un runner macOS (voir release.yml), et
|
|
// le bundle est marqué LSUIElement (pas d'icône dans le Dock, uniquement la
|
|
// barre de menus).
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/getlantern/systray"
|
|
)
|
|
|
|
// runTray fait tourner l'icône de la barre de menus. Bloque jusqu'à « Quitter ».
|
|
// À appeler depuis la goroutine principale : Cocoa exige le thread main.
|
|
func runTray(url string) {
|
|
systray.Run(func() {
|
|
// Icône « template » : macOS n'en garde que la forme (couche alpha) et la
|
|
// colore selon le thème. Indispensable depuis que la marque est noire —
|
|
// une icône noire « en dur » est illisible sur une barre de menus sombre.
|
|
systray.SetTemplateIcon(brandTemplatePNG(trayIconSize), BrandIconPNG(trayIconSize))
|
|
systray.SetTooltip("Loki — votre IA locale")
|
|
mOpen := systray.AddMenuItem("Ouvrir Loki", "Ouvrir l'interface")
|
|
systray.AddSeparator()
|
|
mQuit := systray.AddMenuItem("Quitter", "Arrêter Loki")
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-mOpen.ClickedCh:
|
|
_ = openBrowser(url)
|
|
case <-mQuit.ClickedCh:
|
|
systray.Quit()
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
}, func() {
|
|
// « Quitter » arrête l'application : l'interface et, avec elle, le
|
|
// tunnel d'accès distant qui tourne dans ce process.
|
|
//
|
|
// Le MOTEUR, lui, n'est pas arrêté : sous macOS c'est un daemon launchd,
|
|
// que seul root peut piloter. Fermer une interface n'a pas à arrêter un
|
|
// service système. Sous Windows, où l'app est propriétaire du moteur,
|
|
// « Quitter » l'arrête bel et bien (voir sys_tray_windows.go).
|
|
os.Exit(0)
|
|
})
|
|
}
|