diff --git a/src/web_interface/file_tree/file_tree_node.py b/src/web_interface/file_tree/file_tree_node.py
index 50d7ac978..19f73b897 100644
--- a/src/web_interface/file_tree/file_tree_node.py
+++ b/src/web_interface/file_tree/file_tree_node.py
@@ -33,7 +33,7 @@ def __init__( # noqa: PLR0913
self.root_uid = root_uid
self.virtual = virtual
self.name = name
- self.size = size
+ self._size = size
self.mode = mode
self.type = mime_type
self.has_children = has_children
@@ -109,3 +109,9 @@ def get_id(self) -> tuple[str, bool]:
:return: The id, consisting of the name and ``virtual`` (whether the node is a directory)
"""
return self.name, self.virtual
+
+ @property
+ def size(self) -> int | None:
+ if self._size is None and self.virtual: # virtual = directory
+ self._size = sum(child.size for child in self.get_list_of_child_nodes() if child.size is not None)
+ return self._size
diff --git a/src/web_interface/file_tree/jstree_conversion.py b/src/web_interface/file_tree/jstree_conversion.py
index c34d931de..a1645e98d 100644
--- a/src/web_interface/file_tree/jstree_conversion.py
+++ b/src/web_interface/file_tree/jstree_conversion.py
@@ -25,7 +25,8 @@ def convert_to_jstree_node(node: FileTreeNode):
def _get_directory_jstree_node(node: FileTreeNode):
- return _get_jstree_node_contents(f'{node.name}', '#', '/static/file_icons/folder.svg')
+ label = f'{node.name} ({human_readable_file_size(node.size)})'
+ return _get_jstree_node_contents(label, '#', '/static/file_icons/folder.svg')
def _get_not_analyzed_jstree_node(node: FileTreeNode):