From cd520b9360f0d0d4ab7582d2cbf2aa96060a0500 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 27 Apr 2023 16:03:55 +1000 Subject: Make queries a little less copy-paste --- src/database/database.cpp | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) (limited to 'src/database/database.cpp') diff --git a/src/database/database.cpp b/src/database/database.cpp index 8ca72771..2cff51ce 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -1,4 +1,5 @@ #include "database.hpp" +#include #include "esp_log.h" #include "ff.h" @@ -92,34 +93,24 @@ auto Database::Populate() -> std::future { }); } -auto Database::GetSongs(std::size_t page_size) -> std::future> { - return RunOnDbTask>([&]() -> DbResult { - std::unique_ptr it( - db_->NewIterator(leveldb::ReadOptions())); - it->Seek("title:"); - std::vector results; - IterateAndParse(it.get(), page_size, - [&](const leveldb::Slice& key, const leveldb::Slice& val) { - Song s; - s.title = key.ToString(); - results.push_back(s); - }); - return DbResult(results, std::move(it)); +auto parse_song(const leveldb::Slice& key, const leveldb::Slice& val) + -> std::optional { + Song s; + s.title = key.ToString(); + return s; +} + +auto Database::GetSongs(std::size_t page_size) -> std::future> { + return RunOnDbTask>([=, this]() -> Result { + return Query("title:", page_size, &parse_song); }); } -auto Database::GetMoreSongs(std::size_t page_size, DbResult continuation) - -> std::future> { - return RunOnDbTask>([&]() -> DbResult { - std::unique_ptr it(continuation.it()); - std::vector results; - IterateAndParse(it.get(), page_size, - [&](const leveldb::Slice& key, const leveldb::Slice& val) { - Song s; - s.title = key.ToString(); - results.push_back(s); - }); - return DbResult(results, std::move(it)); +auto Database::GetMoreSongs(std::size_t page_size, Continuation c) + -> std::future> { + leveldb::Iterator* it = c.release(); + return RunOnDbTask>([=, this]() -> Result { + return Query(it, page_size, &parse_song); }); } -- cgit v1.2.3