summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/TagArchive.cxx13
-rw-r--r--src/TagArchive.hxx13
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