diff --git a/inc/lektor/net.h b/inc/lektor/net.h index e25534f5dd589694bd0c90c42a6d9f7816f6b1ab..19a8a9278ef9571b47fafe91faba73d83df91758 100644 --- a/inc/lektor/net.h +++ b/inc/lektor/net.h @@ -37,12 +37,12 @@ struct lkt_state { size_t fds_len; size_t fds_max; - sqlite3 *db; + volatile sqlite3 *db; const char *kara_prefix; struct lkt_repo repo; - enum mpd_idle_flag mpd_idle_events; + volatile enum mpd_idle_flag mpd_idle_events; struct lkt_win win; }; diff --git a/src/commands.c b/src/commands.c index e6309f854ab9b1dc6ccfd54bd07e52130792c13a..dc44865ae17b1a6540f1396264a1e781e64f84a0 100644 --- a/src/commands.c +++ b/src/commands.c @@ -70,7 +70,7 @@ command_rescan(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX] return false; srv->mpd_idle_events |= MPD_IDLE_UPDATE; srv->mpd_idle_events |= MPD_IDLE_DATABASE; - return database_update(srv->db, srv->kara_prefix); + return database_update((sqlite3 *) srv->db, srv->kara_prefix); } inline bool @@ -91,7 +91,7 @@ command_currentsong(struct lkt_state *srv, size_t c) memset(&kara, 0, sizeof(struct kara_metadata)); - if (!database_queue_current_kara(srv->db, &kara, NULL)) + if (!database_queue_current_kara((sqlite3 *) srv->db, &kara, NULL)) LOG_ERROR_SCT("COMMAND", "%s", "Failed to get information about the current kara"); out = lkt_message_new(); @@ -121,8 +121,8 @@ command_status(struct lkt_state *srv, size_t c) RETURN_UNLESS(srv, "Invalid argument", false); win = &srv->win; - RETURN_UNLESS(database_queue_state(srv->db, &queue_state), "Can't determine playback status", false); - database_queue_current_kara(srv->db, NULL, &songid); + RETURN_UNLESS(database_queue_state((sqlite3 *) srv->db, &queue_state), "Can't determine playback status", false); + database_queue_current_kara((sqlite3 *) srv->db, NULL, &songid); win->get_elapsed(win, &elapsed); win->get_duration(win, &duration); @@ -469,7 +469,7 @@ lkt_callback_insert_v1(struct lkt_state *srv, size_t c, int id, int id_len, cons (void) c; (void) sql_row; (void) id_len; - return database_queue_add_id(srv->db, id, 5); + return database_queue_add_id((sqlite3 *) srv->db, id, 5); } static bool @@ -546,7 +546,7 @@ __find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], lo /* Make the search langand do the right action */ - RETURN_UNLESS(init(srv->db, col_name, rgx, &search), "Failed to init search", false); + RETURN_UNLESS(init((sqlite3 *) srv->db, col_name, rgx, &search), "Failed to init search", false); for (count = 0; database_search_iter(&search); ++count) continue; @@ -599,19 +599,19 @@ command_set_playback_option(struct lkt_state *srv, size_t c, enum lkt_playback_o switch (opt) { case lkt_playback_option_random: - ret = database_config_queue(srv->db, "random", val); + ret = database_config_queue((sqlite3 *) srv->db, "random", val); break; case lkt_playback_option_single: - ret = database_config_queue(srv->db, "single", val); + ret = database_config_queue((sqlite3 *) srv->db, "single", val); break; case lkt_playback_option_consume: - ret = database_config_queue(srv->db, "consume", val); + ret = database_config_queue((sqlite3 *) srv->db, "consume", val); break; case lkt_playback_option_repeat: - ret = database_config_queue(srv->db, "repeat", val); + ret = database_config_queue((sqlite3 *) srv->db, "repeat", val); break; case lkt_playback_option_volume: - ret = database_config_queue(srv->db, "volume", val); + ret = database_config_queue((sqlite3 *) srv->db, "volume", val); LOG_INFO_SCT("COMMAND", "Set volume to %ld", val); ret &= win->set_volume(win, val); srv->mpd_idle_events |= MPD_IDLE_MIXER; @@ -632,8 +632,8 @@ command_set_pos(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask { char filepath[PATH_MAX]; *watch_mask_ptr |= MPD_IDLE_PLAYER; - RETURN_UNLESS(database_queue_set_current_index(db, index), "Failed to set position in queue", false); - RETURN_UNLESS(database_queue_get_current_file(db, filepath), "Failed to get filename", false); + RETURN_UNLESS(database_queue_set_current_index((sqlite3 *)db, index), "Failed to set position in queue", false); + RETURN_UNLESS(database_queue_get_current_file((sqlite3 *)db, filepath), "Failed to get filename", false); return win->load_file(win, filepath); } @@ -809,17 +809,17 @@ command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_ /* The command is used in its relative forme, display elements from the current one. */ only_one: - return database_queue_list(srv->db, from, from, &callback); + return database_queue_list((sqlite3 *) srv->db, from, from, &callback); /* The command is used with a range specifier. */ is_a_range: if (to - from + 1 < lkt_remaining_msg(srv, c) - 2) { lkt_set_continuation(srv, c, 0); - return database_queue_list(srv->db, from, to, &callback); + return database_queue_list((sqlite3 *) srv->db, from, to, &callback); } else { to = from + lkt_remaining_msg(srv, c) - 3; lkt_set_continuation(srv, c, to + 1); - return database_queue_list(srv->db, from, to, &callback); + return database_queue_list((sqlite3 *) srv->db, from, to, &callback); } } @@ -827,7 +827,7 @@ bool command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(argv[0], "Invalid argument", false); - RETURN_UNLESS(database_user_authentificate(srv->db, argv[0]), "Failed to authentificate user", false); + RETURN_UNLESS(database_user_authentificate((sqlite3 *) srv->db, argv[0]), "Failed to authentificate user", false); lkt_client_auth(srv, c, true); return true; } @@ -935,7 +935,7 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS .c = c, .call = sticker_send_one_value, }; - RETURN_UNLESS(database_sticker_get(srv->db, argv[0], argv[2], uri, &cb), "Failed to get sticker", false); + RETURN_UNLESS(database_sticker_get((sqlite3 *) srv->db, argv[0], argv[2], uri, &cb), "Failed to get sticker", false); return true; } @@ -946,7 +946,7 @@ command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS RETURN_UNLESS(argv[0] && argv[1] && argv[2] && argv[3] && !argv[4], "Invalid argument", false); int uri = atoi(argv[1]); /* FIXME: Use strtol. */ int value = atoi(argv[4]); /* FIXME: Use strtol. */ - RETURN_UNLESS(database_sticker_set(srv->db, argv[0], argv[2], uri, value), "Failed to get sticker", false); + RETURN_UNLESS(database_sticker_set((sqlite3 *) srv->db, argv[0], argv[2], uri, value), "Failed to get sticker", false); srv->mpd_idle_events |= MPD_IDLE_STICKER; return true; } @@ -983,18 +983,18 @@ command_sticker_list(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARG just_list_all: callback.call = sticker_send_all; - return database_sticker_list(srv->db, argv[0], &callback); + return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); simple_list_command: callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.call = sticker_send_check_uri; - return database_sticker_list(srv->db, argv[0], &callback); + return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); list_stickers_in_uri: callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.name = argv[2]; callback.call = sticker_send_value_check_uri_name; - return database_sticker_list(srv->db, argv[0], &callback); + return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); return false; list_stickers_check_value: @@ -1004,13 +1004,13 @@ list_stickers_check_value: switch (argv[3][0]) { case '=': callback.call = sticker_check_is_present_eq; - return database_sticker_list(srv->db, argv[0], &callback); + return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); case '<': callback.call = sticker_check_is_present_lt; - return database_sticker_list(srv->db, argv[0], &callback); + return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); case '>': callback.call = sticker_check_is_present_gt; - return database_sticker_list(srv->db, argv[0], &callback); + return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); default: return 0; } @@ -1027,5 +1027,5 @@ command_sticker_delete(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_A RETURN_UNLESS(argv[0] && argv[1], "Invalid argument", false); int uri = atoi(argv[1]); srv->mpd_idle_events |= MPD_IDLE_STICKER; - return database_sticker_delete_specify(srv->db, argv[0], uri, argv[2]); + return database_sticker_delete_specify((sqlite3 *) srv->db, argv[0], uri, argv[2]); } diff --git a/src/net/listen.c b/src/net/listen.c index bce45fa800c7f6f6e0e7749a6ec841cf72b4888d..6e526aeac26618358de4029fb4c8bbff0634e20f 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -155,7 +155,7 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) case MPD_IDLE_NONE: /* Commands that requires authentification. */ if (!strcmp(cmd.name, "__adduser")) - err = ! command_user_add(srv, c, srv->db, cmd.args); + err = ! command_user_add(srv, c, (sqlite3 *) srv->db, cmd.args); else if (!strcmp(cmd.name, "__restart")) err = ! command_restart(srv, c); else if (!strcmp(cmd.name, "kill")) @@ -177,25 +177,25 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) err = 0; else if (!strcmp(cmd.name, "next")) - err = !command_next(srv->db, &srv->win, &srv->mpd_idle_events); + err = !command_next((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "pause")) - err = !command_pause(srv->db, &srv->win, &srv->mpd_idle_events); + err = !command_pause((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "previous")) - err = !command_previous(srv->db, &srv->win, &srv->mpd_idle_events); + err = !command_previous((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "play")) - err = ! command_play(srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); + err = ! command_play((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playid")) - err = ! command_playid(srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); + err = ! command_playid((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "stop")) - err = !command_stop(srv->db, &srv->win, &srv->mpd_idle_events); + err = !command_stop((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "clear")) - err = !command_clear(srv->db, &srv->mpd_idle_events); + err = !command_clear((sqlite3 *) srv->db, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "crop")) - err = !command_crop(srv->db, &srv->mpd_idle_events); + err = !command_crop((sqlite3 *) srv->db, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "moveid")) - err = !command_move(srv->db, cmd.args, &srv->mpd_idle_events); + err = !command_move((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "shuffle")) - err = !command_shuffle(srv->db, &srv->mpd_idle_events); + err = !command_shuffle((sqlite3 *) srv->db, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playlist") || !strcmp(cmd.name, "playlistinfo")) err = !command_queue_list(srv, c, cmd.args); @@ -217,27 +217,27 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) err = !command_help(srv, c); else if (!strcmp(cmd.name, "add")) - err = !command_add(srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); + err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "addid")) - err = !command_addid(srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); + err = !command_addid((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "deleteid")) err = ! (cmd.args[0] != NULL && - command_delid(srv->db, &srv->win, cmd.args[0], &srv->mpd_idle_events)); + command_delid((sqlite3 *) srv->db, &srv->win, cmd.args[0], (enum mpd_idle_flag *) &srv->mpd_idle_events)); else if (!strcmp(cmd.name, "playlistclear")) - err = ! command_plt_clear(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_clear((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "rename")) - err = ! command_plt_rename(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_rename((sqlite3* ) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playlistdelete")) - err = ! command_plt_remove(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playlistadd")) - err = ! command_plt_add(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_add((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "rm") && cmd.args[0] != NULL && cmd.args[1] == NULL) - err = ! command_plt_remove(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "save")) - err = ! command_plt_export(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_export((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "__import")) - err = ! command_plt_import(srv->db, cmd.args, &srv->mpd_idle_events); + err = ! command_plt_import((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); else if (!strcmp(cmd.name, "random")) err = !command_set_playback_option(srv, c, lkt_playback_option_random, cmd.args); @@ -698,7 +698,7 @@ handle_repo_hevents(struct lkt_state *srv) switch (kara->action) { /* Add the downloaded kara to the database. */ case kara_action_add: - if (!database_update_add(srv->db, kara->filename, &kara->mdt, kara->id, true)) { + if (!database_update_add((sqlite3 *) srv->db, kara->filename, &kara->mdt, kara->id, true)) { LOG_ERROR("Failed to add downloaded kara with id %lu and path %s", kara->id, kara->filename); goto get_out; } @@ -709,7 +709,7 @@ handle_repo_hevents(struct lkt_state *srv) /* Add the mdt of the kara to the database. Mark it unavailable. */ case kara_action_unavail: - if (!database_update_add(srv->db, kara->filename, &kara->mdt, kara->id, false)) { + if (!database_update_add((sqlite3 *) srv->db, kara->filename, &kara->mdt, kara->id, false)) { LOG_ERROR("Failed to add kara with id %lu with flag unavailable", kara->id); goto get_out; } @@ -750,26 +750,26 @@ lkt_listen(void) memset(&srv, 0, sizeof(struct lkt_state)); /* Initialize the system. */ - RETURN_UNLESS(database_new(&srv.db), "Failed to initialize the memory database", 1); + RETURN_UNLESS(database_new((sqlite3 **) &srv.db), "Failed to initialize the memory database", 1); RETURN_IF(config_detect_file(conf_file, PATH_MAX), "Failed to find a config file", 1); - RETURN_IF(config_new(srv.db, conf_file), "Failed to read configuration file", 1); + RETURN_IF(config_new((sqlite3 *) srv.db, conf_file), "Failed to read configuration file", 1); /* Finish to initialize. */ - RETURN_UNLESS(database_config_get_text(srv.db, "database", "db_path", db_path, PATH_MAX), "Cfg error", 2); - RETURN_UNLESS(database_open(srv.db, db_path), "Can't open database", 1); + RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "database", "db_path", db_path, PATH_MAX), "Cfg error", 2); + RETURN_UNLESS(database_open((sqlite3 *) srv.db, db_path), "Can't open database", 1); /* Read the configuration. */ - RETURN_UNLESS(database_config_get_int(srv.db, "player", "autoclear", &autoclear), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text(srv.db, "database", "kara_dir", kara_dir, PATH_MAX), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text(srv.db, "server", "host", host, HOST_NAME_MAX), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text(srv.db, "server", "port", port, 5), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text(srv.db, "player", "module", player_mod, INI_MAX_LINE), "Cfg error", 2); + RETURN_UNLESS(database_config_get_int((sqlite3 *) srv.db, "player", "autoclear", &autoclear), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "database", "kara_dir", kara_dir, PATH_MAX), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "server", "host", host, HOST_NAME_MAX), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "server", "port", port, 5), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "player", "module", player_mod, INI_MAX_LINE), "Cfg error", 2); if (kara_dir[strlen(kara_dir) - 1] != '/') strncat(kara_dir, "/", PATH_MAX - 1); srv.kara_prefix = kara_dir; - database_config_queue_default(srv.db); + database_config_queue_default((sqlite3 *) srv.db); srv.fds_max = 16; srv.fds = calloc(srv.fds_max, sizeof(struct pollfd)); @@ -783,9 +783,9 @@ lkt_listen(void) srv.fds_len = 1; if (autoclear) - database_queue_clear(srv.db); + database_queue_clear((sqlite3 *) srv.db); - RETURN_UNLESS(load_module_by_name(srv.db, player_mod, &srv.win), "Can't load module", 3); + RETURN_UNLESS(load_module_by_name((sqlite3 *) srv.db, player_mod, &srv.win), "Can't load module", 3); RETURN_UNLESS(srv.win.new(&srv.win), "Can't create window", 3); srv.win.attach(&srv.win, &srv); RETURN_IF(repo_new(&srv.repo, "kurisu", "https://kurisu.iiens.net"), "Failed to create repo", 4); @@ -796,7 +796,7 @@ lkt_listen(void) break; if (handle_idle_events(&srv) < 0) break; - srv.win.handle_events(&srv.win, srv.db, &srv.mpd_idle_events); + srv.win.handle_events(&srv.win, (sqlite3 *) srv.db, (enum mpd_idle_flag *) &srv.mpd_idle_events); handle_repo_hevents(&srv); }