Przeglądaj źródła

feat():uninstall plugin (#505)

Co-authored-by: EMqmyd <mayuedong@emx.io>
EMQmyd 4 lat temu
rodzic
commit
a967146dfd
4 zmienionych plików z 39 dodań i 9 usunięć
  1. 15 4
      plugins/funcMeta.go
  2. 8 5
      plugins/manager.go
  3. 7 0
      plugins/sinkMeta.go
  4. 9 0
      plugins/sourceMeta.go

+ 15 - 4
plugins/funcMeta.go

@@ -54,9 +54,10 @@ func newUiFuncs(fi *fileFuncs) *uiFuncs {
 	return uis
 }
 
-var g_funcMetadata []*uiFuncs
+var g_funcMetadata map[string]*uiFuncs
 
 func (m *Manager) readFuncMetaDir() error {
+	g_funcMetadata = make(map[string]*uiFuncs)
 	confDir, err := common.GetConfLoc()
 	if nil != err {
 		return err
@@ -80,6 +81,13 @@ func (m *Manager) readFuncMetaDir() error {
 	return nil
 }
 
+func (m *Manager) uninstalFunc(name string) {
+	if ui, ok := g_funcMetadata[name+".json"]; ok {
+		if nil != ui.About {
+			ui.About.Installed = false
+		}
+	}
+}
 func (m *Manager) readFuncMetaFile(filePath string) error {
 	fiName := path.Base(filePath)
 	fis := new(fileFuncs)
@@ -94,10 +102,13 @@ func (m *Manager) readFuncMetaFile(filePath string) error {
 	} else {
 		_, fis.About.Installed = m.registry.Get(FUNCTION, strings.TrimSuffix(fiName, `.json`))
 	}
-	g_funcMetadata = append(g_funcMetadata, newUiFuncs(fis))
+	g_funcMetadata[fiName] = newUiFuncs(fis)
 	common.Log.Infof("funcMeta file : %s", fiName)
 	return nil
 }
-func GetFunctions() []*uiFuncs {
-	return g_funcMetadata
+func GetFunctions() (ret []*uiFuncs) {
+	for _, v := range g_funcMetadata {
+		ret = append(ret, v)
+	}
+	return ret
 }

+ 8 - 5
plugins/manager.go

@@ -310,13 +310,16 @@ func (m *Manager) Delete(t PluginType, name string, stop bool) error {
 	paths := []string{
 		soPath,
 	}
-	if err := os.Remove(path.Join(m.etcDir, PluginTypes[t], name+".json")); nil != err {
-		common.Log.Errorf("delMetadataFile %s:%v", name+".json", err)
-	}
-
-	if t == SOURCE {
+	switch t {
+	case SOURCE:
 		paths = append(paths, path.Join(m.etcDir, PluginTypes[t], name+".yaml"))
+		m.uninstalSource(name)
+	case SINK:
+		m.uninstalSink(name)
+	case FUNCTION:
+		m.uninstalFunc(name)
 	}
+
 	for _, p := range paths {
 		_, err := os.Stat(p)
 		if err == nil {

+ 7 - 0
plugins/sinkMeta.go

@@ -182,6 +182,13 @@ func (m *Manager) readSinkMetaDir() error {
 	return nil
 }
 
+func (m *Manager) uninstalSink(name string) {
+	if ui, ok := g_sinkMetadata[name+".json"]; ok {
+		if nil != ui.About {
+			ui.About.Installed = false
+		}
+	}
+}
 func (m *Manager) readSinkMetaFile(filePath string) error {
 	finame := path.Base(filePath)
 	pluginName := strings.TrimSuffix(finame, `.json`)

+ 9 - 0
plugins/sourceMeta.go

@@ -57,6 +57,15 @@ func newUiSource(fi *fileSource) (*uiSource, error) {
 
 var g_sourceProperty map[string]*sourceProperty
 
+func (m *Manager) uninstalSource(name string) {
+	if v, ok := g_sourceProperty[name+".json"]; ok {
+		if ui := v.meta; nil != ui {
+			if nil != ui.About {
+				ui.About.Installed = false
+			}
+		}
+	}
+}
 func (m *Manager) readSourceMetaFile(filePath string) error {
 	fileName := path.Base(filePath)
 	if "mqtt_source.json" == fileName {