diff options
Diffstat (limited to 'src/c_mpdview.c')
-rw-r--r-- | src/c_mpdview.c | 89 |
1 files changed, 60 insertions, 29 deletions
diff --git a/src/c_mpdview.c b/src/c_mpdview.c index 0a356fc..cfad0be 100644 --- a/src/c_mpdview.c +++ b/src/c_mpdview.c @@ -61,58 +61,89 @@ #include "c_mpdview.h" +static struct mpdview_s * +c_create_view(void) +{ + struct mpdview_s* view; + + view = (struct mpdview_s*)malloc(sizeof(struct mpdview_s)); + view->conn = NULL; + view->status = NULL; + view->song = NULL; + view->state = MPD_STATE_UNKNOWN; + return (view); +} + +static unsigned char +c_connect_mpd(struct mpdview_s* view) +{ + view->conn = mpd_connection_new(NULL, 0, 3000); + if (mpd_connection_get_error(view->conn) != MPD_ERROR_SUCCESS) { + dprintf( + STDERR_FILENO, + "%s: %s\n", + PROGNAME, + mpd_connection_get_error_message(view->conn) + ); + return (RET_ERR); + } + return (RET_OK); +} + int main (int argc, const char* argv[], const char* envp[]) { - struct mpd_connection* conn; - struct mpd_status* status; - struct mpd_song* song; - enum mpd_state state; + struct mpdview_s* view; int read_size; char buff[BUFF_SIZE]; (void)argc; (void)argv; (void)envp; - state = MPD_STATE_UNKNOWN; - conn = mpd_connection_new(NULL, 0, 3000); - if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) { - dprintf(STDERR_FILENO, "%s: %s\n", PROGNAME, mpd_connection_get_error_message(conn)); - if (conn != NULL) { - mpd_connection_free(conn); + view = c_create_view(); + if (view == NULL) { + return (EXIT_FAILURE); + } + if (c_connect_mpd(view) != RET_OK) { + if (view->conn != NULL) { + mpd_connection_free(view->conn); } - conn = NULL; + view->conn = NULL; + free(view); + view = NULL; return (EXIT_FAILURE); } - mpd_command_list_begin(conn, TRUE); - mpd_send_status(conn); - mpd_send_current_song(conn); - mpd_command_list_end(conn); - status = mpd_recv_status(conn); - state = mpd_status_get_state(status); - mpd_status_free(status); - status = NULL; - if (state == MPD_STATE_PLAY || state == MPD_STATE_PAUSE) { - mpd_response_next(conn); - song = mpd_recv_song(conn); - mpd_response_finish(conn); + mpd_command_list_begin(view->conn, TRUE); + mpd_send_status(view->conn); + mpd_send_current_song(view->conn); + mpd_command_list_end(view->conn); + view->status = mpd_recv_status(view->conn); + view->state = mpd_status_get_state(view->status); + mpd_status_free(view->status); + view->status = NULL; + if (view->state == MPD_STATE_PLAY || view->state == MPD_STATE_PAUSE) { + mpd_response_next(view->conn); + view->song = mpd_recv_song(view->conn); + mpd_response_finish(view->conn); bzero(buff, BUFF_SIZE); - read_size = mpd_run_albumart(conn, mpd_song_get_uri(song), 0, buff, BUFF_SIZE); + read_size = mpd_run_albumart(view->conn, mpd_song_get_uri(view->song), 0, buff, BUFF_SIZE); if (read_size > -1) { write(STDOUT_FILENO, buff, read_size); } else { dprintf(STDOUT_FILENO, "Exit\n"); } - mpd_song_free(song); - song = NULL; + mpd_song_free(view->song); + view->song = NULL; } - if (conn != NULL) { - mpd_connection_free(conn); + if (view->conn != NULL) { + mpd_connection_free(view->conn); } - conn = NULL; + view->conn = NULL; + free(view); + view = NULL; return (EXIT_SUCCESS); } |