verstak-desktop/main.go

88 lines
2.4 KiB
Go

package main
import (
"embed"
"log"
"os"
"path/filepath"
"strings"
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
"github.com/verstak/verstak-desktop/internal/api"
"github.com/verstak/verstak-desktop/internal/core/capability"
"github.com/verstak/verstak-desktop/internal/core/contribution"
"github.com/verstak/verstak-desktop/internal/core/events"
"github.com/verstak/verstak-desktop/internal/core/permissions"
"github.com/verstak/verstak-desktop/internal/core/plugin"
)
//go:embed frontend/dist
var assets embed.FS
// expandPath resolves "~" to the user's home directory.
func expandPath(path string) string {
if strings.HasPrefix(path, "~/") {
home, err := os.UserHomeDir()
if err != nil {
log.Printf("[main] expandPath: cannot get home dir: %v", err)
return path
}
return filepath.Join(home, path[2:])
}
return path
}
func main() {
// ─── Initialize Core Registries ──────────────────────────
capRegistry := capability.NewRegistry()
contribRegistry := contribution.NewRegistry()
permRegistry := permissions.NewRegistry()
eventBus := events.NewBus()
// ─── Plugin Discovery ───────────────────────────────────
discoveryDirs := []string{
"~/.config/verstak/plugins",
"./plugins",
}
// Expand tilde in all paths
for i, d := range discoveryDirs {
discoveryDirs[i] = expandPath(d)
}
log.Printf("[main] plugin dirs: %v", discoveryDirs)
plugins, discErrors := plugin.DiscoverPlugins(discoveryDirs)
for _, err := range discErrors {
log.Printf("[plugin] discovery warning: %v", err)
}
log.Printf("[plugin] discovered %d plugins", len(plugins))
// Create the App struct
app := api.NewApp(capRegistry, contribRegistry, permRegistry, eventBus, plugins)
// ─── Wails App ───────────────────────────────────────────
err := wails.Run(&options.App{
Title: "Verstak",
Width: 1200,
Height: 800,
MinWidth: 800,
MinHeight: 600,
WindowStartState: options.Normal,
AssetServer: &assetserver.Options{
Assets: assets,
},
Bind: []interface{}{
app,
},
})
if err != nil {
log.Fatalf("Error: %v", err)
}
}