| package fs | |
| import ( | |
| "context" | |
| stdpath "path" | |
| "time" | |
| "github.com/alist-org/alist/v3/internal/model" | |
| "github.com/alist-org/alist/v3/internal/op" | |
| "github.com/alist-org/alist/v3/pkg/utils" | |
| "github.com/pkg/errors" | |
| ) | |
| func get(ctx context.Context, path string) (model.Obj, error) { | |
| path = utils.FixAndCleanPath(path) | |
| // maybe a virtual file | |
| if path != "/" { | |
| virtualFiles := op.GetStorageVirtualFilesByPath(stdpath.Dir(path)) | |
| for _, f := range virtualFiles { | |
| if f.GetName() == stdpath.Base(path) { | |
| return f, nil | |
| } | |
| } | |
| } | |
| storage, actualPath, err := op.GetStorageAndActualPath(path) | |
| if err != nil { | |
| // if there are no storage prefix with path, maybe root folder | |
| if path == "/" { | |
| return &model.Object{ | |
| Name: "root", | |
| Size: 0, | |
| Modified: time.Time{}, | |
| IsFolder: true, | |
| }, nil | |
| } | |
| return nil, errors.WithMessage(err, "failed get storage") | |
| } | |
| return op.Get(ctx, storage, actualPath) | |
| } | |