From 6ee76b7154a55b6bd12a4b695faed2bf49c2a5d5 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 29 Aug 2012 20:03:37 +0200 Subject: DatabaseSelection: add method Match() --- Makefile.am | 3 ++- src/DatabaseSelection.cxx | 27 +++++++++++++++++++++++++++ src/DatabaseSelection.hxx | 4 ++++ src/db/SimpleDatabasePlugin.cxx | 3 +-- 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 src/DatabaseSelection.cxx diff --git a/Makefile.am b/Makefile.am index b846183e4..ab1d11032 100644 --- a/Makefile.am +++ b/Makefile.am @@ -268,7 +268,7 @@ src_mpd_SOURCES = \ src/db_save.c src/db_save.h \ src/DatabasePlugin.hxx \ src/DatabaseVisitor.hxx \ - src/DatabaseSelection.hxx \ + src/DatabaseSelection.cxx src/DatabaseSelection.hxx \ src/exclude.c \ src/fd_util.c \ src/fifo_buffer.c src/fifo_buffer.h \ @@ -1063,6 +1063,7 @@ test_DumpDatabase_LDADD = \ $(GLIB_LIBS) test_DumpDatabase_SOURCES = test/DumpDatabase.cxx \ src/DatabaseRegistry.cxx \ + src/DatabaseSelection.cxx \ src/Directory.cxx src/directory_save.c \ src/playlist_vector.c src/playlist_database.c \ src/db_lock.c src/db_save.c \ diff --git a/src/DatabaseSelection.cxx b/src/DatabaseSelection.cxx new file mode 100644 index 000000000..72c3f9196 --- /dev/null +++ b/src/DatabaseSelection.cxx @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2003-2011 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "DatabaseSelection.hxx" +#include "SongFilter.hxx" + +bool +DatabaseSelection::Match(const song &song) const +{ + return match == nullptr || locate_list_song_match(&song, match); +} diff --git a/src/DatabaseSelection.hxx b/src/DatabaseSelection.hxx index 35e2c27c9..c5ee5cf0d 100644 --- a/src/DatabaseSelection.hxx +++ b/src/DatabaseSelection.hxx @@ -26,6 +26,7 @@ #include struct locate_item_list; +struct song; struct DatabaseSelection { /** @@ -47,6 +48,9 @@ struct DatabaseSelection { :uri(_uri), recursive(_recursive), match(_match) { assert(uri != NULL); } + + gcc_pure + bool Match(const song &song) const; }; #endif diff --git a/src/db/SimpleDatabasePlugin.cxx b/src/db/SimpleDatabasePlugin.cxx index 2d357eb98..1a16c336f 100644 --- a/src/db/SimpleDatabasePlugin.cxx +++ b/src/db/SimpleDatabasePlugin.cxx @@ -269,8 +269,7 @@ SimpleDatabase::Visit(const DatabaseSelection &selection, struct song *song; if (visit_song && (song = GetSong(selection.uri, NULL)) != NULL && - (selection.match == NULL || - locate_list_song_match(song, selection.match))) + selection.Match(*song)) return visit_song(*song, error_r); g_set_error(error_r, db_quark(), DB_NOT_FOUND, -- cgit v1.2.3