diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/input/ScanTags.cxx | 40 | ||||
-rw-r--r-- | src/input/ScanTags.hxx | 42 | ||||
-rw-r--r-- | test/run_input.cxx | 20 |
4 files changed, 91 insertions, 12 deletions
diff --git a/Makefile.am b/Makefile.am index 3beb8bd71..a9a6d1e28 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1328,6 +1328,7 @@ libinput_a_SOURCES = \ src/input/Ptr.hxx \ src/input/InputPlugin.hxx \ src/input/RemoteTagScanner.hxx \ + src/input/ScanTags.cxx src/input/ScanTags.hxx \ src/input/Reader.cxx src/input/Reader.hxx \ src/input/TextInputStream.cxx src/input/TextInputStream.hxx \ src/input/ThreadInputStream.cxx src/input/ThreadInputStream.hxx \ diff --git a/src/input/ScanTags.cxx b/src/input/ScanTags.cxx new file mode 100644 index 000000000..64183097f --- /dev/null +++ b/src/input/ScanTags.cxx @@ -0,0 +1,40 @@ +/* + * Copyright 2003-2017 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 "config.h" +#include "ScanTags.hxx" +#include "RemoteTagScanner.hxx" +#include "InputPlugin.hxx" +#include "Registry.hxx" + +std::unique_ptr<RemoteTagScanner> +InputScanTags(const char *uri, RemoteTagHandler &handler) +{ + input_plugins_for_each_enabled(plugin) { + if (plugin->scan_tags == nullptr) + continue; + + auto scanner = plugin->scan_tags(uri, handler); + if (scanner) + return scanner; + } + + /* unsupported URI */ + return nullptr; +} diff --git a/src/input/ScanTags.hxx b/src/input/ScanTags.hxx new file mode 100644 index 000000000..7d1a31ded --- /dev/null +++ b/src/input/ScanTags.hxx @@ -0,0 +1,42 @@ +/* + * Copyright 2003-2017 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. + */ + +#ifndef MPD_INPUT_SCAN_TAGS_HXX +#define MPD_INPUT_SCAN_TAGS_HXX + +#include "check.h" + +#include <memory> + +class RemoteTagScanner; +class RemoteTagHandler; + +/** + * Find an #InputPlugin which supports the given URI and let it create + * a #RemoteTagScanner. + * + * Throws exception on error + * + * @return a #RemoteTagScanner or nullptr if the URI is not supported + * by any (enabled) plugin + */ +std::unique_ptr<RemoteTagScanner> +InputScanTags(const char *uri, RemoteTagHandler &handler); + +#endif diff --git a/test/run_input.cxx b/test/run_input.cxx index 0933f4f12..fc5937f68 100644 --- a/test/run_input.cxx +++ b/test/run_input.cxx @@ -26,6 +26,7 @@ #include "input/Registry.hxx" #include "input/InputPlugin.hxx" #include "input/RemoteTagScanner.hxx" +#include "input/ScanTags.hxx" #include "event/Thread.hxx" #include "thread/Cond.hxx" #include "Log.hxx" @@ -213,20 +214,15 @@ Scan(const char *uri) { DumpRemoteTagHandler handler; - input_plugins_for_each_enabled(plugin) { - if (plugin->scan_tags == nullptr) - continue; - - auto scanner = plugin->scan_tags(uri, handler); - if (scanner) { - scanner->Start(); - tag_save(stdout, handler.Wait()); - return EXIT_SUCCESS; - } + auto scanner = InputScanTags(uri, handler); + if (!scanner) { + fprintf(stderr, "Unsupported URI\n"); + return EXIT_FAILURE; } - fprintf(stderr, "Unsupported URI\n"); - return EXIT_FAILURE; + scanner->Start(); + tag_save(stdout, handler.Wait()); + return EXIT_SUCCESS; } int main(int argc, char **argv) |