diff --git a/inc/lektor/config.h b/inc/lektor/config.h index f11dc73f0c33c7922a7bdd6973fb04bb22142554..c8722d11a53b0b061eaa7deeae841e0034dd678d 100644 --- a/inc/lektor/config.h +++ b/inc/lektor/config.h @@ -5,8 +5,8 @@ extern "C" { #endif +#include <lektor/database.h> #include <lektor/common.h> -#include <sqlite3.h> /* Forward definition of the lkt_state structure */ struct lkt_state; @@ -27,7 +27,7 @@ static const char *const lkt_default_config_file = /* It is just an alias to the consecutive use of config_detect_file and config_new function, with the return an '&&' between the two returns of the two other functions. */ -int config_open(volatile sqlite3 *db); +int config_open(lkt_db *db); /* Get the path to the config file that may be red, taking into account the priority between existing files. The returned path is a path to an existing @@ -37,7 +37,7 @@ int config_detect_file(char *conf, size_t conf_len); /* Create and read the configuration in the conf file and write it into lkt_conf. The type is opaque because it's a C++ class. Return 0 if the read operation was a success, a non zero value otherwise. */ -int config_new(volatile sqlite3 *db, const char *conf); +int config_new(lkt_db *db, const char *conf); /* Prints the default config file. */ void config_default(FILE *output); @@ -50,7 +50,7 @@ void config_default_file(char *dest, size_t len); #define env_get getenv /* Handle everything for a hook */ -void config_handle_hook(volatile sqlite3 *db, const char *hook_name); +void config_handle_hook(lkt_db *db, const char *hook_name); #if defined(__cplusplus) } diff --git a/inc/lektor/database.h b/inc/lektor/database.h index 53419677135cea4690475ca2ecd7c597167baced..4d00e7b29f5a0f07ac6d0c648de3050423a38e4b 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -14,6 +14,9 @@ extern "C" { // clang-format off +/* Hide the DB implementation */ +typedef volatile sqlite3 lkt_db; + struct lkt_queue_state { int volume; int paused; @@ -32,72 +35,72 @@ typedef enum { } LKT_DATABASE_VERSION; /* Update stuff */ -void database_get_update (volatile sqlite3 *db, long *timestamp, long *job, int *current); -void database_stamp (volatile sqlite3 *db); -void database_updated (volatile sqlite3 *db); -void database_deleted_kara(volatile sqlite3 *db, int **kara_id, size_t *len); -void database_total_playtime(volatile sqlite3 *db, uint64_t *seconds); -LKT_DATABASE_VERSION database_get_version(volatile sqlite3 *db); +void database_get_update (lkt_db *db, long *timestamp, long *job, int *current); +void database_stamp (lkt_db *db); +void database_updated (lkt_db *db); +void database_deleted_kara(lkt_db *db, int **kara_id, size_t *len); +void database_total_playtime(lkt_db *db, uint64_t *seconds); +LKT_DATABASE_VERSION database_get_version(lkt_db *db); /* Open correctly a database for lektor. */ -bool database_new (volatile sqlite3 **db); +bool database_new (lkt_db **db); bool database_init (const char *dbpath); -bool database_open (volatile sqlite3 *db, const char *dbpath, bool check); -bool database_attach(volatile sqlite3 *db, const char *name, const char *dbpath); -bool database_detach(volatile sqlite3 *db, const char *name); +bool database_open (lkt_db *db, const char *dbpath, bool check); +bool database_attach(lkt_db *db, const char *name, const char *dbpath); +bool database_detach(lkt_db *db, const char *name); void database_close_all(void); /* Get information on the queue and currently playing kara. */ -bool database_queue_state (volatile sqlite3 *db, struct lkt_queue_state *res); -bool database_queue_current_kara(volatile sqlite3 *db, struct kara_metadata *res, int *id); -void database_queue_playtime (volatile sqlite3 *db, uint64_t *seconds); - -bool database_queue_set_paused (volatile sqlite3 *db, bool paused); -bool database_queue_set_current_index(volatile sqlite3 *db, int idx); -bool database_queue_get_current_file (volatile sqlite3 *db, char filepath[PATH_MAX]); - -bool database_get_kara_id (volatile sqlite3 *db, char filepath[PATH_MAX], int *id); -bool database_get_kara_path (volatile sqlite3 *db, int id, char filepath[PATH_MAX]); -bool database_get_kara_position (volatile sqlite3 *db, int id, int *pos); -bool database_get_kara_mtime_id (volatile sqlite3 *db, int id, uint64_t *mtime); -bool database_get_kara_duration_id (volatile sqlite3 *db, int id, uint64_t *duration); -bool database_get_kara_mtime_path (volatile sqlite3 *db, char filepath[PATH_MAX], uint64_t *mtime); -bool database_get_kara_duration_path(volatile sqlite3 *db, char filepath[PATH_MAX], uint64_t *duration); -bool database_is_kara_mkv (volatile sqlite3 *db, char filepath[PATH_MAX], bool *valid_mkv); -void database_cache_kara (volatile sqlite3 *db, int id); -void database_cache_kara_magic (volatile sqlite3 *db, int id); +bool database_queue_state (lkt_db *db, struct lkt_queue_state *res); +bool database_queue_current_kara(lkt_db *db, struct kara_metadata *res, int *id); +void database_queue_playtime (lkt_db *db, uint64_t *seconds); + +bool database_queue_set_paused (lkt_db *db, bool paused); +bool database_queue_set_current_index(lkt_db *db, int idx); +bool database_queue_get_current_file (lkt_db *db, char filepath[PATH_MAX]); + +bool database_get_kara_id (lkt_db *db, char filepath[PATH_MAX], int *id); +bool database_get_kara_path (lkt_db *db, int id, char filepath[PATH_MAX]); +bool database_get_kara_position (lkt_db *db, int id, int *pos); +bool database_get_kara_mtime_id (lkt_db *db, int id, uint64_t *mtime); +bool database_get_kara_duration_id (lkt_db *db, int id, uint64_t *duration); +bool database_get_kara_mtime_path (lkt_db *db, char filepath[PATH_MAX], uint64_t *mtime); +bool database_get_kara_duration_path(lkt_db *db, char filepath[PATH_MAX], uint64_t *duration); +bool database_is_kara_mkv (lkt_db *db, char filepath[PATH_MAX], bool *valid_mkv); +void database_cache_kara (lkt_db *db, int id); +void database_cache_kara_magic (lkt_db *db, int id); /* Get a list of all non-cached karas from the disk */ -void database_get_all_non_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len); +void database_get_all_non_cached_kara(lkt_db *db, int **ret_ids, size_t *ret_ids_len); /* Get a list of all cached karas from the memory */ -void database_get_all_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len); +void database_get_all_cached_kara(lkt_db *db, int **ret_ids, size_t *ret_ids_len); /* Update the database. */ -bool database_update (volatile sqlite3 *db, const char *kara_dir, int check_timestamp); -bool database_update_add (volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail); -void database_update_set_new(volatile sqlite3 *db, int id, bool is_new); -void database_update_del (volatile sqlite3 *db, int id); -void database_update_touch (volatile sqlite3 *db, int id); +bool database_update (lkt_db *db, const char *kara_dir, int check_timestamp); +bool database_update_add (lkt_db *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail); +void database_update_set_new(lkt_db *db, int id, bool is_new); +void database_update_del (lkt_db *db, int id); +void database_update_touch (lkt_db *db, int id); /* Control the content of the queue. */ -bool database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority); -bool database_queue_add_id (volatile sqlite3 *db, int id, int priority); -bool database_queue_del_id (volatile sqlite3 *db, int id); -bool database_queue_del_pos(volatile sqlite3 *db, int pos); -bool database_queue_clear (volatile sqlite3 *db); -bool database_queue_crop (volatile sqlite3 *db); -bool database_queue_flat (volatile sqlite3 *db); -bool database_queue_move (volatile sqlite3 *db, int from, int to); -bool database_queue_swap (volatile sqlite3 *db, int from, int to); -bool database_queue_shuffle(volatile sqlite3 *db); -bool database_queue_seekid (volatile sqlite3 *db, int id, int *out_pos); -bool database_queue_dump (volatile sqlite3 *db, const char *plt_name); +bool database_queue_add_uri(lkt_db *db, struct lkt_uri *uri, int priority); +bool database_queue_add_id (lkt_db *db, int id, int priority); +bool database_queue_del_id (lkt_db *db, int id); +bool database_queue_del_pos(lkt_db *db, int pos); +bool database_queue_clear (lkt_db *db); +bool database_queue_crop (lkt_db *db); +bool database_queue_flat (lkt_db *db); +bool database_queue_move (lkt_db *db, int from, int to); +bool database_queue_swap (lkt_db *db, int from, int to); +bool database_queue_shuffle(lkt_db *db); +bool database_queue_seekid (lkt_db *db, int id, int *out_pos); +bool database_queue_dump (lkt_db *db, const char *plt_name); /* Control the playing state of the queue. */ -bool database_queue_toggle_pause(volatile sqlite3 *db); -bool database_queue_play (volatile sqlite3 *db, int pos); -bool database_queue_stop (volatile sqlite3 *db); +bool database_queue_toggle_pause(lkt_db *db); +bool database_queue_play (lkt_db *db, int pos); +bool database_queue_stop (lkt_db *db); /* A search callback to be called after each matched row */ struct lkt_callback { @@ -108,8 +111,8 @@ struct lkt_callback { }; /* List the content of the queue */ -bool database_queue_list(volatile sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback); -int database_queue_probe_id(volatile sqlite3 *db, int id); +bool database_queue_list(lkt_db *db, size_t from, size_t to, struct lkt_callback *callback); +int database_queue_probe_id(lkt_db *db, int id); /* Sticker construct structure */ struct lkt_sticker_opt { @@ -122,7 +125,7 @@ struct lkt_sticker_opt { #define LKT_STICKER_OPT_INIT { .name = NULL, .value = 0, .uri = 0, .op = '\0', .type = NULL } /* Search the database */ -typedef bool (*lkt_search_init_add_func) (volatile sqlite3 *, struct lkt_uri *, int); +typedef bool (*lkt_search_init_add_func) (lkt_db *, struct lkt_uri *, int); typedef bool (*lkt_search_database_func) (struct lkt_state *srv, size_t c, int id, int id_len, const char *row); typedef bool (*lkt_search_queue_func) (struct lkt_state *srv, size_t c, int id, int id_len, const char *row); typedef bool (*lkt_search_sticker_func) (struct lkt_state *srv, size_t c, const char *sticker, const char *type, int uri, int value); @@ -143,33 +146,33 @@ size_t database_search_get_continuation(struct lkt_search *); * function is here if you need to abort a search. */ void database_search_free(struct lkt_search *); -typedef bool (*database_search_init_func)(volatile sqlite3 *, struct lkt_search *); -bool database_search_database_init (volatile sqlite3 *db, struct lkt_search *ret); -bool database_search_queue_init (volatile sqlite3 *db, struct lkt_search *ret); -bool database_search_sticker_init (volatile sqlite3 *db, struct lkt_search *ret); -bool database_search_playlist_init (volatile sqlite3 *db, struct lkt_search *ret); -bool database_search_listplaylist_init(volatile sqlite3 *db, struct lkt_search *ret); +typedef bool (*database_search_init_func)(lkt_db *, struct lkt_search *); +bool database_search_database_init (lkt_db *db, struct lkt_search *ret); +bool database_search_queue_init (lkt_db *db, struct lkt_search *ret); +bool database_search_sticker_init (lkt_db *db, struct lkt_search *ret); +bool database_search_playlist_init (lkt_db *db, struct lkt_search *ret); +bool database_search_listplaylist_init(lkt_db *db, struct lkt_search *ret); /* Iterate through an initialized search structure, will free it when the * search is done (return `false`). */ bool database_search_iter(struct lkt_search *item); -bool database_kara_by_id(volatile sqlite3 *db, int id, struct kara_metadata *kara, char filepath[PATH_MAX]); +bool database_kara_by_id(lkt_db *db, int id, struct kara_metadata *kara, char filepath[PATH_MAX]); /* Next and prev operation on the queue. */ -bool database_queue_next (volatile sqlite3 *db, char filepath[PATH_MAX]); -bool database_queue_prev (volatile sqlite3 *db, char filepath[PATH_MAX]); -bool database_queue_skip_current(volatile sqlite3 *db, char filepath[PATH_MAX]); +bool database_queue_next (lkt_db *db, char filepath[PATH_MAX]); +bool database_queue_prev (lkt_db *db, char filepath[PATH_MAX]); +bool database_queue_skip_current(lkt_db *db, char filepath[PATH_MAX]); /* Set a value in the config table */ -bool database_validate_conf (volatile sqlite3 *db); -bool database_config_set (volatile sqlite3 *db, const char *section, const char *key, const char *value); -bool database_config_get_text (volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len); -bool database_config_get_text_nospace(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len); -bool database_config_get_int (volatile sqlite3 *db, const char *section, const char *key, int *value); -bool database_config_exists (volatile sqlite3 *db, const char *section, const char *key); -bool database_config_queue (volatile sqlite3 *db, const char *option, int value); -bool database_config_queue_default (volatile sqlite3 *db); +bool database_validate_conf (lkt_db *db); +bool database_config_set (lkt_db *db, const char *section, const char *key, const char *value); +bool database_config_get_text (lkt_db *db, const char *section, const char *key, char *value, size_t len); +bool database_config_get_text_nospace(lkt_db *db, const char *section, const char *key, char *value, size_t len); +bool database_config_get_int (lkt_db *db, const char *section, const char *key, int *value); +bool database_config_exists (lkt_db *db, const char *section, const char *key); +bool database_config_queue (lkt_db *db, const char *option, int value); +bool database_config_queue_default (lkt_db *db); #define database_config_get_4 database_config_get_int #define database_config_get_5 database_config_get_text @@ -177,12 +180,12 @@ bool database_config_queue_default (volatile sqlite3 *db); /* Dump configuration to any stream, form is undefined, this function is here * for debug purpose. */ -bool database_config_dump(volatile sqlite3 *db, FILE *f); +bool database_config_dump(lkt_db *db, FILE *f); /* Check obfuscation status. If no one is set, set it and return `true`. If * there was already an obfuscation status, return `true` if the two are the * same, `false` otherwise. */ -bool database_config_obfuscation_check(volatile sqlite3 *db, int obfuscation); +bool database_config_obfuscation_check(lkt_db *db, int obfuscation); /* Playlists */ struct lkt_playlist_metadata { @@ -192,30 +195,30 @@ struct lkt_playlist_metadata { }; /* Control playlists */ -bool database_plt_touch (volatile sqlite3 *db, const char *name); -bool database_plt_create (volatile sqlite3 *db, const char *name); -bool database_plt_remove (volatile sqlite3 *db, const char *name); -bool database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos); -bool database_plt_clear (volatile sqlite3 *db, const char *name); -bool database_plt_rename (volatile sqlite3 *db, const char *old_name, const char *new_name); +bool database_plt_touch (lkt_db *db, const char *name); +bool database_plt_create (lkt_db *db, const char *name); +bool database_plt_remove (lkt_db *db, const char *name); +bool database_plt_remove_pos(lkt_db *db, const char *name, int pos); +bool database_plt_clear (lkt_db *db, const char *name); +bool database_plt_rename (lkt_db *db, const char *old_name, const char *new_name); -bool database_plt_export(volatile sqlite3 *db, const char *name); -bool database_plt_import(volatile sqlite3 *db, const char *name); +bool database_plt_export(lkt_db *db, const char *name); +bool database_plt_import(lkt_db *db, const char *name); -bool database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri); +bool database_plt_add_uri(lkt_db *db, const char *name, struct lkt_uri *uri); /* User control, yeah, MPD authentification sucks. */ -bool database_user_authentificate(volatile sqlite3 *db, const char *password); -bool database_user_add(volatile sqlite3 *db, const char *username, const char *password); +bool database_user_authentificate(lkt_db *db, const char *password); +bool database_user_add(lkt_db *db, const char *username, const char *password); /* Stickers manipulations. */ -bool database_sticker_create (volatile sqlite3 *db, const char *name); -bool database_sticker_delete (volatile sqlite3 *db, const char *name); -bool database_sticker_delete_specify(volatile sqlite3 *sb, const char *type, int uri, const char *name); -bool database_sticker_set (volatile sqlite3 *db, const char *type, const char *name, int uri, int value); +bool database_sticker_create (lkt_db *db, const char *name); +bool database_sticker_delete (lkt_db *db, const char *name); +bool database_sticker_delete_specify(lkt_db *sb, const char *type, int uri, const char *name); +bool database_sticker_set (lkt_db *db, const char *type, const char *name, int uri, int value); /* Get some stats from the database */ -bool database_stats(volatile sqlite3 *db, int *authors, int *sources, int *karas); +bool database_stats(lkt_db *db, int *authors, int *sources, int *karas); // clang-format on diff --git a/inc/lektor/net.h b/inc/lektor/net.h index 45906613c5c0a86ffa70641f0e62d3ab30ad4809..4887cb71870a872ffc5494c1b2cb8464b065ff28 100644 --- a/inc/lektor/net.h +++ b/inc/lektor/net.h @@ -5,6 +5,7 @@ extern "C" { #endif +#include <lektor/database.h> #include <lektor/common.h> #include <lektor/queue.h> #include <lektor/mkv.h> @@ -14,7 +15,6 @@ extern "C" { #include <mpv/client.h> #include <curl/curl.h> -#include <sqlite3.h> struct lkt_state; struct lkt_command { @@ -55,7 +55,7 @@ struct lkt_state { struct queue queue; /* The database */ - volatile sqlite3 *db; + lkt_db *db; const char *kara_prefix; uint64_t update_total; uint64_t update_current; diff --git a/src/base/config.c b/src/base/config.c index 4be6566269a8046c991bd784781e9b248679cd6d..4abc2e20ee83bae3cf5c4f7be943903d878100eb 100644 --- a/src/base/config.c +++ b/src/base/config.c @@ -27,7 +27,7 @@ skip(char *s) } static int -handler(volatile sqlite3 *user, const char *section, const char *name, const char *value) +handler(lkt_db *user, const char *section, const char *name, const char *value) { RETURN_UNLESS(section && name && value, "I can't complete the database with incomplete lines", 1); RETURN_UNLESS(database_config_set(user, section, name, value), "Failed to update the database", 1); @@ -62,7 +62,7 @@ __set_log_level(const char *name, const char *level) } static inline int -ini_parse(const char *path, volatile sqlite3 *db) +ini_parse(const char *path, lkt_db *db) { char *start, *end, *name, *value; char section[LKT_LINE_MAX], line[LKT_LINE_MAX]; @@ -238,7 +238,7 @@ found: } int -config_new(volatile sqlite3 *db, const char *conf) +config_new(lkt_db *db, const char *conf) { if (ini_parse(conf, db)) { LOG_ERROR("CONFIG", "Failed to parse file %s", conf); @@ -264,7 +264,7 @@ config_default(FILE *output) } int -config_open(volatile sqlite3 *db) +config_open(lkt_db *db) { char conf_file[PATH_MAX]; RETURN_IF(config_detect_file(conf_file, PATH_MAX), "Error while searching for a config file", 1); @@ -273,7 +273,7 @@ config_open(volatile sqlite3 *db) } void -config_handle_hook(volatile sqlite3 *db, const char *hook_name) +config_handle_hook(lkt_db *db, const char *hook_name) { char hook_handlers[LKT_LINE_MAX]; if (!database_config_get_text_nospace(db, "hook", hook_name, hook_handlers, LKT_LINE_MAX)) { diff --git a/src/base/launch.c b/src/base/launch.c index e7ffc7dfa26abd3b6c7887daa0899e8a827f4a2b..adaf41d0e0a851f6a907659508b3daef1a77906f 100644 --- a/src/base/launch.c +++ b/src/base/launch.c @@ -186,7 +186,7 @@ ___sleep(void) /* Cache karas into disk */ PRIVATE_FUNCTION void -___cache_kara(volatile sqlite3 *db) +___cache_kara(lkt_db *db) { size_t ids_count = 0; int *ids = NULL; @@ -212,7 +212,7 @@ ___cache_kara(volatile sqlite3 *db) /* Check magic number */ PRIVATE_FUNCTION void -___check_kara(volatile sqlite3 *db) +___check_kara(lkt_db *db) { size_t ids_count = 0; int *ids = NULL; @@ -240,7 +240,7 @@ PRIVATE_FUNCTION void * ___caching_walker(void *args) { lkt_thread_set_name("lektord/caching"); - volatile sqlite3 *db = (volatile sqlite3 *)args; + lkt_db *db = (lkt_db *)args; ___cache_kara(db); ___check_kara(db); return NULL; @@ -252,7 +252,7 @@ launch_caching(va_list *args) int ret_code = 1; va_list copy; va_copy(copy, *args); - volatile sqlite3 *db = (volatile sqlite3 *)va_arg(copy, volatile sqlite3 *); + lkt_db *db = (lkt_db *)va_arg(copy, lkt_db *); if (database_get_version(db) == LKT_DATABASE_VERSION_MK_7_1) { ret_code = 0; diff --git a/src/database/cache.c b/src/database/cache.c index ee25a62b55244abd822ef99de73cfa778383f558..b2801033dd39d582ebb1a3370e8b6922a4b30289 100644 --- a/src/database/cache.c +++ b/src/database/cache.c @@ -6,12 +6,12 @@ #include <math.h> /* Forward declarations for set operations */ -PRIVATE_FUNCTION bool database_set_kara_mtime_id(volatile sqlite3 *, int, uint64_t); -PRIVATE_FUNCTION bool database_set_kara_duration_id(volatile sqlite3 *, int, uint64_t); +PRIVATE_FUNCTION bool database_set_kara_mtime_id(lkt_db *, int, uint64_t); +PRIVATE_FUNCTION bool database_set_kara_duration_id(lkt_db *, int, uint64_t); /* Is cached? */ PRIVATE_FUNCTION bool -database_is_kara_cached(volatile sqlite3 *db, int id) +database_is_kara_cached(lkt_db *db, int id) { static const char *SQL = "SELECT cached_mtime, cached_duration FROM kara WHERE id = ?;"; sqlite3_stmt *stmt = NULL; @@ -36,7 +36,7 @@ get_mtime(const char *path) } PRIVATE_FUNCTION void -___database_cache_kara_magic_by_file(volatile sqlite3 *db, const char *filename) +___database_cache_kara_magic_by_file(lkt_db *db, const char *filename) { /* Update the mkv magic error */ int magic_error = mkv_check_magic(filename); @@ -56,7 +56,7 @@ error: } void -database_cache_kara_magic(volatile sqlite3 *db, int id) +database_cache_kara_magic(lkt_db *db, int id) { /* Get the filepath */ char filename[PATH_MAX]; @@ -72,7 +72,7 @@ database_cache_kara_magic(volatile sqlite3 *db, int id) } bool -database_is_kara_mkv(volatile sqlite3 *db, char filepath[PATH_MAX], bool *valid_mkv) +database_is_kara_mkv(lkt_db *db, char filepath[PATH_MAX], bool *valid_mkv) { static const char *SQL = "SELECT magic_error FROM kara_cache WHERE file_path = ?;"; sqlite3_stmt *stmt = NULL; @@ -106,7 +106,7 @@ error: /* Request to cache a kara */ void -database_cache_kara(volatile sqlite3 *db, int id) +database_cache_kara(lkt_db *db, int id) { char filepath[PATH_MAX]; @@ -137,7 +137,7 @@ database_cache_kara(volatile sqlite3 *db, int id) } #define ___cache_set_from_id(what) \ - PRIVATE_FUNCTION bool database_set_kara_##what##_id(volatile sqlite3 *db, int id, uint64_t what) \ + PRIVATE_FUNCTION bool database_set_kara_##what##_id(lkt_db *db, int id, uint64_t what) \ { \ bool ret_code = false; \ sqlite3_stmt *stmt = NULL; \ @@ -158,7 +158,7 @@ database_cache_kara(volatile sqlite3 *db, int id) } #define ___cache_get_from_id(what) \ - bool database_get_kara_##what##_id(volatile sqlite3 *db, int id, uint64_t *what) \ + bool database_get_kara_##what##_id(lkt_db *db, int id, uint64_t *what) \ { \ bool ret_code = false; \ bool retry_once = false; \ @@ -182,7 +182,7 @@ database_cache_kara(volatile sqlite3 *db, int id) /* Define get operation on the cache */ #define ___cache_get_from_path(what) \ - bool database_get_kara_##what##_path(volatile sqlite3 *db, char filepath[PATH_MAX], uint64_t *what) \ + bool database_get_kara_##what##_path(lkt_db *db, char filepath[PATH_MAX], uint64_t *what) \ { \ int id = 0; \ if (!database_get_kara_id(db, filepath, &id)) { \ diff --git a/src/database/config.c b/src/database/config.c index 72d4c846c9a1e71fe82532ee23b8c38786e5d47b..7887e926c224ff4b620727318f4e87dc949d3c4e 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -5,7 +5,7 @@ #include <lektor/internal/dbmacro.h> bool -database_config_set(volatile sqlite3 *db, const char *section, const char *key, const char *value) +database_config_set(lkt_db *db, const char *section, const char *key, const char *value) { static const char *SQL_STMT = "INSERT OR REPLACE INTO" " config (section, key, value)" @@ -34,7 +34,7 @@ error: } bool -database_config_get_text(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len) +database_config_get_text(lkt_db *db, const char *section, const char *key, char *value, size_t len) { static const char *SQL_STMT = "SELECT value" " FROM config" @@ -58,7 +58,7 @@ error: } bool -database_config_get_text_nospace(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len) +database_config_get_text_nospace(lkt_db *db, const char *section, const char *key, char *value, size_t len) { static const char *SQL_STMT = "SELECT REPLACE(value, ' ', '')" " FROM config" @@ -82,7 +82,7 @@ error: } bool -database_config_exists(volatile sqlite3 *db, const char *section, const char *key) +database_config_exists(lkt_db *db, const char *section, const char *key) { static const char *SQL_STMT = "SELECT value" " FROM config" @@ -102,7 +102,7 @@ error: } bool -database_config_get_int(volatile sqlite3 *db, const char *section, const char *key, int *value) +database_config_get_int(lkt_db *db, const char *section, const char *key, int *value) { static const char *SQL_STMT = "SELECT CAST(value AS INTEGER)" " FROM config" @@ -123,7 +123,7 @@ error: } bool -database_config_queue(volatile sqlite3 *db, const char *option, int value) +database_config_queue(lkt_db *db, const char *option, int value) { static const char *SQL_STMT_TMP = "UPDATE queue_state SET %s = ? WHERE id = 42;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; @@ -146,7 +146,7 @@ error: } bool -database_validate_conf(volatile sqlite3 *db) +database_validate_conf(lkt_db *db) { const char *section; #define section(_sct) section = _sct; @@ -172,7 +172,7 @@ database_validate_conf(volatile sqlite3 *db) } bool -database_config_dump(volatile sqlite3 *db, FILE *f) +database_config_dump(lkt_db *db, FILE *f) { static const char *SQL = "SELECT section, key, value FROM config;"; sqlite3_stmt *stmt = 0; @@ -196,7 +196,7 @@ error: } bool -database_config_obfuscation_check(volatile sqlite3 *db, int obfuscation) +database_config_obfuscation_check(lkt_db *db, int obfuscation) { static const char *GET_SQL = "SELECT obfuscation FROM misc WHERE id = 42;"; static const char *SET_SQL = "UPDATE misc SET obfuscation = ? WHERE id = 42;"; diff --git a/src/database/find.c b/src/database/find.c index 1e1808e4b447b7e883237f2a37d83a5edc31e20b..5d905a51d6f8b4786039401259d047eba8aaba1b 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -13,7 +13,7 @@ __check_sticker_type(const char *type) /* Private search implementation. */ struct lkt_search { - volatile sqlite3 *db; + lkt_db *db; sqlite3_stmt *stmt; enum lkt_search_type { lkt_search_database, @@ -128,7 +128,7 @@ database_search_set_name(struct lkt_search *search, const char *pltname) } bool -database_search_database_init(volatile sqlite3 *db, struct lkt_search *ret) +database_search_database_init(lkt_db *db, struct lkt_search *ret) { RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); static const char *SQL_STMT_TEMPLATE = "WITH content AS (" @@ -159,7 +159,7 @@ error: } bool -database_search_playlist_init(volatile sqlite3 *db, struct lkt_search *ret) +database_search_playlist_init(lkt_db *db, struct lkt_search *ret) { /* Sql queries definitions */ char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; @@ -222,7 +222,7 @@ error: } bool -database_search_listplaylist_init(volatile sqlite3 *db, struct lkt_search *ret) +database_search_listplaylist_init(lkt_db *db, struct lkt_search *ret) { static const char *SQL = "SELECT name FROM playlist LIMIT %d OFFSET %d;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; @@ -239,7 +239,7 @@ error: } bool -database_search_sticker_init(volatile sqlite3 *db, struct lkt_search *ret) +database_search_sticker_init(lkt_db *db, struct lkt_search *ret) { if (__check_sticker_type(ret->st.type)) { LOG_ERROR("DB", "Type '%s' is invalid", ret->st.type); @@ -284,7 +284,7 @@ error: } bool -database_search_queue_init(volatile sqlite3 *db, struct lkt_search *ret) +database_search_queue_init(lkt_db *db, struct lkt_search *ret) { RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); static const char *SQL_STMT_TEMPLATE = "WITH content AS (" @@ -371,7 +371,7 @@ end: } bool -database_kara_by_id(volatile sqlite3 *db, int id, struct kara_metadata *res, char filepath[PATH_MAX]) +database_kara_by_id(lkt_db *db, int id, struct kara_metadata *res, char filepath[PATH_MAX]) { static const char *SQL = "SELECT song_name, source_name, category, language, author_name, " "song_type, song_number, file_path FROM kara WHERE id = ?;"; @@ -399,7 +399,7 @@ error: } PRIVATE_FUNCTION void -___get_all_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len, const char *SQL_DATA, const char *SQL_COUNT) +___get_all_kara(lkt_db *db, int **ret_ids, size_t *ret_ids_len, const char *SQL_DATA, const char *SQL_COUNT) { sqlite3_stmt *stmt = NULL; size_t index = 0; @@ -442,7 +442,7 @@ error: } void -database_get_all_non_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len) +database_get_all_non_cached_kara(lkt_db *db, int **ret_ids, size_t *ret_ids_len) { static const char *SQL_DATA = "SELECT id FROM kara WHERE cached_mtime = 0 OR cached_duration = 0;"; static const char *SQL_COUNT = "SELECT count(id) FROM kara WHERE cached_mtime = 0 OR cached_duration = 0;"; @@ -450,7 +450,7 @@ database_get_all_non_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *re } void -database_get_all_cached_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len) +database_get_all_cached_kara(lkt_db *db, int **ret_ids, size_t *ret_ids_len) { static const char *SQL_DATA = "SELECT kara_id FROM kara_cache;"; static const char *SQL_COUNT = "SELECT count(kara_id) FROM kara_cache;"; diff --git a/src/database/open.c b/src/database/open.c index 705dd1a956615d5736ce47ded589d9f9394b9f54..ff1be74c36cf8e9fc49819c815bc6bdf42aa2c59 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -26,7 +26,7 @@ sqlite3_hard_heap_limit64(sqlite3_int64 UNUSED limit) #endif struct named_db { - volatile sqlite3 *db; + lkt_db *db; const char *name; }; static struct stack db_stack; @@ -34,7 +34,7 @@ static int db_stack_init = 0; static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; PRIVATE_FUNCTION void -___dec(volatile sqlite3 *db, const char *name) +___dec(lkt_db *db, const char *name) { char SQL[LKT_MAX_SQLITE_STATEMENT]; safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, "UPDATE %s.misc SET opened = 0;", name); @@ -63,7 +63,7 @@ database_close_all(void) } PRIVATE_FUNCTION void -___inc(volatile sqlite3 *db, const char *name, bool check) +___inc(lkt_db *db, const char *name, bool check) { SQLITE_EXEC(db, "UPDATE misc SET opened = (SELECT opened + 1 FROM misc);", error); @@ -85,7 +85,7 @@ error: } bool -database_new(volatile sqlite3 **db) +database_new(lkt_db **db) { *db = NULL; static int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_NOFOLLOW | SQLITE_OPEN_FULLMUTEX; @@ -113,7 +113,7 @@ err_pragma: } PRIVATE_FUNCTION bool -___attach(volatile sqlite3 *db, const char *name, const char *path) +___attach(lkt_db *db, const char *name, const char *path) { static const char SQL_ATTACH_TEMPLATE[] = "ATTACH '%s' AS '%s';"; char SQL_ATTACH[LKT_MAX_SQLITE_STATEMENT]; @@ -128,7 +128,7 @@ err_no_attach: } PRIVATE_FUNCTION bool -___detach(volatile sqlite3 *db, const char *name) +___detach(lkt_db *db, const char *name) { static const char SQL_DETACH_TEMPLATE[] = "DETACH '%s';\n"; char SQL_DETACH[LKT_MAX_SQLITE_STATEMENT]; @@ -143,7 +143,7 @@ err_no_detach: } PRIVATE_FUNCTION bool -__check_schema(volatile sqlite3 *db) +__check_schema(lkt_db *db) { static const char *SQL = "SELECT COUNT(name)" " FROM sqlite_master" @@ -166,7 +166,7 @@ error: } PRIVATE_FUNCTION bool -___is_attached(volatile sqlite3 *db, const char *name) +___is_attached(lkt_db *db, const char *name) { static const char *SQL_STMT = "SELECT name FROM pragma_database_list WHERE name = ?;\n"; sqlite3_stmt *stmt = NULL; @@ -182,7 +182,7 @@ error: } PRIVATE_FUNCTION void -___flush_cache_from_disk(volatile sqlite3 *db) +___flush_cache_from_disk(lkt_db *db) { static const char *SQL = "INSERT INTO kara_cache (kara_id, mtime, duration, file_path, magic_error)" " SELECT id, cached_mtime, cached_duration, file_path, 2" @@ -196,7 +196,7 @@ error: } bool -database_open(volatile sqlite3 *db, const char *dbpath, bool check) +database_open(lkt_db *db, const char *dbpath, bool check) { bool retry = false; if (___is_sql_str_invalid(dbpath)) { @@ -246,7 +246,7 @@ init: } bool -database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) +database_attach(lkt_db *db, const char *name, const char *dbpath) { RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), " The database " LKT_PROTECTED_DATABASE " is protected, can't attach a " @@ -273,7 +273,7 @@ database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) } bool -database_detach(volatile sqlite3 *db, const char *name) +database_detach(lkt_db *db, const char *name) { RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), " The database " LKT_PROTECTED_DATABASE " is protected, can't detach it", false); diff --git a/src/database/playlist.c b/src/database/playlist.c index 3823b70b8c62865add02aa4093f9e94b073b9289..1d5809c3782bb611dcc0603a4e48b802a9675a51 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -5,7 +5,7 @@ #include <lektor/internal/dbmacro.h> bool -database_plt_touch(volatile sqlite3 *db, const char *name) +database_plt_touch(lkt_db *db, const char *name) { static const char *SQL_STMT = "SELECT name FROM playlist WHERE name = ?"; static const char *SQL_TOUCH = "UPDATE playlist SET last_update = strftime('%s', 'now') WHERE name = ?"; @@ -34,7 +34,7 @@ error: } bool -database_plt_create(volatile sqlite3 *db, const char *name) +database_plt_create(lkt_db *db, const char *name) { static const char *SQL_STMT = "INSERT INTO playlist (name, last_update) " "VALUES (?, strftime('%s', 'now'));"; @@ -50,7 +50,7 @@ error: } bool -database_plt_remove(volatile sqlite3 *db, const char *name) +database_plt_remove(lkt_db *db, const char *name) { static const char *SQL_STMT = "DELETE FROM playlist WHERE name = ?;"; sqlite3_stmt *stmt = NULL; @@ -65,7 +65,7 @@ error: } bool -database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos) +database_plt_remove_pos(lkt_db *db, const char *name, int pos) { static const char *SQL_STMT = "DELETE FROM kara_playlist " "WHERE playlist_id = (SELECT id FROM playlist WHERE name = ? LIMIT 1) " @@ -83,7 +83,7 @@ error: } bool -database_plt_clear(volatile sqlite3 *db, const char *name) +database_plt_clear(lkt_db *db, const char *name) { static const char *SQL_STMT = "DELETE FROM kara_playlist " "WHERE playlist_id = (SELECT id FROM playlist WHERE name = ?);"; @@ -99,7 +99,7 @@ error: } bool -database_plt_rename(volatile sqlite3 *db, const char *old_name, const char *new_name) +database_plt_rename(lkt_db *db, const char *old_name, const char *new_name) { static const char *SQL_STMT = "UPDATE playlist SET name = ? WHERE name = ?;"; sqlite3_stmt *stmt = NULL; @@ -115,7 +115,7 @@ error: } bool -database_plt_export(volatile sqlite3 *db, const char *name) +database_plt_export(lkt_db *db, const char *name) { static const char *SQL_SCHEM = "CREATE TABLE IF NOT EXISTS %s.content" "( kara_id INTEGER PRIMARY KEY NOT NULL CHECK(kara_id > 0) );"; @@ -147,7 +147,7 @@ error: } bool -database_plt_import(volatile sqlite3 *db, const char *name) +database_plt_import(lkt_db *db, const char *name) { static const char *SQL_SCHEM = "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" " SELECT" @@ -172,7 +172,7 @@ error: } bool -database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri) +database_plt_add_uri(lkt_db *db, const char *name, struct lkt_uri *uri) { bool sta = false; sqlite3_stmt *stmt; diff --git a/src/database/queue.c b/src/database/queue.c index 25e05e3f2ca559f5aa7bd90fbc00aca2c36107bb..3b77910ed47ea50f3974c70c652a892c51098e5a 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -5,7 +5,7 @@ #include <lektor/internal/dbmacro.h> #define sqlite_just_exec(func, query) \ - bool func(volatile sqlite3 *db) \ + bool func(lkt_db *db) \ { \ SQLITE_EXEC(db, "BEGIN TRANSACTION;" query "COMMIT;", error); \ return true; \ @@ -30,7 +30,7 @@ sqlite_just_exec(database_queue_flat, "UPDATE queue SET priority = 1;"); #undef sqlite_just_exec PRIVATE_FUNCTION void -__queue_resequence(volatile sqlite3 *db) +__queue_resequence(lkt_db *db) { static const char *SQL = "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';"; @@ -43,7 +43,7 @@ error: } bool -database_queue_set_paused(volatile sqlite3 *db, bool paused) +database_queue_set_paused(lkt_db *db, bool paused) { const char *SQL = paused ? "UPDATE queue_state SET paused = 1;" : "UPDATE queue_state SET paused = 0;"; SQLITE_EXEC(db, SQL, error); @@ -53,7 +53,7 @@ error: } bool -database_queue_state(volatile sqlite3 *db, struct lkt_queue_state *res) +database_queue_state(lkt_db *db, struct lkt_queue_state *res) { static const char *SQL_STMT = "SELECT" " volume, paused, random, repeat, single, current, duration, consume," @@ -90,7 +90,7 @@ error: } void -database_queue_playtime(volatile sqlite3 *db, uint64_t *seconds) +database_queue_playtime(lkt_db *db, uint64_t *seconds) { static const char *SQL = "SELECT SUM(cached_duration) " "FROM kara " @@ -106,7 +106,7 @@ error: } void -database_total_playtime(volatile sqlite3 *db, uint64_t *seconds) +database_total_playtime(lkt_db *db, uint64_t *seconds) { static const char *SQL = "SELECT SUM(cached_duration) FROM kara;"; sqlite3_stmt *stmt = NULL; @@ -120,7 +120,7 @@ error: } bool -database_queue_current_kara(volatile sqlite3 *db, struct kara_metadata *res, int *id) +database_queue_current_kara(lkt_db *db, struct kara_metadata *res, int *id) { static const char *SQL_STMT = "SELECT song_name, source_name, category, language, author_name, " "song_type, song_number, kara_id" @@ -168,7 +168,7 @@ error: } static bool -__queue_reorder(volatile sqlite3 *db) +__queue_reorder(lkt_db *db) { #define CURRENT_POS_OR_0 /* To move karas after the current */ \ "(SELECT CASE WHEN (SELECT current FROM queue_state) IS NULL THEN 0" \ @@ -199,7 +199,7 @@ error: } static bool -queue_add_with_col_like_str(volatile sqlite3 *db, const char *col, const char *val, int priority) +queue_add_with_col_like_str(lkt_db *db, const char *col, const char *val, int priority) { static const char *SQL_STMT = /* Add correspondig karas into the queue */ @@ -241,7 +241,7 @@ error: } bool -database_queue_add_plt(volatile sqlite3 *db, const char *plt_name, int priority) +database_queue_add_plt(lkt_db *db, const char *plt_name, int priority) { static const char *SQL_STMT = /* Insert the playlist */ @@ -277,7 +277,7 @@ error: } bool -database_queue_add_id(volatile sqlite3 *db, int id, int priority) +database_queue_add_id(lkt_db *db, int id, int priority) { static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority) VALUES (?,?);"; sqlite3_stmt *stmt = NULL; @@ -302,7 +302,7 @@ error_no_stmt: } bool -database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int prio) +database_queue_add_uri(lkt_db *db, struct lkt_uri *uri, int prio) { switch (uri->type) { case URI_QUERY: @@ -333,7 +333,7 @@ database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int prio) } bool -database_queue_del_id(volatile sqlite3 *db, int id) +database_queue_del_id(lkt_db *db, int id) { static const char *SQL_TEMPLATE = "BEGIN TRANSACTION;" @@ -363,7 +363,7 @@ error: } bool -database_queue_del_pos(volatile sqlite3 *db, int pos) +database_queue_del_pos(lkt_db *db, int pos) { bool sta = false; sqlite3_stmt *stmt = NULL; @@ -431,7 +431,7 @@ error_no_rollback: } bool -database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX]) +database_queue_next(lkt_db *db, char filepath[PATH_MAX]) { static const char *SQL_STMT = "SELECT file_path, position, RANDOM()" @@ -483,7 +483,7 @@ error: } bool -database_queue_skip_current(volatile sqlite3 *db, char filepath[PATH_MAX]) +database_queue_skip_current(lkt_db *db, char filepath[PATH_MAX]) { if (database_queue_next(db, filepath)) return true; @@ -496,7 +496,7 @@ database_queue_skip_current(volatile sqlite3 *db, char filepath[PATH_MAX]) } bool -database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX]) +database_queue_prev(lkt_db *db, char filepath[PATH_MAX]) { static const char *SQL_STMT = "SELECT file_path, position " " FROM kara" @@ -544,7 +544,7 @@ error: } bool -database_queue_swap(volatile sqlite3 *db, int from, int to) +database_queue_swap(lkt_db *db, int from, int to) { static const char *SQL_POP_ROW_1 = "SELECT position, priority, kara_id FROM queue WHERE position = ?;"; static const char *SQL_POP_ROW_2 = "DELETE FROM queue WHERE position = ?;"; @@ -610,7 +610,7 @@ error_no_rollback: } bool -database_queue_move(volatile sqlite3 *db, int from, int to) +database_queue_move(lkt_db *db, int from, int to) { static const char *SQL_TEMPLATE_PART_1 = /* Clean queue_tmp */ @@ -679,7 +679,7 @@ error_no_rollback: } bool -database_queue_play(volatile sqlite3 *db, int pos) +database_queue_play(lkt_db *db, int pos) { static const char *SQL_STMT = "UPDATE queue_state SET current = ?, paused = 0" " WHERE current <= 0 OR current IS NULL"; @@ -704,7 +704,7 @@ error: } bool -database_queue_set_current_index(volatile sqlite3 *db, int idx) +database_queue_set_current_index(lkt_db *db, int idx) { static const char *SQL_GET_TEMPLATE = "UPDATE queue_state SET current = %d;"; char SQL_GET[LKT_MAX_SQLITE_STATEMENT]; @@ -725,7 +725,7 @@ error: } bool -database_queue_get_current_file(volatile sqlite3 *db, char filepath[PATH_MAX]) +database_queue_get_current_file(lkt_db *db, char filepath[PATH_MAX]) { static const char *SQL_STMT = "SELECT file_path" " FROM kara" @@ -759,7 +759,7 @@ error: } bool -database_get_kara_path(volatile sqlite3 *db, int id, char filepath[PATH_MAX]) +database_get_kara_path(lkt_db *db, int id, char filepath[PATH_MAX]) { bool ret_code = false; sqlite3_stmt *stmt = NULL; @@ -777,7 +777,7 @@ error: } bool -database_get_kara_id(volatile sqlite3 *db, char filepath[PATH_MAX], int *id) +database_get_kara_id(lkt_db *db, char filepath[PATH_MAX], int *id) { bool ret_code = false; sqlite3_stmt *stmt = NULL; @@ -795,7 +795,7 @@ error: } bool -database_get_kara_position(volatile sqlite3 *db, int id, int *pos) +database_get_kara_position(lkt_db *db, int id, int *pos) { bool ret_code = false; sqlite3_stmt *stmt = NULL; @@ -817,7 +817,7 @@ error: } int -database_queue_probe_id(volatile sqlite3 *db, int id) +database_queue_probe_id(lkt_db *db, int id) { int position = 0; /* The queue begins with the position 1 */ sqlite3_stmt *stmt = NULL; @@ -832,7 +832,7 @@ error: } bool -database_queue_shuffle(volatile sqlite3 *db) +database_queue_shuffle(lkt_db *db) { const char *SQL = "BEGIN TRANSACTION;" /* Create temporary queue */ @@ -876,7 +876,7 @@ error: } bool -database_queue_list(volatile sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback) +database_queue_list(lkt_db *db, size_t from, size_t to, struct lkt_callback *callback) { const char *SQL_STMT = "WITH content AS (" @@ -928,7 +928,7 @@ error: } bool -database_queue_dump(volatile sqlite3 *db, const char *plt_name) +database_queue_dump(lkt_db *db, const char *plt_name) { static const char *SQL = "WITH plt_id AS (SELECT playlist.id AS id FROM playlist" " WHERE name COLLATE nocase = ?) " @@ -948,7 +948,7 @@ error: } bool -database_queue_seekid(volatile sqlite3 *db, int id, int *out_pos) +database_queue_seekid(lkt_db *db, int id, int *out_pos) { static const char *SQL_STMT = "SELECT position FROM queue WHERE kara_id = ? LIMIT 1"; int ret = 0; diff --git a/src/database/stickers.c b/src/database/stickers.c index aa4079c02d4297eeaa6665442c8a276b6ceb8c44..3271a2186cbde931c83021964d8278b66fd3311f 100644 --- a/src/database/stickers.c +++ b/src/database/stickers.c @@ -11,7 +11,7 @@ __check_type(const char *type) } bool -database_sticker_create(volatile sqlite3 *db, const char *name) +database_sticker_create(lkt_db *db, const char *name) { static const char *INSERT = "INSERT INTO 'stickers' (id, name)" " SELECT CASE WHEN MAX(id) IS NULL THEN 1 ELSE MAX(id) + 1 END, ?" @@ -32,7 +32,7 @@ error: } bool -database_sticker_delete(volatile sqlite3 *db, const char *name) +database_sticker_delete(lkt_db *db, const char *name) { static const char *INSERT = "DELETE FROM 'stickers' WHERE name = ?;"; sqlite3_stmt *stmt; @@ -49,7 +49,7 @@ error: } bool -database_sticker_set(volatile sqlite3 *db, const char *type, const char *name, int uri, int value) +database_sticker_set(lkt_db *db, const char *type, const char *name, int uri, int value) { static const char *SQL_TEMPLATE = "INSERT OR REPLACE INTO 'stickers.%s' (id, sticker, value) " "SELECT ?, 'stickers'.id, ? " @@ -84,7 +84,7 @@ error: } bool -database_sticker_delete_specify(volatile sqlite3 *db, const char *type, int uri, const char *name) +database_sticker_delete_specify(lkt_db *db, const char *type, int uri, const char *name) { char SQL[LKT_MAX_SQLITE_STATEMENT]; sqlite3_stmt *stmt; diff --git a/src/database/update.c b/src/database/update.c index d6d8618017d8f70eb498cb98594b74ecb5550b11..09235c94716f76a475ea41112fa6b01b1c8072d4 100644 --- a/src/database/update.c +++ b/src/database/update.c @@ -7,7 +7,7 @@ #include <dirent.h> PRIVATE_FUNCTION bool -___add_kara_to_update_job(volatile sqlite3 *db, size_t id) +___add_kara_to_update_job(lkt_db *db, size_t id) { char SQL[LKT_MAX_SQLITE_STATEMENT]; @@ -33,7 +33,7 @@ error: } PRIVATE_FUNCTION bool -___is_id_in_database(volatile sqlite3 *db, size_t id) +___is_id_in_database(lkt_db *db, size_t id) { static const char *SQL = "SELECT id FROM kara WHERE id = ?;"; sqlite3_stmt *stmt = NULL; @@ -48,7 +48,7 @@ error: } PRIVATE_FUNCTION void -___flush_cache_from_disk(volatile sqlite3 *db, const char *filename) +___flush_cache_from_disk(lkt_db *db, const char *filename) { static const char *SQL = "INSERT OR REPLACE INTO kara_cache (kara_id, file_path)" " SELECT id, file_path" @@ -68,7 +68,7 @@ error: } PRIVATE_FUNCTION bool -___database_add_kara(volatile sqlite3 *db, const char *filename) +___database_add_kara(lkt_db *db, const char *filename) { RETURN_UNLESS(db || filename, "Invalid argument", false); static const char *SQL_STMT = "INSERT INTO " @@ -155,7 +155,7 @@ error: } void -database_update_set_new(volatile sqlite3 *db, int id, bool is_new) +database_update_set_new(lkt_db *db, int id, bool is_new) { sqlite3_stmt *stmt = NULL; static const char *SQL = "UPDATE kara SET is_new = ? WHERE id = ?;"; @@ -168,7 +168,7 @@ error: } bool -database_update_add(volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail) +database_update_add(lkt_db *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail) { RETURN_UNLESS(db && kara_path && mdt && id, "Invalid argument", false); static const char *SQL_STMT = "INSERT OR REPLACE INTO kara (song_name, source_name, category, " @@ -208,7 +208,7 @@ error: } bool -database_update(volatile sqlite3 *db, const char *kara_dir, int check_timestamp) +database_update(lkt_db *db, const char *kara_dir, int check_timestamp) { DIR *d; struct dirent *dir; @@ -252,7 +252,7 @@ database_update(volatile sqlite3 *db, const char *kara_dir, int check_timestamp) } void -database_deleted_kara(volatile sqlite3 *db, int **kara_id, size_t *len) +database_deleted_kara(lkt_db *db, int **kara_id, size_t *len) { static const char *SQL = "SELECT kara.id, file_path FROM kara WHERE kara.id NOT IN" "(SELECT kara_id FROM updates JOIN misc ON job = update_job);"; @@ -280,7 +280,7 @@ out: } void -database_get_update(volatile sqlite3 *db, long *timestamp, long *job, int *current) +database_get_update(lkt_db *db, long *timestamp, long *job, int *current) { sqlite3_stmt *stmt = NULL; static const char *SQL = "SELECT last_update, update_job, last_update > last_end_update " @@ -301,13 +301,13 @@ error: } void -database_update_touch(volatile sqlite3 *db, int id) +database_update_touch(lkt_db *db, int id) { ___add_kara_to_update_job(db, id); } void -database_update_del(volatile sqlite3 *db, int id) +database_update_del(lkt_db *db, int id) { static const char *SQL = "DELETE FROM kara WHERE id = ?;"; sqlite3_stmt *stmt = NULL; @@ -321,7 +321,7 @@ error: } bool -database_stats(volatile sqlite3 *db, int *authors, int *sources, int *karas) +database_stats(lkt_db *db, int *authors, int *sources, int *karas) { static const char *SQL = "SELECT" " (SELECT COUNT(DISTINCT author_name) FROM kara)," @@ -344,7 +344,7 @@ error: } LKT_DATABASE_VERSION -database_get_version(volatile sqlite3 *db) +database_get_version(lkt_db *db) { static const char *SQL = "SELECT version FROM " LKT_PROTECTED_DATABASE ".misc;"; sqlite3_stmt *stmt = NULL; @@ -367,7 +367,7 @@ error: } #define sqlite_just_exec(func, query) \ - void func(volatile sqlite3 *db) \ + void func(lkt_db *db) \ { \ SQLITE_EXEC(db, query, error); \ error: \ diff --git a/src/database/user.c b/src/database/user.c index 693e7755bffd0ac5909976faceb4f471c79d66e5..c6fcfb86477d46bf5269084385108c7f9322def2 100644 --- a/src/database/user.c +++ b/src/database/user.c @@ -5,7 +5,7 @@ #include <lektor/internal/dbmacro.h> bool -database_user_authentificate(volatile sqlite3 *db, const char *password) +database_user_authentificate(lkt_db *db, const char *password) { static const char *SQL_STMT = "SELECT username FROM users WHERE password = ?"; sqlite3_stmt *stmt = 0; @@ -21,7 +21,7 @@ error: } bool -database_user_add(volatile sqlite3 *db, const char *username, const char *password) +database_user_add(lkt_db *db, const char *username, const char *password) { static const char *SQL_STMT = "INSERT INTO users (username, password) VALUES (?, ?)"; sqlite3_stmt *stmt = 0; diff --git a/src/main/luka.c b/src/main/luka.c index 92926adcc857c4b65ceb92aa2f9316bb612e8bd5..552f14ad48c8cf86543bd7bc55648978a78bdba0 100644 --- a/src/main/luka.c +++ b/src/main/luka.c @@ -62,7 +62,7 @@ ___setup(void) lkt_queue_new(&__queue); reg_export(luka_reg); - FAIL_UNLESS(database_new((volatile sqlite3 **)&__db), "Can't init sqlite database"); + FAIL_UNLESS(database_new((lkt_db **)&__db), "Can't init sqlite database"); FAIL_IF(config_detect_file(path, PATH_MAX), "Can't find a config file, did you run lektord at least once?"); FAIL_IF(config_new(__db, path), "Failed to read the config"); @@ -156,7 +156,7 @@ ___callback_list_row(struct lkt_state UNUSED *srv, size_t UNUSED c, int id, int } /* Init database search function */ -typedef bool (*___init_search_function)(volatile sqlite3 *, struct lkt_search *); +typedef bool (*___init_search_function)(lkt_db *, struct lkt_search *); PRIVATE_FUNCTION void ___iter_search(___init_search_function init_function, struct lkt_search *search) @@ -165,7 +165,7 @@ ___iter_search(___init_search_function init_function, struct lkt_search *search) struct lkt_search *new_search = database_search_new_from(search); redo_search_for_continuation: - FAIL_UNLESS(init_function((volatile sqlite3 *)__db, search), "Failed to init search for database"); + FAIL_UNLESS(init_function((lkt_db *)__db, search), "Failed to init search for database"); for (count = 0; database_search_iter(search); ++count) continue; diff --git a/src/module/module_repo.c b/src/module/module_repo.c index cf4403619de12033bdc6f824aa41b7bbb2f56691..d3276b6761e5bc01532fd998b62c45bf455c75be 100644 --- a/src/module/module_repo.c +++ b/src/module/module_repo.c @@ -26,7 +26,7 @@ struct kara { bool is_new; int ignored_count; int update_count; - volatile sqlite3 *db; + lkt_db *db; struct module_repo_internal *repo; size_t kara_dir_len; long id; @@ -55,7 +55,7 @@ struct module_repo_internal { /* The database and the queue */ struct queue *queue; - volatile sqlite3 *db; + lkt_db *db; /* Craft a filename for newly downloaded karas. Arguments: * - str: the destination string, the prefix, i.e. the kara_dir, is already here @@ -449,7 +449,7 @@ ___handle_got_json_internal_callback(const char *key, const char *val, int comp, } PRIVATE_FUNCTION int -___handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const char *json) +___handle_got_json(lkt_db *db, struct module_repo_internal *repo, const char *json) { size_t len = json_parse_get_count(json, 2); struct kara kara = { @@ -486,7 +486,7 @@ ___handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, cons } PRIVATE_FUNCTION void -___handle_deleted_kara(volatile sqlite3 *db, struct queue *queue) +___handle_deleted_kara(lkt_db *db, struct queue *queue) { size_t len, i; int *kara_ids; @@ -726,7 +726,7 @@ module_repo_close(struct module_repo_internal *repo) } PRIVATE_FUNCTION bool -module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatile sqlite3 *db) +module_repo_new(struct module_repo_internal *repo_, struct queue *queue, lkt_db *db) { RETURN_UNLESS(repo_ && queue && db, "Invalid argument", 1); if (!___curl_init) { @@ -800,7 +800,7 @@ mod_new(va_list *va) va_copy(copy, *va); repo = (struct module_repo_internal **)va_arg(copy, void **); struct queue *queue = va_arg(copy, struct queue *); - volatile sqlite3 *db = va_arg(copy, volatile sqlite3 *); + lkt_db *db = va_arg(copy, lkt_db *); if (NULL != *repo) { LOG_ERROR("REPO", "Can't init two times the module"); diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c index 1f24b316011064f510a1f673d81c2e9007a8295e..91aa7c164b273abefeb644ce850d0a2ebd1f9957 100644 --- a/src/module/module_sdl2.c +++ b/src/module/module_sdl2.c @@ -8,7 +8,6 @@ #include <lektor/internal/icon.xpm> -#include <sqlite3.h> #include <sched.h> #include <SDL.h> #include <SDL_image.h> @@ -41,7 +40,7 @@ struct module_sdl2_window { /* Things from the server */ struct queue *queue; - volatile sqlite3 *db; + lkt_db *db; }; /************************ @@ -57,7 +56,7 @@ static bool module_sdl2_load_file(struct module_sdl2_window *, const char *); static bool module_sdl2_toggle_pause(struct module_sdl2_window *); static void module_sdl2_free(struct module_sdl2_window *); static void module_sdl2_close(struct module_sdl2_window *); -static bool module_sdl2_new(struct module_sdl2_window **, struct queue *, volatile sqlite3 *); +static bool module_sdl2_new(struct module_sdl2_window **, struct queue *, lkt_db *); /********************* * Private functions * @@ -84,7 +83,7 @@ on_mpv_render_update(void UNUSED *ctx) } static inline bool -init_mpv__(mpv_handle **ctx, volatile sqlite3 *db) +init_mpv__(mpv_handle **ctx, lkt_db *db) { *ctx = lmpv_prepare(db); int status; @@ -123,7 +122,7 @@ mod_new(va_list *va) va_copy(copy, *va); win = (struct module_sdl2_window **)va_arg(copy, void **); struct queue *queue = va_arg(copy, struct queue *); - volatile sqlite3 *db = va_arg(copy, volatile sqlite3 *); + lkt_db *db = va_arg(copy, lkt_db *); bool ret = module_sdl2_new(win, queue, db); va_end(copy); return !ret; @@ -466,7 +465,7 @@ end: } static bool -module_sdl2_new(struct module_sdl2_window **win, struct queue *queue, volatile sqlite3 *db) +module_sdl2_new(struct module_sdl2_window **win, struct queue *queue, lkt_db *db) { RETURN_UNLESS(win, "Invalid arguments", false); struct poller_thread_arg *arg; diff --git a/src/module/mpv.c b/src/module/mpv.c index af1f9d7d53c0486c5f8f41c28f703039927e8069..9180633cde25b5edc238dd355cfa0474176971d3 100644 --- a/src/module/mpv.c +++ b/src/module/mpv.c @@ -4,7 +4,6 @@ #include <lektor/common.h> #include <lektor/database.h> -#include <sqlite3.h> void lmpv_free(mpv_handle **ctx) @@ -18,7 +17,7 @@ lmpv_free(mpv_handle **ctx) } mpv_handle * -lmpv_prepare(volatile sqlite3 *db) +lmpv_prepare(lkt_db *db) { mpv_handle *ctx = mpv_create(); int status; @@ -79,7 +78,7 @@ lmpv_observe_properties(mpv_handle *ctx) } mpv_handle * -lmpv_new(unsigned long int wid, volatile sqlite3 *db) +lmpv_new(unsigned long int wid, lkt_db *db) { mpv_handle *ctx = lmpv_prepare(db); int status; diff --git a/src/module/mpv.h b/src/module/mpv.h index f493a1c873862f107d690c35c8e0933cefc38626..ce6c0162cc9d77604d86d8937c14217776f7c3ef 100644 --- a/src/module/mpv.h +++ b/src/module/mpv.h @@ -4,12 +4,12 @@ #include <lektor/common.h> #include <lektor/queue.h> #include <lektor/reg.h> -#include <sqlite3.h> +#include <lektor/database.h> void lmpv_free(mpv_handle **ctx); -mpv_handle *lmpv_new(unsigned long int wid, volatile sqlite3 *db); +mpv_handle *lmpv_new(unsigned long int wid, lkt_db *db); int lmpv_observe_properties(mpv_handle *ctx); -mpv_handle *lmpv_prepare(volatile sqlite3 *db); +mpv_handle *lmpv_prepare(lkt_db *db); int lmpv_set_volume(mpv_handle *ctx, int vol); int lmpv_set_position(mpv_handle *ctx, int pos); diff --git a/src/net/listen.c b/src/net/listen.c index f3e1fe33a9c8c9870dbcf4736fbc37dcfbc4628b..b578fb81dfc70098ca82aa5510dfcb84b99337fa 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -7,7 +7,6 @@ #include <lektor/net.h> #include <lektor/reg.h> -#include <sqlite3.h> #include <signal.h> #include <sched.h> #include <netdb.h>