From e242295d2d1bbfaaca3da0807308478c1d5ad0f8 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 24 Apr 2022 16:28:35 +0200 Subject: Added more fields to database, recipe and viewer. --- src/database.cc | 63 ++++++++++++++++++++++++++++++--------------------------- src/recipe.h | 10 +++++++++ 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 Database::getRecipes() { std::deque items; @@ -72,13 +83,8 @@ std::deque 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 ingredients; + + std::string source; + std::string cuisine; + int cooktime; + int preptime; + + double yields; + std::string yield_unit; + std::vector tags; }; -- cgit v1.2.3