config: abstract fs utils to fix esp32 builds
This commit is contained in:
parent
6797889b4c
commit
ce65e7e7f0
49
src/Config.h
49
src/Config.h
@ -2,7 +2,7 @@
|
|||||||
#include <Figments.h>
|
#include <Figments.h>
|
||||||
#include "JsonCoordinateMapping.h"
|
#include "JsonCoordinateMapping.h"
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include <LittleFS.h>
|
#include "FsUtils.h"
|
||||||
|
|
||||||
class Configuration {
|
class Configuration {
|
||||||
public:
|
public:
|
||||||
@ -59,55 +59,8 @@ struct ConfigService: public Task {
|
|||||||
const CoordinateMapping* coordMap() const { return &m_jsonMap; }
|
const CoordinateMapping* coordMap() const { return &m_jsonMap; }
|
||||||
const char* loadedProfile() const;
|
const char* loadedProfile() const;
|
||||||
void overrideProfile(const char* profileName);
|
void overrideProfile(const char* profileName);
|
||||||
const char* getConfigValue(const char* key) const;
|
|
||||||
const std::vector<Command>& commands() const override;
|
const std::vector<Command>& commands() const override;
|
||||||
|
|
||||||
struct filename_iterator: public std::iterator<std::input_iterator_tag, const char*> {
|
|
||||||
Dir dir;
|
|
||||||
String ret;
|
|
||||||
bool valid;
|
|
||||||
const char* suffix;
|
|
||||||
explicit filename_iterator() : suffix(NULL), valid(false) {}
|
|
||||||
explicit filename_iterator(const char* path, const char* suffix) : dir(LittleFS.openDir(path)), valid(true), suffix(suffix) {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
|
|
||||||
void next() {
|
|
||||||
if (!valid) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int extPos = -1;
|
|
||||||
do {
|
|
||||||
valid = dir.next();
|
|
||||||
Log.info("valid %F", valid);
|
|
||||||
if (valid) {
|
|
||||||
String fname = dir.fileName();
|
|
||||||
extPos = fname.lastIndexOf(suffix);
|
|
||||||
Log.info("compare %s %d", fname.c_str(), extPos);
|
|
||||||
if (extPos != -1) {
|
|
||||||
ret = fname.substring(0, extPos);
|
|
||||||
Log.info("found %s", ret.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (valid && extPos == -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
filename_iterator& operator++() {
|
|
||||||
next();
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
filename_iterator& operator++(int) {filename_iterator ret = *this; ++(*this); return ret;}
|
|
||||||
bool operator==(const filename_iterator &other) const { return valid == other.valid;}
|
|
||||||
bool operator!=(const filename_iterator &other) const { return !(*this == other); }
|
|
||||||
const char* operator*() const {
|
|
||||||
if (!valid) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ret.c_str();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
filename_iterator mapsBegin() const { return filename_iterator("/maps/", ".json"); }
|
filename_iterator mapsBegin() const { return filename_iterator("/maps/", ".json"); }
|
||||||
filename_iterator mapsEnd() const { return filename_iterator(); }
|
filename_iterator mapsEnd() const { return filename_iterator(); }
|
||||||
|
|
||||||
|
57
src/FsUtils.cpp
Normal file
57
src/FsUtils.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#include "FsUtils.h"
|
||||||
|
|
||||||
|
filename_iterator::filename_iterator()
|
||||||
|
: suffix(NULL),
|
||||||
|
valid(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
filename_iterator::filename_iterator(const char* path, const char* suffix)
|
||||||
|
#ifdef BOARD_ESP8266
|
||||||
|
: dir(LittleFS.openDir(path)),
|
||||||
|
#endif
|
||||||
|
#ifdef BOARD_ESP32
|
||||||
|
: dir(LittleFS.open(path)),
|
||||||
|
#endif
|
||||||
|
valid(true),
|
||||||
|
suffix(suffix)
|
||||||
|
{
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
filename_iterator::next()
|
||||||
|
{
|
||||||
|
if (!valid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int extPos = -1;
|
||||||
|
do {
|
||||||
|
#ifdef BOARD_ESP8266
|
||||||
|
valid = dir.next();
|
||||||
|
if (valid) {
|
||||||
|
String fname = dir.fileName();
|
||||||
|
extPos = fname.lastIndexOf(suffix);
|
||||||
|
if (extPos != -1) {
|
||||||
|
ret = fname.substring(0, extPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef BOARD_ESP32
|
||||||
|
File next = dir.openNextFile();
|
||||||
|
valid = (bool)next;
|
||||||
|
if (valid && !next.isDirectory()) {
|
||||||
|
String fname = next.name();
|
||||||
|
extPos = fname.lastIndexOf(suffix);
|
||||||
|
if (extPos != -1) {
|
||||||
|
ret = fname.substring(0, extPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} while (valid && extPos == -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
filename_iterator& filename_iterator::operator++()
|
||||||
|
{
|
||||||
|
next();
|
||||||
|
return *this;
|
||||||
|
}
|
33
src/FsUtils.h
Normal file
33
src/FsUtils.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
#include <LittleFS.h>
|
||||||
|
|
||||||
|
struct filename_iterator: public std::iterator<std::input_iterator_tag, const char*> {
|
||||||
|
public:
|
||||||
|
filename_iterator();
|
||||||
|
filename_iterator(const char* path, const char* suffix);
|
||||||
|
void next();
|
||||||
|
filename_iterator& operator++();
|
||||||
|
filename_iterator& operator++(int) {filename_iterator ret = *this; ++(*this); return ret;}
|
||||||
|
bool operator==(const filename_iterator &other) const { return valid == other.valid;}
|
||||||
|
bool operator!=(const filename_iterator &other) const { return !(*this == other); }
|
||||||
|
const char* operator*() const {
|
||||||
|
if (!valid) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return ret.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
String ret;
|
||||||
|
bool valid;
|
||||||
|
const char* suffix;
|
||||||
|
|
||||||
|
#ifdef BOARD_ESP8266
|
||||||
|
Dir dir;
|
||||||
|
#endif
|
||||||
|
#ifdef BOARD_ESP32
|
||||||
|
File dir;
|
||||||
|
#endif
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user