21#ifndef SAYONARA_ABSTRACT_XIPH_FRAME_H
22#define SAYONARA_ABSTRACT_XIPH_FRAME_H
24#include "Utils/Tagging/AbstractFrame.h"
28#include <taglib/tag.h>
29#include <taglib/xiphcomment.h>
30#include <taglib/tstring.h>
31#include <taglib/tstringlist.h>
37 template<
typename Model_t>
42 virtual std::optional<Model_t> mapTagToData()
const = 0;
43 virtual void mapDataToTag(
const Model_t& model) = 0;
45 std::optional<TagLib::String> stringData()
const
47 const auto& map = tag()->fieldListMap();
48 const auto it = map.find(tagKey());
49 return (it == map.end())
50 ? std::optional<TagLib::String>{}
51 : std::optional(it->second.front());
54 void setStringData(
const TagLib::String& value)
58 tag()->addField(tagKey(), value,
true);
62 void setStringData(
const QString& value)
64 setStringData(Tagging::convertString(value));
68 XiphFrame(TagLib::Ogg::XiphComment* tag,
const QString& identifier) :
73 bool read(Model_t& model)
const
75 const auto data = (tag() !=
nullptr)
84 return data.has_value();
87 bool write(
const Model_t& model)
94 if(!tagKey().isEmpty())
96 tag()->removeFields(tagKey());
101 }
catch (std::exception& ) {
108 virtual bool isFrameAvailable()
const
110 return (!tagKey().isEmpty() && tag()->contains(
"METADATA_BLOCK_PICTURE"));
Definition: AbstractFrame.h:54
Definition: XiphFrame.h:40