summaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-16 13:14:45 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-16 13:14:45 +1000
commit5b7b88420b169d1dfdeea6d082762fccefbc7d49 (patch)
treee5bc4a44088a9ac62e1628ffa3265f4819c3c979 /src/database
parentc6bb42cdd21b63accd20012373a8a0e41d8566f5 (diff)
downloadtangara-fw-5b7b88420b169d1dfdeea6d082762fccefbc7d49.tar.gz
Fix issues with importing my entire library
Diffstat (limited to 'src/database')
-rw-r--r--src/database/database.cpp8
-rw-r--r--src/database/env_esp.cpp5
-rw-r--r--src/database/include/env_esp.hpp2
-rw-r--r--src/database/tag_parser.cpp6
4 files changed, 15 insertions, 6 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp
index 9206256f..a96b3eab 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -17,6 +17,7 @@
#include "esp_log.h"
#include "ff.h"
+#include "freertos/projdefs.h"
#include "leveldb/cache.h"
#include "leveldb/db.h"
#include "leveldb/iterator.h"
@@ -68,12 +69,13 @@ auto Database::Open(IFileGatherer* gatherer, ITagParser* parser)
return cpp::fail(DatabaseError::ALREADY_OPEN);
}
+ leveldb::sBackgroundThread.reset(
+ tasks::Worker::Start<tasks::Type::kDatabaseBackground>());
std::shared_ptr<tasks::Worker> worker(
tasks::Worker::Start<tasks::Type::kDatabase>());
- leveldb::sBackgroundThread = std::weak_ptr<tasks::Worker>(worker);
return worker
->Dispatch<cpp::result<Database*, DatabaseError>>(
- [&]() -> cpp::result<Database*, DatabaseError> {
+ [=]() -> cpp::result<Database*, DatabaseError> {
leveldb::DB* db;
leveldb::Cache* cache = leveldb::NewLRUCache(24 * 1024);
leveldb::Options options;
@@ -121,7 +123,7 @@ Database::~Database() {
delete db_;
delete cache_;
- leveldb::sBackgroundThread = std::weak_ptr<tasks::Worker>();
+ leveldb::sBackgroundThread.reset();
sIsDbOpen.store(false);
}
diff --git a/src/database/env_esp.cpp b/src/database/env_esp.cpp
index 704e0a54..ad1f2221 100644
--- a/src/database/env_esp.cpp
+++ b/src/database/env_esp.cpp
@@ -15,6 +15,7 @@
#include <cstring>
#include <functional>
#include <limits>
+#include <memory>
#include <mutex>
#include <queue>
#include <set>
@@ -39,7 +40,7 @@
namespace leveldb {
-std::weak_ptr<tasks::Worker> sBackgroundThread;
+std::shared_ptr<tasks::Worker> sBackgroundThread;
std::string ErrToStr(FRESULT err) {
switch (err) {
@@ -463,7 +464,7 @@ EspEnv::EspEnv() {}
void EspEnv::Schedule(
void (*background_work_function)(void* background_work_arg),
void* background_work_arg) {
- auto worker = sBackgroundThread.lock();
+ auto worker = sBackgroundThread;
if (worker) {
worker->Dispatch<void>(
[=]() { std::invoke(background_work_function, background_work_arg); });
diff --git a/src/database/include/env_esp.hpp b/src/database/include/env_esp.hpp
index c7da6d91..eba6e8a9 100644
--- a/src/database/include/env_esp.hpp
+++ b/src/database/include/env_esp.hpp
@@ -18,7 +18,7 @@
namespace leveldb {
-extern std::weak_ptr<tasks::Worker> sBackgroundThread;
+extern std::shared_ptr<tasks::Worker> sBackgroundThread;
// Tracks the files locked by EspEnv::LockFile().
//
diff --git a/src/database/tag_parser.cpp b/src/database/tag_parser.cpp
index 5bca0b58..83b0a796 100644
--- a/src/database/tag_parser.cpp
+++ b/src/database/tag_parser.cpp
@@ -73,6 +73,12 @@ static const char* kTag = "TAGS";
auto TagParserImpl::ReadAndParseTags(const std::string& path, TrackTags* out)
-> bool {
+ if (path.ends_with(".m4a")) {
+ // TODO(jacqueline): Re-enabled once libtags is fixed.
+ ESP_LOGW(kTag, "skipping m4a %s", path.c_str());
+ return false;
+ }
+
libtags::Aux aux;
aux.tags = out;
if (f_stat(path.c_str(), &aux.info) != FR_OK ||