aboutsummaryrefslogtreecommitdiffstats
path: root/src/dbUtils.c
diff options
context:
space:
mode:
authorgeneticdrift <geneticdrift@iotide.com>2012-06-27 09:26:03 +0200
committerMax Kellermann <max@duempel.org>2012-06-27 09:49:17 +0200
commit799843cc9703bd764425b77a1cdd231c3cd9e9ac (patch)
tree6f1bf6178099b84f727917d9de07bd728af6cdaf /src/dbUtils.c
parent16e91baa799e579aa0bad78d7f4291aec8ab7a05 (diff)
downloadmpd-799843cc9703bd764425b77a1cdd231c3cd9e9ac.tar.gz
mpd-799843cc9703bd764425b77a1cdd231c3cd9e9ac.tar.xz
mpd-799843cc9703bd764425b77a1cdd231c3cd9e9ac.zip
New command searchaddpl
Search and add search result to a stored playlist.
Diffstat (limited to '')
-rw-r--r--src/dbUtils.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/dbUtils.c b/src/dbUtils.c
index 5a30c14be..c212d9f9c 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -164,3 +164,46 @@ search_add_songs(struct player_control *pc, const char *uri,
return success;
}
+
+struct search_add_playlist_data {
+ const char *playlist;
+ const struct locate_item_list *criteria;
+};
+
+static bool
+searchaddpl_visitor_song(struct song *song, void *_data,
+ G_GNUC_UNUSED GError **error_r)
+{
+ struct search_add_playlist_data *data = _data;
+
+ if (!locate_song_search(song, data->criteria))
+ return true;
+
+ if (!spl_append_song(data->playlist, song, error_r))
+ return false;
+
+ return true;
+}
+
+static const struct db_visitor searchaddpl_visitor = {
+ .song = searchaddpl_visitor_song,
+};
+
+bool
+search_add_to_playlist(const char *uri, const char *path_utf8,
+ const struct locate_item_list *criteria,
+ GError **error_r)
+{
+ struct locate_item_list *new_list
+ = locate_item_list_casefold(criteria);
+ struct search_add_playlist_data data = {
+ .playlist = path_utf8,
+ .criteria = new_list,
+ };
+
+ bool success = db_walk(uri, &searchaddpl_visitor, &data, error_r);
+
+ locate_item_list_free(new_list);
+
+ return success;
+}