summaryrefslogtreecommitdiff
path: root/src/database
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-17 15:58:32 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-17 15:58:32 +1000
commitd8533c42df9d3ac250d896c9fd1077b8c9a9552b (patch)
treebe53ecc6ed7fcd4d8e5d46bd2e5a9c9868919e0c /src/database
parentf3c5eec0251ec98f90d324c88d3519de2e6ee5e0 (diff)
downloadtangara-fw-d8533c42df9d3ac250d896c9fd1077b8c9a9552b.tar.gz
Start on basic onboarding screens
Diffstat (limited to 'src/database')
-rw-r--r--src/database/CMakeLists.txt6
-rw-r--r--src/database/database.cpp10
-rw-r--r--src/database/include/db_events.hpp27
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