mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-15 19:29:16 +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.
40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
// gen-icon écrit cmd/jean/icon.ico à partir de l'icône de marque dessinée dans
|
|
// internal/jean (sys_brand_icon.go), pour que l'icône du .exe soit toujours la
|
|
// même que le favicon de l'UI et que celle de la zone de notification.
|
|
//
|
|
// Lancé par `go generate ./cmd/jean`, AVANT goversioninfo qui embarque le .ico
|
|
// dans les ressources Windows.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/nathaninline/jean/internal/jean"
|
|
)
|
|
|
|
func main() {
|
|
out := "icon.ico"
|
|
if len(os.Args) > 1 {
|
|
out = os.Args[1]
|
|
}
|
|
// Les tailles attendues par l'explorateur Windows, de la barre des tâches à
|
|
// l'aperçu en grandes icônes.
|
|
write(out, jean.BrandICO(16, 32, 48, 64, 128, 256))
|
|
|
|
// PNG 1024 pour le bundle macOS : la CI en tire le .icns via sips/iconutil.
|
|
// Elle partait auparavant du .ico, ce qui suppose que sips sache lire un ICO —
|
|
// et l'échec y est masqué par « || true », donc une app Mac sans icône passait
|
|
// inaperçue. Un PNG ne laisse aucune place au doute.
|
|
write(strings.TrimSuffix(out, ".ico")+".png", jean.BrandIconPNG(1024))
|
|
}
|
|
|
|
func write(path string, data []byte) {
|
|
if err := os.WriteFile(path, data, 0o644); err != nil {
|
|
fmt.Fprintln(os.Stderr, "gen-icon:", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Println("OK ->", path)
|
|
}
|