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 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 30 deletions(-) (limited to 'src/database.cc') 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 -- cgit v1.2.3