summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/database.cc56
-rw-r--r--src/database.h9
-rw-r--r--src/database_gourmet.cc4
-rw-r--r--src/database_gourmet.h4
-rw-r--r--src/database_krecipes.cc4
-rw-r--r--src/database_krecipes.h4
-rw-r--r--src/mainwindow.cc34
-rw-r--r--src/qookie.cc6
-rw-r--r--src/recipe.h10
9 files changed, 116 insertions, 15 deletions
diff --git a/src/database.cc b/src/database.cc
index 207a114..e55cd2a 100644
--- a/src/database.cc
+++ b/src/database.cc
@@ -25,3 +25,59 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#include "database.h"
+
+#include "database_gourmet.h"
+#include "database_krecipes.h"
+
+#include <cassert>
+
+DatabaseGourmet db1("/mnt/atuin/docs/tine/Fritid/Mad/recipes.db");
+DatabaseKrecipes db2("/mnt/atuin/docs/tine/Fritid/Mad/krecipes.krecdb");
+
+Database::Database()
+{
+}
+
+Database::~Database()
+{
+}
+
+int Database::id() const
+{
+ return {};
+}
+
+std::deque<RecipeItem> Database::getRecipes()
+{
+ auto res1 = db1.getRecipes();
+ auto res2 = db2.getRecipes();
+
+ for(auto& res : res1)
+ {
+ res.id |= db1.id();
+ }
+
+ for(auto& res : res2)
+ {
+ res.id |= db2.id();
+ res1.push_back(res);
+ }
+
+ return res1;
+}
+
+Recipe Database::getRecipe(int id)
+{
+ if((id & db1.id()) == db1.id())
+ {
+ return db1.getRecipe(id & (~db1.id()));
+ }
+
+ if((id & db2.id()) == db2.id())
+ {
+ return db2.getRecipe(id & (~db2.id()));
+ }
+
+ assert(false); // we looked up an id, but it wasn't in any of the databases? this shouldn't happen...
+ return {};
+}
diff --git a/src/database.h b/src/database.h
index 8291334..c05e55c 100644
--- a/src/database.h
+++ b/src/database.h
@@ -34,10 +34,11 @@
class Database
{
public:
- virtual ~Database() = default;
+ Database();
+ virtual ~Database();;
- virtual std::uint64_t id() const = 0;
+ virtual int id() const;
- virtual std::deque<RecipeItem> getRecipes() = 0;
- virtual Recipe getRecipe(std::uint64_t id) = 0;
+ virtual std::deque<RecipeItem> getRecipes();
+ virtual Recipe getRecipe(int id);
};
diff --git a/src/database_gourmet.cc b/src/database_gourmet.cc
index e556440..c68e2a3 100644
--- a/src/database_gourmet.cc
+++ b/src/database_gourmet.cc
@@ -81,6 +81,7 @@ std::deque<RecipeItem> DatabaseGourmet::getRecipes()
if(result == SQLITE_ROW)
{
+ item.db = DatabaseSource::Gourmet;
item.id = sqlite3_column_int(statement, 0);
item.title = getString(statement, 1);
@@ -96,7 +97,7 @@ std::deque<RecipeItem> DatabaseGourmet::getRecipes()
return items;
}
-Recipe DatabaseGourmet::getRecipe(std::uint64_t id)
+Recipe DatabaseGourmet::getRecipe(int id)
{
bool found{false};
Recipe recipe;
@@ -119,6 +120,7 @@ Recipe DatabaseGourmet::getRecipe(std::uint64_t id)
if(result == SQLITE_ROW)
{
+ recipe.db = DatabaseSource::Gourmet;
recipe.id = sqlite3_column_int(statement, 0);
recipe.title = getString(statement, 1);
recipe.description = getString(statement, 2);
diff --git a/src/database_gourmet.h b/src/database_gourmet.h
index 70ee04d..0d21990 100644
--- a/src/database_gourmet.h
+++ b/src/database_gourmet.h
@@ -37,10 +37,10 @@ public:
DatabaseGourmet(const std::string& file);
~DatabaseGourmet();
- std::uint64_t id() const override { return 1UL << 63; }
+ int id() const override { return 1UL << 30; }
std::deque<RecipeItem> getRecipes() override;
- Recipe getRecipe(std::uint64_t id) override;
+ Recipe getRecipe(int id) override;
private:
sqlite3 *db{nullptr};
diff --git a/src/database_krecipes.cc b/src/database_krecipes.cc
index fceb59c..bf764b2 100644
--- a/src/database_krecipes.cc
+++ b/src/database_krecipes.cc
@@ -81,6 +81,7 @@ std::deque<RecipeItem> DatabaseKrecipes::getRecipes()
if(result == SQLITE_ROW)
{
+ item.db = DatabaseSource::KRecipes;
item.id = sqlite3_column_int(statement, 0);
item.title = getString(statement, 1);
@@ -96,7 +97,7 @@ std::deque<RecipeItem> DatabaseKrecipes::getRecipes()
return items;
}
-Recipe DatabaseKrecipes::getRecipe(std::uint64_t id)
+Recipe DatabaseKrecipes::getRecipe(int id)
{
bool found{false};
Recipe recipe;
@@ -119,6 +120,7 @@ Recipe DatabaseKrecipes::getRecipe(std::uint64_t id)
if(result == SQLITE_ROW)
{
+ recipe.db = DatabaseSource::KRecipes;
recipe.id = sqlite3_column_int(statement, 0);
recipe.title = getString(statement, 1);
recipe.description = {}; // not used by krecipes
diff --git a/src/database_krecipes.h b/src/database_krecipes.h
index 5f15a47..7e5f602 100644
--- a/src/database_krecipes.h
+++ b/src/database_krecipes.h
@@ -37,10 +37,10 @@ public:
DatabaseKrecipes(const std::string& file);
~DatabaseKrecipes();
- std::uint64_t id() const override { return 1UL << 63; }
+ int id() const override { return 1UL << 29; }
std::deque<RecipeItem> getRecipes() override;
- Recipe getRecipe(std::uint64_t id) override;
+ Recipe getRecipe(int id) override;
private:
sqlite3 *db{nullptr};
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index cb68039..711370f 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -125,10 +125,42 @@ void MainWindow::readDatabase()
image = QImage(QSize({64,64}), QImage::Format_RGBA8888);
image.fill(0);
}
- listItem->setData(Qt::UserRole, item.id);
+ image = image.scaled({64,64});
+ QString mark;
+ QColor mark_color;
+ switch(item.db)
+ {
+ case DatabaseSource::KRecipes:
+ mark_color = QColor(0,0,200);
+ mark = "K";
+ break;
+ case DatabaseSource::Gourmet:
+ mark_color = QColor(100,100,25);
+ mark = "G";
+ break;
+ case DatabaseSource::Qookie:
+ mark_color = QColor(200,0,0);
+ mark = "Q";
+ break;
+ }
+
+ QPainter painter(&image);
+ auto font = painter.font();
+ font.setBold(true);
+ font.setPixelSize(12);
+ painter.setFont(font);
+ painter.setPen(Qt::transparent);
+ painter.setBrush(QColor(255, 255, 255, 180));
+ painter.drawEllipse(QRect{-7,-6,20,20});
+ painter.setPen(mark_color);
+ painter.drawText(0, 10, mark);
+
+ QIcon icon;
icon.addPixmap(QPixmap::fromImage(image));
listItem->setIcon(icon);
+
+ listItem->setData(Qt::UserRole, (double)item.id);
listWidget->addItem(listItem);
}
}
diff --git a/src/qookie.cc b/src/qookie.cc
index 1f6f9d8..b818fa1 100644
--- a/src/qookie.cc
+++ b/src/qookie.cc
@@ -29,15 +29,13 @@
#include <iostream>
#include "mainwindow.h"
-#include "database_gourmet.h"
-#include "database_krecipes.h"
+#include "database.h"
int main(int argc, char *argv[])
{
QApplication qapp(argc, argv);
- //DatabaseGourmet db("/mnt/atuin/docs/tine/Fritid/Mad/recipes.db");
- DatabaseKrecipes db("/mnt/atuin/docs/tine/Fritid/Mad/krecipes.krecdb");
+ Database db;
MainWindow mainwindow(db);
mainwindow.resize(1280, 768);
diff --git a/src/recipe.h b/src/recipe.h
index f33c07c..631030f 100644
--- a/src/recipe.h
+++ b/src/recipe.h
@@ -28,9 +28,18 @@
#include <string>
#include <vector>
+#include <cstdint>
+
+enum class DatabaseSource
+{
+ KRecipes,
+ Gourmet,
+ Qookie,
+};
struct RecipeItem
{
+ DatabaseSource db;
int id;
std::string title;
std::string image;
@@ -45,6 +54,7 @@ struct Ingredient
struct Recipe
{
+ DatabaseSource db;
int id;
std::string title;
std::string description;