--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ImportXML.cpp Sat Jun 11 12:59:49 2022 +0200 @@ -0,0 +1,582 @@ +/** + * ImportXML.cpp is part of bmsapp. + * + * bmsapp is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * bmsapp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#include "ImportXML.h" +#include "../ui/ui_ImportXML.h" +#include "MainWindow.h" + + +ImportXML::ImportXML(QWidget *parent) : QDialog(parent), ui(new Ui::ImportXML) +{ + qDebug() << "ImportXML start"; + ui->setupUi(this); + WindowTitle(); + ui->progressBar->setValue(0); + connect(ui->quitButton, SIGNAL(clicked()), parent, SLOT(fromImportXML())); +} + + +ImportXML::~ImportXML() +{ + qDebug() << "ImportXML done"; + delete ui; +} + + +void ImportXML::WindowTitle() +{ + QString txt = QString(tr("BMSapp - Import XML")); + setWindowTitle(txt); +} + + +void ImportXML::on_openButton_clicked() +{ + QSqlQuery query; + QString sql, log; + int eq_total = 0, eq_errors = 0, f_total = 0, f_errors = 0, h_total = 0, h_errors = 0; + int m_total = 0, m_errors = 0, y_total = 0, y_errors = 0, rec_total = 0, rec_errors = 0; + int st_total = 0, st_errors = 0, mash_total = 0, mash_errors = 0, w_total = 0, w_errors = 0; + int total = 0, errors = 0; + + QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath() + "/*.xml", tr("Files (*.xml)")); + if (fileName == 0) { + QMessageBox::warning(this, tr("Open File"), tr("No XML file selected.")); + return; + } + ui->fileEdit->setText(fileName); + + QFile file(fileName); + qint64 fsize = file.size(); + + log = "Import XML file `" + fileName + "`\n\n"; + qInfo() << "Import XML" << fileName << "length" << fsize << "bytes"; + + file.open(QIODevice::ReadOnly); + QXmlStreamReader *xml = new QXmlStreamReader(&file); + + while (xml->readNext()) { + + if (xml->atEnd()) + break; + + if (xml->tokenType() == QXmlStreamReader::StartDocument) { +// qDebug() << xml->readElementText(); + // Just skip + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENTS")) { + /* + * Equipments + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENTS")) { + qDebug() << "0 /EQUIPMENTS"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) { + /* + * Equipment + */ + eq_total++; + total++; + sql = "INSERT INTO inventory_equipments SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + sql.append("', top_up_water=0"); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) { + query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + eq_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + sql.append(QString(", name='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + sql.append(QString(", notes='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) { + sql.append(QString(", boil_size=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) { + sql.append(QString(", batch_size=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_VOLUME")) { + sql.append(QString(", tun_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_WEIGHT")) { + sql.append(QString(", tun_weight=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_SPECIFIC_HEAT")) { + sql.append(QString(", tun_specific_heat=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TUN_HEIGHT")) { + sql.append(QString(", tun_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TRUB_CHILLER_LOSS")) { + sql.append(QString(", trub_chiller_loss=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EVAP_RATE")) { + sql.append(QString(", evap_rate=%1").arg(xml->readElementText().toDouble(), 3, 'f', 2, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_TIME")) { + sql.append(QString(", boil_time=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CALC_BOIL_VOLUME")) { + sql.append(QString(", calc_boil_volume=%1").arg((xml->readElementText() == "TRUE") ? "true":"false")); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOP_UP_KETTLE")) { + sql.append(QString(", top_up_kettle=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP_UTILIZATION")) { + sql.append(QString(", hop_utilization=%1").arg(xml->readElementText().toDouble(), 1, 'f', 0, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_VOLUME")) { + sql.append(QString(", lauter_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_HEIGHT")) { + sql.append(QString(", lauter_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LAUTER_DEADSPACE")) { + sql.append(QString(", lauter_deadspace=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_VOLUME")) { + sql.append(QString(", kettle_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "KETTLE_HEIGHT")) { + sql.append(QString(", kettle_height=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_VOLUME")) { + sql.append(QString(", mash_volume=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EFFICIENCY")) { + sql.append(QString(", efficiency=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLES")) { + /* + * Styles + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLES")) { + qDebug() << "0 /STYLES"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE")) { + /* + * Style + */ + st_total++; + total++; + sql = "INSERT INTO profile_styles SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + sql.append("'"); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLE")) { + query.exec(sql); + if (query.lastError().isValid()) { + qWarning() << sql << query.lastError(); + st_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "VERSION")) || + (xml->name() == "DISPLAY_OG_MIN") || (xml->name() == "DISPLAY_OG_MAX") || (xml->name() == "DISPLAY_FG_MIN") || + (xml->name() == "DISPLAY_FG_MAX") || (xml->name() == "DISPLAY_IBU_MIN") || (xml->name() == "DISPLAY_IBU_MAX") || + (xml->name() == "DISPLAY_COLOR_MIN") || (xml->name() == "DISPLAY_COLOR_MAX") || (xml->name() == "DISPLAY_CARB_MIN") || + (xml->name() == "DISPLAY_CARB_MAX") || (xml->name() == "DISPLAY_ABV_MIN") || (xml->name() == "DISPLAY_ABV_MAX") || + (xml->name() == "OG_RANGE") || (xml->name() == "FG_RANGE") || (xml->name() == "IBU_RANGE") || + (xml->name() == "CARB_RANGE") || (xml->name() == "COLOR_RANGE") || (xml->name() == "ABV_RANGE")) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + sql.append(QString(", name='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY")) { + sql.append(QString(", category='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY_NUMBER")) { + sql.append(QString(", category_number=%1").arg(xml->readElementText().toInt())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_LETTER")) { + sql.append(QString(", style_letter='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_GUIDE")) { + sql.append(QString(", style_guide='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + sql.append(QString(", type=%1").arg(xml->readElementText().toInt())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + sql.append(QString(", notes='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MIN")) { + sql.append(QString(", og_min=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MAX")) { + sql.append(QString(", og_max=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MIN")) { + sql.append(QString(", fg_min=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MAX")) { + sql.append(QString(", fg_max=%1").arg(xml->readElementText().toDouble(), 4, 'f', 3, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MIN")) { + sql.append(QString(", ibu_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MAX")) { + sql.append(QString(", ibu_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MIN")) { + sql.append(QString(", color_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MAX")) { + sql.append(QString(", color_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MIN")) { + sql.append(QString(", carb_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MAX")) { + sql.append(QString(", carb_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MIN")) { + sql.append(QString(", abv_min=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MAX")) { + sql.append(QString(", abv_max=%1").arg(xml->readElementText().toDouble(), 2, 'f', 1, '0')); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROFILE")) { + sql.append(QString(", profile='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "INGREDIENTS")) { + sql.append(QString(", ingredients='%1'").arg(xml->readElementText())); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EXAMPLES")) { + sql.append(QString(", examples='%1'").arg(xml->readElementText())); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) { + /* + * Fermentables + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLES")) { + qDebug() << "0 /FERMENTABLES"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) { + /* + * Fermentable + */ + f_total++; + total++; + sql = "INSERT INTO inventory_fermentables SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + f_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOPS")) { + /* + * Hops + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOPS")) { + qDebug() << "0 /HOPS"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) { + /* + * Hop + */ + h_total++; + total++; + sql = "INSERT INTO inventory_hops SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + h_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISCS")) { + /* + * Miscs + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISCS")) { + qDebug() << "0 /MISCS"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) { + /* + * Misc + */ + m_total++; + total++; + sql = "INSERT INTO inventory_miscs SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + m_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEASTS")) { + /* + * Yeasts + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEASTS")) { + qDebug() << "0 /YEASTS"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) { + /* + * Yeast + */ + y_total++; + total++; + sql = "INSERT INTO inventory_yeasts SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + y_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATERS")) { + /* + * Waters + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATERS")) { + qDebug() << "0 /WATERS"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) { + /* + * Water + */ + w_total++; + total++; + sql = "INSERT INTO inventory_waters SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + w_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPES")) { + /* + * Recipes + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPES")) { + qDebug() << "0 /RECIPES"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECIPE")) { + /* + * Recipe + */ + rec_total++; + total++; + sql = "INSERT INTO recipes SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "RECIPE")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + rec_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASHS")) { + /* + * Mashes + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASHS")) { + qDebug() << "0 /MASHS"; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) { + /* + * Mash + */ + mash_total++; + total++; + sql = "INSERT INTO inventory_mashs SET uuid='"; + sql.append(QUuid::createUuid().toString().mid(1, 36)); + + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) { +// query.exec(sql); + if (query.lastError().isValid()) { +// qWarning() << sql << query.lastError(); + mash_errors++; + errors++; + } + ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + // Ignore. + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << "2 " << xml->tokenType() << xml->name(); + } + } + } + } + } else { + qDebug() << "Unknown level 0" << xml->name(); + } + if (xml->atEnd()) + break; + } + + log.append(QString(" total errors\n")); + log.append(QString(" ----- ------\n")); + log.append(QString("styles %1 %2\n").arg(st_total, 3).arg(st_errors, 3)); + log.append(QString("equipments %1 %2\n").arg(eq_total, 3).arg(eq_errors, 3)); + log.append(QString("fermentables %1 %2\n").arg(f_total, 3).arg(f_errors, 3)); + log.append(QString("hops %1 %2\n").arg(h_total, 3).arg(h_errors, 3)); + log.append(QString("miscs %1 %2\n").arg(m_total, 3).arg(m_errors, 3)); + log.append(QString("yeasts %1 %2\n").arg(y_total, 3).arg(y_errors, 3)); + log.append(QString("waters %1 %2\n").arg(w_total, 3).arg(w_errors, 3)); + log.append(QString("mashes %1 %2\n").arg(mash_total, 3).arg(mash_errors, 3)); + log.append(QString("recipes %1 %2\n").arg(rec_total, 3).arg(rec_errors, 3)); + log.append(QString(" ----- ------\n")); + log.append(QString("total %1 %2\n").arg(total, 3).arg(errors, 3)); + ui->logEdit->setPlainText(log); + + ui->progressBar->setValue(100); + if (xml->hasError()) { + qWarning() << "error" << xml->error(); + } else { + qDebug() << "all good" << eq_total << eq_errors; + } + file.close(); +} + +