| 138 | } |
| 139 | |
| 140 | bool PackFetchTask::parseAndAddPacks(QByteArray &data, PackType packType, ModpackList &list) |
| 141 | { |
| 142 | QDomDocument doc; |
| 143 | |
| 144 | QString errorMsg = "Unknown error."; |
| 145 | int errorLine = -1; |
| 146 | int errorCol = -1; |
| 147 | |
| 148 | if(!doc.setContent(data, false, &errorMsg, &errorLine, &errorCol)) |
| 149 | { |
| 150 | auto fullErrMsg = QString("Failed to fetch modpack data: %1 %2:%3!").arg(errorMsg).arg(errorLine).arg(errorCol); |
| 151 | qWarning() << fullErrMsg; |
| 152 | data.clear(); |
| 153 | return false; |
| 154 | } |
| 155 | |
| 156 | QDomNodeList nodes = doc.elementsByTagName("modpack"); |
| 157 | for(int i = 0; i < nodes.length(); i++) |
| 158 | { |
| 159 | QDomElement element = nodes.at(i).toElement(); |
| 160 | |
| 161 | Modpack modpack; |
| 162 | modpack.name = element.attribute("name"); |
| 163 | modpack.currentVersion = element.attribute("version"); |
| 164 | modpack.mcVersion = element.attribute("mcVersion"); |
| 165 | modpack.description = element.attribute("description"); |
| 166 | modpack.mods = element.attribute("mods"); |
| 167 | modpack.logo = element.attribute("logo"); |
| 168 | modpack.oldVersions = element.attribute("oldVersions").split(";"); |
| 169 | modpack.broken = false; |
| 170 | modpack.bugged = false; |
| 171 | |
| 172 | //remove empty if the xml is bugged |
| 173 | for(QString curr : modpack.oldVersions) |
| 174 | { |
| 175 | if(curr.isNull() || curr.isEmpty()) |
| 176 | { |
| 177 | modpack.oldVersions.removeAll(curr); |
| 178 | modpack.bugged = true; |
| 179 | qWarning() << "Removed some empty versions from" << modpack.name; |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | if(modpack.oldVersions.size() < 1) |
| 184 | { |
| 185 | if(!modpack.currentVersion.isNull() && !modpack.currentVersion.isEmpty()) |
| 186 | { |
| 187 | modpack.oldVersions.append(modpack.currentVersion); |
| 188 | qWarning() << "Added current version to oldVersions because oldVersions was empty! (" + modpack.name + ")"; |
| 189 | } |
| 190 | else |
| 191 | { |
| 192 | modpack.broken = true; |
| 193 | qWarning() << "Broken pack:" << modpack.name << " => No valid version!"; |
| 194 | } |
| 195 | } |
| 196 | |
| 197 | modpack.author = element.attribute("author"); |