Print positions in the search playlist functions.

This commit is contained in:
jcorporation 2024-09-01 16:21:01 +02:00
parent a3a07280e8
commit b1067333dc
2 changed files with 17 additions and 7 deletions

1
NEWS
View File

@ -16,6 +16,7 @@ ver 0.24 (not yet released)
- "sticker find" supports sort and window parameter and new sticker compare operators "eq", "lt" and "gt"
- consume only idle flags that were subscribed to
- volume command is no longer deprecated
- searching stored playlists respond now with song position
* database
- attribute "added" shows when each song was added to the database
- fix integer overflows with 64-bit inode numbers

View File

@ -17,6 +17,8 @@
#include "Partition.hxx"
#include "Instance.hxx"
#include "PlaylistError.hxx"
#include <fmt/format.h>
#include "client/Response.hxx"
static void
playlist_provider_print(Response &r,
@ -69,27 +71,34 @@ playlist_provider_search_print(Response &r,
unsigned skip = start_index;
unsigned n = end_index - start_index;
unsigned position = 0;
while ((song = e.NextSong()) != nullptr) {
const bool detail = playlist_check_translate_song(*song, base_uri,
loader);
if (!filter->Match(static_cast<LightSong>(*song)))
continue;
if (skip > 0) {
--skip;
if (!filter->Match(static_cast<LightSong>(*song))) {
++position;
continue;
}
if (detail)
if (skip > 0) {
--skip;
++position;
continue;
}
if (detail) {
song_print_info(r, *song);
else
r.Fmt(FMT_STRING("Pos: {}\n"), position);
} else
/* fallback if no detail was requested or no
detail was available */
song_print_uri(r, *song);
if (--n == 0)
break;
++position;
}
}