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"));