From 6ef52d1894643aeb4a8c5bfc8ab48738c1b793ff Mon Sep 17 00:00:00 2001
From: Joe <bousset.rudy@gmail.com>
Date: Sun, 3 Jul 2022 15:25:47 +0200
Subject: WIP

---
 Makefile        |  6 ++--
 src/c_mpdview.c | 89 ++++++++++++++++++++++++++++++++++++++-------------------
 src/c_mpdview.h | 16 +++++++++++
 3 files changed, 80 insertions(+), 31 deletions(-)

diff --git a/Makefile b/Makefile
index 6c9bd85..858de08 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@
 # ========================
 #
 # mpdview: Makefile
-# Sun, 03 Jul 2022 04:09:41 +0200
+# Sun, 03 Jul 2022 15:15:01 +0200
 # Joe
 #
 # BSD Makefile
@@ -32,7 +32,8 @@ SRCS		:= ${SRCS:S/^/${SRCS_DIR}\//g}
 OBJS		:= ${SRCS:=.o}
 # OBJS		:= ${OBJS:S/${SRCS_DIR}/${OBJS_DIR}/g}
 
-INCS		:= ${SRCS:.c=.h}
+# INCS		:= 
+# INCS		+= ${SRCS:.c=.h}
 
 NAME		:= mpdview
 
@@ -43,6 +44,7 @@ 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_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);
 }
diff --git a/src/c_mpdview.h b/src/c_mpdview.h
index 4848997..d3940be 100644
--- a/src/c_mpdview.h
+++ b/src/c_mpdview.h
@@ -46,6 +46,10 @@
 #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"
 
@@ -57,4 +61,16 @@ enum bool_e {
 	TRUE
 };
 
+enum ret_e {
+	RET_OK,
+	RET_ERR
+};
+
+struct mpdview_s {
+	struct mpd_connection* conn;
+	struct mpd_status* status;
+	struct mpd_song* song;
+	enum mpd_state state;
+};
+
 #endif /* __C_MPDVIEW_H__ */
-- 
cgit v1.2.3