Skip to content
Extraits de code Groupes Projets
Vérifiée Valider fc4200a8 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

Update stickers functions, a bit cleaner now

parent 1f287c9a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!56Search
...@@ -127,14 +127,20 @@ bool database_user_authentificate(sqlite3 *db, const char *password); ...@@ -127,14 +127,20 @@ bool database_user_authentificate(sqlite3 *db, const char *password);
bool database_user_add(sqlite3 *db, const char *username, const char *password); bool database_user_add(sqlite3 *db, const char *username, const char *password);
/* Stickers manipulations. */ /* Stickers manipulations. */
typedef bool (*database_sticker_callback_t)(void *args, const char *sticker, const char *type, struct sticker_callback {
int uri, int value); struct lkt_state *srv;
size_t c;
int uri;
int value;
const char *name;
bool is_ok;
bool (*call)(void *args, const char *sticker, const char *type, int uri, int value);
};
bool database_sticker_create(sqlite3 *db, const char *name); bool database_sticker_create(sqlite3 *db, const char *name);
bool database_sticker_delete(sqlite3 *db, const char *name); bool database_sticker_delete(sqlite3 *db, const char *name);
bool database_sticker_delete_specify(sqlite3 *sb, const char *type, int uri, bool database_sticker_delete_specify(sqlite3 *sb, const char *type, int uri,
const char *name /* Can be null */); const char *name /* Can be null */);
bool database_sticker_list(sqlite3 *db, const char *type, void *args, database_sticker_callback_t call); bool database_sticker_list(sqlite3 *db, const char *type, struct sticker_callback *call);
bool database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, int value); bool database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, int value);
bool database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, void *args, bool database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call);
database_sticker_callback_t call);
...@@ -21,15 +21,6 @@ ...@@ -21,15 +21,6 @@
#define SELF_EXECUTABLE_FREEBSD "/proc/curproc/file" #define SELF_EXECUTABLE_FREEBSD "/proc/curproc/file"
#define SELF_EXECUTABLE_SOLARIS "/proc/self/path/a.out" #define SELF_EXECUTABLE_SOLARIS "/proc/self/path/a.out"
struct _client_trace_t {
struct lkt_state *srv;
size_t c;
int uri;
const char *name;
int value;
bool is_ok;
};
inline bool inline bool
command_restart(struct lkt_state *srv, size_t c) command_restart(struct lkt_state *srv, size_t c)
{ {
...@@ -1025,10 +1016,12 @@ command_user_add(sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]) ...@@ -1025,10 +1016,12 @@ command_user_add(sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX])
fprintf(stderr, " . command_user_add: Failed to add user %s\n", argv[0]); fprintf(stderr, " . command_user_add: Failed to add user %s\n", argv[0]);
} }
/* Stickers */
static bool static bool
sticker_send_one_value(void *_args, const char *sticker, const char *type, int uri, int value) sticker_send_one_value(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
struct lkt_message *out; struct lkt_message *out;
(void) sticker; (void) sticker;
(void) type; (void) type;
...@@ -1043,7 +1036,7 @@ sticker_send_one_value(void *_args, const char *sticker, const char *type, int u ...@@ -1043,7 +1036,7 @@ sticker_send_one_value(void *_args, const char *sticker, const char *type, int u
static bool static bool
sticker_send_all(void *_args, const char *sticker, const char *type, int uri, int value) sticker_send_all(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
struct lkt_message *out; struct lkt_message *out;
out = lkt_message_new(); out = lkt_message_new();
...@@ -1056,7 +1049,7 @@ sticker_send_all(void *_args, const char *sticker, const char *type, int uri, in ...@@ -1056,7 +1049,7 @@ sticker_send_all(void *_args, const char *sticker, const char *type, int uri, in
static bool static bool
sticker_send_check_uri(void *_args, const char *sticker, const char *type, int uri, int value) sticker_send_check_uri(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
struct lkt_message *out; struct lkt_message *out;
(void) type; (void) type;
...@@ -1072,7 +1065,7 @@ sticker_send_check_uri(void *_args, const char *sticker, const char *type, int u ...@@ -1072,7 +1065,7 @@ sticker_send_check_uri(void *_args, const char *sticker, const char *type, int u
static bool static bool
sticker_send_value_check_uri_name(void *_args, const char *sticker, const char *type, int uri, int value) sticker_send_value_check_uri_name(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
struct lkt_message *out; struct lkt_message *out;
(void) type; (void) type;
...@@ -1089,7 +1082,7 @@ static bool ...@@ -1089,7 +1082,7 @@ static bool
sticker_check_is_present_eq(void *_args, const char *sticker, const char *type, int uri, int value) sticker_check_is_present_eq(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
(void) type; (void) type;
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
args->is_ok |= (uri == args->uri) && !strcasecmp(sticker, args->name) && (value == args->value); args->is_ok |= (uri == args->uri) && !strcasecmp(sticker, args->name) && (value == args->value);
return true; return true;
} }
...@@ -1098,7 +1091,7 @@ static bool ...@@ -1098,7 +1091,7 @@ static bool
sticker_check_is_present_lt(void *_args, const char *sticker, const char *type, int uri, int value) sticker_check_is_present_lt(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
(void) type; (void) type;
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
args->is_ok |= (uri == args->uri) && !strcasecmp(sticker, args->name) && (value < args->value); args->is_ok |= (uri == args->uri) && !strcasecmp(sticker, args->name) && (value < args->value);
return true; return true;
} }
...@@ -1107,7 +1100,7 @@ static bool ...@@ -1107,7 +1100,7 @@ static bool
sticker_check_is_present_gt(void *_args, const char *sticker, const char *type, int uri, int value) sticker_check_is_present_gt(void *_args, const char *sticker, const char *type, int uri, int value)
{ {
(void) type; (void) type;
struct _client_trace_t *args = (struct _client_trace_t *) _args; struct sticker_callback *args = (struct sticker_callback *) _args;
args->is_ok |= (uri == args->uri) && !strcasecmp(sticker, args->name) && (value > args->value); args->is_ok |= (uri == args->uri) && !strcasecmp(sticker, args->name) && (value > args->value);
return true; return true;
} }
...@@ -1121,12 +1114,13 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS ...@@ -1121,12 +1114,13 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS
} }
int uri = atoi(argv[1]); /* FIXME: Use strtol. */ int uri = atoi(argv[1]); /* FIXME: Use strtol. */
struct _client_trace_t args = { struct sticker_callback callback = {
.srv = srv, .srv = srv,
.c = c, .c = c,
.call = sticker_send_one_value,
}; };
if (!database_sticker_get(srv->db, argv[0], argv[2], uri, &args, sticker_send_one_value)) { if (!database_sticker_get(srv->db, argv[0], argv[2], uri, &callback)) {
fprintf(stderr, " . command_sticker_get: Failed to get sticker '%s' for object %s(%d)\n", fprintf(stderr, " . command_sticker_get: Failed to get sticker '%s' for object %s(%d)\n",
argv[2], argv[0], uri); argv[2], argv[0], uri);
return false; return false;
...@@ -1159,7 +1153,7 @@ command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS ...@@ -1159,7 +1153,7 @@ command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS
bool bool
command_sticker_list(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) command_sticker_list(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX])
{ {
struct _client_trace_t args = { struct sticker_callback callback = {
.srv = srv, .srv = srv,
.c = c, .c = c,
}; };
...@@ -1187,29 +1181,35 @@ command_sticker_list(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARG ...@@ -1187,29 +1181,35 @@ command_sticker_list(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARG
goto unknown; goto unknown;
just_list_all: just_list_all:
return database_sticker_list(srv->db, argv[0], &args, sticker_send_all); callback.call = sticker_send_all;
return database_sticker_list(srv->db, argv[0], &callback);
simple_list_command: simple_list_command:
args.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */
return database_sticker_list(srv->db, argv[0], &args, sticker_send_check_uri); callback.call = sticker_send_check_uri;
return database_sticker_list(srv->db, argv[0], &callback);
list_stickers_in_uri: list_stickers_in_uri:
args.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */
args.name = argv[2]; callback.name = argv[2];
return database_sticker_list(srv->db, argv[0], &args, sticker_send_value_check_uri_name); callback.call = sticker_send_value_check_uri_name;
return database_sticker_list(srv->db, argv[0], &callback);
return false; return false;
list_stickers_check_value: list_stickers_check_value:
args.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */
args.value = atoi(argv[4]); /* FIXME: Use strtol. */ callback.value = atoi(argv[4]); /* FIXME: Use strtol. */
args.name = argv[2]; callback.name = argv[2];
switch (argv[3][0]) { switch (argv[3][0]) {
case '=': case '=':
return database_sticker_list(srv->db, argv[0], &args, sticker_check_is_present_eq); callback.call = sticker_check_is_present_eq;
return database_sticker_list(srv->db, argv[0], &callback);
case '<': case '<':
return database_sticker_list(srv->db, argv[0], &args, sticker_check_is_present_lt); callback.call = sticker_check_is_present_lt;
return database_sticker_list(srv->db, argv[0], &callback);
case '>': case '>':
return database_sticker_list(srv->db, argv[0], &args, sticker_check_is_present_gt); callback.call = sticker_check_is_present_gt;
return database_sticker_list(srv->db, argv[0], &callback);
default: default:
return 0; return 0;
} }
......
...@@ -71,8 +71,7 @@ error: ...@@ -71,8 +71,7 @@ error:
} }
bool bool
database_sticker_list(sqlite3 *db, const char *type, void *args, database_sticker_list(sqlite3 *db, const char *type, struct sticker_callback *call)
database_sticker_callback_t call)
{ {
const char *SQL = NULL; const char *SQL = NULL;
int ret = false, uri, value; int ret = false, uri, value;
...@@ -112,7 +111,7 @@ database_sticker_list(sqlite3 *db, const char *type, void *args, ...@@ -112,7 +111,7 @@ database_sticker_list(sqlite3 *db, const char *type, void *args,
sticker = (const char *) sqlite3_column_text(stmt, 0); sticker = (const char *) sqlite3_column_text(stmt, 0);
uri = sqlite3_column_int(stmt, 1); uri = sqlite3_column_int(stmt, 1);
value = sqlite3_column_int(stmt, 2); value = sqlite3_column_int(stmt, 2);
if (!call(args, sticker, type, uri, value)) if (!call->call(call, sticker, type, uri, value))
goto end_loop; goto end_loop;
continue; continue;
...@@ -179,8 +178,7 @@ error: ...@@ -179,8 +178,7 @@ error:
} }
bool bool
database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, void *args, database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call)
database_sticker_callback_t call)
{ {
const char *SQL = NULL; const char *SQL = NULL;
sqlite3_stmt *stmt; sqlite3_stmt *stmt;
...@@ -212,7 +210,7 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v ...@@ -212,7 +210,7 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v
switch (sqlite3_step(stmt)) { switch (sqlite3_step(stmt)) {
case SQLITE_ROW: case SQLITE_ROW:
value = sqlite3_column_int(stmt, 1); value = sqlite3_column_int(stmt, 1);
if (!call(args, name, type, uri, value)) if (!call->call(call, name, type, uri, value))
goto end_loop; goto end_loop;
continue; continue;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter