#ifndef DIRECTORYNODE_H_ #define DIRECTORYNODE_H_ class Print; #include #include class DirectoryNode { private: uint16_t id; String name; String dirPath; std::vector subdirectories; std::vector mp3Files; std::vector ids; String currentPlaying; uint16_t currentPlayingId = 0; uint16_t secondsPlayed = 0; String buildFullPath(const String& fileName) const; public: DirectoryNode(const String& nodeName); ~DirectoryNode(); static uint16_t idCounter; const String& getName() const; const uint16_t getId() const; const std::vector& getSubdirectories() const; const std::vector& getMP3Files() const; const String& getDirPath() const; String getFullPathByIndex(size_t index) const; size_t getNumOfFiles() const; void setCurrentPlaying(const String& mp3File); const String& getCurrentPlaying() const; const uint16_t getCurrentPlayingId() const; void setSecondsPlayed(const uint32_t seconds); uint32_t getSecondsPlayed() const; uint16_t getNextId(); void addSubdirectory(DirectoryNode* subdirectory); void addMP3File(const String& mp3File); void buildDirectoryTree(const char* currentPath); void printDirectoryTree(int level = 0) const; DirectoryNode* advanceToMP3(const String& songName); DirectoryNode* advanceToNextMP3(const String& currentGlobal); DirectoryNode* goToPreviousMP3(uint32_t thresholdSeconds = 3); DirectoryNode* findPreviousMP3Globally(const String& currentGlobal); void buildFlatMP3List(std::vector>& allMP3s); DirectoryNode* advanceToMP3(const uint16_t id); void advanceToFirstMP3InThisNode(); void streamDirectoryHTML(Print &out) const; DirectoryNode* findFirstDirectoryWithMP3s(); }; #endif /* DIRECTORYNODE_H_ */