summaryrefslogtreecommitdiffstats
path: root/src/filecontent.cpp
blob: d77983c206e64338860a2fd71b9fbc36dc728fb3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "filecontent.h"

FileContent FileContent::parse(const QString &fileContent,
                               const QStringList &templateFields,
                               bool allFields) {
  QStringList lines = fileContent.split("\n");
  QString password = lines.takeFirst();
  QStringList remainingData;
  NamedValues namedValues;
  for (const QString &line : lines) {
    if (line.contains(":")) {
      int colon = line.indexOf(':');
      QString name = line.left(colon);
      QString value = line.right(line.length() - colon - 1);
      if ((allFields &&
           !value.startsWith(
               "//")) // if value startswith // colon is probably from a url
          || templateFields.contains(name)) {
        namedValues.append({name.trimmed(), value.trimmed()});
        continue;
      }
    }
    remainingData.append(line);
  }
  return FileContent(password, namedValues, remainingData.join("\n"));
}

QString FileContent::getPassword() const { return this->password; }

NamedValues FileContent::getNamedValues() const { return this->namedValues; }

QString FileContent::getRemainingData() const { return this->remainingData; }

FileContent::FileContent(const QString &password,
                         const NamedValues &namedValues,
                         const QString &remainingData)
    : password(password), namedValues(namedValues),
      remainingData(remainingData) {}

NamedValues::NamedValues() : QList() {}

NamedValues::NamedValues(std::initializer_list<NamedValue> values)
    : QList(values) {}

QString NamedValues::takeValue(const QString &name) {
  for (int i = 0; i < length(); ++i) {
    if (at(i).name == name) {
      return takeAt(i).value;
    }
  }
  return QString();
}