mirror of https://github.com/Xhofe/alist
feat(alias): auto flatten if only one root
parent
b8bc94306d
commit
443f5ffbcc
|
@ -14,7 +14,9 @@ import (
|
||||||
type Alias struct {
|
type Alias struct {
|
||||||
model.Storage
|
model.Storage
|
||||||
Addition
|
Addition
|
||||||
pathMap map[string][]string
|
pathMap map[string][]string
|
||||||
|
autoFlatten bool
|
||||||
|
oneKey string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Alias) Config() driver.Config {
|
func (d *Alias) Config() driver.Config {
|
||||||
|
@ -38,6 +40,12 @@ func (d *Alias) Init(ctx context.Context) error {
|
||||||
k, v := getPair(path)
|
k, v := getPair(path)
|
||||||
d.pathMap[k] = append(d.pathMap[k], v)
|
d.pathMap[k] = append(d.pathMap[k], v)
|
||||||
}
|
}
|
||||||
|
if len(d.pathMap) == 1 {
|
||||||
|
for k := range d.pathMap {
|
||||||
|
d.oneKey = k
|
||||||
|
}
|
||||||
|
d.autoFlatten = true
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +62,7 @@ func (d *Alias) Get(ctx context.Context, path string) (model.Obj, error) {
|
||||||
Path: "/",
|
Path: "/",
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
root, sub := getRootAndPath(path)
|
root, sub := d.getRootAndPath(path)
|
||||||
dsts, ok := d.pathMap[root]
|
dsts, ok := d.pathMap[root]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errs.ObjectNotFound
|
return nil, errs.ObjectNotFound
|
||||||
|
@ -70,10 +78,10 @@ func (d *Alias) Get(ctx context.Context, path string) (model.Obj, error) {
|
||||||
|
|
||||||
func (d *Alias) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
|
func (d *Alias) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
|
||||||
path := dir.GetPath()
|
path := dir.GetPath()
|
||||||
if utils.PathEqual(path, "/") {
|
if utils.PathEqual(path, "/") && !d.autoFlatten {
|
||||||
return d.listRoot(), nil
|
return d.listRoot(), nil
|
||||||
}
|
}
|
||||||
root, sub := getRootAndPath(path)
|
root, sub := d.getRootAndPath(path)
|
||||||
dsts, ok := d.pathMap[root]
|
dsts, ok := d.pathMap[root]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errs.ObjectNotFound
|
return nil, errs.ObjectNotFound
|
||||||
|
@ -89,7 +97,7 @@ func (d *Alias) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Alias) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
|
func (d *Alias) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
|
||||||
root, sub := getRootAndPath(file.GetPath())
|
root, sub := d.getRootAndPath(file.GetPath())
|
||||||
dsts, ok := d.pathMap[root]
|
dsts, ok := d.pathMap[root]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errs.ObjectNotFound
|
return nil, errs.ObjectNotFound
|
||||||
|
|
|
@ -38,7 +38,10 @@ func getPair(path string) (string, string) {
|
||||||
return stdpath.Base(path), path
|
return stdpath.Base(path), path
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRootAndPath(path string) (string, string) {
|
func (d *Alias) getRootAndPath(path string) (string, string) {
|
||||||
|
if d.autoFlatten {
|
||||||
|
return d.oneKey, path
|
||||||
|
}
|
||||||
path = strings.TrimPrefix(path, "/")
|
path = strings.TrimPrefix(path, "/")
|
||||||
parts := strings.SplitN(path, "/", 2)
|
parts := strings.SplitN(path, "/", 2)
|
||||||
if len(parts) == 1 {
|
if len(parts) == 1 {
|
||||||
|
|
Loading…
Reference in New Issue