diff options
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; | 
