72 lines
1.1 KiB
Go
72 lines
1.1 KiB
Go
//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() {}
|