fix(search): empty parent where update (close #2810)

pull/3074/head
Noah Hsu 2023-01-16 17:33:24 +08:00
parent 1cfd47a258
commit 6453ae0968
7 changed files with 23 additions and 20 deletions

View File

@ -68,9 +68,9 @@ func (d *Local) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([
} }
thumb := "" thumb := ""
if d.Thumbnail && utils.GetFileType(f.Name()) == conf.IMAGE { if d.Thumbnail && utils.GetFileType(f.Name()) == conf.IMAGE {
thumb = common.GetApiUrl(nil) + stdpath.Join("/d", args.ReqPath, f.Name()) thumb = common.GetApiUrl(nil) + stdpath.Join("/d", utils.GetFullPath(d.MountPath, fullPath), f.Name())
thumb = utils.EncodePath(thumb, true) thumb = utils.EncodePath(thumb, true)
thumb += "?type=thumb&sign=" + sign.Sign(stdpath.Join(args.ReqPath, f.Name())) thumb += "?type=thumb&sign=" + sign.Sign(stdpath.Join(utils.GetFullPath(d.MountPath, fullPath), f.Name()))
} }
isFolder := f.IsDir() || isSymlinkDir(f, fullPath) isFolder := f.IsDir() || isSymlinkDir(f, fullPath)
var size int64 var size int64

View File

@ -23,7 +23,7 @@ func list(ctx context.Context, path string, refresh ...bool) ([]model.Obj, error
var _objs []model.Obj var _objs []model.Obj
if storage != nil { if storage != nil {
_objs, err = op.List(ctx, storage, actualPath, model.ListArgs{ _objs, err = op.List(ctx, storage, actualPath, model.ListArgs{
ReqPath: path, //ReqPath: path,
}, refresh...) }, refresh...)
if err != nil { if err != nil {
log.Errorf("%+v", err) log.Errorf("%+v", err)

View File

@ -7,7 +7,7 @@ import (
) )
type ListArgs struct { type ListArgs struct {
ReqPath string //ReqPath string
} }
type LinkArgs struct { type LinkArgs struct {

View File

@ -12,7 +12,7 @@ import (
"github.com/maruel/natural" "github.com/maruel/natural"
) )
type UnwrapObj interface { type ObjUnwrap interface {
Unwrap() Obj Unwrap() Obj
} }
@ -99,7 +99,6 @@ func ExtractFolder(objs []Obj, extractFolder string) {
}) })
} }
// Wrap
func WrapObjName(objs Obj) Obj { func WrapObjName(objs Obj) Obj {
return &ObjWrapName{Obj: objs} return &ObjWrapName{Obj: objs}
} }
@ -110,8 +109,8 @@ func WrapObjsName(objs []Obj) {
} }
} }
func UnwrapObjs(obj Obj) Obj { func UnwrapObj(obj Obj) Obj {
if unwrap, ok := obj.(UnwrapObj); ok { if unwrap, ok := obj.(ObjUnwrap); ok {
obj = unwrap.Unwrap() obj = unwrap.Unwrap()
} }
return obj return obj
@ -121,7 +120,7 @@ func GetThumb(obj Obj) (thumb string, ok bool) {
if obj, ok := obj.(Thumb); ok { if obj, ok := obj.(Thumb); ok {
return obj.Thumb(), true return obj.Thumb(), true
} }
if unwrap, ok := obj.(UnwrapObj); ok { if unwrap, ok := obj.(ObjUnwrap); ok {
return GetThumb(unwrap.Unwrap()) return GetThumb(unwrap.Unwrap())
} }
return thumb, false return thumb, false
@ -131,7 +130,7 @@ func GetUrl(obj Obj) (url string, ok bool) {
if obj, ok := obj.(URL); ok { if obj, ok := obj.(URL); ok {
return obj.URL(), true return obj.URL(), true
} }
if unwrap, ok := obj.(UnwrapObj); ok { if unwrap, ok := obj.(ObjUnwrap); ok {
return GetUrl(unwrap.Unwrap()) return GetUrl(unwrap.Unwrap())
} }
return url, false return url, false

View File

@ -130,9 +130,9 @@ func List(ctx context.Context, storage driver.Driver, path string, args model.Li
// call hooks // call hooks
go func(reqPath string, files []model.Obj) { go func(reqPath string, files []model.Obj) {
for _, hook := range objsUpdateHooks { for _, hook := range objsUpdateHooks {
hook(args.ReqPath, files) hook(reqPath, files)
} }
}(args.ReqPath, files) }(utils.GetFullPath(storage.GetStorage().MountPath, path), files)
// sort objs // sort objs
if storage.Config().LocalSort { if storage.Config().LocalSort {
@ -218,7 +218,7 @@ func GetUnwrap(ctx context.Context, storage driver.Driver, path string) (model.O
if err != nil { if err != nil {
return nil, err return nil, err
} }
return model.UnwrapObjs(obj), err return model.UnwrapObj(obj), err
} }
var linkCache = cache.NewMemCache(cache.WithShards[*model.Link](16)) var linkCache = cache.NewMemCache(cache.WithShards[*model.Link](16))
@ -338,7 +338,7 @@ func Move(ctx context.Context, storage driver.Driver, srcPath, dstDirPath string
if err != nil { if err != nil {
return errors.WithMessage(err, "failed to get src object") return errors.WithMessage(err, "failed to get src object")
} }
srcObj := model.UnwrapObjs(srcRawObj) srcObj := model.UnwrapObj(srcRawObj)
dstDir, err := GetUnwrap(ctx, storage, dstDirPath) dstDir, err := GetUnwrap(ctx, storage, dstDirPath)
if err != nil { if err != nil {
return errors.WithMessage(err, "failed to get dst dir") return errors.WithMessage(err, "failed to get dst dir")
@ -380,7 +380,7 @@ func Rename(ctx context.Context, storage driver.Driver, srcPath, dstName string,
if err != nil { if err != nil {
return errors.WithMessage(err, "failed to get src object") return errors.WithMessage(err, "failed to get src object")
} }
srcObj := model.UnwrapObjs(srcRawObj) srcObj := model.UnwrapObj(srcRawObj)
srcDirPath := stdpath.Dir(srcPath) srcDirPath := stdpath.Dir(srcPath)
switch s := storage.(type) { switch s := storage.(type) {
@ -460,7 +460,7 @@ func Remove(ctx context.Context, storage driver.Driver, path string) error {
switch s := storage.(type) { switch s := storage.(type) {
case driver.Remove: case driver.Remove:
err = s.Remove(ctx, model.UnwrapObjs(rawObj)) err = s.Remove(ctx, model.UnwrapObj(rawObj))
if err == nil { if err == nil {
delCacheObj(storage, dirPath, rawObj) delCacheObj(storage, dirPath, rawObj)
} }

View File

@ -9,10 +9,10 @@ func IsBalance(str string) bool {
} }
// GetActualMountPath remove balance suffix // GetActualMountPath remove balance suffix
func GetActualMountPath(virtualPath string) string { func GetActualMountPath(mountPath string) string {
bIndex := strings.LastIndex(virtualPath, ".balance") bIndex := strings.LastIndex(mountPath, ".balance")
if bIndex != -1 { if bIndex != -1 {
virtualPath = virtualPath[:bIndex] mountPath = mountPath[:bIndex]
} }
return virtualPath return mountPath
} }

View File

@ -80,3 +80,7 @@ func JoinBasePath(basePath, reqPath string) (string, error) {
} }
return stdpath.Join(FixAndCleanPath(basePath), FixAndCleanPath(reqPath)), nil return stdpath.Join(FixAndCleanPath(basePath), FixAndCleanPath(reqPath)), nil
} }
func GetFullPath(mountPath, path string) string {
return stdpath.Join(GetActualMountPath(mountPath), path)
}