diff options
Diffstat (limited to 'src/database')
| -rw-r--r-- | src/database/database.cpp | 8 | ||||
| -rw-r--r-- | src/database/env_esp.cpp | 5 | ||||
| -rw-r--r-- | src/database/include/env_esp.hpp | 2 | ||||
| -rw-r--r-- | src/database/tag_parser.cpp | 6 |
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 || |
