| @@ -495,22 +495,33 @@ static bool scan_dir(struct pl_parser *p, char *path, · 494 unmodified lines |
| 495 | 495 | return true; |
| 496 | 496 | } |
| 497 | 497 | |
| 498 | +static enum autocreate_mode get_directory_filter(struct pl_parser *p) |
| 499 | +{ |
| 500 | + enum autocreate_mode autocreate = AUTO_NONE; |
| 501 | + if (!p->opts->directory_filter || !p->opts->directory_filter[0]) |
| 502 | + autocreate = AUTO_ANY; |
| 503 | + if (str_in_list(bstr0("video"), p->opts->directory_filter)) |
| 504 | + autocreate |= AUTO_VIDEO; |
| 505 | + if (str_in_list(bstr0("audio"), p->opts->directory_filter)) |
| 506 | + autocreate |= AUTO_AUDIO; |
| 507 | + if (str_in_list(bstr0("image"), p->opts->directory_filter)) |
| 508 | + autocreate |= AUTO_IMAGE; |
| 509 | + return autocreate; |
| 510 | +} |
| 511 | + |
| 498 | 512 | static int parse_dir(struct pl_parser *p) |
| 499 | 513 | { |
| 500 | 514 | int ret = -1; |
| 501 | 515 | struct stream *stream = p->real_stream; |
| 502 | | − int autocreate = AUTO_NONE; |
| 516 | + enum autocreate_mode autocreate = AUTO_NONE; |
| 503 | 517 | p->pl->playlist_dir = NULL; |
| 504 | 518 | if (p->autocreate_playlist && p->real_stream->is_local_file && !p->real_stream->is_directory) { |
| 505 | 519 | bstr ext = bstr_get_ext(bstr0(p->real_stream->url)); |
| 506 | 520 | switch (p->autocreate_playlist) { |
| 507 | | − case 1: // any |
| 508 | | − autocreate = AUTO_ANY; |
| 509 | | − break; |
| 510 | | − case 2: // filter |
| 511 | | − autocreate = AUTO_VIDEO | AUTO_AUDIO | AUTO_IMAGE; |
| 521 | + case 1: // filter |
| 522 | + autocreate = get_directory_filter(p); |
| 512 | 523 | break; |
| 513 | | − case 3: // same |
| 524 | + case 2: // same |
| 514 | 525 | if (str_in_list(ext, p->mp_opts->video_exts)) { |
| 515 | 526 | autocreate = AUTO_VIDEO; |
| 516 | 527 | } else if (str_in_list(ext, p->mp_opts->audio_exts)) { |
| @@ -530,15 +541,7 @@ static int parse_dir(struct pl_parser *p) · 13 unmodified lines |
| 530 | 541 | p->pl->playlist_dir = bstrdup0(p->pl, dir); |
| 531 | 542 | } |
| 532 | 543 | } else { |
| 533 | | − autocreate = AUTO_NONE; |
| 534 | | − if (!p->opts->directory_filter || !p->opts->directory_filter[0]) |
| 535 | | − autocreate = AUTO_ANY; |
| 536 | | − if (str_in_list(bstr0("video"), p->opts->directory_filter)) |
| 537 | | − autocreate |= AUTO_VIDEO; |
| 538 | | − if (str_in_list(bstr0("audio"), p->opts->directory_filter)) |
| 539 | | − autocreate |= AUTO_AUDIO; |
| 540 | | − if (str_in_list(bstr0("image"), p->opts->directory_filter)) |
| 541 | | − autocreate |= AUTO_IMAGE; |
| 544 | + autocreate = get_directory_filter(p); |
| 542 | 545 | } |
| 543 | 546 | if (!stream->is_directory) |
| 544 | 547 | goto done; |