21 #ifndef ID3V2_FRAME_H_ 22 #define ID3V2_FRAME_H_ 24 #include "Utils/Tagging/AbstractFrame.h" 26 #include "taglib/fileref.h" 27 #include "taglib/mpegfile.h" 28 #include "taglib/id3v2tag.h" 29 #include "taglib/id3v2frame.h" 39 template<
typename ModelType_t,
typename FrameType_t>
50 FrameType_t* _frame=
nullptr;
68 virtual void map_frame_to_model(
const FrameType_t* frame, ModelType_t& model)=0;
73 ID3v2Frame(TagLib::ID3v2::Tag* tag,
const char* four) :
77 TagLib::ByteVector vec(four, 4);
78 TagLib::ID3v2::FrameListMap map = tag->frameListMap();
79 TagLib::ID3v2::FrameList frame_list = map[vec];
80 if(!frame_list.isEmpty()) {
81 _frame = dynamic_cast<FrameType_t*> (frame_list.front());
95 virtual bool read(ModelType_t& data)
101 map_frame_to_model(_frame, data);
113 virtual bool write(
const ModelType_t& data_model)
115 bool created =
false;
117 TagLib::ID3v2::Tag* tag = this->tag();
135 tag->addFrame(_frame);
148 return (_frame !=
nullptr);
153 #endif // ABSTRACTFRAME_H virtual void map_model_to_frame(const ModelType_t &model, FrameType_t *frame)=0
map_model_to_frame maps the model to the frame and vice versa so the frame knows how to get/set data
virtual bool read(ModelType_t &data)
sets the _data_model by reading from the frame
Definition: ID3v2Frame.h:95
ID3v2Frame namespace.
Definition: AlbumArtist.h:26
virtual TagLib::ID3v2::Frame * create_id3v2_frame()=0
create_id3v2_frame creates new id3v2 frame if there's no frame we have to create it manually every su...
The AbstractFrame class for example AbstractFrame<Discnumber, TagLib::ID3v2::TextIdentificationFrame>
Definition: ID3v2Frame.h:46
bool is_frame_found() const
if the frame was found when called read()
Definition: ID3v2Frame.h:146
virtual bool write(const ModelType_t &data_model)
insert the _data_model into the frame
Definition: ID3v2Frame.h:113
Definition: AbstractFrame.h:55