summaryrefslogtreecommitdiff
path: root/src/database/database.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-10-04 15:38:18 +1100
committerjacqueline <me@jacqueline.id.au>2023-10-04 15:38:18 +1100
commitee8e5234562c2b9ee1bb261785135abd4f718f83 (patch)
treececd2f215dcd7298e17e9538902da8c59b7fadb8 /src/database/database.cpp
parent28633e857f86a21d874117fd677de5e8ad21d8d3 (diff)
downloadtangara-fw-ee8e5234562c2b9ee1bb261785135abd4f718f83.tar.gz
Add a basic database reindex screen
Diffstat (limited to 'src/database/database.cpp')
-rw-r--r--src/database/database.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp
index 1ecd72e0..ad81cfcf 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -136,14 +136,18 @@ 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,
- });
{
+ uint64_t num_processed = 0;
std::unique_ptr<leveldb::Iterator> it{db_->NewIterator(read_options)};
OwningSlice prefix = EncodeDataPrefix();
it->Seek(prefix.slice);
while (it->Valid() && it->key().starts_with(prefix.slice)) {
+ num_processed++;
+ events::Ui().Dispatch(event::UpdateProgress{
+ .stage = event::UpdateProgress::Stage::kVerifyingExistingTracks,
+ .val = num_processed,
+ });
+
std::shared_ptr<TrackData> track = ParseDataValue(it->value());
if (!track) {
// The value was malformed. Drop this record.
@@ -195,10 +199,14 @@ 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,
- });
+ uint64_t num_processed = 0;
file_gatherer_.FindFiles("", [&](const std::pmr::string& path) {
+ num_processed++;
+ events::Ui().Dispatch(event::UpdateProgress{
+ .stage = event::UpdateProgress::Stage::kScanningForNewTracks,
+ .val = num_processed,
+ });
+
std::shared_ptr<TrackTags> tags = tag_parser_.ReadAndParseTags(path);
if (!tags || tags->encoding() == Container::kUnsupported) {
// No parseable tags; skip this fiile.