Borke out some of the settings sqlite code to it's own module.
This commit is contained in:
parent
f65f135bdf
commit
cab3b501fc
|
@ -121,6 +121,7 @@ add_executable(breakhack
|
||||||
src/vector2d
|
src/vector2d
|
||||||
src/map_room_modifiers
|
src/map_room_modifiers
|
||||||
src/sqlite3
|
src/sqlite3
|
||||||
|
src/db
|
||||||
src/settings
|
src/settings
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include "db.h"
|
||||||
|
#include "sqlite3.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
bool
|
||||||
|
db_open(const char *file, sqlite3 **db)
|
||||||
|
{
|
||||||
|
debug("Opening DB: %s", file);
|
||||||
|
|
||||||
|
int result = sqlite3_open(file, db);
|
||||||
|
if (result) {
|
||||||
|
error("Failed to open db: %s", sqlite3_errmsg(db));
|
||||||
|
}
|
||||||
|
return result == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
db_execute_stmnt(const char *stmnt,
|
||||||
|
sqlite3 *db,
|
||||||
|
int(*cb)(void*, int, char**, char**),
|
||||||
|
void *cb_arg)
|
||||||
|
{
|
||||||
|
debug("Executing sql: %s", stmnt);
|
||||||
|
|
||||||
|
char *errorMsg = NULL;
|
||||||
|
if (sqlite3_exec(db, stmnt, cb, cb_arg, &errorMsg)) {
|
||||||
|
error("Faled to execute statement: %s", stmnt);
|
||||||
|
error("Sqlite3: %s", errorMsg);
|
||||||
|
sqlite3_free(errorMsg);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void db_close(sqlite3 **db)
|
||||||
|
{
|
||||||
|
char *fname = sqlite3_db_filename(*db, NULL);
|
||||||
|
debug("Closing db: %s", fname);
|
||||||
|
sqlite3_close(*db);
|
||||||
|
*db = NULL;
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#ifndef DB_H_
|
||||||
|
#define DB_H_
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "sqlite3.h"
|
||||||
|
|
||||||
|
bool
|
||||||
|
db_open(const char *file, sqlite3 **db);
|
||||||
|
|
||||||
|
bool
|
||||||
|
db_execute_stmnt(const char *stmnt,
|
||||||
|
sqlite3 *db,
|
||||||
|
int(*cb)(void*, int, char**, char**),
|
||||||
|
void *cb_arg);
|
||||||
|
|
||||||
|
void
|
||||||
|
db_close(sqlite3 **db);
|
||||||
|
|
||||||
|
#endif // DB_H_
|
|
@ -22,6 +22,7 @@
|
||||||
#include "sqlite3.h"
|
#include "sqlite3.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
#include "db.h"
|
||||||
|
|
||||||
#define SETTINGS_DB_FILE ".data.db"
|
#define SETTINGS_DB_FILE ".data.db"
|
||||||
|
|
||||||
|
@ -40,17 +41,11 @@ set_default_settings(void)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
execute_statement(const char *stmt,
|
execute_statement(const char *stmt,
|
||||||
int (*cb)(void*, int, char**, char**),
|
int(*cb)(void*, int, char**, char**),
|
||||||
void *cb_arg)
|
void *cb_arg)
|
||||||
{
|
{
|
||||||
char *errorMsg;
|
if (!db_execute_stmnt(stmt, db, cb, cb_arg)) {
|
||||||
|
db_close(&db);
|
||||||
set_default_settings();
|
|
||||||
if (sqlite3_exec(db, stmt, cb, cb_arg, &errorMsg)) {
|
|
||||||
error("Faled to execture statement: %s", stmt);
|
|
||||||
error("Sqlite3: %s", errorMsg);
|
|
||||||
sqlite3_free(errorMsg);
|
|
||||||
sqlite3_close(db);
|
|
||||||
fatal("Exiting");
|
fatal("Exiting");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,12 +68,13 @@ load_settings_cb(void *unused, int count, char **values, char **colNames)
|
||||||
if (strcmp("key", colNames[i]) != 0)
|
if (strcmp("key", colNames[i]) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
debug("Loading setting: %s = %s", values[i], values[i+1]);
|
debug("Loading setting: %s = %s", values[i], values[i + 1]);
|
||||||
if (!strcmp(KEY_SOUND_ENABLED, values[i])) {
|
if (!strcmp(KEY_SOUND_ENABLED, values[i])) {
|
||||||
settings.sound_enabled = (bool) atoi(values[i+1]);
|
settings.sound_enabled = (bool)atoi(values[i + 1]);
|
||||||
i += 2;
|
i += 2;
|
||||||
} else if (!strcmp(KEY_MUSIC_ENABLED, values[i])) {
|
}
|
||||||
settings.music_enabled = (bool) atoi(values[i+1]);
|
else if (!strcmp(KEY_MUSIC_ENABLED, values[i])) {
|
||||||
|
settings.music_enabled = (bool)atoi(values[i + 1]);
|
||||||
i += 2;
|
i += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,12 +90,11 @@ load_settings(void)
|
||||||
void
|
void
|
||||||
settings_init(void)
|
settings_init(void)
|
||||||
{
|
{
|
||||||
int result = sqlite3_open(SETTINGS_DB_FILE, &db);
|
if (!db_open(SETTINGS_DB_FILE, &db)) {
|
||||||
if (result) {
|
db_close(&db);
|
||||||
error("Failed to open settings db: %s", sqlite3_errmsg(db));
|
|
||||||
sqlite3_close(db);
|
|
||||||
fatal("Exiting");
|
fatal("Exiting");
|
||||||
}
|
}
|
||||||
|
set_default_settings();
|
||||||
create_tables();
|
create_tables();
|
||||||
load_settings();
|
load_settings();
|
||||||
}
|
}
|
||||||
|
@ -107,6 +102,8 @@ settings_init(void)
|
||||||
static void
|
static void
|
||||||
save_setting_int(const char *key, int value)
|
save_setting_int(const char *key, int value)
|
||||||
{
|
{
|
||||||
|
// TODO(Linus): Move this into db.c, probably using varargs
|
||||||
|
|
||||||
const char *stmtStr = "INSERT OR REPLACE INTO settings_int(key, value) values (?, ?)";
|
const char *stmtStr = "INSERT OR REPLACE INTO settings_int(key, value) values (?, ?)";
|
||||||
const char *pzTest;
|
const char *pzTest;
|
||||||
sqlite3_stmt *stmt;
|
sqlite3_stmt *stmt;
|
||||||
|
@ -147,5 +144,5 @@ void
|
||||||
settings_close(void)
|
settings_close(void)
|
||||||
{
|
{
|
||||||
settings_save();
|
settings_save();
|
||||||
sqlite3_close(db);
|
db_close(&db);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue