ids, resume function
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
#include "DirectoryNode.h"
|
||||
|
||||
|
||||
DirectoryNode::DirectoryNode(const String &nodeName)
|
||||
: name(nodeName), currentPlaying(nullptr) {}
|
||||
: name(nodeName), currentPlaying(nullptr) {
|
||||
id = DirectoryNode::idCounter;
|
||||
DirectoryNode::idCounter++;
|
||||
}
|
||||
|
||||
DirectoryNode::~DirectoryNode()
|
||||
{
|
||||
@@ -11,6 +15,12 @@ DirectoryNode::~DirectoryNode()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const uint16_t DirectoryNode::getId() const
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
const String &DirectoryNode::getName() const
|
||||
{
|
||||
return name;
|
||||
@@ -29,6 +39,11 @@ const std::vector<String> &DirectoryNode::getMP3Files() const
|
||||
void DirectoryNode::setCurrentPlaying(const String *mp3File)
|
||||
{
|
||||
currentPlaying = mp3File;
|
||||
for (int i=0;i<mp3Files.size();i++) {
|
||||
if (mp3Files[i] == *mp3File && ids.size()>i) {
|
||||
currentPlayingId = ids[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const String *DirectoryNode::getCurrentPlaying() const
|
||||
@@ -36,6 +51,17 @@ const String *DirectoryNode::getCurrentPlaying() const
|
||||
return currentPlaying;
|
||||
}
|
||||
|
||||
const uint16_t DirectoryNode::getCurrentPlayingId() const
|
||||
{
|
||||
return currentPlayingId;
|
||||
}
|
||||
|
||||
uint16_t DirectoryNode::getNextId() {
|
||||
uint16_t next = DirectoryNode::idCounter;
|
||||
DirectoryNode::idCounter++;
|
||||
return next;
|
||||
}
|
||||
|
||||
void DirectoryNode::addSubdirectory(DirectoryNode *subdirectory)
|
||||
{
|
||||
subdirectories.push_back(subdirectory);
|
||||
@@ -44,6 +70,7 @@ void DirectoryNode::addSubdirectory(DirectoryNode *subdirectory)
|
||||
void DirectoryNode::addMP3File(const String &mp3File)
|
||||
{
|
||||
mp3Files.push_back(mp3File);
|
||||
ids.push_back(getNextId());
|
||||
}
|
||||
|
||||
void DirectoryNode::setSecondsPlayed(const uint32_t seconds) {
|
||||
@@ -65,7 +92,7 @@ void DirectoryNode::buildDirectoryTree(const char *currentPath)
|
||||
break;
|
||||
}
|
||||
|
||||
if (entry.isDirectory() && strcmp(entry.name(),sys_dir.c_str()))
|
||||
if (entry.isDirectory() && entry.name()[0] != '.' && strcmp(entry.name(),sys_dir.c_str()))
|
||||
{
|
||||
DirectoryNode *newNode = new DirectoryNode(entry.name());
|
||||
subdirectories.push_back(newNode);
|
||||
@@ -74,6 +101,7 @@ void DirectoryNode::buildDirectoryTree(const char *currentPath)
|
||||
else if (String(entry.name()).endsWith(".mp3"))
|
||||
{
|
||||
mp3Files.push_back(entry.name());
|
||||
ids.push_back(getNextId());
|
||||
}
|
||||
entry.close();
|
||||
}
|
||||
@@ -127,10 +155,43 @@ DirectoryNode *DirectoryNode::findFirstDirectoryWithMP3s()
|
||||
|
||||
void DirectoryNode::advanceToFirstMP3InThisNode() {
|
||||
if (mp3Files.size()>0) {
|
||||
currentPlaying = &mp3Files[0];
|
||||
setCurrentPlaying(&mp3Files[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DirectoryNode* DirectoryNode::advanceToMP3(const uint16_t id) {
|
||||
for (auto subdir : subdirectories)
|
||||
{
|
||||
if (subdir->getId()==id) {
|
||||
subdir->advanceToFirstMP3InThisNode();
|
||||
return subdir;
|
||||
}
|
||||
|
||||
// Have each subdirectory advance its song
|
||||
for (size_t i = 0; i < subdir->ids.size(); i++)
|
||||
{
|
||||
if (id == subdir->ids[i])
|
||||
{
|
||||
// Found the current MP3 file
|
||||
if (i < subdir->mp3Files.size() - 1)
|
||||
{
|
||||
subdir->currentPlaying = &subdir->mp3Files[i];
|
||||
subdir->currentPlayingId = id;
|
||||
return subdir;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we get here, there were no MP3 files or subdirectories left to check
|
||||
currentPlaying = nullptr;
|
||||
Serial.println("no more nodes found");
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
DirectoryNode* DirectoryNode::advanceToMP3(const String* currentGlobal) {
|
||||
for (auto subdir : subdirectories)
|
||||
{
|
||||
@@ -147,7 +208,7 @@ DirectoryNode* DirectoryNode::advanceToMP3(const String* currentGlobal) {
|
||||
// Found the current MP3 file
|
||||
if (i < subdir->mp3Files.size() - 1)
|
||||
{
|
||||
subdir->currentPlaying = &subdir->mp3Files[i];
|
||||
subdir->setCurrentPlaying(&subdir->mp3Files[i]);
|
||||
return subdir;
|
||||
}
|
||||
|
||||
@@ -169,13 +230,13 @@ DirectoryNode* DirectoryNode::advanceToNextMP3(const String* currentGlobal)
|
||||
{
|
||||
for (size_t i = 0; i < mp3Files.size(); i++)
|
||||
{
|
||||
if (*currentGlobal == mp3Files[i])
|
||||
if (*currentGlobal==mp3Files[i])
|
||||
{
|
||||
// Found the current playing MP3 file
|
||||
if (i < mp3Files.size() - 1)
|
||||
{
|
||||
// Advance to the next MP3 file in the same directory
|
||||
currentPlaying = &mp3Files[i + 1];
|
||||
setCurrentPlaying(&mp3Files[i + 1]);
|
||||
return this;
|
||||
}
|
||||
useFirst = true;
|
||||
@@ -190,10 +251,9 @@ DirectoryNode* DirectoryNode::advanceToNextMP3(const String* currentGlobal)
|
||||
// Therefore, we need to recursively look in our subdirectories.
|
||||
for (auto subdir : subdirectories)
|
||||
{
|
||||
Serial.println("searching next node");
|
||||
|
||||
if (useFirst && subdir->mp3Files.size()>0) {
|
||||
subdir->currentPlaying = &subdir->mp3Files[0];
|
||||
subdir->setCurrentPlaying(&subdir->mp3Files[0]);
|
||||
return subdir;
|
||||
}
|
||||
|
||||
@@ -206,7 +266,7 @@ DirectoryNode* DirectoryNode::advanceToNextMP3(const String* currentGlobal)
|
||||
if (i < subdir->mp3Files.size() - 1)
|
||||
{
|
||||
// Advance to the next MP3 file in the same directory
|
||||
subdir->currentPlaying = &subdir->mp3Files[i + 1];
|
||||
subdir->setCurrentPlaying(&subdir->mp3Files[i + 1]);
|
||||
return subdir;
|
||||
} else {
|
||||
useFirst = true;
|
||||
@@ -232,12 +292,12 @@ String DirectoryNode::getDirectoryStructureHTML() const
|
||||
}
|
||||
|
||||
if (name!="/") {
|
||||
html += "<li><b>" + name + "</b></li>\n";
|
||||
html += "<li data-id=\""+String(id)+"\"><b>" + name + "</b></li>\n";
|
||||
}
|
||||
|
||||
for (const String &mp3File : mp3Files)
|
||||
for (int i=0;i<mp3Files.size();i++)
|
||||
{
|
||||
html += "<li>" + mp3File + "</li>\n";
|
||||
html += "<li data-id=\""+String(ids[i])+"\">" + mp3Files[i] + "</li>\n";
|
||||
}
|
||||
|
||||
for (DirectoryNode *childNode : subdirectories)
|
||||
|
||||
Reference in New Issue
Block a user