Fix setting ID in Id3v2Tag::internallySetValues() for new fields
This commit is contained in:
parent
e75a8d25c5
commit
341c7bbfd0
|
@ -57,23 +57,28 @@ bool Id3v2Tag::internallySetValues(const IdentifierType &id, const std::vector<T
|
||||||
auto frameIterator = range.first;
|
auto frameIterator = range.first;
|
||||||
|
|
||||||
// use existing frame or insert new text frame
|
// use existing frame or insert new text frame
|
||||||
|
auto valuesIterator = values.cbegin();
|
||||||
if (frameIterator != range.second) {
|
if (frameIterator != range.second) {
|
||||||
++range.first;
|
++range.first;
|
||||||
|
// add primary value to existing frame
|
||||||
|
if (valuesIterator != values.cend()) {
|
||||||
|
frameIterator->second.setValue(*valuesIterator);
|
||||||
|
++valuesIterator;
|
||||||
|
} else {
|
||||||
|
frameIterator->second.value().clearDataAndMetadata();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
frameIterator = fields().insert(make_pair(id, Id3v2Frame()));
|
// skip if there is no existing frame but also no values to be assigned
|
||||||
|
if (valuesIterator == values.cend()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// add primary value to new frame
|
||||||
|
frameIterator = fields().insert(make_pair(id, Id3v2Frame(id, *valuesIterator)));
|
||||||
|
++valuesIterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add primary value to frame
|
|
||||||
auto &frame(frameIterator->second);
|
|
||||||
auto valuesIterator = values.cbegin();
|
|
||||||
if (valuesIterator != values.cend()) {
|
|
||||||
frame.setValue(*valuesIterator);
|
|
||||||
++valuesIterator;
|
|
||||||
} else {
|
|
||||||
frame.value().clearDataAndMetadata();
|
|
||||||
}
|
|
||||||
// add additional values to frame
|
// add additional values to frame
|
||||||
frame.additionalValues() = vector<TagValue>(valuesIterator, values.cend());
|
frameIterator->second.additionalValues() = vector<TagValue>(valuesIterator, values.cend());
|
||||||
|
|
||||||
// remove remaining existing values (there are more existing values than specified ones)
|
// remove remaining existing values (there are more existing values than specified ones)
|
||||||
for (; range.first != range.second; ++range.first) {
|
for (; range.first != range.second; ++range.first) {
|
||||||
|
|
Loading…
Reference in New Issue