printTree method
Implementation
Future<void> printTree(
String path,
void Function(String) printLine, {
int maxDepth = 3,
}) async {
try {
final root = await resolvePath(path);
if (root['type'] != 'folder') {
printLine("βββ π ${p.basename(path)}");
return;
}
final rootUuid = root['uuid'];
final adjacency = await fetchAndParseTree(rootUuid);
void printNode(String parentUuid, int currentDepth, String prefix) {
if (currentDepth >= maxDepth) return;
final children = adjacency[parentUuid] ?? [];
children.sort((a, b) {
if (a['type'] != b['type']) {
return a['type'] == 'folder' ? -1 : 1;
}
return (a['name'] as String)
.toLowerCase()
.compareTo((b['name'] as String).toLowerCase());
});
for (var i = 0; i < children.length; i++) {
final item = children[i];
final isLast = (i == children.length - 1);
final connector = isLast ? "βββ " : "βββ ";
if (item['type'] == 'folder') {
printLine("$prefix$connectorπ ${item['name']}/");
final childPrefix = prefix + (isLast ? " " : "β ");
printNode(item['uuid'], currentDepth + 1, childPrefix);
} else {
final size = formatSize(item['size']);
printLine("$prefix$connectorπ ${item['name']} ($size)");
}
}
}
printNode(rootUuid, 0, "");
} catch (e) {
printLine("βββ β Error: $e");
}
}