summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe <bousset.rudy@gmail.com>2022-07-03 16:01:18 +0200
committerJoe <bousset.rudy@gmail.com>2022-07-03 16:01:18 +0200
commit747aefbc0c0d3a8d774689567d1bca232c7c0592 (patch)
tree459179aee4894ca5df1c454bc920ecd64d01fc89
parentWIP (diff)
downloadmpdview-747aefbc0c0d3a8d774689567d1bca232c7c0592.tar.gz
mpdview-747aefbc0c0d3a8d774689567d1bca232c7c0592.tar.bz2
mpdview-747aefbc0c0d3a8d774689567d1bca232c7c0592.tar.xz
mpdview-747aefbc0c0d3a8d774689567d1bca232c7c0592.tar.zst
mpdview-747aefbc0c0d3a8d774689567d1bca232c7c0592.zip
WIP
-rw-r--r--Makefile7
-rw-r--r--src/c_defines.h73
-rw-r--r--src/c_mpdview.c103
-rw-r--r--src/c_mpdview.h22
4 files changed, 155 insertions, 50 deletions
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 <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;