Spaces:
Running
Running
package op | |
import ( | |
"regexp" | |
"strings" | |
"github.com/alist-org/alist/v3/internal/conf" | |
"github.com/alist-org/alist/v3/internal/driver" | |
"github.com/alist-org/alist/v3/internal/model" | |
"github.com/alist-org/alist/v3/pkg/utils" | |
"github.com/pkg/errors" | |
log "github.com/sirupsen/logrus" | |
) | |
// Obj | |
type ObjsUpdateHook = func(parent string, objs []model.Obj) | |
var ( | |
objsUpdateHooks = make([]ObjsUpdateHook, 0) | |
) | |
func RegisterObjsUpdateHook(hook ObjsUpdateHook) { | |
objsUpdateHooks = append(objsUpdateHooks, hook) | |
} | |
func HandleObjsUpdateHook(parent string, objs []model.Obj) { | |
for _, hook := range objsUpdateHooks { | |
hook(parent, objs) | |
} | |
} | |
// Setting | |
type SettingItemHook func(item *model.SettingItem) error | |
var settingItemHooks = map[string]SettingItemHook{ | |
conf.VideoTypes: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.VideoTypes] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
conf.AudioTypes: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.AudioTypes] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
conf.ImageTypes: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.ImageTypes] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
conf.TextTypes: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.TextTypes] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
conf.ProxyTypes: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.ProxyTypes] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
conf.ProxyIgnoreHeaders: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.ProxyIgnoreHeaders] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
conf.PrivacyRegs: func(item *model.SettingItem) error { | |
regStrs := strings.Split(item.Value, "\n") | |
regs := make([]*regexp.Regexp, 0, len(regStrs)) | |
for _, regStr := range regStrs { | |
reg, err := regexp.Compile(regStr) | |
if err != nil { | |
return errors.WithStack(err) | |
} | |
regs = append(regs, reg) | |
} | |
conf.PrivacyReg = regs | |
return nil | |
}, | |
conf.FilenameCharMapping: func(item *model.SettingItem) error { | |
err := utils.Json.UnmarshalFromString(item.Value, &conf.FilenameCharMap) | |
if err != nil { | |
return err | |
} | |
log.Debugf("filename char mapping: %+v", conf.FilenameCharMap) | |
return nil | |
}, | |
conf.IgnoreDirectLinkParams: func(item *model.SettingItem) error { | |
conf.SlicesMap[conf.IgnoreDirectLinkParams] = strings.Split(item.Value, ",") | |
return nil | |
}, | |
} | |
func RegisterSettingItemHook(key string, hook SettingItemHook) { | |
settingItemHooks[key] = hook | |
} | |
func HandleSettingItemHook(item *model.SettingItem) (hasHook bool, err error) { | |
if hook, ok := settingItemHooks[item.Key]; ok { | |
return true, hook(item) | |
} | |
return false, nil | |
} | |
// Storage | |
type StorageHook func(typ string, storage driver.Driver) | |
var storageHooks = make([]StorageHook, 0) | |
func callStorageHooks(typ string, storage driver.Driver) { | |
for _, hook := range storageHooks { | |
hook(typ, storage) | |
} | |
} | |
func RegisterStorageHook(hook StorageHook) { | |
storageHooks = append(storageHooks, hook) | |
} | |