summaryrefslogtreecommitdiff
path: root/src/fruits/cmv
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-09-07 15:06:14 -0400
committerAndrew Opalach <andrew@akon.city> 2026-09-07 15:06:14 -0400
commitc66c7c64ebd16287b892f8a780cffcabafba3799 (patch)
treeb2195902ef055147878b591cf1171be7e6133c97 /src/fruits/cmv
parent1758ae9e860bd3b65b661e3c804288c3599f4fd4 (diff)
downloadcamu-c66c7c64ebd16287b892f8a780cffcabafba3799.tar.gz
camu-c66c7c64ebd16287b892f8a780cffcabafba3799.tar.bz2
camu-c66c7c64ebd16287b892f8a780cffcabafba3799.zip
Better OSD behavior, lots of build stuff
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/fruits/cmv')
-rw-r--r--src/fruits/cmv/cmv.c22
-rwxr-xr-xsrc/fruits/cmv/create_icon.sh4
-rw-r--r--src/fruits/cmv/meson.build10
3 files changed, 29 insertions, 7 deletions
diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c
index 74e3555..333588e 100644
--- a/src/fruits/cmv/cmv.c
+++ b/src/fruits/cmv/cmv.c
@@ -18,7 +18,7 @@
#include "icon.h"
#endif
-#ifndef NAUNET_ON_WINDOWS
+#if !defined NAUNET_ON_WINDOWS && !defined NAUNET_ON_ANDROID
// https://unix.stackexchange.com/a/16884
#define PID_MAX_STR 7 // 0x400000 (2^22).
static str CMV_UNIX_PATH = al_str_c("/tmp/cmv_sock_");
@@ -45,6 +45,7 @@ static void exit_callback(void *userdata, struct camu_desktop *desktop)
static nn_thread_result NNWT_THREADCALL event_loop_thread(void *userdata)
{
+ nn_thread_set_priority(NNWT_THREAD_SCHED_FIFO, 40);
struct cmv *c = (struct cmv *)userdata;
nn_thread_set_name("event_loop");
nn_event_loop_run(&c->loop);
@@ -174,9 +175,16 @@ s32 window_system_main(u32 argc, str *argv, void *extra)
prefs->language.audio = CAMU_LANG_JAPANESE;
prefs->language.subtitles = CAMU_LANG_ENGLISH;
+#ifdef CAMU_DIRECT_MODE
+#ifdef CAMU_SINK_ONLY
+#error "Sink-only and DIRECT_MODE are incompatible"
+#endif
+ if (!local) al_assert("Cannot connect to a server in DIRECT_MODE" && false);
+#endif
+
#ifndef CAMU_SINK_ONLY
if (local) {
- camu_server_init(&c.server, &c.loop);
+ camu_server_init(&c.server, &c.loop, local);
#ifdef CAMU_DIRECT_MODE
camu_server_bind_direct(&c.server);
#else
@@ -212,8 +220,8 @@ s32 window_system_main(u32 argc, str *argv, void *extra)
c.desktop.userdata = &c;
}
char *SINK_FORCE_LOCAL = getenv("SINK_FORCE_LOCAL");
- if (SINK_FORCE_LOCAL && al_strscmp(SINK_FORCE_LOCAL, "1") == 0) {
- c.desktop.sink.local = true;
+ if (SINK_FORCE_LOCAL) {
+ c.desktop.sink.local = al_strscmp(SINK_FORCE_LOCAL, "1") == 0;
} else {
c.desktop.sink.local = local;
}
@@ -232,9 +240,9 @@ s32 window_system_main(u32 argc, str *argv, void *extra)
nn_packet_free(packet);
}
if (extra) {
- u32 start_index = *(u32 *)extra;
+ s32 start_index = *(s32 *)extra;
if (start_index != 0) {
- camu_server_local_set_index(&c.server, start_index);
+ camu_server_local_start_at(&c.server, start_index);
}
}
}
@@ -306,7 +314,7 @@ s32 main(s32 argc, char *argv[])
for (s32 i = 0; i < argc; i++) {
str arg;
#ifdef NAUNET_ON_WINDOWS
- if (!al_str_from_wstr(&arg, &al_wstr_cr(argv[i]))) { // This is so broken.
+ if (!al_str_from_wstr(&arg, &al_wstr_cr(argv[i]))) {
log_error("Failed to convert argument #%i from a wide string.", i);
continue;
}
diff --git a/src/fruits/cmv/create_icon.sh b/src/fruits/cmv/create_icon.sh
new file mode 100755
index 0000000..08aa8eb
--- /dev/null
+++ b/src/fruits/cmv/create_icon.sh
@@ -0,0 +1,4 @@
+#! /usr/bin/env sh
+for size in {16,32,64,128}; do
+ magick sink.png -resize $sizex$size -set filename:f "%[t]-%[w]x%[h]" "%[filename:f].png"
+done
diff --git a/src/fruits/cmv/meson.build b/src/fruits/cmv/meson.build
index 301fa58..a9eda61 100644
--- a/src/fruits/cmv/meson.build
+++ b/src/fruits/cmv/meson.build
@@ -21,10 +21,20 @@ elif is_windows
windows = import('windows')
cmv_src += [windows.compile_resources('icon.rc')]
if not is_msvc
+ cmv_args += ['-mwindows', '-municode']
cmv_link_args += ['-mwindows', '-municode', '-static', '-static-libgcc', '-static-libstdc++']
endif
endif
+install_data(join_paths(meson.source_root(), 'package/sink.desktop'), install_tag: 'xdg',
+ install_dir: join_paths(get_option('datadir'), 'applications'))
+
+foreach size: ['16x16', '32x32', '64x64', '128x128', '256x256']
+ icon_dir = join_paths(get_option('datadir'), 'icons', 'hicolor', size, 'apps')
+ install_data('sink-' + size + '.png', install_tag: 'xdg',
+ install_dir: icon_dir, rename: 'sink.png')
+endforeach
+
if is_android
cmv_args += ['-DAPPLICATION_NAME="CTV"']
shared_library('ctv', cmv_src, dependencies: cmv_deps, c_args: cmv_args, link_args: cmv_link_args)