Avoid creation of targets when relevat values are empty or when using relaxed matching
This commit is contained in:
parent
2d39875f96
commit
28691378ce
|
@ -487,15 +487,6 @@ void setTagInfo(const SetTagInfoArgs &args)
|
||||||
TagCreationSettings settings;
|
TagCreationSettings settings;
|
||||||
settings.flags = TagCreationFlags::None;
|
settings.flags = TagCreationFlags::None;
|
||||||
|
|
||||||
// determine required targets
|
|
||||||
for (const auto &fieldDenotation : fields) {
|
|
||||||
const FieldScope &scope = fieldDenotation.first;
|
|
||||||
if (!scope.isTrack()
|
|
||||||
&& find(settings.requiredTargets.cbegin(), settings.requiredTargets.cend(), scope.tagTarget) == settings.requiredTargets.cend()) {
|
|
||||||
settings.requiredTargets.push_back(scope.tagTarget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// determine targets to remove
|
// determine targets to remove
|
||||||
auto targetsToRemove = std::vector<TagTarget>();
|
auto targetsToRemove = std::vector<TagTarget>();
|
||||||
for (size_t i = 0, max = args.removeTargetArg.occurrences(); i != max; ++i) {
|
for (size_t i = 0, max = args.removeTargetArg.occurrences(); i != max; ++i) {
|
||||||
|
@ -592,6 +583,46 @@ void setTagInfo(const SetTagInfoArgs &args)
|
||||||
tags.clear();
|
tags.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// select the relevant values for the current file index
|
||||||
|
for (auto &fieldDenotation : fields) {
|
||||||
|
FieldValues &denotedValues = fieldDenotation.second;
|
||||||
|
std::vector<FieldValue *> &relevantDenotedValues = denotedValues.relevantValues;
|
||||||
|
relevantDenotedValues.clear();
|
||||||
|
unsigned int currentFileIndex = 0;
|
||||||
|
for (FieldValue &denotatedValue : denotedValues.allValues) {
|
||||||
|
if ((denotatedValue.fileIndex <= fileIndex)
|
||||||
|
&& (relevantDenotedValues.empty() || (denotatedValue.fileIndex >= currentFileIndex))) {
|
||||||
|
if (currentFileIndex != denotatedValue.fileIndex) {
|
||||||
|
currentFileIndex = denotatedValue.fileIndex;
|
||||||
|
relevantDenotedValues.clear();
|
||||||
|
}
|
||||||
|
relevantDenotedValues.push_back(&denotatedValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// determine required targets
|
||||||
|
settings.requiredTargets.clear();
|
||||||
|
for (const auto &fieldDenotation : fields) {
|
||||||
|
const FieldScope &scope = fieldDenotation.first;
|
||||||
|
if (scope.isTrack() || !scope.exactTargetMatching) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const std::vector<FieldValue *> &relevantDenotedValues = fieldDenotation.second.relevantValues;
|
||||||
|
auto hasNonEmptyValues = false;
|
||||||
|
for (const auto &value : relevantDenotedValues) {
|
||||||
|
if (!value->value.empty()) {
|
||||||
|
hasNonEmptyValues = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hasNonEmptyValues
|
||||||
|
&& std::find(settings.requiredTargets.cbegin(), settings.requiredTargets.cend(), scope.tagTarget)
|
||||||
|
== settings.requiredTargets.cend()) {
|
||||||
|
settings.requiredTargets.emplace_back(scope.tagTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// create new tags according to settings
|
// create new tags according to settings
|
||||||
fileInfo.createAppropriateTags(settings);
|
fileInfo.createAppropriateTags(settings);
|
||||||
auto container = fileInfo.container();
|
auto container = fileInfo.container();
|
||||||
|
@ -614,24 +645,6 @@ void setTagInfo(const SetTagInfoArgs &args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// select the relevant values for the current file index
|
|
||||||
for (auto &fieldDenotation : fields) {
|
|
||||||
FieldValues &denotedValues = fieldDenotation.second;
|
|
||||||
vector<FieldValue *> &relevantDenotedValues = denotedValues.relevantValues;
|
|
||||||
denotedValues.relevantValues.clear();
|
|
||||||
unsigned int currentFileIndex = 0;
|
|
||||||
for (FieldValue &denotatedValue : denotedValues.allValues) {
|
|
||||||
if ((denotatedValue.fileIndex <= fileIndex)
|
|
||||||
&& (relevantDenotedValues.empty() || (denotatedValue.fileIndex >= currentFileIndex))) {
|
|
||||||
if (currentFileIndex != denotatedValue.fileIndex) {
|
|
||||||
currentFileIndex = denotatedValue.fileIndex;
|
|
||||||
relevantDenotedValues.clear();
|
|
||||||
}
|
|
||||||
relevantDenotedValues.push_back(&denotatedValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// alter tags
|
// alter tags
|
||||||
fileInfo.tags(tags);
|
fileInfo.tags(tags);
|
||||||
if (tags.empty()) {
|
if (tags.empty()) {
|
||||||
|
|
Loading…
Reference in New Issue