/* * Clears the playlist */ int Control::clear(Songlist * list) { bool r; assert(list != NULL); /* FIXME: error message */ if (list == _library) { return false; } EXIT_IDLE; pms->log(MSG_DEBUG, 0, "Clearing playlist\n"); if (list == _queue) { if ((r = mpd_run_clear(conn->h()))) { st->last_playlist = -1; } return r; } return mpd_run_playlist_clear(conn->h(), list->filename.c_str()); }
void songlist_clear(void) { int c = popup_confirm_dialog("Clear Confirm:", 0); if(!c) return; mpd_run_clear(conn); }
/* * pgmpc_clear * Clear current playlist. */ Datum pgmpc_clear(PG_FUNCTION_ARGS) { /* Now run the command */ pgmpc_init(); if (!mpd_run_clear(mpd_conn)) pgmpc_print_error(); pgmpc_reset(); PG_RETURN_VOID(); }
/*btn4_long_press*/ void btn4_long_press(void) { ncurrt_time = 0; system("killall aplay"); system("killall xfchat"); if (nmpc_list >= 7) { nmpc_list = 0; } else { nmpc_list++; } char* p = playlists[nmpc_list]; pthread_mutex_lock(&mutex); mpd_run_clear(conn); mpd_run_load(conn, p); mpd_run_play(conn); pthread_mutex_unlock(&mutex); }
/*btn2_long_press*/ void btn2_long_press(void) { ncurrt_time = 0; system("killall aplay"); system("killall xfchat"); if (nmpc_list <= 0) { nmpc_list = 7; } else { nmpc_list--; } char* p = playlists[nmpc_list]; pthread_mutex_lock(&mutex); mpd_run_clear(conn); //printf("nd btn4_long_press nmpc_list: %d, p1: %s\n", nmpc_list, p); mpd_run_load(conn, p); mpd_run_play(conn); pthread_mutex_unlock(&mutex); }
int callback_mpd(struct mg_connection *c) { enum mpd_cmd_ids cmd_id = get_cmd_id(c->content); size_t n = 0; unsigned int uint_buf, uint_buf_2; int int_buf; char *p_charbuf = NULL, *token; if(cmd_id == -1) return MG_TRUE; if(mpd.conn_state != MPD_CONNECTED && cmd_id != MPD_API_SET_MPDHOST && cmd_id != MPD_API_GET_MPDHOST && cmd_id != MPD_API_SET_MPDPASS && cmd_id != MPD_API_GET_DIRBLEAPITOKEN) return MG_TRUE; switch(cmd_id) { case MPD_API_UPDATE_DB: mpd_run_update(mpd.conn, NULL); break; case MPD_API_SET_PAUSE: mpd_run_toggle_pause(mpd.conn); break; case MPD_API_SET_PREV: mpd_run_previous(mpd.conn); break; case MPD_API_SET_NEXT: mpd_run_next(mpd.conn); break; case MPD_API_SET_PLAY: mpd_run_play(mpd.conn); break; case MPD_API_SET_STOP: mpd_run_stop(mpd.conn); break; case MPD_API_RM_ALL: mpd_run_clear(mpd.conn); break; case MPD_API_RM_TRACK: if(sscanf(c->content, "MPD_API_RM_TRACK,%u", &uint_buf)) mpd_run_delete_id(mpd.conn, uint_buf); break; case MPD_API_PLAY_TRACK: if(sscanf(c->content, "MPD_API_PLAY_TRACK,%u", &uint_buf)) mpd_run_play_id(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_RANDOM: if(sscanf(c->content, "MPD_API_TOGGLE_RANDOM,%u", &uint_buf)) mpd_run_random(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_REPEAT: if(sscanf(c->content, "MPD_API_TOGGLE_REPEAT,%u", &uint_buf)) mpd_run_repeat(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_CONSUME: if(sscanf(c->content, "MPD_API_TOGGLE_CONSUME,%u", &uint_buf)) mpd_run_consume(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_SINGLE: if(sscanf(c->content, "MPD_API_TOGGLE_SINGLE,%u", &uint_buf)) mpd_run_single(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_CROSSFADE: if(sscanf(c->content, "MPD_API_TOGGLE_CROSSFADE,%u", &uint_buf)) mpd_run_crossfade(mpd.conn, uint_buf); break; case MPD_API_GET_OUTPUTS: mpd.buf_size = mpd_put_outputs(mpd.buf, 1); c->callback_param = NULL; mpd_notify_callback(c, MG_POLL); break; case MPD_API_TOGGLE_OUTPUT: if (sscanf(c->content, "MPD_API_TOGGLE_OUTPUT,%u,%u", &uint_buf, &uint_buf_2)) { if (uint_buf_2) mpd_run_enable_output(mpd.conn, uint_buf); else mpd_run_disable_output(mpd.conn, uint_buf); } break; case MPD_API_SET_VOLUME: if(sscanf(c->content, "MPD_API_SET_VOLUME,%ud", &uint_buf) && uint_buf <= 100) mpd_run_set_volume(mpd.conn, uint_buf); break; case MPD_API_SET_SEEK: if(sscanf(c->content, "MPD_API_SET_SEEK,%u,%u", &uint_buf, &uint_buf_2)) mpd_run_seek_id(mpd.conn, uint_buf, uint_buf_2); break; case MPD_API_GET_QUEUE: if(sscanf(c->content, "MPD_API_GET_QUEUE,%u", &uint_buf)) n = mpd_put_queue(mpd.buf, uint_buf); break; case MPD_API_GET_BROWSE: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_GET_BROWSE")) goto out_browse; uint_buf = strtoul(strtok(NULL, ","), NULL, 10); if((token = strtok(NULL, ",")) == NULL) goto out_browse; free(p_charbuf); p_charbuf = strdup(c->content); n = mpd_put_browse(mpd.buf, get_arg2(p_charbuf), uint_buf); out_browse: free(p_charbuf); break; case MPD_API_ADD_TRACK: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_ADD_TRACK")) goto out_add_track; if((token = strtok(NULL, ",")) == NULL) goto out_add_track; free(p_charbuf); p_charbuf = strdup(c->content); mpd_run_add(mpd.conn, get_arg1(p_charbuf)); out_add_track: free(p_charbuf); break; case MPD_API_ADD_PLAY_TRACK: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_ADD_PLAY_TRACK")) goto out_play_track; if((token = strtok(NULL, ",")) == NULL) goto out_play_track; free(p_charbuf); p_charbuf = strdup(c->content); int_buf = mpd_run_add_id(mpd.conn, get_arg1(p_charbuf)); if(int_buf != -1) mpd_run_play_id(mpd.conn, int_buf); out_play_track: free(p_charbuf); break; case MPD_API_ADD_PLAYLIST: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_ADD_PLAYLIST")) goto out_playlist; if((token = strtok(NULL, ",")) == NULL) goto out_playlist; free(p_charbuf); p_charbuf = strdup(c->content); mpd_run_load(mpd.conn, get_arg1(p_charbuf)); out_playlist: free(p_charbuf); break; case MPD_API_SAVE_QUEUE: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_SAVE_QUEUE")) goto out_save_queue; if((token = strtok(NULL, ",")) == NULL) goto out_save_queue; free(p_charbuf); p_charbuf = strdup(c->content); mpd_run_save(mpd.conn, get_arg1(p_charbuf)); out_save_queue: free(p_charbuf); break; case MPD_API_SEARCH: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_SEARCH")) goto out_search; if((token = strtok(NULL, ",")) == NULL) goto out_search; free(p_charbuf); p_charbuf = strdup(c->content); n = mpd_search(mpd.buf, get_arg1(p_charbuf)); out_search: free(p_charbuf); break; #ifdef WITH_MPD_HOST_CHANGE /* Commands allowed when disconnected from MPD server */ case MPD_API_SET_MPDHOST: int_buf = 0; p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_SET_MPDHOST")) goto out_host_change; if((int_buf = strtol(strtok(NULL, ","), NULL, 10)) <= 0) goto out_host_change; if((token = strtok(NULL, ",")) == NULL) goto out_host_change; strncpy(mpd.host, token, sizeof(mpd.host)); mpd.port = int_buf; mpd.conn_state = MPD_RECONNECT; free(p_charbuf); return MG_TRUE; out_host_change: free(p_charbuf); break; case MPD_API_GET_MPDHOST: n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"mpdhost\", \"data\": " "{\"host\" : \"%s\", \"port\": \"%d\", \"passwort_set\": %s}" "}", mpd.host, mpd.port, mpd.password ? "true" : "false"); break; case MPD_API_GET_DIRBLEAPITOKEN: n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"dirbleapitoken\", \"" "data\": \"%s\"}", dirble_api_token); break; case MPD_API_SET_MPDPASS: p_charbuf = strdup(c->content); if(strcmp(strtok(p_charbuf, ","), "MPD_API_SET_MPDPASS")) goto out_set_pass; if((token = strtok(NULL, ",")) == NULL) goto out_set_pass; if(mpd.password) free(mpd.password); mpd.password = strdup(token); mpd.conn_state = MPD_RECONNECT; free(p_charbuf); return MG_TRUE; out_set_pass: free(p_charbuf); break; #endif } if(mpd.conn_state == MPD_CONNECTED && mpd_connection_get_error(mpd.conn) != MPD_ERROR_SUCCESS) { n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"error\", \"data\": \"%s\"}", mpd_connection_get_error_message(mpd.conn)); /* Try to recover error */ if (!mpd_connection_clear_error(mpd.conn)) mpd.conn_state = MPD_FAILURE; } if(n > 0) mg_websocket_write(c, 1, mpd.buf, n); return MG_TRUE; }
/*The thread of I2C*/ void * I2CThread(void *arg) { int res = 0; while (1) { res = 0; if (i2c_file > 0) { if (!bread_register) { res = i2c_smbus_read_word_data(i2c_file, REGISTER3); switch (res) { case SWITCH_BTN_SHUT_DWON: { printf("nd I2CThread SWITCH_BTN_SHUT_DWON: 0x%0*x\n", 2, res); break; } case SHUT_DWON: { printf("nd I2CThread BTN3 SHUT_DWON: 0x%0*x\n", 2, res); break; } case AUTO_SLEEP: { printf("nd I2CThread AUTO_SLEEP: 0x%0*x\n", 2, res); break; } } bread_register = true; } res = i2c_smbus_read_word_data(i2c_file, REGISTER2); //printf("md I2CThread i2c_file res: 0x%0*x\n", 2, res); switch (res) { case BTN1_SHORT_PRESS: { printf("nd I2CThread BTN1_SHORT_PRESS: 0x%0*x\n", 2, res); btn1_short_press(); break; } case BTN1_LONG_PRESS: { printf("nd I2CThread BTN1_LONG_PRESS: 0x%0*x\n", 2, res); btn1_long_press(); break; } case BTN1_AUDIO_SPPEK_ARECORD: { printf("nd BTN1_AUDIO_SPPEK_ARECORD :: 0x%0*x\n", 2, res); btn1_audio_sppek_arecord(res); break; } case BTN2_SHORT_PRESS: { printf("nd I2CThread BTN2_SHORT_PRESS: 0x%0*x\n", 2, res); btn2_short_press(); break; } case BTN2_LONG_PRESS: { printf("nd I2CThread BTN2_LONG_PRESS: 0x%0*x\n", 2, res); btn2_long_press(); break; } case BTN3_SHORT_PRESS: { printf("nd I2CThread BTN3_SHORT_PRESS: 0x%0*x\n", 2, res); btn3_short_press(); break; } case BTN3_LONG_PRESS: { printf("nd I2CThread BTN3_LONG_PRESS: 0x%0*x\n", 2, res); btn3_long_press(); break; } case BTN4_SHORT_PRESS: { printf("nd I2CThread BTN4_SHORT_PRESS: 0x%0*x\n", 2, res); btn4_short_press(); break; } case BTN4_LONG_PRESS: { printf("nd I2CThread BTN4_LONG_PRESS: 0x%0*x\n", 2, res); btn4_long_press(); break; } case BTN5_SHORT_PRESS: { printf("nd I2CThread BTN5_SHORT_PRESS: 0x%0*x\n", 2, res); btn5_short_press(); break; } case BTN5_LONG_PRESS: { printf("nd I2CThread BTN5_LONG_PRESS: 0x%0*x\n", 2, res); btn5_long_press(); break; } case BTN5_QUESTION_ANSWER_ARECORD: { btn5_question_answer_arecord(res); break; } case PEN_START: { #ifdef PEN_SUPPORT printf("nd I2CThread PEN_START: 0x%0*x\n", 2, res); int nValue = 0, nValue8 = 0, nValue9 = 0, nValue10 = 0, nValue89 = 0; nValue10 = i2c_smbus_read_word_data(i2c_file, REGISTER10); printf("nd I2CThread REGISTER10: 0x%0*x, %d\n", 2, nValue10, nValue10); nValue9 = i2c_smbus_read_word_data(i2c_file, REGISTER9); printf("nd I2CThread REGISTER9: 0x%0*x, %d\n", 2, nValue9, nValue9); nValue8 = i2c_smbus_read_word_data(i2c_file, REGISTER8); printf("nd I2CThread REGISTER8: 0x%0*x, %d\n", 2, nValue8, nValue8); nValue89 = nValue8 | ((nValue9 << 8) & 0xff00); printf("nd I2CThread nValue89: %x, nValue89: %d, \n", nValue89, nValue89); nValue = nValue8 | ((nValue9 << 8) & 0xff00) | ((nValue10 << 16) & 0xff0000); printf("nd I2CThread nValue: %x, \n", nValue, nValue); if (nValue == 0x60fff8) { pthread_mutex_lock(&mutex); mpd_run_pause(conn, true); mpd_run_clear(conn); mpd_run_load(conn, "ljyy.lst"); pthread_mutex_unlock(&mutex); } else if (nValue == 0x60fff7) { } else if (nValue89 > 52900) { int nPos = nValue89 - 52901; printf("nd I2CThread nPos: %d, \n", nPos); pthread_mutex_lock(&mutex); mpd_run_pause(conn, true); mpd_run_single(conn, true); mpd_run_play_pos(conn, nPos); pthread_mutex_unlock(&mutex); } res = i2c_smbus_read_word_data(i2c_file, REGISTER2); printf("nd I2CThread REGISTER2: 0x%0*x\n", 2, res); #endif break; } case NOT_BTN_EVENT: { break; } } } else { printf("nd I2CThread i2c_file: %d\n", i2c_file); InitI2CDev(); } usleep(50*1000); } }
/*btn3_short_press*/ void btn3_short_press(void) { int res = json_type_null; json_object * pjson_obj_read = NULL; struct mpd_status *status = NULL; ncurrt_time = 0; system("killall aplay"); system("killall xfchat"); pthread_rwlock_wrlock(&json_rwlock_voice); pjson_obj_read = json_object_from_file(PLAY_VOICE_JSON_PATH); pthread_rwlock_unlock(&json_rwlock_voice); res = json_object_get_type(pjson_obj_read); printf("json_type: %u \n", json_object_get_type(pjson_obj_read)); // printf("json_length: %u \n", json_object_array_length(pjson_obj_read)); json_object_put(pjson_obj_read); if ((json_type_array == res) && (0 < json_object_array_length(pjson_obj_read)) && (!bplay_audio)) { printf("nd btn3_short_press ret: %d, bplay_audio: %d\n", res, bplay_audio); my_mpd_run_pause(); bplay_audio = true; } else { int quere_len = 0; int online_size = 0; bplay_audio = false; online_size = get_file_size(ONLINE_LIST_PATH); if (online_size > 0) { quere_len = get_mpc_quere_len(conn); pthread_mutex_lock(&mutex); if (quere_len > 0) { mpd_run_stop(conn); mpd_run_clear(conn); } bool mpc_load = mpd_run_load(conn, "online.lst"); bool mpc_list_clear = mpd_run_playlist_clear(conn, "online.lst"); printf("nd btn3_short_press mpc_load: %d, mpc_list_clear: %d\n", mpc_load, mpc_list_clear); pthread_mutex_unlock(&mutex); res = i2c_smbus_write_byte_data(i2c_file, 0x00, BLUE_OFF); if (res < 0) { printf("nd btn3_short_press i2c_smbus_write_byte_data BLUE_OFF failed, ret: %d\n", res); } } quere_len = get_mpc_quere_len(conn); if (quere_len > 0) { printf("nd btn3_short_press get_mpc_quere_len quere_len: %d\n", quere_len); pthread_mutex_lock(&mutex); status = mpd_run_status(conn); if (!status) { printf("nd btn3_short_press mpd_run_status2 %s \n", mpd_connection_get_error_message(conn)); } else { if (mpd_status_get_state(status) == MPD_STATE_PLAY) { printf("nd btn3_short_press mpd_status_get_state MPD_STATE_PLAY\n"); mpd_run_pause(conn, true); } else { printf("nd btn3_short_press mpd_status_get_state other state\n"); mpd_run_play(conn); } mpd_status_free(status); } pthread_mutex_unlock(&mutex); } } }
void Connection::ClearMainPlaylist() { prechecksNoCommandsList(); mpd_run_clear(m_connection.get()); checkErrors(); }
/* * returns: 0 - error; 1 - ok */ int mqr_update_playlist() { struct mpd_entity *entity; const struct mpd_directory *dir; // const struct mpd_song *song; const char *path; char *toplevel_dirs[256]; int array_sz = 0; int i; // Clear current playlist (QUEUE) if (!mpd_run_clear(conn)) { fprintf(stderr, "ERROR: MPD: Unable to clear the current playlist\n"); } else if (DEBUG) fprintf(stderr, "DEBUG: [mgr-thread] mpd: playlist cleared\n"); // list items & add to the playlist mpd_send_list_all(conn, NULL); while ((entity = mpd_recv_entity(conn)) != NULL) { path = NULL; switch (mpd_entity_get_type(entity)) { case MPD_ENTITY_TYPE_UNKNOWN: break; case MPD_ENTITY_TYPE_SONG: // ignore top level items // song = mpd_entity_get_song(entity); // path = mpd_song_get_uri(song); // if (strchr(path, '/') == NULL) { // printf("FOUND SON %s\n", path); // } break; case MPD_ENTITY_TYPE_DIRECTORY: // check if has subfolders dir = mpd_entity_get_directory(entity); path = mpd_directory_get_path(dir); if (strchr(path, '/') != NULL) path = NULL; break; case MPD_ENTITY_TYPE_PLAYLIST: break; } if (path != NULL && array_sz < 255) { toplevel_dirs[ array_sz++ ] = strdup( path ); } mpd_entity_free(entity); } mpd_response_finish(conn); for (i = 0; i < array_sz; i++) { if (!mpd_run_add(conn, toplevel_dirs[i])) { fprintf(stderr, "ERROR: MPD: Unable to add item to the file playlist: %s\n", toplevel_dirs[i]); continue; } if (DEBUG) fprintf(stderr, "DEBUG: [mgr-thread]: mpd: entry added to the playlist: %s\n", toplevel_dirs[i]); free( toplevel_dirs[i] ); } return 1; }
int callback_mpd(struct mg_connection *c) { enum mpd_cmd_ids cmd_id = get_cmd_id(c->content); size_t n = 0; unsigned int uint_buf, uint_buf_2; int int_buf; char *p_charbuf = NULL; if(cmd_id == -1) return MG_CLIENT_CONTINUE; if(mpd.conn_state != MPD_CONNECTED && cmd_id != MPD_API_SET_MPDHOST && cmd_id != MPD_API_GET_MPDHOST && cmd_id != MPD_API_SET_MPDPASS) return MG_CLIENT_CONTINUE; mpd_connection_set_timeout(mpd.conn, 10000); switch(cmd_id) { case MPD_API_UPDATE_DB: mpd_run_update(mpd.conn, NULL); break; case MPD_API_SET_PAUSE: mpd_run_toggle_pause(mpd.conn); break; case MPD_API_SET_PREV: mpd_run_previous(mpd.conn); break; case MPD_API_SET_NEXT: mpd_run_next(mpd.conn); break; case MPD_API_SET_PLAY: mpd_run_play(mpd.conn); break; case MPD_API_SET_STOP: mpd_run_stop(mpd.conn); break; case MPD_API_RM_ALL: mpd_run_clear(mpd.conn); break; case MPD_API_RM_TRACK: if(sscanf(c->content, "MPD_API_RM_TRACK,%u", &uint_buf)) mpd_run_delete_id(mpd.conn, uint_buf); break; case MPD_API_PLAY_TRACK: if(sscanf(c->content, "MPD_API_PLAY_TRACK,%u", &uint_buf)) mpd_run_play_id(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_RANDOM: if(sscanf(c->content, "MPD_API_TOGGLE_RANDOM,%u", &uint_buf)) mpd_run_random(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_REPEAT: if(sscanf(c->content, "MPD_API_TOGGLE_REPEAT,%u", &uint_buf)) mpd_run_repeat(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_CONSUME: if(sscanf(c->content, "MPD_API_TOGGLE_CONSUME,%u", &uint_buf)) mpd_run_consume(mpd.conn, uint_buf); break; case MPD_API_TOGGLE_SINGLE: if(sscanf(c->content, "MPD_API_TOGGLE_SINGLE,%u", &uint_buf)) mpd_run_single(mpd.conn, uint_buf); break; case MPD_API_SET_VOLUME: if(sscanf(c->content, "MPD_API_SET_VOLUME,%ud", &uint_buf) && uint_buf <= 100) mpd_run_set_volume(mpd.conn, uint_buf); break; case MPD_API_SET_SEEK: if(sscanf(c->content, "MPD_API_SET_SEEK,%u,%u", &uint_buf, &uint_buf_2)) mpd_run_seek_id(mpd.conn, uint_buf, uint_buf_2); break; case MPD_API_GET_QUEUE: if(sscanf(c->content, "MPD_API_GET_QUEUE,%u", &uint_buf)) n = mpd_put_queue(mpd.buf, uint_buf); break; case MPD_API_GET_BROWSE: if(sscanf(c->content, "MPD_API_GET_BROWSE,%u,%m[^\t\n]", &uint_buf, &p_charbuf) && p_charbuf != NULL) { n = mpd_put_browse(mpd.buf, p_charbuf, uint_buf); free(p_charbuf); } break; case MPD_API_ADD_TRACK: if(sscanf(c->content, "MPD_API_ADD_TRACK,%m[^\t\n]", &p_charbuf) && p_charbuf != NULL) { mpd_run_add(mpd.conn, p_charbuf); free(p_charbuf); } break; case MPD_API_ADD_PLAY_TRACK: if(sscanf(c->content, "MPD_API_ADD_PLAY_TRACK,%m[^\t\n]", &p_charbuf) && p_charbuf != NULL) { int_buf = mpd_run_add_id(mpd.conn, p_charbuf); if(int_buf != -1) mpd_run_play_id(mpd.conn, int_buf); free(p_charbuf); } break; case MPD_API_ADD_PLAYLIST: if(sscanf(c->content, "MPD_API_ADD_PLAYLIST,%m[^\t\n]", &p_charbuf) && p_charbuf != NULL) { mpd_run_load(mpd.conn, p_charbuf); free(p_charbuf); } break; case MPD_API_SEARCH: if(sscanf(c->content, "MPD_API_SEARCH,%m[^\t\n]", &p_charbuf) && p_charbuf != NULL) { n = mpd_search(mpd.buf, p_charbuf); free(p_charbuf); } break; #ifdef WITH_MPD_HOST_CHANGE /* Commands allowed when disconnected from MPD server */ case MPD_API_SET_MPDHOST: int_buf = 0; if(sscanf(c->content, "MPD_API_SET_MPDHOST,%d,%m[^\t\n ]", &int_buf, &p_charbuf) && p_charbuf != NULL && int_buf > 0) { strncpy(mpd.host, p_charbuf, sizeof(mpd.host)); free(p_charbuf); mpd.port = int_buf; mpd.conn_state = MPD_RECONNECT; return MG_CLIENT_CONTINUE; } break; case MPD_API_GET_MPDHOST: n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"mpdhost\", \"data\": " "{\"host\" : \"%s\", \"port\": \"%d\", \"passwort_set\": %s}" "}", mpd.host, mpd.port, mpd.password ? "true" : "false"); break; case MPD_API_SET_MPDPASS: if(sscanf(c->content, "MPD_API_SET_MPDPASS,%m[^\t\n ]", &p_charbuf)) { if(mpd.password) free(mpd.password); mpd.password = p_charbuf; mpd.conn_state = MPD_RECONNECT; return MG_CLIENT_CONTINUE; } break; #endif } if(mpd.conn_state == MPD_CONNECTED && mpd_connection_get_error(mpd.conn) != MPD_ERROR_SUCCESS) { n = snprintf(mpd.buf, MAX_SIZE, "{\"type\":\"error\", \"data\": \"%s\"}", mpd_connection_get_error_message(mpd.conn)); /* Try to recover error */ if (!mpd_connection_clear_error(mpd.conn)) mpd.conn_state = MPD_FAILURE; } if(n > 0) mg_websocket_write(c, 1, mpd.buf, n); return MG_CLIENT_CONTINUE; }