diff options
Diffstat (limited to 'src/fruits/cmv')
| -rw-r--r-- | src/fruits/cmv/cmv.c | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c index 635c25e..02beffb 100644 --- a/src/fruits/cmv/cmv.c +++ b/src/fruits/cmv/cmv.c @@ -27,6 +27,18 @@ struct cmv { }; #ifndef CAMU_SINK_ONLY +static void server_meta_callback(void *userdata, u8 op, struct lia_list *list, struct lia_list_entry *entry) +{ + struct cmv *c = (struct cmv *)userdata; + (void)c; + (void)list; + if (op == LIANA_META_PLAYING) { + al_log_info("cmv", "now playing: %ls.", entry->name.data); + } +} +#endif + +#ifndef CAMU_SINK_ONLY static void exit_callback(void *userdata, struct camu_desktop *desktop) { struct cmv *c = (struct cmv *)userdata; @@ -42,6 +54,7 @@ static nn_thread_result NNWT_THREADCALL event_loop_thread(void *userdata) return 0; } + static struct cmv c = { 0 }; static void sigint_handler(int signum) @@ -84,8 +97,16 @@ s32 wmain(s32 argc, wchar_t **argv) #else type = NNWT_SOCKET_TCP; addr = CAMU_LOCALHOST; #endif - if (!camu_server_init(&c.server, type, &c.loop)) failure(); - if (!camu_server_listen(&c.server, addr, CAMU_PORT)) failure(); + camu_server_init(&c.server, &c.loop); + c.server.meta_callback = server_meta_callback; + c.server.userdata = &c; +#ifdef CAMU_DIRECT_MODE + camu_server_bind_direct(&c.server); +#else + if (!camu_server_listen(&c.server, type, addr, CAMU_PORT)) { + failure(); + } +#endif } else { type = CAMU_TEST_TYPE; addr = CAMU_TEST_ADDR; @@ -94,6 +115,16 @@ s32 wmain(s32 argc, wchar_t **argv) type = NNWT_SOCKET_TCP; addr = CAMU_TEST_ADDR; #endif + if (!camu_desktop_init(&c.desktop, "cmv")) failure(); +#ifndef CAMU_SINK_ONLY + if (local) { + c.desktop.exit_callback = exit_callback; + c.desktop.userdata = &c; + c.desktop.sink.local_server = &c.server.data.server; + } +#endif + if (!camu_desktop_connect(&c.desktop, type, &c.loop, addr, CAMU_PORT)) failure(); + #ifndef CAMU_SINK_ONLY if (local) { for (s32 i = 1; i < argc; i++) { @@ -131,16 +162,6 @@ s32 wmain(s32 argc, wchar_t **argv) (void)argv; #endif - if (!camu_desktop_init(&c.desktop, "cmv")) failure(); -#ifndef CAMU_SINK_ONLY - if (local) { - c.desktop.exit_callback = exit_callback; - c.desktop.userdata = &c; - c.desktop.sink.local_server = &c.server.data.server; - } -#endif - if (!camu_desktop_connect(&c.desktop, type, &c.loop, addr, CAMU_PORT)) failure(); - struct nn_thread thread0; nn_thread_create(&thread0, event_loop_thread, &c); |