Attica

achievementparser.cpp
1 /*
2  This file is part of KDE.
3 
4  SPDX-FileCopyrightText: 2011 Laszlo Papp <[email protected]>
5 
6  SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8 
9 #include "achievementparser.h"
10 #include "atticautils.h"
11 
12 using namespace Attica;
13 
14 Achievement Achievement::Parser::parseXml(QXmlStreamReader &xml)
15 {
16  Achievement achievement;
17 
18  while (!xml.atEnd()) {
19  xml.readNext();
20 
21  if (xml.isStartElement()) {
22  if (xml.name() == QLatin1String("id")) {
23  achievement.setId(xml.readElementText());
24  } else if (xml.name() == QLatin1String("content_id")) {
25  achievement.setContentId(xml.readElementText());
26  } else if (xml.name() == QLatin1String("name")) {
27  achievement.setName(xml.readElementText());
28  } else if (xml.name() == QLatin1String("description")) {
29  achievement.setDescription(xml.readElementText());
30  } else if (xml.name() == QLatin1String("explanation")) {
31  achievement.setExplanation(xml.readElementText());
32  } else if (xml.name() == QLatin1String("points")) {
33  achievement.setPoints(xml.readElementText().toInt());
34  } else if (xml.name() == QLatin1String("image")) {
35  achievement.setImage(QUrl(xml.readElementText()));
36  } else if (xml.name() == QLatin1String("dependencies")) {
37  QStringList dependencies = parseXmlDependencies(xml);
38  achievement.setDependencies(dependencies);
39  } else if (xml.name() == QLatin1String("visibility")) {
40  achievement.setVisibility(Achievement::stringToAchievementVisibility(xml.readElementText()));
41  } else if (xml.name() == QLatin1String("type")) {
42  achievement.setType(Achievement::stringToAchievementType(xml.readElementText()));
43  } else if (xml.name() == QLatin1String("options")) {
44  QStringList options = parseXmlOptions(xml);
45  achievement.setOptions(options);
46  } else if (xml.name() == QLatin1String("steps")) {
47  achievement.setSteps(xml.readElementText().toInt());
48  } else if (xml.name() == QLatin1String("progress")) {
49  switch (achievement.type()) {
50  case Achievement::FlowingAchievement:
51  achievement.setProgress(QVariant(xml.readElementText().toFloat()));
52  break;
53  case Achievement::SteppedAchievement:
54  achievement.setProgress(QVariant(xml.readElementText().toInt()));
55  break;
56  case Achievement::NamedstepsAchievement:
57  achievement.setProgress(QVariant(xml.readElementText()));
58  break;
59  case Achievement::SetAchievement: {
60  QVariant progress = parseXmlProgress(xml);
61  achievement.setProgress(progress);
62  break;
63  }
64  default:
65  break;
66  }
67  }
68  } else if (xml.isEndElement() && xml.name() == QLatin1String("achievement")) {
69  break;
70  }
71  }
72 
73  return achievement;
74 }
75 
76 QStringList Achievement::Parser::parseXmlDependencies(QXmlStreamReader &xml)
77 {
78  QStringList dependencies;
79 
80  while (!xml.atEnd()) {
81  xml.readNext();
82 
83  if (xml.isStartElement()) {
84  if (xml.name() == QLatin1String("achievement_id")) {
85  dependencies.append(xml.readElementText());
86  }
87  } else if (xml.isEndElement() && xml.name() == QLatin1String("dependencies")) {
88  break;
89  }
90  }
91 
92  return dependencies;
93 }
94 
95 QStringList Achievement::Parser::parseXmlOptions(QXmlStreamReader &xml)
96 {
97  QStringList options;
98 
99  while (!xml.atEnd()) {
100  xml.readNext();
101 
102  if (xml.isStartElement()) {
103  if (xml.name() == QLatin1String("option")) {
104  options.append(xml.readElementText());
105  }
106  } else if (xml.isEndElement() && xml.name() == QLatin1String("options")) {
107  break;
108  }
109  }
110 
111  return options;
112 }
113 
114 QVariant Achievement::Parser::parseXmlProgress(QXmlStreamReader &xml)
115 {
116  QStringList progress;
117 
118  while (!xml.atEnd()) {
119  xml.readNext();
120 
121  if (xml.isStartElement()) {
122  if (xml.name() == QLatin1String("reached")) {
123  progress.append(xml.readElementText());
124  }
125  } else if (xml.isEndElement() && xml.name() == QLatin1String("progress")) {
126  break;
127  }
128  }
129 
130  return progress;
131 }
132 
133 QStringList Achievement::Parser::xmlElement() const
134 {
135  return QStringList(QStringLiteral("achievement"));
136 }
void append(const T &value)
bool isEndElement() const const
QStringRef name() const const
QXmlStreamReader::TokenType readNext()
int toInt(bool *ok, int base) const const
float toFloat(bool *ok) const const
QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour)
The Attica namespace,.
bool isStartElement() const const
bool atEnd() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sun Dec 3 2023 04:08:16 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.