summaryrefslogtreecommitdiff
path: root/src/fruits/cmsrv
diff options
context:
space:
mode:
Diffstat (limited to 'src/fruits/cmsrv')
-rw-r--r--src/fruits/cmsrv/cmsrv.c51
1 files changed, 37 insertions, 14 deletions
diff --git a/src/fruits/cmsrv/cmsrv.c b/src/fruits/cmsrv/cmsrv.c
index 80d7c03..6f00a05 100644
--- a/src/fruits/cmsrv/cmsrv.c
+++ b/src/fruits/cmsrv/cmsrv.c
@@ -1,8 +1,9 @@
-#define CAMU_LOCAL_SOCKET
+#define CMSRV_LOCAL_SOCKET
+#define CMSRV_USE_UI
#include <al/log.h>
#include <nnwt/common.h>
-#ifdef CAMU_LOCAL_SOCKET
+#ifdef CMSRV_LOCAL_SOCKET
#include <nnwt/line_processor.h>
#endif
#include <nnwt/timer.h>
@@ -20,18 +21,20 @@ struct cmsrv {
struct nn_event_loop loop;
struct nn_signal quit_signal;
struct camu_server server;
-#ifdef CAMU_LOCAL_SOCKET
+#ifdef CMSRV_LOCAL_SOCKET
struct {
struct nn_socket sock;
struct nn_line_processor cli;
} local;
#endif
+#ifdef CMSRV_USE_UI
struct cmsrv_ui ui;
struct nn_poll input_poll;
struct nn_timer render_timer;
+#endif
};
-#ifdef CAMU_LOCAL_SOCKET
+#ifdef CMSRV_LOCAL_SOCKET
static u8 server_line_callback(void *userdata, str *line)
{
struct cmsrv *s = (struct cmsrv *)userdata;
@@ -73,6 +76,7 @@ static u8 server_line_callback(void *userdata, str *line)
}
#endif
+#ifdef CMSRV_USE_UI
static void render_timer_callback(void *userdata, struct nn_timer *timer)
{
struct cmsrv *s = (struct cmsrv *)userdata;
@@ -107,12 +111,6 @@ static void input_poll_callback(void *userdata, s32 revents)
}
}
-static void quit_signal_callback(void *userdata)
-{
- struct cmsrv *s = (struct cmsrv *)userdata;
- nn_event_loop_break_one(&s->loop);
-}
-
static s32 log_callback(void *userdata, u8 level, char *message)
{
struct cmsrv *s = (struct cmsrv *)userdata;
@@ -120,6 +118,23 @@ static s32 log_callback(void *userdata, u8 level, char *message)
cmsrv_ui_push_message(&s->ui, message);
return al_strlen(message);
}
+#endif
+
+static void server_meta_callback(void *userdata, u8 op, struct lia_list *list, struct lia_list_entry *entry)
+{
+ struct cmsrv *s = (struct cmsrv *)userdata;
+ (void)s;
+ (void)list;
+ if (op == LIANA_META_PLAYING) {
+ al_log_info("cmsrv", "now playing: %ls.", entry->name.data);
+ }
+}
+
+static void quit_signal_callback(void *userdata)
+{
+ struct cmsrv *s = (struct cmsrv *)userdata;
+ nn_event_loop_break_one(&s->loop);
+}
static struct cmsrv s = { 0 };
@@ -137,12 +152,14 @@ s32 wmain(s32 argc, wchar_t **argv)
{
(void)argc;
(void)argv;
- if (!nn_common_init() || !cmsrv_ui_init(&s.ui, &s.server)) return EXIT_FAILURE;
+ if (!nn_common_init()) return EXIT_FAILURE;
+#ifdef CMSRV_USE_UI
+ if (!cmsrv_ui_init(&s.ui, &s.server)) return EXIT_FAILURE;
+ al_set_print(log_callback, &s);
+#endif
signal(SIGINT, sigint_handler);
- al_set_print(log_callback, &s);
-
#ifdef CAMU_HAVE_FFMPEG
camu_ff_set_default_log_callback();
#endif
@@ -153,11 +170,13 @@ s32 wmain(s32 argc, wchar_t **argv)
nn_signal_start(&s.quit_signal);
camu_server_init(&s.server, &s.loop);
+ s.server.meta_callback = server_meta_callback;
+ s.server.userdata = &s;
if (!camu_server_listen(&s.server, CAMU_TEST_TYPE, CAMU_TEST_ADDR, CAMU_PORT)) {
return EXIT_FAILURE;
}
-#ifdef CAMU_LOCAL_SOCKET
+#ifdef CMSRV_LOCAL_SOCKET
s.local.sock.type = NNWT_SOCKET_UNIX;
nn_socket_init(&s.local.sock, NNWT_SOCKET_NONBLOCKING);
s.local.cli.callback = server_line_callback;
@@ -169,6 +188,7 @@ s32 wmain(s32 argc, wchar_t **argv)
}
#endif
+#ifdef CMSRV_USE_UI
nn_poll_init(&s.input_poll, input_poll_callback, &s);
nn_poll_set(&s.input_poll, cmsrv_ui_get_input_fd(&s.ui), NNWT_POLL_READ);
nn_poll_start(&s.input_poll, &s.loop);
@@ -176,10 +196,13 @@ s32 wmain(s32 argc, wchar_t **argv)
nn_timer_init(&s.render_timer, &s.loop, render_timer_callback, &s);
nn_timer_set_repeat(&s.render_timer, NNWT_TS_FROM_USEC(100000));
nn_timer_again(&s.render_timer);
+#endif
nn_event_loop_run(&s.loop);
+#ifdef CMSRV_USE_UI
cmsrv_ui_close(&s.ui);
+#endif
#ifdef CAMU_HAVE_FFMPEG
camu_ff_free_default_log_callback();