From da01937237d371e73fdafd9cf387800c3c06a769 Mon Sep 17 00:00:00 2001 From: Eric Gillespie Date: Sun, 27 Mar 2022 15:43:58 -0500 Subject: [PATCH] Restore PART/VERSION and add filename tests. --- fa-mp3cd | 42 +++++++++++-------- flac2mp3 | 39 ++++++++++-------- t/filenames.t | 85 ++++++++++++++++++++++++++++++++++++++- t/mp3cd/check-directory.t | 7 +++- t/mp3cd/plan.t | 63 +++++++++++++++++------------ 5 files changed, 173 insertions(+), 63 deletions(-) diff --git a/fa-mp3cd b/fa-mp3cd index 72efdcf..a15318b 100755 --- a/fa-mp3cd +++ b/fa-mp3cd @@ -85,11 +85,10 @@ use v5.12; use warnings; use FindBin; -# TODO eval hack -eval { - require "$FindBin::Bin/flac2mp3"; - #require "$FindBin::Bin/tags.pl"; -}; +use lib $FindBin::Bin; + +require 'flac2mp3'; +require 'tags.pl'; epg::flac::archive::tags->import( qw[ track_tags @@ -99,26 +98,35 @@ epg::flac::archive::tags->import( two_digits ]); +sub filename { + my $tags = shift; + mangle_for_file_name( + join(' ', + (map { two_digits($_) } @{$tags->{DISCNUMBER} // []}), + (map { two_digits($_) } @{$tags->{TRACKNUMBER} // []}), + @{$tags->{TITLE}}, + @{$tags->{VERSION} // []}, + @{$tags->{PARTNUMBER} // []}, + ) + ) . '.mp3'; +} + sub plan_flac { my $workdir = shift; my $path = shift; my $tags = shift; - my %track = track_tags($tags); - $track{flac} = $path; - $track{filename} = mangle_for_file_name( - join(' ', - (map { two_digits($_) } @{$track{discnumber}}), - two_digits($track{tracknumber}), - $track{title}, - )) . '.mp3'; - $track{dir} = join('/', $workdir, mangle_for_file_name($track{album})); - \%track + ( + tags => {track_tags($tags)}, + flac => $path, + filename => filename($tags), + dir => join('/', $workdir, mangle_for_file_name(@{$tags->{ALBUM}})), + ) } sub plan { my $workdir = shift; - map { plan_flac($workdir, @$_) } @_ + map { {plan_flac($workdir, @$_)} } @_ } # if @layout is partially on disk, return the portion that remains to be written @@ -190,7 +198,7 @@ sub main { )); for my $mp3 (@layout) { say('mkdir -p ' . $mp3->{dir}); - epg::flac::archive::mp3::flac2mp3(join('/', $mp3->{dir}, $mp3->{filename}), $mp3->{flac}, $mp3); + epg::flac::archive::mp3::flac2mp3(join('/', $mp3->{dir}, $mp3->{filename}), $mp3->{flac}, $mp3->{tags}); } my @output; diff --git a/flac2mp3 b/flac2mp3 index c8e9d11..e3e3867 100755 --- a/flac2mp3 +++ b/flac2mp3 @@ -52,10 +52,11 @@ package epg::flac::archive::mp3; use v5.12; use warnings; -use File::Temp; use FindBin; -require "$FindBin::Bin/tags.pl"; +use lib $FindBin::Bin; + +require 'tags.pl'; epg::flac::archive::tags->import( qw[ track_tags @@ -105,25 +106,29 @@ sub flac2mp3 { ); } +sub filename { + my $tags = shift; + mangle_for_file_name( + join(' ', + @{$tags->{ARTIST}}, + @{$tags->{ALBUM}}, + (map { two_digits($_) } @{$tags->{DISCNUMBER} // []}), + (map { two_digits($_) } @{$tags->{TRACKNUMBER} // []}), + @{$tags->{TITLE}}, + @{$tags->{VERSION} // []}, + @{$tags->{PARTNUMBER} // []}, + ) + ) . '.mp3'; +} + sub main { for my $flac (@_) { say('metaflac --export-picture-to=flac2mp3.cover.$$ ', quote($flac), ' && pic_options="--ti flac2mp3.cover.$$"'); - my %tags = track_tags(read_tags_metaflac($flac)); - flac2mp3( - mangle_for_file_name( - join(' ', - $tags{artist}, - $tags{album}, - (map { two_digits($_) } @{$tags{discnumber}}), - two_digits($tags{tracknumber}), - $tags{title}, - ) - ) - . '.mp3', - $flac, - \%tags, - ); + + # TODO multi-track + my ($tags) = read_tags_metaflac($flac); + flac2mp3(filename($tags), $flac, {track_tags($tags)}); say('unset pic_options'); } say('rm -f flac2mp3.cover.$$'); diff --git a/t/filenames.t b/t/filenames.t index 574c648..c5c1ad2 100644 --- a/t/filenames.t +++ b/t/filenames.t @@ -1,7 +1,7 @@ use v5.12; use warnings; -use Test::More tests => 6; +use Test::More tests => 14; use FindBin; @@ -10,6 +10,8 @@ use lib "$FindBin::Bin/.."; require 'tags.pl'; epg::flac::archive::tags->import('track_tags_from_disc'); require 'fa-encode'; +require 'fa-mp3cd'; +require 'flac2mp3'; is epg::flac::archive::encode::filename( 3, @@ -57,6 +59,7 @@ my $tracks = [ VERSION => ['12 inch remix'], }, ]; + is epg::flac::archive::encode::filename( 1, {epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 1)}, ), @@ -80,3 +83,83 @@ is epg::flac::archive::encode::filename( ), '04-testing_both_and_with_leading_0-live-04.flac', 'PARTNUMBER with leading 0 and VERSION'; + +# +# fa-mp3cd +# + +is epg::flac::archive::mp3::cd::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 1), + TRACKNUMBER => [1] + } + ), + '01_Care_4.mp3', + 'fa-mp3cd PART goes into filename, PARTNUMBER ignored'; + +is epg::flac::archive::mp3::cd::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 2), + TRACKNUMBER => [2] + } + ), + '02_silence.mp3', + 'fa-mp3cd parens in track title omitted'; + +is epg::flac::archive::mp3::cd::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 3), + TRACKNUMBER => [3] + } + ), + '03_Murder_Machines_12_inch_remix.mp3', + 'fa-mp3cd VERSION goes into filename'; + +is epg::flac::archive::mp3::cd::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 4), + TRACKNUMBER => [4] + } + ), + '04_testing_both_and_with_leading_0_live_04.mp3', + 'fa-mp3cd PARTNUMBER with leading 0 and VERSION'; + +# +# flac2mp3 +# + +is epg::flac::archive::mp3::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 1), + TRACKNUMBER => [1] + } + ), + 'Marillion_An_Hour_Before_It-s_Dark_01_Care_4.mp3', + 'flac2mp3 PART goes into filename, PARTNUMBER ignored'; + +is epg::flac::archive::mp3::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 2), + TRACKNUMBER => [2] + } + ), + 'Marillion_An_Hour_Before_It-s_Dark_02_silence.mp3', + 'flac2mp3 parens in track title omitted'; + +is epg::flac::archive::mp3::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 3), + TRACKNUMBER => [3] + } + ), + 'Marillion_An_Hour_Before_It-s_Dark_03_Murder_Machines_12_inch_remix.mp3', + 'flac2mp3 VERSION goes into filename'; + +is epg::flac::archive::mp3::filename( + { + epg::flac::archive::tags::track_tags_from_disc($album, $tracks, 4), + TRACKNUMBER => [4] + } + ), +'Marillion_An_Hour_Before_It-s_Dark_04_testing_both_and_with_leading_0_live_04.mp3', + 'flac2mp3 PARTNUMBER with leading 0 and VERSION'; diff --git a/t/mp3cd/check-directory.t b/t/mp3cd/check-directory.t index 0e628f5..2015f9e 100644 --- a/t/mp3cd/check-directory.t +++ b/t/mp3cd/check-directory.t @@ -6,8 +6,11 @@ use Test::More tests => 7; use Test::Differences; use Test::Exception; -require './tags.pl'; -require './fa-mp3cd'; +use FindBin; + +use lib "$FindBin::Bin/../.."; + +require 'fa-mp3cd'; my @Rising = ( { title => ['Tarot Woman'] }, diff --git a/t/mp3cd/plan.t b/t/mp3cd/plan.t index 3e3a6a8..4e1343d 100644 --- a/t/mp3cd/plan.t +++ b/t/mp3cd/plan.t @@ -5,8 +5,11 @@ use Test::More tests => 3; use Test::Differences; -require './tags.pl'; -require './fa-mp3cd'; +use FindBin; + +use lib "$FindBin::Bin/../.."; + +require 'fa-mp3cd'; my @Rising = ( { TITLE => ['Tarot Woman'] }, @@ -31,23 +34,27 @@ eq_or_diff dir => './Rising', flac => '1.flac', filename => '01_Tarot_Woman.mp3', - artist => 'Rainbow', - album => 'Rising', - date => '1976-05-17', - discnumber => [], - tracknumber => 1, - title => 'Tarot Woman', + tags => { + artist => 'Rainbow', + album => 'Rising', + date => '1976-05-17', + discnumber => [], + tracknumber => 1, + title => 'Tarot Woman', + } }, { dir => './Rising', flac => '2.flac', filename => '02_Run_With_the_Wolf.mp3', - artist => 'Rainbow', - album => 'Rising', - date => '1976-05-17', - discnumber => [], - tracknumber => 2, - title => 'Run With the Wolf', + tags => { + artist => 'Rainbow', + album => 'Rising', + date => '1976-05-17', + discnumber => [], + tracknumber => 2, + title => 'Run With the Wolf', + } }, ], [epg::flac::archive::mp3::cd::plan('.', @Rising)]; @@ -58,12 +65,14 @@ eq_or_diff dir => 'a/b/fakeal', flac => 'file.flac', filename => '01_faket.mp3', - artist => 'fakear', - album => 'fakeal', - date => 0, - discnumber => [], - tracknumber => 1, - title => 'faket', + tags => { + artist => 'fakear', + album => 'fakeal', + date => 0, + discnumber => [], + tracknumber => 1, + title => 'faket', + } } ], [ @@ -85,12 +94,14 @@ eq_or_diff dir => '/a/b/fakeal', flac => 'file.flac', filename => '01_faket.mp3', - artist => 'fakear', - album => 'fakeal', - date => 0, - discnumber => [], - tracknumber => 1, - title => 'faket', + tags => { + artist => 'fakear', + album => 'fakeal', + date => 0, + discnumber => [], + tracknumber => 1, + title => 'faket', + } } ], [ -- 2.56.0