This commit is contained in:
李子铭 2024-11-06 13:37:23 +08:00
parent 7cc22209f5
commit 0ea434699a
3 changed files with 107 additions and 103 deletions

View File

@ -1,56 +0,0 @@
package manage
var m *pluginManage
func init() {
m = &pluginManage{
plugins: make(map[string]*PluginInfo),
}
}
func Load(p []*Config) error {
for _, c := range p {
err := Add(c)
if err != nil {
return err
}
}
return nil
}
func Add(c *Config) error {
err := c.Validate()
if err != nil {
return err
}
return m.add(c)
}
func Update(c *Config) error {
err := c.Validate()
if err != nil {
return err
}
err = Remove(c.Tag)
if err != nil {
return err
}
return m.add(c)
}
func Get(tag string) (*PluginInfo, error) {
p, err := m.get(tag)
if err != nil {
return nil, err
}
return p, nil
}
func Remove(tag string) error {
return m.remove(tag)
}
func Close() {
m.close()
m = nil
}

View File

@ -1,64 +1,60 @@
package manage package manage
import ( var m *pluginManage
"fmt"
"gitea.cdlsxd.cn/sdk/plugin/shared"
)
type PluginInfo struct { func init() {
Tag string m = &pluginManage{
Impl shared.PluginService plugins: make(map[string]*PluginInfo),
cleanup func() }
} }
type pluginManage struct { func Load(p []*Config) error {
plugins map[string]*PluginInfo for _, c := range p {
} err := Add(c)
func (m *pluginManage) exists(tag string) bool {
if _, ok := m.plugins[tag]; ok {
return true
}
return false
}
func (m *pluginManage) add(c *Config) error {
if m.exists(c.Tag) {
return fmt.Errorf("插件已存在[%s]", c.Tag)
}
impl, cleanup, err := newClient(c)
if err != nil { if err != nil {
cleanup()
return err return err
} }
m.plugins[c.Tag] = &PluginInfo{
Tag: c.Tag,
Impl: impl,
cleanup: cleanup,
} }
return nil return nil
} }
func (m *pluginManage) remove(tag string) error { func Add(c *Config) error {
if m.exists(tag) { err := c.Validate()
m.plugins[tag].cleanup() if err != nil {
delete(m.plugins, tag) return err
return nil
} }
return fmt.Errorf("插件不存在[%s]", tag) return m.add(c)
} }
func (m *pluginManage) get(tag string) (*PluginInfo, error) { func Update(c *Config) error {
if m.exists(tag) { err := c.Validate()
return m.plugins[tag], nil if err != nil {
return err
} }
return nil, fmt.Errorf("插件不存在[%s]", tag) err = Remove(c.Tag)
if err != nil {
return err
}
return m.add(c)
} }
func (m *pluginManage) close() { func Get(tag string) (*PluginInfo, error) {
for _, info := range m.plugins { p, err := m.get(tag)
if info.cleanup != nil { if err != nil {
info.cleanup() return nil, err
} }
return p, nil
} }
func GetAll() map[string]*PluginInfo {
return m.plugins
}
func Remove(tag string) error {
return m.remove(tag)
}
func Close() {
m.close()
m = nil
} }

64
manage/plugin.go Normal file
View File

@ -0,0 +1,64 @@
package manage
import (
"fmt"
"gitea.cdlsxd.cn/sdk/plugin/shared"
)
type PluginInfo struct {
Tag string
Impl shared.PluginService
cleanup func()
}
type pluginManage struct {
plugins map[string]*PluginInfo
}
func (m *pluginManage) exists(tag string) bool {
if _, ok := m.plugins[tag]; ok {
return true
}
return false
}
func (m *pluginManage) add(c *Config) error {
if m.exists(c.Tag) {
return fmt.Errorf("插件已存在[%s]", c.Tag)
}
impl, cleanup, err := newClient(c)
if err != nil {
cleanup()
return err
}
m.plugins[c.Tag] = &PluginInfo{
Tag: c.Tag,
Impl: impl,
cleanup: cleanup,
}
return nil
}
func (m *pluginManage) remove(tag string) error {
if m.exists(tag) {
m.plugins[tag].cleanup()
delete(m.plugins, tag)
return nil
}
return fmt.Errorf("插件不存在[%s]", tag)
}
func (m *pluginManage) get(tag string) (*PluginInfo, error) {
if p, ok := m.plugins[tag]; ok {
return p, nil
}
return nil, fmt.Errorf("插件不存在[%s]", tag)
}
func (m *pluginManage) close() {
for _, info := range m.plugins {
if info.cleanup != nil {
info.cleanup()
}
}
}