Added import recipes.

Wed, 15 Jun 2022 09:26:22 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 15 Jun 2022 09:26:22 +0200
changeset 289
12f915849e4a
parent 288
717140ab5647
child 290
93820a8ffbff

Added import recipes.

src/ImportXML.cpp file | annotate | diff | comparison | revisions
--- 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();
                         }
                     }
                 }

mercurial