TagArchive: add TagBuilder overload with ScanGenericTags() fallback
Load APE/ID3 tags from archives.
This commit is contained in:
parent
677334f5a9
commit
c4537fe6f6
@ -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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
|
|
||||||
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;
|
|||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user