42 FrameType_t* mFrame {
nullptr};
45 virtual TagLib::ID3v2::Frame* createId3v2Frame() = 0;
47 virtual void mapDataToFrame(
const ModelType_t& model, FrameType_t* frame) = 0;
48 virtual std::optional<ModelType_t> mapFrameToData(
const FrameType_t* frame)
const = 0;
51 ID3v2Frame(TagLib::ID3v2::Tag* tag,
const char* four) :
54 const auto byteVector = TagLib::ByteVector(four, 4);
55 const auto frameListMap = tag->frameListMap();
56 const auto frameList = frameListMap[byteVector];
57 if(!frameList.isEmpty())
59 mFrame =
dynamic_cast<FrameType_t*
>(frameList.front());
63 virtual ~ID3v2Frame() =
default;
65 virtual bool read(ModelType_t& data)
const
69 if(
const auto optData = mapFrameToData(mFrame); optData.has_value())
71 data = optData.value();
79 virtual bool write(
const ModelType_t& data)
89 mFrame =
dynamic_cast<FrameType_t*
>(createId3v2Frame());
98 mapDataToFrame(data, mFrame);
102 tag()->addFrame(mFrame);
108 bool isFrameAvailable()
const
110 return (mFrame !=
nullptr);