src/ImportXML.cpp

changeset 275
f472f9773782
child 276
7316a419334d
equal deleted inserted replaced
274:33b5a9a42370 275:f472f9773782
1 /**
2 * ImportXML.cpp is part of bmsapp.
3 *
4 * bmsapp is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * bmsapp is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17 #include "ImportXML.h"
18 #include "../ui/ui_ImportXML.h"
19 #include "MainWindow.h"
20
21
22 ImportXML::ImportXML(QWidget *parent) : QDialog(parent), ui(new Ui::ImportXML)
23 {
24 qDebug() << "ImportXML start";
25 ui->setupUi(this);
26 WindowTitle();
27 ui->progressBar->setValue(0);
28 connect(ui->quitButton, SIGNAL(clicked()), parent, SLOT(fromImportXML()));
29 }
30
31
32 ImportXML::~ImportXML()
33 {
34 qDebug() << "ImportXML done";
35 delete ui;
36 }
37
38
39 void ImportXML::WindowTitle()
40 {
41 QString txt = QString(tr("BMSapp - Import XML"));
42 setWindowTitle(txt);
43 }
44
45
46 void ImportXML::on_openButton_clicked()
47 {
48 QSqlQuery query;
49 QString sql, log;
50 int eq_total = 0, eq_errors = 0, f_total = 0, f_errors = 0, h_total = 0, h_errors = 0;
51 int m_total = 0, m_errors = 0, y_total = 0, y_errors = 0, rec_total = 0, rec_errors = 0;
52 int st_total = 0, st_errors = 0, mash_total = 0, mash_errors = 0, w_total = 0, w_errors = 0;
53 int total = 0, errors = 0;
54
55 QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath() + "/*.xml", tr("Files (*.xml)"));
56 if (fileName == 0) {
57 QMessageBox::warning(this, tr("Open File"), tr("No XML file selected."));
58 return;
59 }
60 ui->fileEdit->setText(fileName);
61
62 QFile file(fileName);
63 qint64 fsize = file.size();
64
65 log = "Import XML file `" + fileName + "`\n\n";
66 qInfo() << "Import XML" << fileName << "length" << fsize << "bytes";
67
68 file.open(QIODevice::ReadOnly);
69 QXmlStreamReader *xml = new QXmlStreamReader(&file);
70
71 while (xml->readNext()) {
72
73 if (xml->atEnd())
74 break;
75
76 if (xml->tokenType() == QXmlStreamReader::StartDocument) {
77 // qDebug() << xml->readElementText();
78 // Just skip
79 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENTS")) {
80 /*
81 * Equipments
82 */
83 while (xml->readNext()) {
84 if (xml->atEnd())
85 break;
86 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENTS")) {
87 qDebug() << "0 /EQUIPMENTS";
88 break;
89 }
90 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) {
91 /*
92 * Equipment
93 */
94 eq_total++;
95 total++;
96 sql = "INSERT INTO inventory_equipments SET uuid='";
97 sql.append(QUuid::createUuid().toString().mid(1, 36));
98 sql.append("', top_up_water=0");
99
100 while (xml->readNext()) {
101 if (xml->atEnd())
102 break;
103 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) {
104 query.exec(sql);
105 if (query.lastError().isValid()) {
106 // qWarning() << sql << query.lastError();
107 eq_errors++;
108 errors++;
109 }
110 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
111 break;
112 }
113 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
114 // Ignore.
115 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
116 sql.append(QString(", name='%1'").arg(xml->readElementText()));
117 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
118 sql.append(QString(", notes='%1'").arg(xml->readElementText()));
119 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) {
120 sql.append(QString(", boil_size=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
121 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) {
122 sql.append(QString(", batch_size=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0'));
123 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) {
124 sql.append(QString(", tun_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
125 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_WEIGHT")) {
126 sql.append(QString(", tun_weight=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
127 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_SPECIFIC_HEAT")) {
128 sql.append(QString(", tun_specific_heat=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
129 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_HEIGHT")) {
130 sql.append(QString(", tun_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
131 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TRUB_CHILLER_LOSS")) {
132 sql.append(QString(", trub_chiller_loss=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
133 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EVAP_RATE")) {
134 sql.append(QString(", evap_rate=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0'));
135 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_TIME")) {
136 sql.append(QString(", boil_time=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0'));
137 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CALC_BOIL_VOLUME")) {
138 sql.append(QString(", calc_boil_volume=%1").arg((xml->readElementText() == "TRUE") ? "true":"false"));
139 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOP_UP_KETTLE")) {
140 sql.append(QString(", top_up_kettle=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
141 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP_UTILIZATION")) {
142 sql.append(QString(", hop_utilization=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0'));
143 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_VOLUME")) {
144 sql.append(QString(", lauter_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
145 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_HEIGHT")) {
146 sql.append(QString(", lauter_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
147 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_DEADSPACE")) {
148 sql.append(QString(", lauter_deadspace=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
149 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_VOLUME")) {
150 sql.append(QString(", kettle_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
151 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_HEIGHT")) {
152 sql.append(QString(", kettle_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
153 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_VOLUME")) {
154 sql.append(QString(", mash_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
155 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EFFICIENCY")) {
156 sql.append(QString(", efficiency=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
157 } else {
158 if (xml->tokenType() == QXmlStreamReader::StartElement)
159 qDebug() << "2 " << xml->tokenType() << xml->name();
160 }
161 }
162 }
163 }
164 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLES")) {
165 /*
166 * Styles
167 */
168 while (xml->readNext()) {
169 if (xml->atEnd())
170 break;
171 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLES")) {
172 qDebug() << "0 /STYLES";
173 break;
174 }
175 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE")) {
176 /*
177 * Style
178 */
179 st_total++;
180 total++;
181 sql = "INSERT INTO profile_styles SET uuid='";
182 sql.append(QUuid::createUuid().toString().mid(1, 36));
183 sql.append("'");
184
185 while (xml->readNext()) {
186 if (xml->atEnd())
187 break;
188 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLE")) {
189 query.exec(sql);
190 if (query.lastError().isValid()) {
191 qWarning() << sql << query.lastError();
192 st_errors++;
193 errors++;
194 }
195 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
196 break;
197 }
198 if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "VERSION")) ||
199 (xml->name() == "DISPLAY_OG_MIN") || (xml->name() == "DISPLAY_OG_MAX") || (xml->name() == "DISPLAY_FG_MIN") ||
200 (xml->name() == "DISPLAY_FG_MAX") || (xml->name() == "DISPLAY_IBU_MIN") || (xml->name() == "DISPLAY_IBU_MAX") ||
201 (xml->name() == "DISPLAY_COLOR_MIN") || (xml->name() == "DISPLAY_COLOR_MAX") || (xml->name() == "DISPLAY_CARB_MIN") ||
202 (xml->name() == "DISPLAY_CARB_MAX") || (xml->name() == "DISPLAY_ABV_MIN") || (xml->name() == "DISPLAY_ABV_MAX") ||
203 (xml->name() == "OG_RANGE") || (xml->name() == "FG_RANGE") || (xml->name() == "IBU_RANGE") ||
204 (xml->name() == "CARB_RANGE") || (xml->name() == "COLOR_RANGE") || (xml->name() == "ABV_RANGE")) {
205 // Ignore.
206 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) {
207 sql.append(QString(", name='%1'").arg(xml->readElementText()));
208 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY")) {
209 sql.append(QString(", category='%1'").arg(xml->readElementText()));
210 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY_NUMBER")) {
211 sql.append(QString(", category_number=%1").arg(xml->readElementText().toInt()));
212 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_LETTER")) {
213 sql.append(QString(", style_letter='%1'").arg(xml->readElementText()));
214 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_GUIDE")) {
215 sql.append(QString(", style_guide='%1'").arg(xml->readElementText()));
216 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) {
217 sql.append(QString(", type=%1").arg(xml->readElementText().toInt()));
218 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) {
219 sql.append(QString(", notes='%1'").arg(xml->readElementText()));
220 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MIN")) {
221 sql.append(QString(", og_min=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
222 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MAX")) {
223 sql.append(QString(", og_max=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
224 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MIN")) {
225 sql.append(QString(", fg_min=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
226 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MAX")) {
227 sql.append(QString(", fg_max=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0'));
228 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MIN")) {
229 sql.append(QString(", ibu_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
230 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MAX")) {
231 sql.append(QString(", ibu_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
232 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MIN")) {
233 sql.append(QString(", color_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
234 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MAX")) {
235 sql.append(QString(", color_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
236 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MIN")) {
237 sql.append(QString(", carb_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
238 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MAX")) {
239 sql.append(QString(", carb_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
240 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MIN")) {
241 sql.append(QString(", abv_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
242 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MAX")) {
243 sql.append(QString(", abv_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0'));
244 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROFILE")) {
245 sql.append(QString(", profile='%1'").arg(xml->readElementText()));
246 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "INGREDIENTS")) {
247 sql.append(QString(", ingredients='%1'").arg(xml->readElementText()));
248 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EXAMPLES")) {
249 sql.append(QString(", examples='%1'").arg(xml->readElementText()));
250 } else {
251 if (xml->tokenType() == QXmlStreamReader::StartElement)
252 qDebug() << "2 " << xml->tokenType() << xml->name();
253 }
254 }
255 }
256 }
257 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) {
258 /*
259 * Fermentables
260 */
261 while (xml->readNext()) {
262 if (xml->atEnd())
263 break;
264 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLES")) {
265 qDebug() << "0 /FERMENTABLES";
266 break;
267 }
268 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) {
269 /*
270 * Fermentable
271 */
272 f_total++;
273 total++;
274 sql = "INSERT INTO inventory_fermentables SET uuid='";
275 sql.append(QUuid::createUuid().toString().mid(1, 36));
276
277 while (xml->readNext()) {
278 if (xml->atEnd())
279 break;
280 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) {
281 // query.exec(sql);
282 if (query.lastError().isValid()) {
283 // qWarning() << sql << query.lastError();
284 f_errors++;
285 errors++;
286 }
287 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
288 break;
289 }
290 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
291 // Ignore.
292 } else {
293 if (xml->tokenType() == QXmlStreamReader::StartElement)
294 qDebug() << "2 " << xml->tokenType() << xml->name();
295 }
296 }
297 }
298 }
299 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOPS")) {
300 /*
301 * Hops
302 */
303 while (xml->readNext()) {
304 if (xml->atEnd())
305 break;
306 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOPS")) {
307 qDebug() << "0 /HOPS";
308 break;
309 }
310 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) {
311 /*
312 * Hop
313 */
314 h_total++;
315 total++;
316 sql = "INSERT INTO inventory_hops SET uuid='";
317 sql.append(QUuid::createUuid().toString().mid(1, 36));
318
319 while (xml->readNext()) {
320 if (xml->atEnd())
321 break;
322 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) {
323 // query.exec(sql);
324 if (query.lastError().isValid()) {
325 // qWarning() << sql << query.lastError();
326 h_errors++;
327 errors++;
328 }
329 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
330 break;
331 }
332 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
333 // Ignore.
334 } else {
335 if (xml->tokenType() == QXmlStreamReader::StartElement)
336 qDebug() << "2 " << xml->tokenType() << xml->name();
337 }
338 }
339 }
340 }
341 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISCS")) {
342 /*
343 * Miscs
344 */
345 while (xml->readNext()) {
346 if (xml->atEnd())
347 break;
348 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISCS")) {
349 qDebug() << "0 /MISCS";
350 break;
351 }
352 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) {
353 /*
354 * Misc
355 */
356 m_total++;
357 total++;
358 sql = "INSERT INTO inventory_miscs SET uuid='";
359 sql.append(QUuid::createUuid().toString().mid(1, 36));
360
361 while (xml->readNext()) {
362 if (xml->atEnd())
363 break;
364 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) {
365 // query.exec(sql);
366 if (query.lastError().isValid()) {
367 // qWarning() << sql << query.lastError();
368 m_errors++;
369 errors++;
370 }
371 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
372 break;
373 }
374 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
375 // Ignore.
376 } else {
377 if (xml->tokenType() == QXmlStreamReader::StartElement)
378 qDebug() << "2 " << xml->tokenType() << xml->name();
379 }
380 }
381 }
382 }
383 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEASTS")) {
384 /*
385 * Yeasts
386 */
387 while (xml->readNext()) {
388 if (xml->atEnd())
389 break;
390 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEASTS")) {
391 qDebug() << "0 /YEASTS";
392 break;
393 }
394 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) {
395 /*
396 * Yeast
397 */
398 y_total++;
399 total++;
400 sql = "INSERT INTO inventory_yeasts SET uuid='";
401 sql.append(QUuid::createUuid().toString().mid(1, 36));
402
403 while (xml->readNext()) {
404 if (xml->atEnd())
405 break;
406 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) {
407 // query.exec(sql);
408 if (query.lastError().isValid()) {
409 // qWarning() << sql << query.lastError();
410 y_errors++;
411 errors++;
412 }
413 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
414 break;
415 }
416 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
417 // Ignore.
418 } else {
419 if (xml->tokenType() == QXmlStreamReader::StartElement)
420 qDebug() << "2 " << xml->tokenType() << xml->name();
421 }
422 }
423 }
424 }
425 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATERS")) {
426 /*
427 * Waters
428 */
429 while (xml->readNext()) {
430 if (xml->atEnd())
431 break;
432 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATERS")) {
433 qDebug() << "0 /WATERS";
434 break;
435 }
436 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) {
437 /*
438 * Water
439 */
440 w_total++;
441 total++;
442 sql = "INSERT INTO inventory_waters SET uuid='";
443 sql.append(QUuid::createUuid().toString().mid(1, 36));
444
445 while (xml->readNext()) {
446 if (xml->atEnd())
447 break;
448 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) {
449 // query.exec(sql);
450 if (query.lastError().isValid()) {
451 // qWarning() << sql << query.lastError();
452 w_errors++;
453 errors++;
454 }
455 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
456 break;
457 }
458 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
459 // Ignore.
460 } else {
461 if (xml->tokenType() == QXmlStreamReader::StartElement)
462 qDebug() << "2 " << xml->tokenType() << xml->name();
463 }
464 }
465 }
466 }
467 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPES")) {
468 /*
469 * Recipes
470 */
471 while (xml->readNext()) {
472 if (xml->atEnd())
473 break;
474 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPES")) {
475 qDebug() << "0 /RECIPES";
476 break;
477 }
478 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPE")) {
479 /*
480 * Recipe
481 */
482 rec_total++;
483 total++;
484 sql = "INSERT INTO recipes SET uuid='";
485 sql.append(QUuid::createUuid().toString().mid(1, 36));
486
487 while (xml->readNext()) {
488 if (xml->atEnd())
489 break;
490 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPE")) {
491 // query.exec(sql);
492 if (query.lastError().isValid()) {
493 // qWarning() << sql << query.lastError();
494 rec_errors++;
495 errors++;
496 }
497 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
498 break;
499 }
500 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
501 // Ignore.
502 } else {
503 if (xml->tokenType() == QXmlStreamReader::StartElement)
504 qDebug() << "2 " << xml->tokenType() << xml->name();
505 }
506 }
507 }
508 }
509 } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASHS")) {
510 /*
511 * Mashes
512 */
513 while (xml->readNext()) {
514 if (xml->atEnd())
515 break;
516 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASHS")) {
517 qDebug() << "0 /MASHS";
518 break;
519 }
520 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) {
521 /*
522 * Mash
523 */
524 mash_total++;
525 total++;
526 sql = "INSERT INTO inventory_mashs SET uuid='";
527 sql.append(QUuid::createUuid().toString().mid(1, 36));
528
529 while (xml->readNext()) {
530 if (xml->atEnd())
531 break;
532 if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) {
533 // query.exec(sql);
534 if (query.lastError().isValid()) {
535 // qWarning() << sql << query.lastError();
536 mash_errors++;
537 errors++;
538 }
539 ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize));
540 break;
541 }
542 if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) {
543 // Ignore.
544 } else {
545 if (xml->tokenType() == QXmlStreamReader::StartElement)
546 qDebug() << "2 " << xml->tokenType() << xml->name();
547 }
548 }
549 }
550 }
551 } else {
552 qDebug() << "Unknown level 0" << xml->name();
553 }
554 if (xml->atEnd())
555 break;
556 }
557
558 log.append(QString(" total errors\n"));
559 log.append(QString(" ----- ------\n"));
560 log.append(QString("styles %1 %2\n").arg(st_total, 3).arg(st_errors, 3));
561 log.append(QString("equipments %1 %2\n").arg(eq_total, 3).arg(eq_errors, 3));
562 log.append(QString("fermentables %1 %2\n").arg(f_total, 3).arg(f_errors, 3));
563 log.append(QString("hops %1 %2\n").arg(h_total, 3).arg(h_errors, 3));
564 log.append(QString("miscs %1 %2\n").arg(m_total, 3).arg(m_errors, 3));
565 log.append(QString("yeasts %1 %2\n").arg(y_total, 3).arg(y_errors, 3));
566 log.append(QString("waters %1 %2\n").arg(w_total, 3).arg(w_errors, 3));
567 log.append(QString("mashes %1 %2\n").arg(mash_total, 3).arg(mash_errors, 3));
568 log.append(QString("recipes %1 %2\n").arg(rec_total, 3).arg(rec_errors, 3));
569 log.append(QString(" ----- ------\n"));
570 log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3));
571 ui->logEdit->setPlainText(log);
572
573 ui->progressBar->setValue(100);
574 if (xml->hasError()) {
575 qWarning() << "error" << xml->error();
576 } else {
577 qDebug() << "all good" << eq_total << eq_errors;
578 }
579 file.close();
580 }
581
582

mercurial