diff -r 717140ab5647 -r 12f915849e4a src/ImportXML.cpp --- a/src/ImportXML.cpp Tue Jun 14 12:52:03 2022 +0200 +++ b/src/ImportXML.cpp Wed Jun 15 09:26:22 2022 +0200 @@ -18,6 +18,7 @@ #include "../ui/ui_ImportXML.h" #include "global.h" #include "Utils.h" +#include "database/db_recipe.h" #include "MainWindow.h" @@ -939,24 +940,735 @@ * Recipe */ total++; + Recipe *r = new Recipe(); + r->record = -1; + r->notes = r->st_guide = r->st_name = r->st_letter = r->st_category = ""; + r->w1_name = r->w2_name = ""; + r->w1_ph = r->w2_ph = r->wg_ph = r->wb_ph = 7; + r->mash_name = ""; 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(); + qDebug() << "recipe:" << r->name; + for (int i = 0; i < r->fermentables.size(); i++) + qDebug() << " fermentable" << i << r->fermentables.at(i).name; + for (int i = 0; i < r->hops.size(); i++) + qDebug() << " hop" << i << r->hops.at(i).name; + for (int i = 0; i < r->miscs.size(); i++) + qDebug() << " misc" << i << r->miscs.at(i).name; + for (int i = 0; i < r->yeasts.size(); i++) + qDebug() << " yeast" << i << r->yeasts.at(i).name; + for (int i = 0; i < r->mashs.size(); i++) + qDebug() << " mash step" << i << r->mashs.at(i).step_name; + qDebug() << " water" << 0 << r->w1_name << r->w1_amount; + qDebug() << " water" << 1 << r->w2_name << r->w2_amount; + if (DB_recipe::save(r, this)) { + qInfo() << "Inserted recipe" << r->name; + } else { errors++; } + delete r; ui->progressBar->setValue(round(100 * xml->characterOffset() / fsize)); break; } - if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "VERSION")) { + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "AUTONR") || + (xml->name() == "FORCED_CARBONATION") || (xml->name() == "DISPLAY_BATCH_SIZE") || + (xml->name() == "DISPLAY_BOIL_SIZE") || (xml->name() == "SPARGE_WATER_COMP") || + (xml->name() == "OG_BEFORE_BOIL") || (xml->name() == "SG_END_PRIMARY") || + (xml->name() == "FORCED_CARB_KEGS") || (xml->name() == "COOLING_METHOD") || + (xml->name() == "INVENTORY_REDUCED") || (xml->name() == "LOCKED") || + (xml->name() == "PRIMING_SUGAR_BOTTLES") || (xml->name() == "PRIMING_SUGAR_KEGS") || + (xml->name() == "NR_RECIPE") || (xml->name() == "LACTIC_SPARGE") || + (xml->name() == "TARGET_PH") || (xml->name() == "SG_END_MASH") || + (xml->name() == "VOLUME_HLT") || (xml->name() == "OG_FERMENTER") || + (xml->name() == "COOLING_TO") || (xml->name() == "AERATION_TYPE") || + (xml->name() == "BATCH_DIVIDED") || (xml->name() == "BATCH_DIVISION") || + (xml->name() == "DIVIDED_FROM") || (xml->name() == "PARENT") || + (xml->name() == "FERMENTATION_STAGES") || (xml->name() == "DATE") || + (xml->name() == "CALC_ACID") || (xml->name() == "BREWER") + )) { // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + r->name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + r->notes = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BATCH_SIZE")) { + r->batch_size = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_SIZE")) { + r->boil_size = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BOIL_TIME")) { + r->boil_time = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EFFICIENCY")) { + r->efficiency = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "OG") || (xml->name() == "EST_OG"))) { + r->est_og = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "FG") || (xml->name() == "EST_FG"))) { + r->est_fg = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "ABV") || (xml->name() == "EST_ABV"))) { + r->est_abv = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && ((xml->name() == "IBU") || (xml->name() == "EST_IBU"))) { + r->est_ibu = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EST_COLOR")) { + r->est_color = Utils::srm_to_ebc(xml->readElementText().toDouble()); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ACID_SPARGE_PERC")) { + r->sparge_acid_perc = Utils::srm_to_ebc(xml->readElementText().toDouble()); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SPARGE_ACID_TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Hydrochloric") + r->sparge_acid_type = 1; + else if (temp == "Phosphoric") + r->sparge_acid_type = 2; + else if (temp == "Sulfuric") + r->sparge_acid_type = 3; + else + r->sparge_acid_type = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Extract") + r->type = 0; + else if (temp == "Partial Mash") + r->type = 1; + else + r->type = 2; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_METHOD")) { + QString temp = xml->readElementText(); + if (temp == "Rager") + r->ibu_method = 1; + else if (temp == "Daniels") + r->ibu_method = 2; + else if (temp == "Garetz") + r->ibu_method = 3; + else if (temp == "Mosher") + r->ibu_method = 4; + else if (temp == "Noonan") + r->ibu_method = 5; + else + r->ibu_method = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_METHOD")) { + QString temp = xml->readElementText(); + if (temp == "Mosher") + r->color_method = 1; + else if (temp == "Daniels") + r->color_method = 2; + else if (temp == "Halberstadt") + r->color_method = 3; + else if (temp == "Naudts") + r->color_method = 4; + else + r->color_method = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "STYLE")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "NOTES") || + (xml->name() == "PROFILE") || (xml->name() == "EXAMPLES") || + (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")) { + r->st_name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY")) { + r->st_category = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CATEGORY_NUMBER")) { + r->st_category_number = xml->readElementText().toInt(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_LETTER")) { + r->st_letter = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STYLE_GUIDE")) { + r->st_guide = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Lager") + r->st_type = 0; + else if (temp == "Ale") + r->st_type = 1; + else if (temp == "Mead") + r->st_type = 2; + else if (temp == "Wheat") + r->st_type = 3; + else if (temp == "Mixed") + r->st_type = 4; + else if (temp == "Cider") + r->st_type = 5; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MIN")) { + r->st_og_min = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "OG_MAX")) { + r->st_og_max = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MIN")) { + r->st_fg_min = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FG_MAX")) { + r->st_fg_max = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MIN")) { + r->st_ibu_min = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "IBU_MAX")) { + r->st_ibu_max = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MIN")) { + r->st_color_min = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR_MAX")) { + r->st_color_max = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MIN")) { + r->st_carb_min = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CARB_MAX")) { + r->st_carb_max = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MIN")) { + r->st_abv_min = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ABV_MAX")) { + r->st_abv_max = xml->readElementText().toDouble(); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << xml->tokenType() << " STYLE->" << xml->name(); + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "EQUIPMENT")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "EQUIPMENT")) { + break; + } + /* + * Ignore everything about equipment. Not usefull in a recipe, all calculations should + * be done after import. + */ + } + + /* + * Ingredients + */ + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOPS")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOPS")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HOP")) { + /* + * Process hop + */ + Hops *newh = new Hops(); + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "HOP")) { + r->hops.append(*newh); + delete newh; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + newh->name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ORIGIN")) { + newh->origin = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + newh->notes = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TIME")) { + newh->time = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "AMOUNT")) { + newh->amount = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FORM")) { + QString temp = xml->readElementText(); + if (temp == "Plug") + newh->form = 1; + else if (temp == "Leaf") + newh->form = 2; + else if (temp == "Leaf wet") + newh->form = 3; + else if (temp == "Cryo") + newh->form = 4; + else + newh->form = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ALPHA")) { + newh->alpha = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Aroma") + newh->type = 1; + else if (temp == "Both") + newh->type = 2; + else + newh->type = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "USE")) { + QString temp = xml->readElementText(); + if (temp == "First wort") + newh->useat = 1; + else if (temp == "Boil") + newh->useat = 2; + else if (temp == "Aroma") + newh->useat = 3; + else if (temp == "Whirlpool") + newh->useat = 4; + else if (temp == "Dry hop") + newh->useat = 5; + else + newh->useat = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BETA")) { + newh->beta = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HSI")) { + newh->hsi = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SUBSTITUTES")) { + newh->substitutes = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "HUMULENE")) { + newh->humulene = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && + ((xml->name() == "CARYOPHYLLENE") || (xml->name() == "CAROPHYLLENE"))) { + newh->caryophyllene = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COHUMULONE")) { + newh->cohumulone = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MYRCENE")) { + newh->myrcene = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOTAL_OIL")) { + newh->total_oil = xml->readElementText().toDouble(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLES")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLES")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FERMENTABLE")) { + /* + * Process fermentable + */ + Fermentables *f = new Fermentables(); + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "FERMENTABLE")) { + r->fermentables.append(*f); + delete f; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "DISPLAY_STEP_TEMP") || + (xml->name() == "DISPLAY_AMOUNT") || (xml->name() == "COST") || + (xml->name() == "DISPLAY_COST") || (xml->name() == "INVENTORY") || + (xml->name() == "ALWAYS_ON_STOCK") || (xml->name() == "DISPLAY_COLOR") || + (xml->name() == "PERCENTAGE") || (xml->name() == "ADJUST_TO_TOTAL_100"))) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + f->name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Sugar") + f->type = 1; + else if (temp == "Extract") + f->type = 2; + else if (temp == "Dry extract") + f->type = 3; + else if (temp == "Adjunct") + f->type = 4; + else + f->type = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ORIGIN")) { + f->origin = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SUPPLIER")) { + f->supplier = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + f->notes = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "AMOUNT")) { + f->amount = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YIELD")) { + f->yield = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COARSE_FINE_DIFF")) { + f->coarse_fine_diff = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MOISTURE")) { + f->moisture = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DIASTATIC_POWER")) { + f->diastatic_power = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_IN_BATCH")) { + f->max_in_batch = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RECOMMEND_MASH")) { + f->recommend_mash = (xml->readElementText() == "TRUE") ? true:false; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "GRAINTYPE")) { + QString temp = xml->readElementText(); + if (temp == "Roast") + f->graintype = 1; + else if (temp == "Crystal") + f->graintype = 2; + else if (temp == "Kilned") + f->graintype = 3; + else if (temp == "Sour Malt") + f->graintype = 4; + else if (temp == "Special") + f->graintype = 5; + else if (temp == "No malt") + f->graintype = 6; + else + f->graintype = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADDED")) { + QString temp = xml->readElementText(); + if (temp == "Boil") + f->added = 1; + else if (temp == "Fermentation") + f->added = 2; + else if (temp == "Lagering") + f->added = 3; + else if (temp == "Bottle") + f->added = 4; + else + f->added = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ADD_AFTER_BOIL")) { + f->add_after_boil = (xml->readElementText() == "TRUE") ? true:false; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "COLOR")) { + f->color = Utils::srm_to_ebc(xml->readElementText().toDouble()); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PROTEIN")) { + f->protein = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DISSOLVED_PROTEIN")) { + f->dissolved_protein = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "DI_pH")) { + f->di_ph = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ACID_TO_pH_5.7")) { + f->acid_to_ph_57 = xml->readElementText().toDouble(); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << xml->tokenType() << "FERMENTABLE->" << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISCS")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISCS")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MISC")) { + /* + * Process misc + */ + Miscs *m = new Miscs(); + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MISC")) { + r->miscs.append(*m); + delete m; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "DISPLAY_AMOUNT") || + (xml->name() == "FREE_FIELD") || (xml->name() == "FREE_FIELD_NAME") || + (xml->name() == "COST") || (xml->name() == "INVENTORY") || + (xml->name() == "DISPLAY_COST") || + (xml->name() == "ALWAYS_ON_STOCK") || (xml->name() == "DISPLAY_TIME"))) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + m->name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + m->notes = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "AMOUNT")) { + m->amount = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "USE_FOR")) { + m->use_for = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Herb") + m->type = 1; + else if (temp == "Flavor") + m->type = 2; + else if (temp == "Fining") + m->type = 3; + else if (temp == "Water agent") + m->type = 4; + else if (temp == "Yeast nutrient") + m->type = 5; + else if (temp == "Other") + m->type = 6; + else + m->type = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "USE")) { + QString temp = xml->readElementText(); + if (temp == "Mash") + m->use_use = 1; + else if (temp == "Boil") + m->use_use = 2; + else if (temp == "Primary") + m->use_use = 3; + else if (temp == "Secondary") + m->use_use = 4; + else if (temp == "Bottling") + m->use_use = 5; + else + m->use_use = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "AMOUNT_IS_WEIGHT")) { + m->amount_is_weight = (xml->readElementText() == "TRUE") ? true:false; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TIME")) { + m->time = xml->readElementText().toDouble(); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << xml->tokenType() << " MISC->" << xml->name(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEASTS")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEASTS")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "YEAST")) { + /* + * Process yeast + */ + Yeasts *y = new Yeasts(); + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "YEAST")) { + r->yeasts.append(*y); + delete y; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + y->name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "LABORATORY")) { + y->laboratory = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PRODUCT_ID")) { + y->product_id = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NOTES")) { + y->notes = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BEST_FOR")) { + y->best_for = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "AMOUNT")) { + y->amount = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Ale") + y->type = 1; + else if (temp == "Wheat") + y->type = 2; + else if (temp == "Wine") + y->type = 3; + else if (temp == "Champagne") + y->type = 4; + else if (temp == "Brett") + y->type = 5; + else if (temp == "Kveik") + y->type = 6; + else if (temp == "Hybrid") + y->type = 7; + else + y->type = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FORM")) { + QString temp = xml->readElementText(); + if (temp == "Dry") + y->form = 1; + else if (temp == "Slant") + y->form = 2; + else if (temp == "Culture") + y->form = 3; + else if (temp == "Frozen") + y->form = 4; + else if (temp == "Bottle") + y->form = 5; + else if (temp == "Dried") + y->form = 6; + else + y->form = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "FLOCCULATION")) { + QString temp = xml->readElementText(); + if (temp == "Medium") + y->flocculation = 1; + else if (temp == "High") + y->flocculation = 1; + else if (temp == "Very high") + y->flocculation = 3; + else + y->flocculation = 0; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MIN_TEMPERATURE")) { + y->min_temperature = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_TEMPERATURE")) { + y->max_temperature = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "ATTENUATION")) { + y->attenuation = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAX_REUSE")) { + y->max_reuse = xml->readElementText().toInt(); + } + } + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "NOTES") || + (xml->name() == "GRAIN_TEMP") || (xml->name() == "TUN_TEMP") || + (xml->name() == "SG_LAST_RUNNINGS") || (xml->name() == "PH_LAST_RUNNINGS") || + (xml->name() == "TUN_WEIGHT") || (xml->name() == "TUN_SPECIFIC_HEAT") || + (xml->name() == "EQUIP_ADJUST"))) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + r->mash_name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PH")) { + r->mash_ph = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SPARGE_TEMP")) { + r->sparge_temp = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_STEPS")) { + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH_STEPS")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MASH_STEP")) { + /* + * Process mash step + */ + MashSteps *ms = new MashSteps(); + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "MASH_STEP")) { + r->mashs.append(*ms); + delete ms; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "DISPLAY_STEP_TEMP") || + (xml->name() == "PH") || (xml->name() == "WATER_GRAIN_RATIO") || + (xml->name() == "DECOCTION_AMT") || (xml->name() == "INFUSE_TEMP") || + (xml->name() == "INFUSE_AMOUNT") || (xml->name() == "DISPLAY_INFUSE_AMT") + )) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + ms->step_name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TYPE")) { + QString temp = xml->readElementText(); + if (temp == "Infusion") + ms->step_type = 0; + else if (temp == "Temperature") + ms->step_type = 1; + else if (temp == "Decoction") + ms->step_type = 2; + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STEP_TEMP")) { + ms->step_temp = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "END_TEMP")) { + ms->end_temp = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "STEP_TIME")) { + ms->step_time = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "RAMP_TIME")) { + ms->ramp_time = xml->readElementText().toDouble(); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << xml->tokenType() << " MASH_STEP->" << xml->name(); + } + } + } + } + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << xml->tokenType() << " MASH->" << xml->name(); + } + } + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATERS")) { + int waterno = 0; + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATERS")) { + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "WATER")) { + /* + * Process water + */ + while (xml->readNext()) { + if (xml->atEnd()) + break; + if ((xml->tokenType() == QXmlStreamReader::EndElement) && (xml->name() == "WATER")) { + waterno++; + break; + } + if ((xml->tokenType() == QXmlStreamReader::StartElement) && ( + (xml->name() == "VERSION") || (xml->name() == "DISPLAY_STEP_TEMP") || + (xml->name() == "NOTES") || (xml->name() == "DISPLAY_AMOUNT") || + (xml->name() == "ALWAYS_ON_STOCK") || (xml->name() == "DEFAULT_WATER") + )) { + // Ignore. + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "NAME")) { + if (waterno) + r->w2_name = xml->readElementText(); + else + r->w1_name = xml->readElementText(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "PH")) { + if (waterno) + r->w2_ph = xml->readElementText().toDouble(); + else + r->w1_ph = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "AMOUNT")) { + if (waterno) + r->w2_amount = xml->readElementText().toDouble(); + else + r->w1_amount = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CALCIUM")) { + if (waterno) + r->w2_calcium = xml->readElementText().toDouble(); + else + r->w1_calcium = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "BICARBONATE")) { + if (waterno) + r->w2_total_alkalinity = 1.22 * xml->readElementText().toDouble(); + else + r->w1_total_alkalinity = 1.22 * xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SULFATE")) { + if (waterno) + r->w2_sulfate = xml->readElementText().toDouble(); + else + r->w1_sulfate = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "CHLORIDE")) { + if (waterno) + r->w2_chloride = xml->readElementText().toDouble(); + else + r->w1_chloride = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "SODIUM")) { + if (waterno) + r->w2_sodium = xml->readElementText().toDouble(); + else + r->w1_sodium = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "MAGNESIUM")) { + if (waterno) + r->w2_magnesium = xml->readElementText().toDouble(); + else + r->w1_magnesium = xml->readElementText().toDouble(); + } else if ((xml->tokenType() == QXmlStreamReader::StartElement) && (xml->name() == "TOTAL_ALKALINITY")) { + if (waterno) + r->w2_total_alkalinity = xml->readElementText().toDouble(); + else + r->w1_total_alkalinity = xml->readElementText().toDouble(); + } else { + if (xml->tokenType() == QXmlStreamReader::StartElement) + qDebug() << xml->tokenType() << " WATER->" << xml->name(); + } + } + } + } } else { if (xml->tokenType() == QXmlStreamReader::StartElement) - qDebug() << "2 " << xml->tokenType() << xml->name(); + qDebug() << xml->tokenType() << " RECIPE" << xml->name(); } } }