Files
umbrix-libcore/extension/interface.go
2024-09-28 20:31:38 +02:00

46 lines
1.1 KiB
Go

package extension
import (
"fmt"
"log"
"github.com/hiddify/hiddify-core/common"
)
var (
allExtensionsMap = make(map[string]ExtensionFactory)
enabledExtensionsMap = make(map[string]*Extension)
generalExtensionData = mustSaveExtensionData{
ExtensionStatusMap: make(map[string]bool),
}
)
type mustSaveExtensionData struct {
ExtensionStatusMap map[string]bool `json:"extensionStatusMap"`
}
func RegisterExtension(factory ExtensionFactory) error {
if _, ok := allExtensionsMap[factory.Id]; ok {
err := fmt.Errorf("Extension with ID %s already exists", factory.Id)
log.Fatal(err)
return err
}
allExtensionsMap[factory.Id] = factory
common.Storage.GetExtensionData("default", &generalExtensionData)
if val, ok := generalExtensionData.ExtensionStatusMap[factory.Id]; ok && val {
loadExtension(factory)
}
return nil
}
func loadExtension(factory ExtensionFactory) error {
extension := factory.Builder()
extension.init(factory.Id)
// fmt.Printf("Registered extension: %+v\n", extension)
enabledExtensionsMap[factory.Id] = &extension
return nil
}