summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2022-04-24 16:28:35 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2022-05-26 18:41:20 +0200
commite242295d2d1bbfaaca3da0807308478c1d5ad0f8 (patch)
treec787c7e55af0752f5c171c6f5529fb0c37958227
parent60cacb4babb46ae2ab22ae0b7b7357012887460d (diff)
Added more fields to database, recipe and viewer.
-rw-r--r--src/database.cc63
-rw-r--r--src/recipe.h10
2 files changed, 43 insertions, 30 deletions
diff --git a/src/database.cc b/src/database.cc
index 9e34a09..60b8814 100644
--- a/src/database.cc
+++ b/src/database.cc
@@ -50,6 +50,17 @@ Database::~Database()
sqlite3_close(db);
}
+namespace
+{
+std::string getString(sqlite3_stmt *statement, int index)
+{
+ int size = sqlite3_column_bytes(statement, index);
+ std::string str;
+ str.append((const char*)sqlite3_column_blob(statement, index), size);
+ return str;
+}
+} // ::
+
std::deque<RecipeItem> Database::getRecipes()
{
std::deque<RecipeItem> items;
@@ -72,13 +83,8 @@ std::deque<RecipeItem> Database::getRecipes()
{
item.id = sqlite3_column_int(statement, 0);
- int title_size = sqlite3_column_bytes(statement, 1);
- item.title.append((const char*)sqlite3_column_blob(statement, 1),
- title_size);
-
- int image_size = sqlite3_column_bytes(statement, 2);
- item.image.append((const char*)sqlite3_column_blob(statement, 2),
- image_size);
+ item.title = getString(statement, 1);
+ item.image = getString(statement, 2);
}
else
{
@@ -97,7 +103,7 @@ Recipe Database::getRecipe(int id)
{
std::string sql =
- "select id, title, image, instructions from recipe where id=" +
+ "select id, title, description, image, instructions, source, link, cuisine, cooktime, preptime, yields, yield_unit, modifications from recipe where id=" +
std::to_string(id);
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(db, sql.data(), sql.length(), &statement, 0) != SQLITE_OK)
@@ -114,19 +120,23 @@ Recipe Database::getRecipe(int id)
if(result == SQLITE_ROW)
{
recipe.id = sqlite3_column_int(statement, 0);
-
- int title_size = sqlite3_column_bytes(statement, 1);
- recipe.title.append((const char*)sqlite3_column_blob(statement, 1),
- title_size);
-
- int image_size = sqlite3_column_bytes(statement, 2);
- recipe.image.append((const char*)sqlite3_column_blob(statement, 2),
- image_size);
-
- int instructions_size = sqlite3_column_bytes(statement, 3);
- recipe.instructions.append((const char*)sqlite3_column_blob(statement, 3),
- instructions_size);
-}
+ recipe.title = getString(statement, 1);
+ recipe.description = getString(statement, 2);
+ recipe.image = getString(statement, 3);
+ recipe.instructions = getString(statement, 4);
+ recipe.source = getString(statement, 5);
+ if(!recipe.source.empty())
+ {
+ recipe.source += " ";
+ }
+ recipe.source += getString(statement, 6);
+ recipe.cuisine = getString(statement, 7);
+ recipe.cooktime = sqlite3_column_int(statement, 8);
+ recipe.preptime = sqlite3_column_int(statement, 9);
+ recipe.yields = sqlite3_column_double(statement, 10);
+ recipe.yield_unit = getString(statement, 11);
+ recipe.tags.push_back(getString(statement, 12));
+ }
else
{
break;
@@ -161,15 +171,8 @@ Recipe Database::getRecipe(int id)
if(result == SQLITE_ROW)
{
ingredient.amount = sqlite3_column_double(statement, 0);
-
- int unit_size = sqlite3_column_bytes(statement, 1);
- ingredient.unit.append((const char*)sqlite3_column_blob(statement, 1),
- unit_size);
-
- int item_size = sqlite3_column_bytes(statement, 2);
- ingredient.item.append((const char*)sqlite3_column_blob(statement, 2),
- item_size);
-
+ ingredient.unit = getString(statement, 1);
+ ingredient.item = getString(statement, 2);
recipe.ingredients.push_back(ingredient);
}
else
diff --git a/src/recipe.h b/src/recipe.h
index 3b6ef3e..f33c07c 100644
--- a/src/recipe.h
+++ b/src/recipe.h
@@ -47,7 +47,17 @@ struct Recipe
{
int id;
std::string title;
+ std::string description;
std::string image;
std::string instructions;
std::vector<Ingredient> ingredients;
+
+ std::string source;
+ std::string cuisine;
+ int cooktime;
+ int preptime;
+
+ double yields;
+ std::string yield_unit;
+ std::vector<std::string> tags;
};