package db import ( "regexp" "strings" "github.com/alist-org/alist/v3/internal/conf" "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" ) type SettingItemHook func(item *model.SettingItem) error var settingItemHooks = map[string]SettingItemHook{ conf.VideoTypes: func(item *model.SettingItem) error { conf.TypesMap[conf.VideoTypes] = strings.Split(item.Value, ",") return nil }, conf.AudioTypes: func(item *model.SettingItem) error { conf.TypesMap[conf.AudioTypes] = strings.Split(item.Value, ",") return nil }, conf.ImageTypes: func(item *model.SettingItem) error { conf.TypesMap[conf.ImageTypes] = strings.Split(item.Value, ",") return nil }, conf.TextTypes: func(item *model.SettingItem) error { conf.TypesMap[conf.TextTypes] = strings.Split(item.Value, ",") return nil }, conf.ProxyTypes: func(item *model.SettingItem) error { conf.TypesMap[conf.ProxyTypes] = 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 }, } func HandleSettingItem(item *model.SettingItem) (bool, error) { if hook, ok := settingItemHooks[item.Key]; ok { return true, hook(item) } return false, nil } func RegisterSettingItemHook(key string, hook SettingItemHook) { settingItemHooks[key] = hook } // func HandleSettingItems(items []model.SettingItem) error { // for i := range items { // if err := HandleSettingItem(&items[i]); err != nil { // return err // } // } // return nil // }