summaryrefslogtreecommitdiff
path: root/src/fruits
diff options
context:
space:
mode:
Diffstat (limited to 'src/fruits')
-rw-r--r--src/fruits/cmc/cmc.c2
-rw-r--r--src/fruits/cmsrv/cmsrv.c8
-rw-r--r--src/fruits/cmv/cmv.c109
3 files changed, 96 insertions, 23 deletions
diff --git a/src/fruits/cmc/cmc.c b/src/fruits/cmc/cmc.c
index 58bb3b1..1046e41 100644
--- a/src/fruits/cmc/cmc.c
+++ b/src/fruits/cmc/cmc.c
@@ -18,6 +18,7 @@ enum {
CLI_SEARCH
};
+/*
static struct cmc_search *get_search_by_id(struct cmc *c, s32 id)
{
struct cmc_search *search;
@@ -26,6 +27,7 @@ static struct cmc_search *get_search_by_id(struct cmc *c, s32 id)
}
return NULL;
}
+*/
static void parse_list_entry(struct nn_packet *packet, struct cmc_list_entry *entry)
{
diff --git a/src/fruits/cmsrv/cmsrv.c b/src/fruits/cmsrv/cmsrv.c
index be620a7..e830831 100644
--- a/src/fruits/cmsrv/cmsrv.c
+++ b/src/fruits/cmsrv/cmsrv.c
@@ -54,7 +54,7 @@ static u8 server_line_callback(void *userdata, str *line)
} else if (al_str_eq(line, &al_str_c(";REVERSE"))) {
lia_list_reverse(list);
} else if (al_str_eq(line, &al_str_c(";CLEAR"))) {
- lia_list_clear(list);
+ //lia_list_clear(list);
} else {
struct nn_packet *packet = nn_packet_create();
#ifdef CAMU_HAVE_PORTAL
@@ -155,7 +155,7 @@ s32 main(s32 argc, char *argv[])
signal(SIGINT, sigint_handler);
#ifdef CAMU_HAVE_FFMPEG
- camu_ff_set_default_log_callback();
+ camu_ff_common_init();
#endif
nn_event_loop_init(&s.loop);
@@ -196,10 +196,6 @@ s32 main(s32 argc, char *argv[])
cmsrv_ui_close(&s.ui);
#endif
-#ifdef CAMU_HAVE_FFMPEG
- camu_ff_free_default_log_callback();
-#endif
-
nn_common_close();
return EXIT_SUCCESS;
diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c
index ebc2236..f79ffe2 100644
--- a/src/fruits/cmv/cmv.c
+++ b/src/fruits/cmv/cmv.c
@@ -53,6 +53,66 @@ static void sigint_handler(int signum)
goto out; \
} while (0)
+// sink-p12-108.52.160.112-aEN-v-sEN.exe
+static bool parse_exe_name_params(str *exe_name, str *addr, struct lia_prefs *prefs)
+{
+ u32 index = al_str_rfind(exe_name, '/');
+ if (index == al_str_npos) {
+ index = al_str_rfind(exe_name, '\\');
+ if (index == al_str_npos) goto def;
+ }
+
+ str sub = al_str_substr(exe_name, index + 1, exe_name->length);
+ if (al_str_cmp(&sub, &al_str_c("sink-"), 0, 5) != 0) {
+ goto def;
+ }
+ sub = al_str_substr(&sub, 5, sub.length);
+
+ // Skip version.
+ index = al_str_find(&sub, '-');
+ if (index == al_str_npos) goto def;
+ sub = al_str_substr(&sub, index + 1, sub.length);
+
+ index = al_str_find(&sub, '-');
+ if (index == al_str_npos) goto def;
+ *addr = al_str_substr(&sub, 0, index);
+
+ for (;;) {
+ sub = al_str_substr(&sub, index + 1, sub.length);
+ index = al_str_find(&sub, '-');
+ if (index == al_str_npos) {
+ index = al_str_find(&sub, '.');
+ if (index == al_str_npos) {
+ index = sub.length;
+ } else {
+ sub.length = index;
+ }
+ }
+
+ str value;
+ al_str_clone(&value, &al_str_substr(&sub, 0, index));
+ al_str_to_lower(&value);
+ if (al_str_at(&value, 0) == 'a') {
+ prefs->enabled_mask |= CAMU_MASK_AUDIO;
+ } else if (al_str_at(&value, 0) == 'v') {
+ prefs->enabled_mask |= CAMU_MASK_VIDEO;
+ } else if (al_str_at(&value, 0) == 's') {
+ prefs->enabled_mask |= CAMU_MASK_SUBTITLE;
+ }
+ al_str_free(&value);
+
+ if (index == sub.length) break;
+ }
+
+ return true;
+def:
+ prefs->enabled_mask = CAMU_MASK_AUDIO | CAMU_MASK_VIDEO | CAMU_MASK_SUBTITLE;
+ prefs->audio_lang = CAMU_LANG_ENGLISH;
+ prefs->subtitle_lang = CAMU_LANG_ENGLISH;
+
+ return false;
+}
+
#ifdef NAUNET_ON_WINDOWS
s32 wmain(s32 argc, wchar_t **argv)
#else
@@ -68,7 +128,7 @@ s32 main(s32 argc, char *argv[])
signal(SIGINT, sigint_handler);
#ifdef CAMU_HAVE_FFMPEG
- camu_ff_set_default_log_callback();
+ camu_ff_common_init();
#endif
str home = al_str_null();
@@ -84,30 +144,49 @@ s32 main(s32 argc, char *argv[])
nn_event_loop_init(&c.loop);
- u8 type;
- str *addr;
#ifndef CAMU_SINK_ONLY
bool local = argc > 1;
- if (local) {
+#endif
+
+ u8 type;
+ str addr;
+
+ str exe_name;
+#ifdef NAUNET_ON_WINDOWS
+ al_wstr_to_str(&al_wstr_cr(argv[0]), &exe_name);
+#else
+ exe_name = al_str_cr(argv[0]);
+#endif
+ if (!parse_exe_name_params(&exe_name, &addr, &c.desktop.sink.prefs)) {
+#ifndef CAMU_SINK_ONLY
+ if (local) {
#ifdef NAUNET_ON_WINDOWS
- type = NNWT_SOCKET_TCP; addr = &CAMU_LOCALHOST;
+ type = NNWT_SOCKET_TCP; addr = CAMU_LOCALHOST;
+#else
+ type = NNWT_SOCKET_UNIX; addr = CMV_UNIX_PATH;
+#endif
+ } else {
+ type = CAMU_TEST_TYPE;
+ addr = CAMU_TEST_ADDR;
+ }
#else
- type = NNWT_SOCKET_UNIX; addr = &CMV_UNIX_PATH;
+ type = NNWT_SOCKET_TCP; addr = CAMU_TEST_ADDR;
#endif
+ } else {
+ type = NNWT_SOCKET_TCP;
+ }
+
+#ifndef CAMU_SINK_ONLY
+ if (local) {
camu_server_init(&c.server, &c.loop);
#ifdef CAMU_DIRECT_MODE
camu_server_bind_direct(&c.server);
#else
- if (!camu_server_listen(&c.server, type, addr, CAMU_PORT)) {
+ if (!camu_server_listen(&c.server, type, &addr, CAMU_PORT)) {
failure();
}
#endif
- } else {
- type = CAMU_TEST_TYPE;
- addr = &CAMU_TEST_ADDR;
}
-#else
- type = NNWT_SOCKET_TCP; addr = &CAMU_TEST_ADDR;
#endif
if (!camu_desktop_init(&c.desktop, "cmv")) failure();
@@ -118,7 +197,7 @@ s32 main(s32 argc, char *argv[])
c.desktop.sink.local_server = &c.server.data.server;
}
#endif
- if (!camu_desktop_connect(&c.desktop, type, &c.loop, addr, CAMU_PORT)) failure();
+ if (!camu_desktop_connect(&c.desktop, type, &c.loop, &addr, CAMU_PORT)) failure();
#ifndef CAMU_SINK_ONLY
if (local) {
@@ -177,10 +256,6 @@ out:
al_str_free(&home);
-#ifdef CAMU_HAVE_FFMPEG
- camu_ff_free_default_log_callback();
-#endif
-
stl_global_close();
nn_common_close();