29 lines
1.0 KiB
Nim
29 lines
1.0 KiB
Nim
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
|
# SPDX-License-Identifier: Unlicense
|
|
|
|
import std/[dirs, os, paths]
|
|
import preserves
|
|
import syndicate
|
|
|
|
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:
|
|
import syndicate/relays
|
|
runActor("main") do (turn: var Turn):
|
|
resolveEnvironment(turn) do (turn: var Turn; ds: Cap):
|
|
discard spawnFileSystemUsageActor(turn, ds)
|