From 8b65d0eb2815576780c57df428c1faf23fe75068 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 1 May 2022 17:31:28 +0200 Subject: Add ingredient group support for both krecipes and gourmet databases and show them in the viewer. --- src/database_krecipes.cc | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'src/database_krecipes.cc') diff --git a/src/database_krecipes.cc b/src/database_krecipes.cc index bf764b2..fa817bd 100644 --- a/src/database_krecipes.cc +++ b/src/database_krecipes.cc @@ -265,7 +265,9 @@ Recipe DatabaseKrecipes::getRecipe(int id) return {}; } + int last_group_id{-1}; // -1 is actually a valid id in the database int result = 0; + recipe.ingredient_groups.push_back({}); while(true) { Ingredient ingredient; @@ -276,6 +278,43 @@ Recipe DatabaseKrecipes::getRecipe(int id) ingredient.item = getString(statement, 0); ingredient.amount = sqlite3_column_double(statement, 1); ingredient.unit = getString(statement, 2); + int group_id = sqlite3_column_int(statement, 3); + if(last_group_id != group_id) + { + // Look up group id name and append + recipe.ingredient_groups.push_back({/*"Group-" + std::to_string(group_id), {}*/}); + last_group_id = group_id; + + // + // Get ingredient group name + // + { + std::string sql = + "select name from ingredient_groups where id=" + std::to_string(group_id); + sqlite3_stmt *statement; + if(sqlite3_prepare_v2(db, sql.data(), sql.length(), &statement, 0) != SQLITE_OK) + { + std::cerr << "sqlite3_prepare_v2 failed: " << sqlite3_errmsg(db) << '\n'; + return {}; + } + + int result = 0; + while(true) + { + result = sqlite3_step(statement); + + if(result == SQLITE_ROW) + { + recipe.ingredient_groups.back().title = getString(statement, 0); + } + else + { + break; + } + } + } + + } // // Get ingredient name @@ -335,7 +374,7 @@ Recipe DatabaseKrecipes::getRecipe(int id) } } - recipe.ingredients.push_back(ingredient); + recipe.ingredient_groups.back().ingredients.push_back(ingredient); } else { -- cgit v1.2.3