Commit c4537fe6 authored by Max Kellermann's avatar Max Kellermann

TagArchive: add TagBuilder overload with ScanGenericTags() fallback

Load APE/ID3 tags from archives.
parent 677334f5
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
#include "decoder/DecoderList.hxx" #include "decoder/DecoderList.hxx"
#include "tag/Tag.hxx" #include "tag/Tag.hxx"
#include "tag/TagBuilder.hxx" #include "tag/TagBuilder.hxx"
#include "tag/TagHandler.hxx"
#include "tag/Generic.hxx"
#include "TagFile.hxx" #include "TagFile.hxx"
#include "TagStream.hxx" #include "TagStream.hxx"
...@@ -127,7 +125,7 @@ Song::UpdateFileInArchive(const Storage &storage) ...@@ -127,7 +125,7 @@ Song::UpdateFileInArchive(const Storage &storage)
return false; return false;
TagBuilder tag_builder; TagBuilder tag_builder;
if (!tag_archive_scan(path_fs, full_tag_handler, &tag_builder)) if (!tag_archive_scan(path_fs, tag_builder))
return false; return false;
tag_builder.Commit(tag); tag_builder.Commit(tag);
......
...@@ -20,6 +20,9 @@ ...@@ -20,6 +20,9 @@
#include "config.h" #include "config.h"
#include "TagArchive.hxx" #include "TagArchive.hxx"
#include "TagStream.hxx" #include "TagStream.hxx"
#include "tag/Generic.hxx"
#include "tag/TagHandler.hxx"
#include "tag/TagBuilder.hxx"
#include "fs/Path.hxx" #include "fs/Path.hxx"
#include "util/Error.hxx" #include "util/Error.hxx"
#include "input/InputStream.hxx" #include "input/InputStream.hxx"
...@@ -42,3 +45,15 @@ tag_archive_scan(Path path, const TagHandler &handler, void *handler_ctx) ...@@ -42,3 +45,15 @@ tag_archive_scan(Path path, const TagHandler &handler, void *handler_ctx)
return tag_stream_scan(*is, handler, handler_ctx); return tag_stream_scan(*is, handler, handler_ctx);
} }
bool
tag_archive_scan(Path path, TagBuilder &builder)
{
assert(!path.IsNull());
Mutex mutex;
Cond cond;
InputStreamPtr is(OpenArchiveInputStream(path, mutex, cond,
IgnoreError()));
return is && tag_stream_scan(*is, builder);
}
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
class Path; class Path;
struct TagHandler; struct TagHandler;
class TagBuilder;
/** /**
* Scan the tags of a song file inside an archive. Invokes matching * Scan the tags of a song file inside an archive. Invokes matching
...@@ -36,4 +37,15 @@ struct TagHandler; ...@@ -36,4 +37,15 @@ struct TagHandler;
bool bool
tag_archive_scan(Path path, const TagHandler &handler, void *handler_ctx); tag_archive_scan(Path path, const TagHandler &handler, void *handler_ctx);
/**
* 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(Path path, TagBuilder &builder);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment