|
package search |
|
|
|
import ( |
|
"strings" |
|
|
|
"github.com/alist-org/alist/v3/drivers/alist_v3" |
|
"github.com/alist-org/alist/v3/drivers/base" |
|
"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/internal/op" |
|
"github.com/alist-org/alist/v3/internal/setting" |
|
"github.com/alist-org/alist/v3/pkg/utils" |
|
log "github.com/sirupsen/logrus" |
|
) |
|
|
|
func Progress() (*model.IndexProgress, error) { |
|
p := setting.GetStr(conf.IndexProgress) |
|
var progress model.IndexProgress |
|
err := utils.Json.UnmarshalFromString(p, &progress) |
|
return &progress, err |
|
} |
|
|
|
func WriteProgress(progress *model.IndexProgress) { |
|
p, err := utils.Json.MarshalToString(progress) |
|
if err != nil { |
|
log.Errorf("marshal progress error: %+v", err) |
|
} |
|
err = op.SaveSettingItem(&model.SettingItem{ |
|
Key: conf.IndexProgress, |
|
Value: p, |
|
Type: conf.TypeText, |
|
Group: model.SINGLE, |
|
Flag: model.PRIVATE, |
|
}) |
|
if err != nil { |
|
log.Errorf("save progress error: %+v", err) |
|
} |
|
} |
|
|
|
func updateIgnorePaths() { |
|
storages := op.GetAllStorages() |
|
ignorePaths := make([]string, 0) |
|
var skipDrivers = []string{"AList V2", "AList V3", "Virtual"} |
|
v3Visited := make(map[string]bool) |
|
for _, storage := range storages { |
|
if utils.SliceContains(skipDrivers, storage.Config().Name) { |
|
if storage.Config().Name == "AList V3" { |
|
addition := storage.GetAddition().(*alist_v3.Addition) |
|
allowIndexed, visited := v3Visited[addition.Address] |
|
if !visited { |
|
url := addition.Address + "/api/public/settings" |
|
res, err := base.RestyClient.R().Get(url) |
|
if err == nil { |
|
log.Debugf("allow_indexed body: %+v", res.String()) |
|
allowIndexed = utils.Json.Get(res.Body(), "data", conf.AllowIndexed).ToString() == "true" |
|
v3Visited[addition.Address] = allowIndexed |
|
} |
|
} |
|
log.Debugf("%s allow_indexed: %v", addition.Address, allowIndexed) |
|
if !allowIndexed { |
|
ignorePaths = append(ignorePaths, storage.GetStorage().MountPath) |
|
} |
|
} else { |
|
ignorePaths = append(ignorePaths, storage.GetStorage().MountPath) |
|
} |
|
} |
|
} |
|
customIgnorePaths := setting.GetStr(conf.IgnorePaths) |
|
if customIgnorePaths != "" { |
|
ignorePaths = append(ignorePaths, strings.Split(customIgnorePaths, "\n")...) |
|
} |
|
conf.SlicesMap[conf.IgnorePaths] = ignorePaths |
|
} |
|
|
|
func isIgnorePath(path string) bool { |
|
for _, ignorePath := range conf.SlicesMap[conf.IgnorePaths] { |
|
if strings.HasPrefix(path, ignorePath) { |
|
return true |
|
} |
|
} |
|
return false |
|
} |
|
|
|
func init() { |
|
op.RegisterSettingItemHook(conf.IgnorePaths, func(item *model.SettingItem) error { |
|
updateIgnorePaths() |
|
return nil |
|
}) |
|
op.RegisterStorageHook(func(typ string, storage driver.Driver) { |
|
var skipDrivers = []string{"AList V2", "AList V3", "Virtual"} |
|
if utils.SliceContains(skipDrivers, storage.Config().Name) { |
|
updateIgnorePaths() |
|
} |
|
}) |
|
} |
|
|