//go:build gui // +build gui package main import ( "fmt" "log" "os" "os/exec" "os/signal" "path/filepath" "runtime" "syscall" gui "verstak/internal/gui" "verstak/internal/core/storage" ) func main() { vaultPath := "." if len(os.Args) > 1 { vaultPath = os.Args[1] } abs, err := filepath.Abs(vaultPath) if err != nil { log.Fatal(err) } dbPath := filepath.Join(abs, ".verstak", "index.db") db, err := storage.Open(dbPath) if err != nil { log.Fatalf("Open vault: %v", err) } defer db.Close() srv := gui.NewServer(db, abs) addr, err := srv.Start() if err != nil { log.Fatalf("Start GUI: %v", err) } fmt.Println("Верстак GUI:", addr) openBrowser(addr) // Wait for interrupt. sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) <-sig srv.Stop() deferFunc() } func openBrowser(url string) { var cmd *exec.Cmd switch runtime.GOOS { case "linux": cmd = exec.Command("xdg-open", url) case "darwin": cmd = exec.Command("open", url) case "windows": cmd = exec.Command("cmd", "/c", "start", "", url) } if cmd != nil { go cmd.Start() } } func deferFunc() {}