diff options
author | Mole Shang <[email protected]> | 2023-08-08 11:08:37 +0800 |
---|---|---|
committer | Mole Shang <[email protected]> | 2023-08-08 11:08:37 +0800 |
commit | f0121e1596dc5490b58b6dad1bfb8f3b83d19b94 (patch) | |
tree | 97d23f03a6e607d2414bbc5390b926031fbe6537 | |
parent | ea686558ff9d0e4a9c4ca07c1a3e79d49e5847e4 (diff) | |
download | hinata-f0121e1596dc5490b58b6dad1bfb8f3b83d19b94.tar.gz hinata-f0121e1596dc5490b58b6dad1bfb8f3b83d19b94.tar.bz2 hinata-f0121e1596dc5490b58b6dad1bfb8f3b83d19b94.zip |
process_url: do not block ui thread on callback
-rw-r--r-- | src/extractors/bilibili.c | 7 | ||||
-rw-r--r-- | src/process_url.c | 6 | ||||
-rw-r--r-- | src/process_url.h | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/extractors/bilibili.c b/src/extractors/bilibili.c index 9d1ede6..f14432e 100644 --- a/src/extractors/bilibili.c +++ b/src/extractors/bilibili.c @@ -380,14 +380,15 @@ static void dash_cleanup(Dash *dash) { free_array(&dash->dashinfo.dash.video); } -static int bilibili_merge(callback_struct_t *cb_struct) { +static int bilibili_merge(void *v) { + callback_struct_t *cb_struct = (callback_struct_t *)v; LOG("Bilibili", "Using ffmpeg to merge downloaded files ...\n"); - merge_av(cb_struct->videofn, cb_struct->audiofn, cb_struct->filename); + int r = merge_av(cb_struct->videofn, cb_struct->audiofn, cb_struct->filename); free_and_nullify(cb_struct->videofn); free_and_nullify(cb_struct->audiofn); free_and_nullify(cb_struct->filename); LOG("Bilibili", "All done!\n"); - return 0; + return r; } static int download(Bilibili_options *bilibili_options) { diff --git a/src/process_url.c b/src/process_url.c index e51da98..1bb411a 100644 --- a/src/process_url.c +++ b/src/process_url.c @@ -506,11 +506,13 @@ void poll_status(status_t *stat) { } merge_and_cleanup(curl_conf); append_log("Download %s finished.\n", curl_conf->outfn); + free_and_nullify(curl_conf); // Perform the callback if (is_empty_queue(&dl_queue) && callback_g) { - callback_g(p_callback_struct_g); + thrd_t cb_thrd; + thrd_create(&cb_thrd, callback_g, p_callback_struct_g); + thrd_detach(cb_thrd); } - free_and_nullify(curl_conf); } mtx_unlock(&mtx); } diff --git a/src/process_url.h b/src/process_url.h index 5343c9e..e33d8cf 100644 --- a/src/process_url.h +++ b/src/process_url.h @@ -50,7 +50,7 @@ typedef struct callback_struct { char *filename; } callback_struct_t; -typedef int (*callback_t)(callback_struct_t *); +typedef int (*callback_t)(void *); void curl_init(char *); |