summaryrefslogtreecommitdiff
path: root/src/database/database.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/database/database.cpp')
-rw-r--r--src/database/database.cpp39
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