diff options
| author | 2025-02-22 10:29:15 -0500 | |
|---|---|---|
| committer | 2025-02-22 10:29:15 -0500 | |
| commit | 000ce1f671d1f05b76202fd128e272e4ac9da683 (patch) | |
| tree | 315812307bd8c5b7ab0efedfd29a43e52c270989 /src/fruits/cmv | |
| parent | c7f00bb4a70e94a5b0ded8255e34e094e884f7a0 (diff) | |
| download | camu-000ce1f671d1f05b76202fd128e272e4ac9da683.tar.gz camu-000ce1f671d1f05b76202fd128e272e4ac9da683.tar.bz2 camu-000ce1f671d1f05b76202fd128e272e4ac9da683.zip | |
Support new stl_global_init()
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/fruits/cmv')
| -rw-r--r-- | src/fruits/cmv/cmv.c | 114 |
1 files changed, 61 insertions, 53 deletions
diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c index f79ffe2..f9c3b82 100644 --- a/src/fruits/cmv/cmv.c +++ b/src/fruits/cmv/cmv.c @@ -41,18 +41,6 @@ static nn_thread_result NNWT_THREADCALL event_loop_thread(void *userdata) return 0; } -static struct cmv c = { 0 }; - -static void sigint_handler(int signum) -{ - (void)signum; - c.desktop.should_quit = 1; -} - -#define failure() do { \ - 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) { @@ -113,20 +101,10 @@ def: return false; } -#ifdef NAUNET_ON_WINDOWS -s32 wmain(s32 argc, wchar_t **argv) -#else -s32 main(s32 argc, char *argv[]) -#endif -{ - if (!nn_common_init() || !stl_global_init(false)) { - return EXIT_FAILURE; - } - - s32 ret = EXIT_FAILURE; - - signal(SIGINT, sigint_handler); +static struct cmv c = { 0 }; +s32 window_system_main(s32 argc, str *argv) +{ #ifdef CAMU_HAVE_FFMPEG camu_ff_common_init(); #endif @@ -150,14 +128,7 @@ s32 main(s32 argc, char *argv[]) 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)) { + if (!parse_exe_name_params(&argv[0], &addr, &c.desktop.sink.prefs)) { #ifndef CAMU_SINK_ONLY if (local) { #ifdef NAUNET_ON_WINDOWS @@ -183,13 +154,15 @@ s32 main(s32 argc, char *argv[]) camu_server_bind_direct(&c.server); #else if (!camu_server_listen(&c.server, type, &addr, CAMU_PORT)) { - failure(); + return EXIT_FAILURE; } #endif } #endif - if (!camu_desktop_init(&c.desktop, "cmv")) failure(); + if (!camu_desktop_init(&c.desktop, "cmv")) { + return EXIT_FAILURE; + } #ifndef CAMU_SINK_ONLY if (local) { c.desktop.exit_callback = exit_callback; @@ -197,38 +170,31 @@ 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)) { + return EXIT_FAILURE; + } #ifndef CAMU_SINK_ONLY if (local) { for (s32 i = 1; i < argc; i++) { -#ifdef NAUNET_ON_WINDOWS - str arg; - if (!al_wstr_to_str(&al_wstr_cr(argv[i]), &arg)) { - al_log_error("cmv", "Failed to parse argument #%i.", i); - continue; - } -#else - str arg = al_str_cr(argv[i]); -#endif struct nn_packet *packet = nn_packet_create(); #ifdef CAMU_HAVE_PORTAL - if (al_str_at(&arg, 0) == ';' || camu_is_url(&arg, 0)) { + if (al_str_at(&argv[i], 0) == ';' || camu_is_url(&argv[i], 0)) { nn_packet_write_u8(packet, CAMU_RESOURCE_SIMPLE_SEARCH); #elif defined NAUNET_HAS_CURL - if (camu_is_url(&arg, 0)) { + if (camu_is_url(&argv[i], 0)) { nn_packet_write_u8(packet, CAMU_RESOURCE_HTTP); #else if (0) { #endif #if CACHE_HAVE_CDIO - } else if (al_str_cmp(&arg, &al_str_c("cdda://"), 0, 7) == 0) { + } else if (al_str_cmp(&argv[i], &al_str_c("cdda://"), 0, 7) == 0) { nn_packet_write_u8(packet, CAMU_RESOURCE_CDIO); #endif } else { nn_packet_write_u8(packet, CAMU_RESOURCE_FILE); } - nn_packet_write_str(packet, &arg); + nn_packet_write_str(packet, &argv[i]); camu_server_local_add(&c.server, packet); nn_packet_free(packet); } @@ -244,19 +210,61 @@ s32 main(s32 argc, char *argv[]) while (camu_desktop_tick(&c.desktop)) {} camu_desktop_stop(&c.desktop); + nn_thread_join(&thread0); + camu_desktop_free(&c.desktop); #ifndef CAMU_SINK_ONLY camu_server_free(&c.server); #endif - - ret = EXIT_SUCCESS; -out: nn_event_loop_destroy(&c.loop); - al_str_free(&home); + return EXIT_SUCCESS; +} + +static void sigint_handler(int signum) +{ + (void)signum; + c.desktop.should_quit = 1; +} + +#ifdef NAUNET_ON_WINDOWS +s32 wmain(s32 argc, wchar_t **wargv) +#else +s32 main(s32 argc, char *cargv[]) +#endif +{ + if (!nn_common_init()) { + return EXIT_FAILURE; + } + + signal(SIGINT, sigint_handler); + + array(str) args; + al_array_init(args); + for (s32 i = 0; i < argc; i++) { + str arg; +#ifdef NAUNET_ON_WINDOWS + if (!al_wstr_to_str(&al_wstr_cr(wargv[i]), &arg)) { + al_log_error("cmv", "Failed to parse argument #%i.", i); + continue; + } +#else + al_str_from(&arg, cargv[i]); +#endif + al_array_push(args, arg); + } + + s32 ret = stl_global_init((s32)args.count, args.data, window_system_main, false); stl_global_close(); + + str *arg; + al_array_foreach_ptr(args, i, arg) { + al_str_free(arg); + } + al_array_free(args); + nn_common_close(); return ret; |