Commit 2288768bcce0467cf410d1912d44e8f021242e99

Authored by Josh Klontz
1 parent 3289608e

cleaned up turkGallery implementation

Showing 1 changed file with 28 additions and 24 deletions
openbr/plugins/turk.cpp
... ... @@ -13,41 +13,45 @@ class turkGallery : public Gallery
13 13 {
14 14 Q_OBJECT
15 15  
  16 + struct Attribute : public QStringList
  17 + {
  18 + QString name;
  19 + Attribute(const QString &str = QString())
  20 + {
  21 + const int i = str.indexOf('[');
  22 + name = str.mid(0, i);
  23 + if (i != -1)
  24 + append(str.mid(i+1, str.length()-i-2).split(","));
  25 + }
  26 + };
  27 +
16 28 TemplateList readBlock(bool *done)
17 29 {
18 30 *done = true;
19 31 TemplateList templates;
20   - if (!file.exists()) return templates;
21   -
22 32 QStringList lines = QtUtils::readLines(file);
23   - QRegExp regexp(",(?!(?:\\w+,?)+\\])");
24   -
25   - QStringList headers;
26   -
27   - if (!lines.isEmpty()) headers = lines.takeFirst().split(regexp);
  33 + if (lines.empty())
  34 + qFatal(".turk Gallery missing header.");
  35 + QList<Attribute> types;
  36 + foreach (const QString &header, parse(lines.takeFirst()))
  37 + types.append(header);
28 38  
29 39 foreach (const QString &line, lines) {
30   - QStringList words = line.split(regexp);
31   - if (words.size() != headers.size()) continue;
32   - File f;
33   - f.name = words[0];
34   - f.set("Label", words[0].mid(0,5));
  40 + const QStringList words = parse(line);
  41 + if (words.size() != types.size())
  42 + qFatal(".turk Gallery incorrect column count.");
35 43  
  44 + File f(words[0], words[0].mid(0,5));
36 45 for (int i=1; i<words.size(); i++) {
37   - QStringList categories = headers[i].split('[');
38   - categories.last().chop(1); // Remove trailing bracket
39   - QStringList types = categories.last().split(',');
40   -
41   - QStringList ratings = words[i].split(',');
42   - ratings.first() = ratings.first().mid(1); // Remove first bracket
43   - ratings.last().chop(1); // Remove trailing bracket
44   -
45   - if (types.size() != ratings.size()) continue;
  46 + Attribute &type = types[i];
  47 + Attribute rating(words[i]);
  48 + if (type.size() != rating.size())
  49 + qFatal(".turk Gallery incorrect ratings count.");
46 50  
47 51 QMap<QString,QVariant> categoryMap;
48   - for (int j=0; j<types.size(); j++) categoryMap.insert(types[j],ratings[j]);
49   -
50   - f.set(categories[0], categoryMap);
  52 + for (int j=0; j<type.size(); j++)
  53 + categoryMap.insert(type[j], rating[j]);
  54 + f.set(type.name, categoryMap);
51 55 }
52 56 templates.append(f);
53 57 }
... ...