93 lines
3.0 KiB
Go
93 lines
3.0 KiB
Go
// Package api provides Wails-bound methods for the frontend.
|
|
package api
|
|
|
|
import (
|
|
"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"
|
|
)
|
|
|
|
// App is the main application struct exposed to the Wails frontend.
|
|
type App struct {
|
|
capRegistry *capability.Registry
|
|
contribRegistry *contribution.Registry
|
|
permRegistry *permissions.Registry
|
|
eventBus *events.Bus
|
|
plugins []plugin.Plugin
|
|
}
|
|
|
|
// NewApp creates a new App instance.
|
|
func NewApp(
|
|
capReg *capability.Registry,
|
|
contribReg *contribution.Registry,
|
|
permReg *permissions.Registry,
|
|
bus *events.Bus,
|
|
plugins []plugin.Plugin,
|
|
) *App {
|
|
return &App{
|
|
capRegistry: capReg,
|
|
contribRegistry: contribReg,
|
|
permRegistry: permReg,
|
|
eventBus: bus,
|
|
plugins: plugins,
|
|
}
|
|
}
|
|
|
|
// Startup is called when the app starts.
|
|
func (a *App) Startup() error {
|
|
return nil
|
|
}
|
|
|
|
// ─── Plugin Manager API ─────────────────────────────────────
|
|
|
|
// GetPlugins returns all discovered plugins.
|
|
func (a *App) GetPlugins() []plugin.Plugin {
|
|
return a.plugins
|
|
}
|
|
|
|
// GetCapabilities returns all registered capabilities.
|
|
func (a *App) GetCapabilities() []capability.Entry {
|
|
return a.capRegistry.List()
|
|
}
|
|
|
|
// GetPermissions returns all known permissions.
|
|
func (a *App) GetPermissions() []permissions.Entry {
|
|
return a.permRegistry.List()
|
|
}
|
|
|
|
// GetContributions returns all registered contributions.
|
|
func (a *App) GetContributions() ContributionSummary {
|
|
return ContributionSummary{
|
|
Views: a.contribRegistry.Views(),
|
|
Commands: a.contribRegistry.Commands(),
|
|
SettingsPanels: a.contribRegistry.SettingsPanels(),
|
|
SidebarItems: a.contribRegistry.SidebarItems(),
|
|
FileActions: a.contribRegistry.FileActions(),
|
|
NoteActions: a.contribRegistry.NoteActions(),
|
|
SearchProviders: a.contribRegistry.SearchProviders(),
|
|
}
|
|
}
|
|
|
|
// ReloadPlugins re-discovers plugins from disk.
|
|
func (a *App) ReloadPlugins() {
|
|
discoveryDirs := []string{
|
|
"~/.config/verstak/plugins",
|
|
"./plugins",
|
|
}
|
|
plugins, _ := plugin.DiscoverPlugins(discoveryDirs)
|
|
a.plugins = plugins
|
|
}
|
|
|
|
// ContributionSummary aggregates all contribution types for the frontend.
|
|
type ContributionSummary struct {
|
|
Views []contribution.ContributionView `json:"views"`
|
|
Commands []contribution.ContributionCommand `json:"commands"`
|
|
SettingsPanels []contribution.ContributionSettingsPanel `json:"settingsPanels"`
|
|
SidebarItems []contribution.ContributionSidebarItem `json:"sidebarItems"`
|
|
FileActions []contribution.ContributionAction `json:"fileActions"`
|
|
NoteActions []contribution.ContributionAction `json:"noteActions"`
|
|
SearchProviders []contribution.ContributionSearchProvider `json:"searchProviders"`
|
|
}
|