verstak/guimain.go

74 lines
1.5 KiB
Go

// This file is only compiled with -tags gui.
//go:build gui
// +build gui
package main
import (
"embed"
_ "embed"
"log"
"os"
"path/filepath"
"verstak/internal/core/storage"
"verstak/internal/core/nodes"
"verstak/internal/core/files"
"verstak/internal/core/notes"
"verstak/internal/core/actions"
"verstak/internal/core/worklog"
"verstak/internal/core/search"
"verstak/internal/core/plugins"
"github.com/wailsapp/wails/v3/pkg/application"
)
//go:embed all:frontend/dist
var assets embed.FS
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()
// Initialize core services (registered for Wails bindings).
_ = nodes.NewRepository(db)
_ = files.NewService(db, abs)
_ = notes.NewService(db, abs, nil, nil)
_ = actions.NewService(db)
_ = worklog.NewService(db)
_ = search.NewService(db)
plugins.NewManager(abs).Discover()
app := application.New(application.Options{
Name: "verstak",
Description: "Verstak — local-first working vault",
Assets: application.AssetOptions{
Handler: application.AssetFileServerFS(assets),
},
})
app.Window.NewWithOptions(application.WebviewWindowOptions{
Title: "Верстак",
Width: 1200,
Height: 800,
})
if err := app.Run(); err != nil {
log.Fatal(err)
}
}