summaryrefslogtreecommitdiff
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
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.
-rw-r--r--src/extractors/bilibili.c56
-rw-r--r--src/process_url.c10
-rw-r--r--src/process_url.h6
3 files changed, 36 insertions, 36 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;
diff --git a/src/process_url.c b/src/process_url.c
index 328fc4f..713e48c 100644
--- a/src/process_url.c
+++ b/src/process_url.c
@@ -595,12 +595,10 @@ void add_url(const char *URL, const char *outdir, const char *fn,
callback_g = callback;
if (p_callback_struct) {
- p_callback_struct->videofn =
- callback_struct_convert_fullpath(&p_callback_struct->videofn);
- p_callback_struct->audiofn =
- callback_struct_convert_fullpath(&p_callback_struct->audiofn);
- p_callback_struct->filename =
- callback_struct_convert_fullpath(&p_callback_struct->filename);
+ for (unsigned short i = 0; i < p_callback_struct->n; i++) {
+ p_callback_struct->str[i] =
+ callback_struct_convert_fullpath(&p_callback_struct->str[i]);
+ }
p_callback_struct_g = p_callback_struct;
}
diff --git a/src/process_url.h b/src/process_url.h
index e4b513d..8a5e59c 100644
--- a/src/process_url.h
+++ b/src/process_url.h
@@ -44,11 +44,7 @@ typedef struct str_data {
size_t len;
} str_data_t;
-typedef struct callback_struct {
- char *videofn;
- char *audiofn;
- char *filename;
-} callback_struct_t;
+typedef str_array_t callback_struct_t;
typedef int (*callback_t)(void *);