diff options
| -rw-r--r-- | Makefile | 7 | ||||
| -rw-r--r-- | src/c_defines.h | 73 | ||||
| -rw-r--r-- | src/c_mpdview.c | 103 | ||||
| -rw-r--r-- | src/c_mpdview.h | 22 | 
4 files changed, 155 insertions, 50 deletions
| @@ -32,8 +32,10 @@ SRCS		:= ${SRCS:S/^/${SRCS_DIR}\//g}  OBJS		:= ${SRCS:=.o}  # OBJS		:= ${OBJS:S/${SRCS_DIR}/${OBJS_DIR}/g} -# INCS		:=  -# INCS		+= ${SRCS:.c=.h} +INCS		:= c_defines +INCS		:= ${INCS:S/$/.h/g} +INCS		:= ${INCS:S/^/${SRCS_DIR}\//g} +INCS		+= ${SRCS:.c=.h}  NAME		:= mpdview @@ -44,7 +46,6 @@ CFLAGS		+= -Wextra  CFLAGS		+= -Werror  CFLAGS		+= -pedantic  CFLAGS		+= -isystem/usr/local/include -# CFLAGS		+= -isystem${SRCS_DIR}/  CFLAGS		+= -glldb  # CFLAGS		+= -march=native -O2 -pipe diff --git a/src/c_defines.h b/src/c_defines.h new file mode 100644 index 0000000..923cbb5 --- /dev/null +++ b/src/c_defines.h @@ -0,0 +1,73 @@ +/* + * ======================== + * =====    =============== + * ======  ================ + * ======  ================ + * ======  ====   ====   == + * ======  ===     ==  =  = + * ======  ===  =  ==     = + * =  ===  ===  =  ==  ==== + * =  ===  ===  =  ==  =  = + * ==     =====   ====   == + * ======================== + * + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2022 Joe + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of the organization nor the + *    names of its contributors may be used to endorse or promote products + *    derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JOE ''AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL JOE BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * mpdview: src/c_defines.h + * Sun, 03 Jul 2022 15:31:30 +0200 + * Joe + */ + +#ifndef __C_DEFINES_H__ +#define __C_DEFINES_H__ + +typedef unsigned char	bool_t; +typedef unsigned char	u8_t; +typedef unsigned short	u16_t; +typedef unsigned int	u32_t; +typedef unsigned long	u64_t; +typedef char			i8_t; +typedef short			i16_t; +typedef int				i32_t; +typedef long			i64_t; +typedef void*			ptr_t; + +enum bool_e { +	FALSE, +	TRUE +}; + +enum ret_e { +	RET_OK, +	RET_ERR +}; + +#define BUFF_SIZE 262144 +#define PROGNAME "mpdview" + +#endif /* __C_DEFINES_H__ */ diff --git a/src/c_mpdview.c b/src/c_mpdview.c index cfad0be..aa0c008 100644 --- a/src/c_mpdview.c +++ b/src/c_mpdview.c @@ -59,6 +59,7 @@  #include <mpd/song.h>  #include <mpd/status.h> +#include "c_defines.h"  #include "c_mpdview.h"  static struct mpdview_s * @@ -74,16 +75,71 @@ c_create_view(void)  	return (view);  } -static unsigned char -c_connect_mpd(struct mpdview_s* view) +static u8_t +c_connect_mpd(struct mpdview_s* v)  { -	view->conn = mpd_connection_new(NULL, 0, 3000); -	if (mpd_connection_get_error(view->conn) != MPD_ERROR_SUCCESS) { +	v->conn = mpd_connection_new(NULL, 0, 3000); +	if (mpd_connection_get_error(v->conn) != MPD_ERROR_SUCCESS) {  		dprintf(  			STDERR_FILENO,  			"%s: %s\n",  			PROGNAME, -			mpd_connection_get_error_message(view->conn) +			mpd_connection_get_error_message(v->conn) +			); +		return (RET_ERR); +	} +	return (RET_OK); +} + +static void +c_destroy_mpdview(struct mpdview_s** v) +{ +	(*v)->state = MPD_STATE_UNKNOWN; +	if ((*v)->song != NULL) { +		mpd_song_free((*v)->song); +	} +	(*v)->song = NULL; +	if ((*v)->status != NULL) { +		mpd_status_free((*v)->status); +	} +	(*v)->status = NULL; +	if ((*v)->conn != NULL) { +		mpd_connection_free((*v)->conn); +	} +	(*v)->conn = NULL; +	free(*v); +	*v = NULL; +} + +static u8_t +c_get_mpd_status(struct mpdview_s* v) +{ +	v->status = mpd_run_status(v->conn); +	if (v->status == NULL) { +		dprintf( +			STDERR_FILENO, +			"%s: %s\n", +			PROGNAME, +			mpd_status_get_error(v->status) +			); +		return (RET_ERR); +	} +	v->state = mpd_status_get_state(v->status); +	mpd_status_free(v->status); +	v->status = NULL; +	return (RET_OK); +} + +static u8_t +c_get_mpd_song(struct mpdview_s* v) +{ +	v->song = mpd_run_current_song(v->conn); +	if (v->song == NULL) { +		dprintf( +			STDERR_FILENO, +			"%s: %s\n", +			PROGNAME, +			"Could not get song"  			);  		return (RET_ERR);  	} @@ -97,7 +153,7 @@ main   const char*	envp[])  {  	struct mpdview_s* view; -	int read_size; +	i32_t read_size;  	char buff[BUFF_SIZE];  	(void)argc; @@ -108,25 +164,21 @@ main  		return (EXIT_FAILURE);  	}  	if (c_connect_mpd(view) != RET_OK) { -		if (view->conn != NULL) { -			mpd_connection_free(view->conn); -		} -		view->conn = NULL; -		free(view); -		view = NULL; +		c_destroy_mpdview(&view); +		return (EXIT_FAILURE); +	} +	if (c_get_mpd_status(view) == RET_ERR) { +		c_destroy_mpdview(&view);  		return (EXIT_FAILURE);  	} -	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); +		if (c_get_mpd_song(view) == RET_ERR) { +			c_destroy_mpdview(&view); +			return (EXIT_FAILURE); +		} +		dprintf(STDOUT_FILENO, "%s\n", mpd_song_get_uri(view->song)); +		c_destroy_mpdview(&view); +		return (EXIT_SUCCESS);  		mpd_response_finish(view->conn);  		bzero(buff, BUFF_SIZE);  		read_size = mpd_run_albumart(view->conn, mpd_song_get_uri(view->song), 0, buff, BUFF_SIZE); @@ -139,11 +191,6 @@ main  		mpd_song_free(view->song);  		view->song = NULL;  	} -	if (view->conn != NULL) { -		mpd_connection_free(view->conn); -	} -	view->conn = NULL; -	free(view); -	view = NULL; +	c_destroy_mpdview(&view);  	return (EXIT_SUCCESS);  } diff --git a/src/c_mpdview.h b/src/c_mpdview.h index d3940be..25527ab 100644 --- a/src/c_mpdview.h +++ b/src/c_mpdview.h @@ -46,25 +46,9 @@  #ifndef __C_MPDVIEW_H__  #define __C_MPDVIEW_H__ -/* #include <mpd/connection.h> */ -/* #include <mpd/song.h> */ -/* #include <mpd/status.h> */ - -#define BUFF_SIZE 262144 -#define PROGNAME "mpdview" - -typedef char bool_t; -typedef void* ptr_t; - -enum bool_e { -	FALSE, -	TRUE -}; - -enum ret_e { -	RET_OK, -	RET_ERR -}; +#include <mpd/connection.h> +#include <mpd/song.h> +#include <mpd/status.h>  struct mpdview_s {  	struct mpd_connection* conn; | 
