diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-08-17 15:58:32 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-08-17 15:58:32 +1000 |
| commit | d8533c42df9d3ac250d896c9fd1077b8c9a9552b (patch) | |
| tree | be53ecc6ed7fcd4d8e5d46bd2e5a9c9868919e0c /src/database | |
| parent | f3c5eec0251ec98f90d324c88d3519de2e6ee5e0 (diff) | |
| download | tangara-fw-d8533c42df9d3ac250d896c9fd1077b8c9a9552b.tar.gz | |
Start on basic onboarding screens
Diffstat (limited to 'src/database')
| -rw-r--r-- | src/database/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/database/database.cpp | 10 | ||||
| -rw-r--r-- | src/database/include/db_events.hpp | 27 |
3 files changed, 41 insertions, 2 deletions
diff --git a/src/database/CMakeLists.txt b/src/database/CMakeLists.txt index c5cc59cb..129920cd 100644 --- a/src/database/CMakeLists.txt +++ b/src/database/CMakeLists.txt @@ -3,9 +3,11 @@ # SPDX-License-Identifier: GPL-3.0-only idf_component_register( - SRCS "env_esp.cpp" "database.cpp" "track.cpp" "records.cpp" "file_gatherer.cpp" "tag_parser.cpp" "index.cpp" + SRCS "env_esp.cpp" "database.cpp" "track.cpp" "records.cpp" + "file_gatherer.cpp" "tag_parser.cpp" "index.cpp" INCLUDE_DIRS "include" - REQUIRES "result" "span" "esp_psram" "fatfs" "libtags" "komihash" "cbor" "tasks" "shared_string" "util") + REQUIRES "result" "span" "esp_psram" "fatfs" "libtags" "komihash" "cbor" + "tasks" "shared_string" "util" "tinyfsm" "events") target_compile_options(${COMPONENT_LIB} PRIVATE ${EXTRA_WARNINGS}) diff --git a/src/database/database.cpp b/src/database/database.cpp index e6341e43..2a5b3236 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -27,7 +27,9 @@ #include "leveldb/slice.h" #include "leveldb/write_batch.h" +#include "db_events.hpp" #include "env_esp.hpp" +#include "event_queue.hpp" #include "file_gatherer.hpp" #include "records.hpp" #include "result.hpp" @@ -131,6 +133,7 @@ Database::~Database() { } auto Database::Update() -> std::future<void> { + events::Ui().Dispatch(event::UpdateStarted{}); return worker_task_->Dispatch<void>([&]() -> void { leveldb::ReadOptions read_options; read_options.fill_cache = false; @@ -151,6 +154,9 @@ auto Database::Update() -> std::future<void> { // Stage 1: verify all existing tracks are still valid. ESP_LOGI(kTag, "verifying existing tracks"); + events::Ui().Dispatch(event::UpdateProgress{ + .stage = event::UpdateProgress::Stage::kVerifyingExistingTracks, + }); { leveldb::Iterator* it = db_->NewIterator(read_options); OwningSlice prefix = EncodeDataPrefix(); @@ -206,6 +212,9 @@ auto Database::Update() -> std::future<void> { // Stage 2: search for newly added files. ESP_LOGI(kTag, "scanning for new tracks"); + events::Ui().Dispatch(event::UpdateProgress{ + .stage = event::UpdateProgress::Stage::kScanningForNewTracks, + }); file_gatherer_->FindFiles("", [&](const std::string& path) { TrackTags tags; if (!tag_parser_->ReadAndParseTags(path, &tags) || @@ -254,6 +263,7 @@ auto Database::Update() -> std::future<void> { existing_data->filepath().c_str(), path.c_str()); } }); + events::Ui().Dispatch(event::UpdateFinished{}); }); } diff --git a/src/database/include/db_events.hpp b/src/database/include/db_events.hpp new file mode 100644 index 00000000..c071c6d4 --- /dev/null +++ b/src/database/include/db_events.hpp @@ -0,0 +1,27 @@ +/* + * Copyright 2023 jacqueline <me@jacqueline.id.au> + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#pragma once + +#include "tinyfsm.hpp" + +namespace database { +namespace event { + +struct UpdateStarted : tinyfsm::Event {}; + +struct UpdateFinished : tinyfsm::Event {}; + +struct UpdateProgress : tinyfsm::Event { + enum class Stage { + kVerifyingExistingTracks, + kScanningForNewTracks, + }; + Stage stage; +}; + +} // namespace event +} // namespace database |
