X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=mysql_selector.c;h=b2a925e09311a6cc71bf45c488c73eca8a163e99;hp=d4ccc86845821d02f53edd5868a265ca6bd777f9;hb=35ff75cd0b259077fea9439ecc82dc72d1c2c7c2;hpb=e427612b561782af169327d46ef4df4a398e0c38 diff --git a/mysql_selector.c b/mysql_selector.c index d4ccc868..b2a925e0 100644 --- a/mysql_selector.c +++ b/mysql_selector.c @@ -25,7 +25,7 @@ #include "server.cmdline.h" #include "server.h" #include "vss.h" -#include "db.h" +#include "afs.h" #include #include #include @@ -52,7 +52,7 @@ struct para_macro { const char *replacement; }; -static struct para_macro macro_list[] = { +static const struct para_macro mysql_macro_list[] = { { .name = "IS_N_SET", .replacement = "(data.%s != '1')" }, { @@ -146,9 +146,10 @@ out: * \return \p NULL if one of the underlying calls to \p s_a_r returned \p NULL. * Otherwise the completely expanded version of \p src is returned. */ -__must_check __malloc static char *s_a_r_list(struct para_macro *macro_list, char *src) +__must_check __malloc static char *s_a_r_list(const struct para_macro *macro_list, + char *src) { - struct para_macro *mp = macro_list; + const struct para_macro *mp = macro_list; char *ret = NULL, *tmp = para_strdup(src); while (mp->name) { @@ -785,7 +786,7 @@ static char *get_query(char *streamname, char *filename, int with_path) continue; arg = line + n; if (!strcmp(command, "accept:")) { - char *tmp2 = s_a_r_list(macro_list, arg); + char *tmp2 = s_a_r_list(mysql_macro_list, arg); if (accept_opts) accept_opts = para_strcat( accept_opts, " or "); @@ -794,7 +795,7 @@ static char *get_query(char *streamname, char *filename, int with_path) continue; } if (!strcmp(command, "deny:")) { - char *tmp2 = s_a_r_list(macro_list, arg); + char *tmp2 = s_a_r_list(mysql_macro_list, arg); if (deny_opts) deny_opts = para_strcat(deny_opts, " or "); deny_opts = para_strcat(deny_opts, tmp2); @@ -802,10 +803,10 @@ static char *get_query(char *streamname, char *filename, int with_path) continue; } if (!score && !strcmp(command, "score:")) - score = s_a_r_list(macro_list, arg); + score = s_a_r_list(mysql_macro_list, arg); } if (!score) { - score = s_a_r_list(macro_list, conf.mysql_default_score_arg); + score = s_a_r_list(mysql_macro_list, conf.mysql_default_score_arg); if (!score) goto out; } @@ -899,7 +900,6 @@ write: return info; } - /* might return NULL */ static char *get_current_audio_file(void) { @@ -910,11 +910,34 @@ static char *get_current_audio_file(void) return name; } +/* If called as child, mmd_lock must be held */ +static void update_mmd(char *info) +{ + PARA_DEBUG_LOG("%s", "updating shared memory area\n"); + strncpy(mmd->selector_info, info, MMD_INFO_SIZE - 1); + mmd->selector_info[MMD_INFO_SIZE - 1] = '\0'; +} + +static void refresh_selector_info(void) +{ + char *name = get_current_audio_file(); + char *info; + + if (!name) + return; + info = get_selector_info(name); + free(name); + mmd_lock(); + update_mmd(info); + mmd_unlock(); + free(info); +} + /* list attributes / print database info */ static int com_la_info(int fd, int argc, char *argv[]) { char *name = NULL, *meta = NULL, *atts = NULL, *dir = NULL; - int ret, com_la = strcmp(argv[0], "info"); + int ret, la = strcmp(argv[0], "info"); if (argc < 2) { ret = -E_GET_AUDIO_FILE; @@ -931,7 +954,7 @@ static int com_la_info(int fd, int argc, char *argv[]) meta = get_meta(name, 1); atts = get_atts(name, 0); dir = get_dir(name); - if (com_la) + if (la) ret = send_va_buffer(fd, "%s\n", atts); else ret = send_va_buffer(fd, "dir: %s\n" "%s\n" "attributes: %s\n", @@ -1185,7 +1208,10 @@ int com_picass(int fd, int argc, char *argv[]) */ int com_snp(int fd, int argc, char *argv[]) { - return com_set(fd, argc, argv); + int ret = com_set(fd, argc, argv); + if (ret >= 0) + refresh_selector_info(); + return ret; } /* @@ -1462,14 +1488,6 @@ out: return ret; } -/* If called as child, mmd_lock must be held */ -static void update_mmd(char *info) -{ - PARA_DEBUG_LOG("%s", "updating shared memory area\n"); - strncpy(mmd->selector_info, info, MMD_INFO_SIZE - 1); - mmd->selector_info[MMD_INFO_SIZE - 1] = '\0'; -} - static void update_audio_file_server_handler(char *name) { char *info; @@ -1491,24 +1509,11 @@ int com_us(__a_unused int fd, int argc, char *argv[]) return -E_ESCAPE; ret = update_audio_file(argv[1]); free(tmp); + if (ret >= 0) + refresh_selector_info(); return ret; } -static void refresh_selector_info(void) -{ - char *name = get_current_audio_file(); - char *info; - - if (!name) - return; - info = get_selector_info(name); - free(name); - mmd_lock(); - update_mmd(info); - mmd_unlock(); - free(info); -} - /* select previous / next stream */ static int com_ps_ns(__a_unused int fd, int argc, char *argv[]) {