diff options
Diffstat (limited to 'src/database/database.cpp')
| -rw-r--r-- | src/database/database.cpp | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp index 558f63ce..cfac77af 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -1,13 +1,16 @@ #include "database.hpp" #include "esp_log.h" +#include "ff.h" #include "leveldb/cache.h" #include "env_esp.hpp" +#include "leveldb/options.h" namespace database { static SingletonEnv<leveldb::EspEnv> sEnv; +static const char *kTag = "DB"; auto Database::Open() -> cpp::result<Database*, DatabaseError> { leveldb::DB* db; @@ -23,7 +26,7 @@ auto Database::Open() -> cpp::result<Database*, DatabaseError> { auto status = leveldb::DB::Open(options, "/.db", &db); if (!status.ok()) { delete cache; - ESP_LOGE("DB", "failed to open db, status %s", status.ToString().c_str()); + ESP_LOGE(kTag, "failed to open db, status %s", status.ToString().c_str()); return cpp::fail(FAILED_TO_OPEN); } @@ -35,4 +38,38 @@ Database::Database(leveldb::DB* db, leveldb::Cache* cache) Database::~Database() {} +FRESULT scan_files(const std::string &path) { + FRESULT res; + FF_DIR dir; + static FILINFO fno; + + res = f_opendir(&dir, path.c_str()); + if (res == FR_OK) { + for (;;) { + res = f_readdir(&dir, &fno); + if (res != FR_OK || fno.fname[0] == 0) break; + if (fno.fname[0] == '.') continue; + if (fno.fattrib & AM_DIR) { + std::string new_path = path + "/" + fno.fname; + res = scan_files(new_path); + if (res != FR_OK) break; + } else { + ESP_LOGI(kTag, "found %s", fno.fname); + } + } + f_closedir(&dir); + } + + return res; +} + +auto Database::Initialise() -> void { + // TODO(jacqueline): Abstractions lol + scan_files("/"); +} + +auto Database::Update() -> void { + // TODO(jacqueline): Incremental updates! +} + } // namespace database |
