getting more database stuff hooked up

This commit is contained in:
2026-08-05 22:38:13 -05:00
parent ac433870c2
commit 9e96151a42
4 changed files with 163 additions and 51 deletions

View File

@@ -6,7 +6,6 @@
#include <RmlUi/Lua/Interpreter.h>
#include <RmlUi/Lua/Lua.h>
#include <SQLiteCpp/Database.h>
#include <exception>
#include <iostream>
#include <RmlUi/Core.h>
#include <RmlUi_Backend.h>
@@ -15,19 +14,28 @@
#include <lua.h>
#include <RmlUi/Debugger/Debugger.h>
#include "critter.hpp"
#include <ostream>
#include <SQLiteCpp/SQLiteCpp.h>
#include <map>
#include <vector>
#include "database.hpp"
static bool is_initalized = false;
static bool is_running = false;
static Rml::Context *ctx;
static std::map<int, Critter> critters = {};
static std::vector<CritterEntry> critter_list = {};
struct AppData {
Rml::String page_title = "Main";
} app_data;
void SyncMapToList() {
critter_list.clear();
for (const auto &[id, critter] : critters) {
critter_list.push_back({id, critter});
}
}
void Shutdown() {
Rml::Shutdown();
Backend::Shutdown();
@@ -40,10 +48,27 @@ bool SetupDataBinding(Rml::Context *context, Rml::DataModelHandle &model_handle)
return false;
}
if (auto handle = dmc.RegisterStruct<Critter>()) {
handle.RegisterMember("id", &Critter::id);
handle.RegisterMember("name", &Critter::name);
handle.RegisterMember("gender", &Critter::gender);
handle.RegisterMember("species", &Critter::species);
handle.RegisterMember("notes", &Critter::notes);
handle.RegisterMember("mother_id", &Critter::mother_id);
handle.RegisterMember("father_id", &Critter::father_id);
}
if (auto handle = dmc.RegisterStruct<CritterEntry>()) {
handle.RegisterMember("key", &CritterEntry::key);
handle.RegisterMember("value", &CritterEntry::value);
}
dmc.RegisterArray<std::vector<CritterEntry>>();
dmc.Bind("critters", &critter_list);
dmc.Bind("page_title", &app_data.page_title);
model_handle = dmc.GetModelHandle();
return true;
}
@@ -62,53 +87,17 @@ bool Initalize() {
// TODO: Add more error handling for initalization
std::cout << "[INFO] Loading local DB...\n";
try {
SQLite::Database db = SQLite::Database("./assets/local.db", SQLite::OPEN_READWRITE|SQLite::OPEN_CREATE);
SQLite::Statement q(db, "SELECT * FROM critters");
while(q.executeStep()) {
int id = q.getColumn(0);
std::string name = q.getColumn(1);
std::string gender = q.getColumn(2);
int mother_id = q.getColumn(3);
int father_id = q.getColumn(4);
std::string notes = q.getColumn(5);
std::string species = q.getColumn(6);
Critter c;
c.id = id;
c.name = name;
c.gender = gender;
c.mother_id = mother_id;
c.father_id = father_id;
c.notes = notes;
c.species = species;
critters[c.id] = c;
}
std::cout << "[INFO] Loaded " << critters.size() << " critters from local db.\n";
}
catch (std::exception &e){
std::cout << "[ERROR] DB exception: " << e.what() << std::endl;
return false;
bool db_result = db_get_all_critters(critters);
if (!db_result) {
std::cout << "[ERROR] Local DB failed to initalize.\n";
return false;
}
std::cout << "[INFO] Local DB initalized.\n";
SyncMapToList();
// ------- DB TESTING
std::cout << "\n";
for (auto c : critters) {
std::cout << "\nCritter " << c.first << "\n";
std::cout << "ID: " << c.second.id << std::endl;
std::cout << "Name:" << c.second.name << std::endl;
std::cout << "Gender: " << c.second.gender << std::endl;
std::cout << "Mother ID: " << c.second.mother_id << std::endl;
std::cout << "Father ID: " << c.second.father_id << std::endl;
std::cout << "Notes: " << c.second.notes << std::endl;
std::cout << "Species: " << c.second.species << std::endl;
}
std::cout << "\n";
// db_print_all_critters(critters);
// ------- END DB TESTING
ctx = Rml::CreateContext("main", Rml::Vector2i(800, 600));
@@ -120,7 +109,7 @@ bool Initalize() {
Rml::Debugger::Initialise(ctx);
// lua_State *L = Rml::Lua::Interpreter::GetLuaState();
// lua_State *L = Rml::Lua::Interpreter::GetLuaState();
return true;
}