41 bool begin(FS& SD,
const char* beginPath =
"/") {
84 std::vector<TreeNode*, AllocatorPSRAM<TreeNode*>>
getAllFiles() {
85 std::vector<TreeNode*, AllocatorPSRAM<TreeNode*>> result;
101 std::vector<TreeNode*, AllocatorPSRAM<TreeNode*>>
tree_nodes;
109 result.push_back(&node);
122 if (self->parent_stack.empty()) self->parent_stack.push_back(
root);
125 while ((
int)self->parent_stack.size() > info.
level + 1) {
126 self->parent_stack.pop_back();
128 while ((
int)self->parent_stack.size() < info.
level + 1) {
129 self->parent_stack.push_back(
nullptr);
135 assert(node !=
nullptr);
137 node->file_name = info.
name;
138 node->parent = parent;
139 node->
id =
static_cast<uint32_t
>(self->tree_nodes.size());
140 if (parent !=
nullptr) parent->
children.push_back(node);
141 self->tree_nodes.push_back(node);
145 if (self->parent_stack.size() <=
static_cast<size_t>(info.
level + 1)) {
146 self->parent_stack.resize(
static_cast<size_t>(info.
level + 2),
nullptr);
148 self->parent_stack[
static_cast<size_t>(info.
level + 1)] = node;
Lightweight line parser for SdFat directory listings.
Node type representing files and directories for the SdFat directory tree.
Custom allocator that uses ESP32's PSRAM for memory allocation.
Definition: Allocator.h:24
Simple in-memory directory tree built using SdFat recursive directory listing.
Definition: SdFatDirectoryTree.h:33
void buildTree(TreeNode &node)
Definition: SdFatDirectoryTree.h:152
stringPSRAM path(uint32_t id)
Convenience helper to get a path by node id.
Definition: SdFatDirectoryTree.h:93
std::vector< TreeNode *, AllocatorPSRAM< TreeNode * > > tree_nodes
Definition: SdFatDirectoryTree.h:101
size_t size()
Returns the total number of nodes in the tree.
Definition: SdFatDirectoryTree.h:96
TreeNode & root()
Returns the root node of the tree.
Definition: SdFatDirectoryTree.h:68
static void onParsedCallback(SdFatFileInfo &info, void *ref)
Definition: SdFatDirectoryTree.h:117
void end()
Releases all dynamically allocated nodes and clears the tree.
Definition: SdFatDirectoryTree.h:58
FS * p_sd
Definition: SdFatDirectoryTree.h:100
TreeNode & getTreeNodeById(uint32_t id)
Finds a node by its numeric id.
Definition: SdFatDirectoryTree.h:75
std::vector< TreeNode * > parent_stack
Definition: SdFatDirectoryTree.h:102
SdFatParser parser
Definition: SdFatDirectoryTree.h:99
void collectAllFilesFrom(TreeNode &node, std::vector< TreeNode *, AllocatorPSRAM< TreeNode * > > &result)
Definition: SdFatDirectoryTree.h:105
std::vector< TreeNode *, AllocatorPSRAM< TreeNode * > > getAllFiles()
Collects all file nodes (non-directories) under the root.
Definition: SdFatDirectoryTree.h:84
bool begin(FS &SD, const char *beginPath="/")
Initializes the tree by scanning from a starting path.
Definition: SdFatDirectoryTree.h:41
Simple character-by-character parser that emits SdFatFileInfo via a callback.
Definition: SdFatParser.h:45
void setCallback(void(*cb)(SdFatFileInfo &, void *ref), void *ref=nullptr)
Sets the callback that receives parsed entries.
Definition: SdFatParser.h:82
Node in the directory tree representing either a file or a directory.
Definition: TreeNode.h:18
std::vector< TreeNode *, AllocatorPSRAM< TreeNode * > > children
Definition: TreeNode.h:23
uint32_t id
Definition: TreeNode.h:21
stringPSRAM file_name
Definition: TreeNode.h:22
bool is_dir
Definition: TreeNode.h:27
std::string path() const
Computes the full path from the root to this node.
Definition: TreeNode.h:87
TreeNode * parent
Definition: TreeNode.h:24
Definition: Allocator.h:13
std::basic_string< char, std::char_traits< char >, AllocatorPSRAM< char > > stringPSRAM
Definition: Allocator.h:106
Describes an entry from a parsed SdFat directory listing.
Definition: SdFatParser.h:21
bool is_directory
Definition: SdFatParser.h:26
int level
Definition: SdFatParser.h:29
std::string name
Definition: SdFatParser.h:24