diff options
author | Max Kellermann <max@duempel.org> | 2014-11-18 14:31:27 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-11-18 14:31:27 +0100 |
commit | f37481f843c3ae7aa0c43591c9c7fc4a501c1f5b (patch) | |
tree | d49da92d9bd96cf7ad9c5d7c1ebbd4d3a1cbd8d2 /src/db | |
parent | c3f6502be277ea7a9eb42babc4dc44ab2abf59e2 (diff) | |
download | mpd-f37481f843c3ae7aa0c43591c9c7fc4a501c1f5b.tar.gz mpd-f37481f843c3ae7aa0c43591c9c7fc4a501c1f5b.tar.xz mpd-f37481f843c3ae7aa0c43591c9c7fc4a501c1f5b.zip |
DatabaseCommands: add "window" parameter to "search"/"find"
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/DatabasePrint.cxx | 28 | ||||
-rw-r--r-- | src/db/DatabasePrint.hxx | 6 |
2 files changed, 31 insertions, 3 deletions
diff --git a/src/db/DatabasePrint.cxx b/src/db/DatabasePrint.cxx index 498aedf97..945ac6ab9 100644 --- a/src/db/DatabasePrint.cxx +++ b/src/db/DatabasePrint.cxx @@ -147,27 +147,49 @@ PrintPlaylistFull(Client &client, bool base, bool db_selection_print(Client &client, const DatabaseSelection &selection, - bool full, bool base, Error &error) + bool full, bool base, + unsigned window_start, unsigned window_end, + Error &error) { const Database *db = client.GetDatabase(error); if (db == nullptr) return false; + unsigned i = 0; + using namespace std::placeholders; const auto d = selection.filter == nullptr ? std::bind(full ? PrintDirectoryFull : PrintDirectoryBrief, std::ref(client), base, _1) : VisitDirectory(); - const auto s = std::bind(full ? PrintSongFull : PrintSongBrief, - std::ref(client), base, _1); + VisitSong s = std::bind(full ? PrintSongFull : PrintSongBrief, + std::ref(client), base, _1); const auto p = selection.filter == nullptr ? std::bind(full ? PrintPlaylistFull : PrintPlaylistBrief, std::ref(client), base, _1, _2) : VisitPlaylist(); + if (window_start > 0 || window_end < std::numeric_limits<int>::max()) + s = [s, window_start, window_end, &i](const LightSong &song, + Error &error2){ + const bool in_window = i >= window_start && i < window_end; + ++i; + return !in_window || s(song, error2); + }; + return db->Visit(selection, d, s, p, error); } +bool +db_selection_print(Client &client, const DatabaseSelection &selection, + bool full, bool base, + Error &error) +{ + return db_selection_print(client, selection, full, base, + 0, std::numeric_limits<int>::max(), + error); +} + static bool PrintSongURIVisitor(Client &client, const LightSong &song) { diff --git a/src/db/DatabasePrint.hxx b/src/db/DatabasePrint.hxx index 2ab5e703d..7e4dd8572 100644 --- a/src/db/DatabasePrint.hxx +++ b/src/db/DatabasePrint.hxx @@ -38,6 +38,12 @@ db_selection_print(Client &client, const DatabaseSelection &selection, bool full, bool base, Error &error); bool +db_selection_print(Client &client, const DatabaseSelection &selection, + bool full, bool base, + unsigned window_start, unsigned window_end, + Error &error); + +bool PrintUniqueTags(Client &client, unsigned type, uint32_t group_mask, const SongFilter *filter, Error &error); |