summaryrefslogtreecommitdiff
path: root/src/database_krecipes.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/database_krecipes.cc')
-rw-r--r--src/database_krecipes.cc41
1 files changed, 40 insertions, 1 deletions
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
{