From 747aefbc0c0d3a8d774689567d1bca232c7c0592 Mon Sep 17 00:00:00 2001 From: Joe Date: Sun, 3 Jul 2022 16:01:18 +0200 Subject: WIP --- Makefile | 7 ++-- src/c_defines.h | 73 +++++++++++++++++++++++++++++++++++++++ src/c_mpdview.c | 103 +++++++++++++++++++++++++++++++++++++++++--------------- src/c_mpdview.h | 22 ++---------- 4 files changed, 155 insertions(+), 50 deletions(-) create mode 100644 src/c_defines.h diff --git a/Makefile b/Makefile index 858de08..7dbdb7c 100644 --- a/Makefile +++ b/Makefile @@ -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 #include +#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 */ -/* #include */ -/* #include */ - -#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 +#include +#include struct mpdview_s { struct mpd_connection* conn; -- cgit v1.2.3