diff options
| -rw-r--r-- | src/database.cc | 63 | ||||
| -rw-r--r-- | 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<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;  }; | 
