# SPDX-FileCopyrightText: ☭ Emery Hemingway # SPDX-License-Identifier: Unlicense import std/[dirs, os, paths] import preserves import syndicate, syndicate/relays import ../schema/[assertions, config] proc spawnFileSystemUsageActor*(turn: var Turn; root: Cap): Actor {.discardable.} = spawn("file-system-usage", turn) do (turn: var Turn): during(turn, root, ?:FileSystemUsageArguments) do (ds: Cap): var pat = ?Observe(pattern: !FileSystemUsage) ?? { 0: grab() } during(turn, ds, pat) do (lit: Literal[string]): var ass = FileSystemUsage(path: lit.value) if fileExists(ass.path): ass.size = getFileSize(ass.path) else: for fp in walkDirRec(paths.Path(lit.value), yieldFilter={pcFile}): var fs = getFileSize(string fp) inc(ass.size, fs) discard publish(turn, ds, ass) # TODO: updates? when isMainModule: runActor("main") do (turn: var Turn; root: Cap): connectStdio(turn, root) discard spawnFileSystemUsageActor(turn, root)