diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-07-09 14:41:02 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-07-09 14:41:02 +1000 |
| commit | 370d1853b5d099de28c032def4ce3e53b7d735ad (patch) | |
| tree | 062b6dea507082d28c7bfc2feb7ced450bcd64c8 /src | |
| parent | 41e0605f17a784e8f125b3ad10ddfe5ef63337d9 (diff) | |
| download | tangara-fw-370d1853b5d099de28c032def4ce3e53b7d735ad.tar.gz | |
Break FatfsStreamFactory's dep on ServiceLocator
Diffstat (limited to 'src')
| -rw-r--r-- | src/tangara/audio/audio_fsm.cpp | 3 | ||||
| -rw-r--r-- | src/tangara/audio/fatfs_stream_factory.cpp | 12 | ||||
| -rw-r--r-- | src/tangara/audio/fatfs_stream_factory.hpp | 11 | ||||
| -rw-r--r-- | src/tangara/database/database.cpp | 6 | ||||
| -rw-r--r-- | src/tangara/database/database.hpp | 10 | ||||
| -rw-r--r-- | src/tangara/system_fsm/service_locator.hpp | 2 |
6 files changed, 30 insertions, 14 deletions
diff --git a/src/tangara/audio/audio_fsm.cpp b/src/tangara/audio/audio_fsm.cpp index 8f04c6c1..ad60ab86 100644 --- a/src/tangara/audio/audio_fsm.cpp +++ b/src/tangara/audio/audio_fsm.cpp @@ -363,7 +363,8 @@ void Uninitialised::react(const system_fsm::BootComplete& ev) { sDrainBuffers = std::make_unique<drivers::OutputBuffers>( kTrackDrainLatencySamples, kSystemDrainLatencySamples); - sStreamFactory.reset(new FatfsStreamFactory(*sServices)); + sStreamFactory.reset( + new FatfsStreamFactory(sServices->database(), sServices->tag_parser())); sI2SOutput.reset(new I2SAudioOutput(sServices->gpios(), *sDrainBuffers)); sBtOutput.reset(new BluetoothAudioOutput( sServices->bluetooth(), *sDrainBuffers, sServices->bg_worker())); diff --git a/src/tangara/audio/fatfs_stream_factory.cpp b/src/tangara/audio/fatfs_stream_factory.cpp index 80677b2d..735ec134 100644 --- a/src/tangara/audio/fatfs_stream_factory.cpp +++ b/src/tangara/audio/fatfs_stream_factory.cpp @@ -10,7 +10,6 @@ #include <memory> #include <string> -#include "database/database.hpp" #include "esp_log.h" #include "ff.h" #include "freertos/portmacro.h" @@ -19,10 +18,10 @@ #include "audio/audio_source.hpp" #include "audio/fatfs_source.hpp" #include "codec.hpp" +#include "database/database.hpp" #include "database/tag_parser.hpp" #include "database/track.hpp" #include "drivers/spi.hpp" -#include "system_fsm/service_locator.hpp" #include "tasks.hpp" #include "types.hpp" @@ -30,12 +29,13 @@ namespace audio { -FatfsStreamFactory::FatfsStreamFactory(system_fsm::ServiceLocator& services) - : services_(services) {} +FatfsStreamFactory::FatfsStreamFactory(database::Handle&& handle, + database::ITagParser& parser) + : db_(handle), tag_parser_(parser) {} auto FatfsStreamFactory::create(database::TrackId id, uint32_t offset) -> std::shared_ptr<TaggedStream> { - auto db = services_.database().lock(); + auto db = db_.lock(); if (!db) { return {}; } @@ -48,7 +48,7 @@ auto FatfsStreamFactory::create(database::TrackId id, uint32_t offset) auto FatfsStreamFactory::create(std::string path, uint32_t offset) -> std::shared_ptr<TaggedStream> { - auto tags = services_.tag_parser().ReadAndParseTags(path); + auto tags = tag_parser_.ReadAndParseTags(path); if (!tags) { ESP_LOGE(kTag, "failed to read tags"); return {}; diff --git a/src/tangara/audio/fatfs_stream_factory.hpp b/src/tangara/audio/fatfs_stream_factory.hpp index 858d2131..84073d2d 100644 --- a/src/tangara/audio/fatfs_stream_factory.hpp +++ b/src/tangara/audio/fatfs_stream_factory.hpp @@ -6,23 +6,21 @@ #pragma once -#include <stdint.h> #include <cstddef> #include <cstdint> #include <future> #include <memory> #include <string> -#include "database/database.hpp" -#include "database/track.hpp" #include "ff.h" #include "freertos/portmacro.h" #include "audio/audio_source.hpp" #include "codec.hpp" +#include "database/database.hpp" #include "database/future_fetcher.hpp" #include "database/tag_parser.hpp" -#include "system_fsm/service_locator.hpp" +#include "database/track.hpp" #include "tasks.hpp" #include "types.hpp" @@ -33,7 +31,7 @@ namespace audio { */ class FatfsStreamFactory { public: - explicit FatfsStreamFactory(system_fsm::ServiceLocator&); + explicit FatfsStreamFactory(database::Handle&&, database::ITagParser&); auto create(database::TrackId, uint32_t offset = 0) -> std::shared_ptr<TaggedStream>; @@ -47,7 +45,8 @@ class FatfsStreamFactory { auto ContainerToStreamType(database::Container) -> std::optional<codecs::StreamType>; - system_fsm::ServiceLocator& services_; + database::Handle db_; + database::ITagParser& tag_parser_; }; } // namespace audio diff --git a/src/tangara/database/database.cpp b/src/tangara/database/database.cpp index cf1430b3..85700431 100644 --- a/src/tangara/database/database.cpp +++ b/src/tangara/database/database.cpp @@ -684,6 +684,12 @@ auto Database::countRecords(const SearchKey& c) -> size_t { return count; } +Handle::Handle(std::shared_ptr<Database>& db) : db_(db) {} + +auto Handle::lock() -> std::shared_ptr<Database> { + return db_; +} + auto SearchKey::startKey() const -> std::string_view { if (key) { return *key; diff --git a/src/tangara/database/database.hpp b/src/tangara/database/database.hpp index d2de7c72..c2e72568 100644 --- a/src/tangara/database/database.hpp +++ b/src/tangara/database/database.hpp @@ -128,6 +128,16 @@ class Database { auto countRecords(const SearchKey& c) -> size_t; }; +class Handle { + public: + Handle(std::shared_ptr<Database>& db); + + auto lock() -> std::shared_ptr<Database>; + + private: + std::shared_ptr<Database>& db_; +}; + /* * Container for the data needed to iterate through database records. This is a * lower-level type that the higher-level iterators are built from; most users diff --git a/src/tangara/system_fsm/service_locator.hpp b/src/tangara/system_fsm/service_locator.hpp index 3d136f3a..d441fa70 100644 --- a/src/tangara/system_fsm/service_locator.hpp +++ b/src/tangara/system_fsm/service_locator.hpp @@ -92,7 +92,7 @@ class ServiceLocator { auto haptics(std::unique_ptr<drivers::Haptics> i) { haptics_ = std::move(i); } - auto database() -> std::weak_ptr<database::Database> { return database_; } + auto database() -> database::Handle { return database_; } auto database(std::unique_ptr<database::Database> i) { database_ = std::move(i); |
