Files
alist/server
okatu-loli e36c68e4db feat(api): add virtual_path field on fs/list and fs/get responses
The existing `path` field on ObjResp/ObjLabelResp returns whatever the
storage driver writes into model.Object.Path, and that contract has
quietly diverged across drivers:

- Local sets it to the physical disk path
  (e.g. `/data/data/com.termux/files/home/storage/download/foo.tar.gz`)
- Cloud drivers (Quark / Baidu / 115 / …) leave it empty
- Some other drivers fill it with their own internal id-like path

Clients that need the canonical alist virtual path (e.g. for `share`,
`fs/copy`, navigation) cannot rely on `path` alone. The frontend has
been working around this with branchy code such as
`pathJoin(getCurrentPath(), name)` in some places and
`obj.path` in others; one such mismatch caused a share regression on
Local mounts whose root_folder_path differs from the mount path
(visible as `failed get storage: storage not found; rawPath: ...`).

Add a `virtual_path` field that is always the alist virtual path for
the object:

- `toObjsResp`  -> `FixAndCleanPath(stdpath.Join(parent, obj.Name))`
- `FsGet`       -> `FixAndCleanPath(reqPath)`

`path` is left untouched for backwards compatibility. Clients should
prefer `virtual_path` for anything that talks to other alist APIs.
2026-05-29 10:33:43 +08:00
..
2026-04-15 20:50:27 +08:00