diff options
Diffstat (limited to 'src/decoder/plugins/FlacMetadata.cxx')
-rw-r--r-- | src/decoder/plugins/FlacMetadata.cxx | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/src/decoder/plugins/FlacMetadata.cxx b/src/decoder/plugins/FlacMetadata.cxx index ee4053b26..a4150f6ef 100644 --- a/src/decoder/plugins/FlacMetadata.cxx +++ b/src/decoder/plugins/FlacMetadata.cxx @@ -79,11 +79,11 @@ flac_comment_value(const FLAC__StreamMetadata_VorbisComment_Entry *entry, static bool flac_copy_comment(const FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *name, TagType tag_type, - const TagHandler &handler, void *handler_ctx) + TagHandler &handler) noexcept { const char *value = flac_comment_value(entry, name); if (value != nullptr) { - tag_handler_invoke_tag(handler, handler_ctx, tag_type, value); + handler.OnTag(tag_type, value); return true; } @@ -92,36 +92,33 @@ flac_copy_comment(const FLAC__StreamMetadata_VorbisComment_Entry *entry, static void flac_scan_comment(const FLAC__StreamMetadata_VorbisComment_Entry *entry, - const TagHandler &handler, void *handler_ctx) + TagHandler &handler) noexcept { - if (handler.pair != nullptr) { + if (handler.WantPair()) { const char *comment = (const char *)entry->entry; const DivideString split(comment, '='); if (split.IsDefined() && !split.empty()) - tag_handler_invoke_pair(handler, handler_ctx, - split.GetFirst(), - split.GetSecond()); + handler.OnPair(split.GetFirst(), split.GetSecond()); } for (const struct tag_table *i = xiph_tags; i->name != nullptr; ++i) - if (flac_copy_comment(entry, i->name, i->type, - handler, handler_ctx)) + if (flac_copy_comment(entry, i->name, i->type, handler)) return; for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; ++i) if (flac_copy_comment(entry, tag_item_names[i], (TagType)i, - handler, handler_ctx)) + handler)) return; } static void flac_scan_comments(const FLAC__StreamMetadata_VorbisComment *comment, - const TagHandler &handler, void *handler_ctx) + TagHandler &handler) noexcept { for (unsigned i = 0; i < comment->num_comments; ++i) flac_scan_comment(&comment->comments[i], - handler, handler_ctx); + handler); } gcc_pure @@ -136,18 +133,17 @@ flac_duration(const FLAC__StreamMetadata_StreamInfo *stream_info) noexcept void flac_scan_metadata(const FLAC__StreamMetadata *block, - const TagHandler &handler, void *handler_ctx) + TagHandler &handler) noexcept { switch (block->type) { case FLAC__METADATA_TYPE_VORBIS_COMMENT: flac_scan_comments(&block->data.vorbis_comment, - handler, handler_ctx); + handler); break; case FLAC__METADATA_TYPE_STREAMINFO: if (block->data.stream_info.sample_rate > 0) - tag_handler_invoke_duration(handler, handler_ctx, - flac_duration(&block->data.stream_info)); + handler.OnDuration(flac_duration(&block->data.stream_info)); break; default: @@ -159,12 +155,13 @@ Tag flac_vorbis_comments_to_tag(const FLAC__StreamMetadata_VorbisComment *comment) { TagBuilder tag_builder; - flac_scan_comments(comment, add_tag_handler, &tag_builder); + AddTagHandler h(tag_builder); + flac_scan_comments(comment, h); return tag_builder.Commit(); } void -FlacMetadataChain::Scan(const TagHandler &handler, void *handler_ctx) +FlacMetadataChain::Scan(TagHandler &handler) noexcept { FLACMetadataIterator iterator(*this); @@ -173,6 +170,6 @@ FlacMetadataChain::Scan(const TagHandler &handler, void *handler_ctx) if (block == nullptr) break; - flac_scan_metadata(block, handler, handler_ctx); + flac_scan_metadata(block, handler); } while (iterator.Next()); } |