manage
This commit is contained in:
parent
7cc22209f5
commit
0ea434699a
|
@ -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
|
|
||||||
}
|
|
|
@ -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 {
|
|
||||||
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 {
|
func Load(p []*Config) error {
|
||||||
if m.exists(c.Tag) {
|
for _, c := range p {
|
||||||
return fmt.Errorf("插件已存在[%s]", c.Tag)
|
err := Add(c)
|
||||||
}
|
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue