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