|
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 |