mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-05-21 02:02:34 +02:00
Edit plugins id & docs
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
+17
-16
@@ -68,11 +68,11 @@ func (m *Manager) LoadFromDir(dir string) error {
|
||||
continue
|
||||
}
|
||||
if m.pluginsFile != nil {
|
||||
if enabled, configText, found := m.pluginsFile.get(p.Name); found {
|
||||
if enabled, configText, found := m.pluginsFile.get(p.ID); found {
|
||||
p.Enabled = enabled
|
||||
p.ConfigText = configText
|
||||
} else {
|
||||
m.pluginsFile.register(p.Name, p.Enabled)
|
||||
m.pluginsFile.register(p.ID, p.Enabled)
|
||||
}
|
||||
}
|
||||
m.mu.Lock()
|
||||
@@ -87,6 +87,7 @@ func (m *Manager) LoadFromDir(dir string) error {
|
||||
|
||||
func (m *Manager) loadPlugin(path string) (*Plugin, error) {
|
||||
p := &Plugin{
|
||||
ID: strings.TrimSuffix(filepath.Base(path), ".lua"),
|
||||
FilePath: path,
|
||||
Enabled: true,
|
||||
hooks: make(map[string]HookConfig),
|
||||
@@ -107,7 +108,7 @@ func (m *Manager) loadPlugin(path string) (*Plugin, error) {
|
||||
p.Name = string(s)
|
||||
}
|
||||
if p.Name == "" {
|
||||
p.Name = strings.TrimSuffix(filepath.Base(path), ".lua")
|
||||
p.Name = p.ID
|
||||
}
|
||||
|
||||
if s, ok := pluginTable.RawGetString("description").(lua.LString); ok {
|
||||
@@ -155,11 +156,11 @@ func (m *Manager) GetPlugins() []*Plugin {
|
||||
return out
|
||||
}
|
||||
|
||||
func (m *Manager) TogglePlugin(name string) {
|
||||
func (m *Manager) TogglePlugin(id string) {
|
||||
m.mu.RLock()
|
||||
var found *Plugin
|
||||
for _, p := range m.plugins {
|
||||
if p.Name == name {
|
||||
if p.ID == id {
|
||||
found = p
|
||||
break
|
||||
}
|
||||
@@ -173,8 +174,8 @@ func (m *Manager) TogglePlugin(name string) {
|
||||
enabled := found.Enabled
|
||||
found.mu.Unlock()
|
||||
if m.pluginsFile != nil {
|
||||
if err := m.pluginsFile.setEnabled(name, enabled); err != nil {
|
||||
log.Printf("plugin %s: save state: %v", name, err)
|
||||
if err := m.pluginsFile.setEnabled(id, enabled); err != nil {
|
||||
log.Printf("plugin %s: save state: %v", id, err)
|
||||
}
|
||||
}
|
||||
if !enabled {
|
||||
@@ -188,8 +189,8 @@ func (m *Manager) TogglePlugin(name string) {
|
||||
if ret == lua.LFalse {
|
||||
p.Enabled = false
|
||||
if m.pluginsFile != nil {
|
||||
if err := m.pluginsFile.setEnabled(p.Name, false); err != nil {
|
||||
log.Printf("plugin %s: save state: %v", p.Name, err)
|
||||
if err := m.pluginsFile.setEnabled(p.ID, false); err != nil {
|
||||
log.Printf("plugin %s: save state: %v", p.ID, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -217,11 +218,11 @@ func (m *Manager) TogglePlugin(name string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Manager) SaveConfig(name, configText string) {
|
||||
func (m *Manager) SaveConfig(id, configText string) {
|
||||
m.mu.RLock()
|
||||
var found *Plugin
|
||||
for _, p := range m.plugins {
|
||||
if p.Name == name {
|
||||
if p.ID == id {
|
||||
found = p
|
||||
break
|
||||
}
|
||||
@@ -234,8 +235,8 @@ func (m *Manager) SaveConfig(name, configText string) {
|
||||
found.ConfigText = configText
|
||||
found.mu.Unlock()
|
||||
if m.pluginsFile != nil {
|
||||
if err := m.pluginsFile.setConfig(name, configText); err != nil {
|
||||
log.Printf("plugin %s: save config: %v", name, err)
|
||||
if err := m.pluginsFile.setConfig(id, configText); err != nil {
|
||||
log.Printf("plugin %s: save config: %v", id, err)
|
||||
}
|
||||
}
|
||||
if _, ok := found.hooks["on_config"]; !ok {
|
||||
@@ -243,7 +244,7 @@ func (m *Manager) SaveConfig(name, configText string) {
|
||||
}
|
||||
found.mu.Lock()
|
||||
if _, err := callHook(found, "on_config"); err != nil {
|
||||
log.Printf("plugin %s on_config: %v", name, err)
|
||||
log.Printf("plugin %s on_config: %v", id, err)
|
||||
}
|
||||
found.mu.Unlock()
|
||||
}
|
||||
@@ -273,8 +274,8 @@ func (m *Manager) RunOnStart() {
|
||||
if ret == lua.LFalse {
|
||||
p.Enabled = false
|
||||
if m.pluginsFile != nil {
|
||||
if err := m.pluginsFile.setEnabled(p.Name, false); err != nil {
|
||||
log.Printf("plugin %s: save state: %v", p.Name, err)
|
||||
if err := m.pluginsFile.setEnabled(p.ID, false); err != nil {
|
||||
log.Printf("plugin %s: save state: %v", p.ID, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
)
|
||||
|
||||
type pluginFileEntry struct {
|
||||
Enable bool `yaml:"enable"`
|
||||
Config string `yaml:"config,omitempty"`
|
||||
Enable bool `yaml:"enable"`
|
||||
Config interface{} `yaml:"config,omitempty"`
|
||||
}
|
||||
|
||||
type pluginsFileData struct {
|
||||
@@ -51,28 +51,46 @@ func (pf *PluginsFile) save() error {
|
||||
return os.WriteFile(pf.path, raw, 0o600)
|
||||
}
|
||||
|
||||
func (pf *PluginsFile) get(name string) (enabled bool, config string, found bool) {
|
||||
e, ok := pf.data.Plugins[name]
|
||||
return e.Enable, e.Config, ok
|
||||
func (pf *PluginsFile) get(id string) (enabled bool, config string, found bool) {
|
||||
e, ok := pf.data.Plugins[id]
|
||||
if !ok {
|
||||
return false, "", false
|
||||
}
|
||||
if e.Config == nil {
|
||||
return e.Enable, "", true
|
||||
}
|
||||
raw, err := yaml.Marshal(e.Config)
|
||||
if err != nil {
|
||||
return e.Enable, "", true
|
||||
}
|
||||
return e.Enable, string(raw), true
|
||||
}
|
||||
|
||||
func (pf *PluginsFile) register(name string, defaultEnabled bool) {
|
||||
if _, ok := pf.data.Plugins[name]; !ok {
|
||||
pf.data.Plugins[name] = pluginFileEntry{Enable: defaultEnabled}
|
||||
func (pf *PluginsFile) register(id string, defaultEnabled bool) {
|
||||
if _, ok := pf.data.Plugins[id]; !ok {
|
||||
pf.data.Plugins[id] = pluginFileEntry{Enable: defaultEnabled}
|
||||
_ = pf.save()
|
||||
}
|
||||
}
|
||||
|
||||
func (pf *PluginsFile) setEnabled(name string, enabled bool) error {
|
||||
e := pf.data.Plugins[name]
|
||||
func (pf *PluginsFile) setEnabled(id string, enabled bool) error {
|
||||
e := pf.data.Plugins[id]
|
||||
e.Enable = enabled
|
||||
pf.data.Plugins[name] = e
|
||||
pf.data.Plugins[id] = e
|
||||
return pf.save()
|
||||
}
|
||||
|
||||
func (pf *PluginsFile) setConfig(name string, configText string) error {
|
||||
e := pf.data.Plugins[name]
|
||||
e.Config = configText
|
||||
pf.data.Plugins[name] = e
|
||||
func (pf *PluginsFile) setConfig(id string, configText string) error {
|
||||
e := pf.data.Plugins[id]
|
||||
if configText == "" {
|
||||
e.Config = nil
|
||||
} else {
|
||||
var parsed interface{}
|
||||
if err := yaml.Unmarshal([]byte(configText), &parsed); err != nil {
|
||||
return err
|
||||
}
|
||||
e.Config = parsed
|
||||
}
|
||||
pf.data.Plugins[id] = e
|
||||
return pf.save()
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ type HookConfig struct {
|
||||
}
|
||||
|
||||
type Plugin struct {
|
||||
ID string
|
||||
Name string
|
||||
Description string
|
||||
FilePath string
|
||||
@@ -37,6 +38,7 @@ func (p *Plugin) HookConfig(name string) (HookConfig, bool) {
|
||||
}
|
||||
|
||||
type Info struct {
|
||||
ID string
|
||||
Name string
|
||||
Description string
|
||||
FilePath string
|
||||
@@ -57,6 +59,7 @@ func (p *Plugin) Info() Info {
|
||||
hooks[k] = v
|
||||
}
|
||||
return Info{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
Description: p.Description,
|
||||
FilePath: p.FilePath,
|
||||
|
||||
@@ -59,11 +59,11 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
m.textarea.Blur()
|
||||
if info, ok := m.selected(); ok && m.manager != nil {
|
||||
val := m.textarea.Value()
|
||||
m.manager.SaveConfig(info.Name, val)
|
||||
m.manager.SaveConfig(info.ID, val)
|
||||
// Update cached info.
|
||||
m.filtered[m.cursor].ConfigText = val
|
||||
for i := range m.items {
|
||||
if m.items[i].Name == info.Name {
|
||||
if m.items[i].ID == info.ID {
|
||||
m.items[i].ConfigText = val
|
||||
break
|
||||
}
|
||||
@@ -107,10 +107,10 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
|
||||
case key.Matches(msg, pk.Toggle):
|
||||
if info, ok := m.selected(); ok && m.manager != nil {
|
||||
m.manager.TogglePlugin(info.Name)
|
||||
m.manager.TogglePlugin(info.ID)
|
||||
m.filtered[m.cursor].Enabled = !info.Enabled
|
||||
for i := range m.items {
|
||||
if m.items[i].Name == info.Name {
|
||||
if m.items[i].ID == info.ID {
|
||||
m.items[i].Enabled = !info.Enabled
|
||||
break
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user