summaryrefslogtreecommitdiff
path: root/src/extractors
diff options
context:
space:
mode:
authorMole Shang <[email protected]>2023-08-09 21:41:12 +0800
committerMole Shang <[email protected]>2023-08-09 21:41:12 +0800
commite910743450ae6ca3ec2a65e0e415f4a5d19ff3f9 (patch)
treefce149caa35407d5ac4cb127909aa48b6e8f6664 /src/extractors
parentdcae2252e28fca2d8308eda208a03dbd09eaa286 (diff)
downloadhinata-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.c56
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;