diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-10-04 15:38:18 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-10-04 15:38:18 +1100 |
| commit | ee8e5234562c2b9ee1bb261785135abd4f718f83 (patch) | |
| tree | cecd2f215dcd7298e17e9538902da8c59b7fadb8 /src/database/database.cpp | |
| parent | 28633e857f86a21d874117fd677de5e8ad21d8d3 (diff) | |
| download | tangara-fw-ee8e5234562c2b9ee1bb261785135abd4f718f83.tar.gz | |
Add a basic database reindex screen
Diffstat (limited to 'src/database/database.cpp')
| -rw-r--r-- | src/database/database.cpp | 20 |
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. |
