diff --git a/cista-front/src/repositories/Document.ts b/cista-front/src/repositories/Document.ts index a57e93b..9bf177a 100644 --- a/cista-front/src/repositories/Document.ts +++ b/cista-front/src/repositories/Document.ts @@ -30,13 +30,13 @@ export type errorEvent = { // Raw types the backend /api/watch sends us export type FileEntry = { - id: FUID + key: FUID size: number mtime: number } export type DirEntry = { - id: FUID + key: FUID size: number mtime: number dir: DirList @@ -47,7 +47,7 @@ export type DirList = Record export type UpdateEntry = { name: string deleted?: boolean - id?: FUID + key?: FUID size?: number mtime?: number dir?: DirList @@ -127,7 +127,7 @@ export class DocumentHandler { // @ts-ignore node = node.dir[elem.name] ||= {} } - if (elem.id !== undefined) node.id = elem.id + if (elem.key !== undefined) node.key = elem.key if (elem.size !== undefined) node.size = elem.size if (elem.mtime !== undefined) node.mtime = elem.mtime if (elem.dir !== undefined) node.dir = elem.dir diff --git a/cista-front/src/stores/documents.ts b/cista-front/src/stores/documents.ts index ffb422a..2c65231 100644 --- a/cista-front/src/stores/documents.ts +++ b/cista-front/src/stores/documents.ts @@ -60,10 +60,10 @@ export const useDocumentStore = defineStore({ // Transform data const dataMapped = [] for (const [name, attr] of Object.entries(matched)) { - const { id, size, mtime } = attr + const { key, size, mtime } = attr const element: Document = { name, - key: id, + key, size, sizedisp: formatSize(size), mtime, @@ -182,21 +182,22 @@ export const useDocumentStore = defineStore({ if (!('dir' in data)) return for (const [name, attr] of Object.entries(data.dir)) { const fullname = path ? `${path}/${name}` : name + const key = attr.key // Is this the file we are looking for? Ignore if nested within another selection. let r = relpath - if (selected.has(attr.id) && !relpath) { - ret.selected.add(attr.id) + if (selected.has(key) && !relpath) { + ret.selected.add(key) ret.rootdir[name] = attr r = name } else if (relpath) { r = `${relpath}/${name}` } if (r) { - ret.entries[attr.id] = attr - ret.fullpath[attr.id] = fullname - ret.relpath[attr.id] = r - ret.ids.push(attr.id) - if (!('dir' in attr)) ret.url[attr.id] = `/files/${fullname}` + ret.entries[key] = attr + ret.fullpath[key] = fullname + ret.relpath[key] = r + ret.ids.push(key) + if (!('dir' in attr)) ret.url[key] = `/files/${fullname}` } traverseDir(attr, fullname, r) } diff --git a/cista/protocol.py b/cista/protocol.py index 8008ac7..2bdf775 100644 --- a/cista/protocol.py +++ b/cista/protocol.py @@ -110,13 +110,13 @@ class ErrorMsg(msgspec.Struct): class FileEntry(msgspec.Struct): - id: str + key: str size: int mtime: int class DirEntry(msgspec.Struct): - id: str + key: str size: int mtime: int dir: DirList @@ -146,7 +146,7 @@ class UpdateEntry(msgspec.Struct, omit_defaults=True): name: str = "" deleted: bool = False - id: str | None = None + key: str | None = None size: int | None = None mtime: int | None = None dir: DirList | None = None diff --git a/cista/watching.py b/cista/watching.py index 5249d40..4005eaf 100644 --- a/cista/watching.py +++ b/cista/watching.py @@ -90,7 +90,9 @@ def format_tree(): return msgspec.json.encode( { "update": [ - UpdateEntry(id=root.id, size=root.size, mtime=root.mtime, dir=root.dir), + UpdateEntry( + key=root.key, size=root.size, mtime=root.mtime, dir=root.dir + ), ], }, ).decode() @@ -99,10 +101,11 @@ def format_tree(): def walk(path: Path) -> DirEntry | FileEntry | None: try: s = path.stat() - id_ = fuid(s) + key = fuid(s) + assert key, repr(key) mtime = int(s.st_mtime) if path.is_file(): - return FileEntry(id_, s.st_size, mtime) + return FileEntry(key, s.st_size, mtime) tree = { p.name: v @@ -115,7 +118,7 @@ def walk(path: Path) -> DirEntry | FileEntry | None: mtime = max(mtime, *(v.mtime for v in tree.values())) else: size = 0 - return DirEntry(id_, size, mtime, tree) + return DirEntry(key, size, mtime, tree) except FileNotFoundError: return None except OSError as e: