tag/Handler: add virtual method OnPicture()

Preparing for https://github.com/MusicPlayerDaemon/MPD/issues/42
This commit is contained in:
Max Kellermann 2019-08-12 13:27:27 +02:00
parent 3895d35a52
commit 96a1c69c29
3 changed files with 31 additions and 1 deletions

View File

@ -35,6 +35,11 @@ NullTagHandler::OnPair(StringView, StringView) noexcept
{
}
void
NullTagHandler::OnPicture(const char *, ConstBuffer<void>) noexcept
{
}
void
NullTagHandler::OnAudioFormat(gcc_unused AudioFormat af) noexcept
{

View File

@ -24,6 +24,7 @@
#include "Chrono.hxx"
#include "util/Compiler.h"
template<typename T> struct ConstBuffer;
struct StringView;
struct AudioFormat;
class TagBuilder;
@ -39,6 +40,7 @@ public:
static constexpr unsigned WANT_TAG = 0x2;
static constexpr unsigned WANT_PAIR = 0x4;
static constexpr unsigned WANT_AUDIO_FORMAT = 0x8;
static constexpr unsigned WANT_PICTURE = 0x10;
explicit TagHandler(unsigned _want_mask) noexcept
:want_mask(_want_mask) {}
@ -62,6 +64,10 @@ public:
return want_mask & WANT_AUDIO_FORMAT;
}
bool WantPicture() const noexcept {
return want_mask & WANT_PICTURE;
}
/**
* Declare the duration of a song. Do not call
* this when the duration could not be determined, because
@ -99,6 +105,18 @@ public:
* too expensive.
*/
virtual void OnAudioFormat(AudioFormat af) noexcept = 0;
/**
* A picture has been read.
*
* This method will only be called if #WANT_PICTURE was enabled.
*
* @param mime_type an optional MIME type string
* @param buffer the picture file contents; the buffer will be
* invalidated after this method returns
*/
virtual void OnPicture(const char *mime_type,
ConstBuffer<void> buffer) noexcept = 0;
};
class NullTagHandler : public TagHandler {
@ -110,6 +128,8 @@ public:
void OnTag(TagType type, StringView value) noexcept override;
void OnPair(StringView key, StringView value) noexcept override;
void OnAudioFormat(AudioFormat af) noexcept override;
void OnPicture(const char *mime_type,
ConstBuffer<void> buffer) noexcept override;
};
/**

View File

@ -49,7 +49,7 @@ class DumpTagHandler final : public NullTagHandler {
public:
DumpTagHandler() noexcept
:NullTagHandler(WANT_DURATION|WANT_TAG|WANT_PAIR) {}
:NullTagHandler(WANT_DURATION|WANT_TAG|WANT_PAIR|WANT_PICTURE) {}
bool IsEmpty() const noexcept {
return empty;
@ -74,6 +74,11 @@ public:
void OnAudioFormat(AudioFormat af) noexcept override {
printf("%s\n", ToString(af).c_str());
}
void OnPicture(const char *mime_type,
ConstBuffer<void> buffer) noexcept override {
printf("picture mime='%s' size=%zu\n", mime_type, buffer.size);
}
};
int main(int argc, char **argv)