diff options
author | Mole Shang <[email protected]> | 2023-08-09 21:41:12 +0800 |
---|---|---|
committer | Mole Shang <[email protected]> | 2023-08-09 21:41:12 +0800 |
commit | e910743450ae6ca3ec2a65e0e415f4a5d19ff3f9 (patch) | |
tree | fce149caa35407d5ac4cb127909aa48b6e8f6664 /src/extractors | |
parent | dcae2252e28fca2d8308eda208a03dbd09eaa286 (diff) | |
download | hinata-e910743450ae6ca3ec2a65e0e415f4a5d19ff3f9.tar.gz hinata-e910743450ae6ca3ec2a65e0e415f4a5d19ff3f9.tar.bz2 hinata-e910743450ae6ca3ec2a65e0e415f4a5d19ff3f9.zip |
process_url: set callback_struct_t as an alias to str_array_t
... for flexibility concern.
Diffstat (limited to 'src/extractors')
-rw-r--r-- | src/extractors/bilibili.c | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/src/extractors/bilibili.c b/src/extractors/bilibili.c index 89ae1fc..54c047e 100644 --- a/src/extractors/bilibili.c +++ b/src/extractors/bilibili.c @@ -16,6 +16,8 @@ #include "bilibili.h" #include "extractor.h" +static callback_struct_t callback_struct; + static int get_multipagedata(char *pagedata, Multipage *multipage_struct, bool *is_page) { const char *patterns_str[1] = {"window.__INITIAL_STATE__=(.+?);\\(function"}; @@ -364,11 +366,12 @@ static void dash_cleanup(Dash *dash) { static int bilibili_merge(void *v) { callback_struct_t *cb_struct = (callback_struct_t *)v; LOG("Bilibili", "Using ffmpeg to merge downloaded files ...\n"); - int r = merge_av(cb_struct->videofn, cb_struct->audiofn, cb_struct->filename); - free_and_nullify((void **)&cb_struct->videofn); - free_and_nullify((void **)&cb_struct->audiofn); - free_and_nullify((void **)&cb_struct->filename); + const char *filename = get_str_element(cb_struct, 0); + const char *videofn = get_str_element(cb_struct, 1); + const char *audiofn = get_str_element(cb_struct, 2); + int r = merge_av(videofn, audiofn, filename); LOG("Bilibili", "All done!\n"); + free_str_array(cb_struct); return r; } @@ -388,45 +391,48 @@ static int download(Bilibili_options *bilibili_options) { Dash_stream *audio = get_element(&dash.dashinfo.dash.audio, 0); const char *quality_desc = id2quality_desc(video->id); - static callback_struct_t callback_struct = {0}; + callback_struct = create_str_array(3); const char *ext = mimeType2ext(video->mimeType); - callback_struct.filename = malloc(strlen(bilibili_options->title) + - strlen(quality_desc) + strlen(ext) + 10); + char *filename = malloc(strlen(bilibili_options->title) + + strlen(quality_desc) + strlen(ext) + 10); if (bilibili_options->is_page) { - sprintf(callback_struct.filename, "%s-P%d-[%s].%s", bilibili_options->title, + sprintf(filename, "%s-P%d-[%s].%s", bilibili_options->title, bilibili_options->page, quality_desc, ext); } else { - sprintf(callback_struct.filename, "%s-[%s].%s", bilibili_options->title, - quality_desc, ext); + sprintf(filename, "%s-[%s].%s", bilibili_options->title, quality_desc, ext); } + set_str_element(&callback_struct, 0, filename); { - callback_struct.videofn = malloc(strlen(callback_struct.filename) + 6); + char *videofn = malloc(strlen(filename) + 6); if (bilibili_options->is_page) { - sprintf(callback_struct.videofn, "%s-P%d-[%s]-%s.%s", - bilibili_options->title, bilibili_options->page, quality_desc, - "video", ext); + sprintf(videofn, "%s-P%d-[%s]-%s.%s", bilibili_options->title, + bilibili_options->page, quality_desc, "video", ext); } else { - sprintf(callback_struct.videofn, "%s[%s]-%s.%s", bilibili_options->title, - quality_desc, "video", ext); + sprintf(videofn, "%s[%s]-%s.%s", bilibili_options->title, quality_desc, + "video", ext); } + set_str_element(&callback_struct, 1, videofn); set_referer("https://www.bilibili.com"); - add_url(video->baseUrl, NULL, callback_struct.videofn, NULL, NULL); + add_url(video->baseUrl, NULL, videofn, NULL, NULL); + free_and_nullify((void **)&videofn); } { - callback_struct.audiofn = malloc(strlen(callback_struct.filename) + 6); + char *audiofn = malloc(strlen(filename) + 6); if (bilibili_options->is_page) { - sprintf(callback_struct.audiofn, "%s-P%d-[%s]-%s.%s", - bilibili_options->title, bilibili_options->page, quality_desc, - "audio", mimeType2ext(audio->mimeType)); + sprintf(audiofn, "%s-P%d-[%s]-%s.%s", bilibili_options->title, + bilibili_options->page, quality_desc, "audio", + mimeType2ext(audio->mimeType)); } else { - sprintf(callback_struct.audiofn, "%s[%s]-%s.%s", bilibili_options->title, - quality_desc, "audio", mimeType2ext(audio->mimeType)); + sprintf(audiofn, "%s[%s]-%s.%s", bilibili_options->title, quality_desc, + "audio", mimeType2ext(audio->mimeType)); } - add_url(audio->baseUrl, NULL, callback_struct.audiofn, &bilibili_merge, - &callback_struct); + set_str_element(&callback_struct, 2, audiofn); + add_url(audio->baseUrl, NULL, audiofn, &bilibili_merge, &callback_struct); + free_and_nullify((void **)&audiofn); } + free_and_nullify((void **)&filename); free_and_nullify((void **)&resp); dash_cleanup(&dash); return 0; |