Commit 8d9445fe5da1dbc399ca53c7f826dfa0cc80902e

Authored by sklum
1 parent f0eb0cfb

Fixed bugs with MetadataDistance

Showing 1 changed file with 11 additions and 8 deletions
openbr/plugins/validate.cpp
@@ -147,26 +147,29 @@ class MetadataDistance : public Distance @@ -147,26 +147,29 @@ class MetadataDistance : public Distance
147 float compare(const Template &a, const Template &b) const 147 float compare(const Template &a, const Template &b) const
148 { 148 {
149 foreach (const QString &key, filters) { 149 foreach (const QString &key, filters) {
  150 + QString aValue = a.file.get<QString>(key, QString());
  151 + QString bValue = b.file.get<QString>(key, QString());
150 152
151 - const QString aValue = a.file.get<QString>(key, "");  
152 - const QString bValue = b.file.get<QString>(key, ""); 153 + // The query value may be a range. Let's check.
  154 + if (bValue.isEmpty()) bValue = QtUtils::toString(b.file.get<QPointF>(key, QPointF()));
153 155
154 if (aValue.isEmpty() || bValue.isEmpty()) continue; 156 if (aValue.isEmpty() || bValue.isEmpty()) continue;
155 157
156 bool keep = false; 158 bool keep = false;
  159 + bool ok;
157 160
158 - if (aValue[0] == '(') /* Range */ {  
159 - QStringList values = aValue.split(','); 161 + QPointF range = QtUtils::toPoint(bValue,&ok);
160 162
161 - int value = values[0].mid(1).toInt();  
162 - values[1].chop(1);  
163 - int upperBound = values[1].toInt(); 163 + if (ok) /* Range */ {
  164 + int value = range.x();
  165 + int upperBound = range.y();
164 166
165 while (value <= upperBound) { 167 while (value <= upperBound) {
166 - if (aValue == bValue) { 168 + if (aValue == QString::number(value)) {
167 keep = true; 169 keep = true;
168 break; 170 break;
169 } 171 }
  172 + value++;
170 } 173 }
171 } 174 }
172 else if (aValue == bValue) keep = true; 175 else if (aValue == bValue) keep = true;