diff options
-rw-r--r-- | src/TagArchive.cxx | 13 | ||||
-rw-r--r-- | src/TagArchive.hxx | 13 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/TagArchive.cxx b/src/TagArchive.cxx index 20a9c7a2e..935669025 100644 --- a/src/TagArchive.cxx +++ b/src/TagArchive.cxx @@ -23,6 +23,7 @@ #include "tag/Generic.hxx" #include "tag/TagHandler.hxx" #include "tag/TagBuilder.hxx" +#include "archive/ArchiveFile.hxx" #include "fs/Path.hxx" #include "util/Error.hxx" #include "input/InputStream.hxx" @@ -57,3 +58,15 @@ tag_archive_scan(Path path, TagBuilder &builder) IgnoreError())); return is && tag_stream_scan(*is, builder); } + +bool +tag_archive_scan(ArchiveFile &archive, const char *path_utf8, + TagBuilder &builder) +{ + Mutex mutex; + Cond cond; + + InputStreamPtr is(archive.OpenStream(path_utf8, mutex, cond, + IgnoreError())); + return is && tag_stream_scan(*is, builder); +} diff --git a/src/TagArchive.hxx b/src/TagArchive.hxx index 3c32341ad..0791bf6eb 100644 --- a/src/TagArchive.hxx +++ b/src/TagArchive.hxx @@ -22,6 +22,7 @@ #include "check.h" +class ArchiveFile; class Path; struct TagHandler; class TagBuilder; @@ -48,4 +49,16 @@ tag_archive_scan(Path path, const TagHandler &handler, void *handler_ctx); bool tag_archive_scan(Path path, TagBuilder &builder); +/** + * Scan the tags of a song file inside an archive. Invokes matching + * decoder plugins, and falls back to generic scanners (APE and ID3) + * if no tags were found (but the file was recognized). + * + * @return true if the file was recognized (even if no metadata was + * found) + */ +bool +tag_archive_scan(ArchiveFile &archive, const char *path_utf8, + TagBuilder &builder); + #endif |