App-MP4Meta

 view release on metacpan or  search on metacpan

lib/App/MP4Meta/Command/film.pm  view on Meta::CPAN

use 5.010;
use strict;
use warnings;

package App::MP4Meta::Command::film;
{
  $App::MP4Meta::Command::film::VERSION = '1.153340';
}

# ABSTRACT: Apply metadata to a film. Parses the filename in order to get the films title and (optionally) year.

use App::MP4Meta -command;

use Try::Tiny;


sub usage_desc { "film %o [file ...]" }

sub abstract {
'Apply metadata to a film. Parses the filename in order to get the films title and (optionally) year.';
}

sub opt_spec {
    return (
        [ "genre=s",     "The genre of the Film" ],
        [ "coverfile=s", "The location of the cover image" ],
        [ "sources=s@", "The sources to search", { default => [qw/OMDB/] } ],
        [ "title=s",    "The title of the Film" ],
        [ "noreplace", "Don't replace the file - creates a temp file instead" ],
        [ "itunes",  "adds to iTunes after applying meta data. Mac OSX only." ],
        [ "verbose", "Print verbosely" ],
        [
            "withoutany",
"Continue to process even if we can not find any information on the internet"
        ],
    );
}

sub validate_args {
    my ( $self, $opt, $args ) = @_;

    # we need at least one file to work with
    $self->usage_error("too few arguments") unless @$args;

    # check each file
    for my $f (@$args) {
        unless ( -e $f ) {
            $self->usage_error("$f does not exist");
        }
        unless ( -r $f ) {
            $self->usage_error("can not read $f");
        }

        # TODO: is $f an mp4?
    }
}

sub execute {
    my ( $self, $opt, $args ) = @_;

    require App::MP4Meta::Film;
    my $film = App::MP4Meta::Film->new(
        {
            noreplace            => $opt->{noreplace},
            genre                => $opt->{genre},
            sources              => $opt->{sources},
            title                => $opt->{title},
            coverfile            => $opt->{coverfile},
            itunes               => $opt->{itunes},
            verbose              => $opt->{verbose},
            continue_without_any => $opt->{withoutany},
        }
    );

    for my $file (@$args) {
        say "processing $file" if $opt->{verbose};
        my $error;
        try {
            $error = $film->apply_meta($file);
        }
        catch {
            $error = "Error applying meta to $file: $_";
        }
        finally {
            say $error if $error;
        };
    }

    say 'done' if $opt->{verbose};
}

1;

__END__

=pod

=encoding UTF-8



( run in 1.126 second using v1.01-cache-2.11-cpan-39bf76dae61 )