App-YTDL
view release on metacpan or search on metacpan
lib/App/YTDL/Options.pm view on Meta::CPAN
package # hide from PAUSE
App::YTDL::Options;
use warnings;
use strict;
use 5.010000;
use Exporter qw( import );
our @EXPORT_OK = qw( read_config_file set_options get_defaults );
use Encode;
use File::Spec::Functions qw( catfile curdir );
use File::Temp qw();
use FindBin qw( $RealBin $RealScript );
use Pod::Usage qw( pod2usage );
use File::HomeDir qw();
use Term::Choose qw( choose );
use Term::Choose::Util qw( choose_a_directory choose_a_file choose_a_number settings_menu insert_sep );
use Term::Form qw();
use App::YTDL::ChooseVideos qw( set_sort_videolist );
use App::YTDL::Helper qw( write_json read_json uni_capture HIDE_CURSOR SHOW_CURSOR );
sub _show_info {
my ( $set, $opt ) = @_;
my ( $youtube_dl_version, $ffmpeg_version, $ffprobe_version );
if ( ! eval { $youtube_dl_version = uni_capture( @{$set->{youtube_dl}}, '--version' ); 1 } ) {
$youtube_dl_version = $@;
}
chomp $youtube_dl_version;
eval {
$ffmpeg_version = uni_capture( $set->{ffmpeg}, '-version' );
if ( $ffmpeg_version && $ffmpeg_version =~ /^ffmpeg version (\S+)/m ) {
$ffmpeg_version = $1;
}
else {
$ffmpeg_version = '';
}
};
eval {
$ffprobe_version = uni_capture( $set->{ffprobe}, '-version' );
if ( $ffprobe_version && $ffprobe_version =~ /^ffprobe version (\S+)/m ) {
$ffprobe_version = $1;
}
else {
$ffprobe_version = '';
}
};
my $prompt = "INFO\n\n";
$prompt .= "Directories:\n";
$prompt .= " Video : $opt->{video_dir}" . "\n";
$prompt .= " Config: $set->{config_file}" . "\n";
$prompt .= "\n";
$prompt .= "Versions:\n";
$prompt .= ' ' . catfile( $RealBin, $RealScript ) . ": " . $main::VERSION . "\n";
$prompt .= ' ' . $set->{youtube_dl}[0] . ": " . ( $youtube_dl_version // '?' ) . "\n";
if ( $set->{ffmpeg} ) {
$prompt .= ' ' . $set->{ffmpeg} . " : " . ( $ffmpeg_version // '?' ) . "\n";
}
if ( $set->{ffprobe} ) {
$prompt .= ' ' . $set->{ffprobe} . ": " . ( $ffprobe_version // '?' ) . "\n";
}
# Choose
choose(
[ 'Close' ],
{ prompt => $prompt }
);
}
sub get_defaults {
return {
entries_with_info => 0,
filename_format => 3,
list_sort_item => 'upload_date',
max_info_width => 120,
max_processes => 5,
max_rows_description => 3,
max_size_history => 50,
no_height_ok => 1,
lib/App/YTDL/Options.pm view on Meta::CPAN
'1080 or less',
'1440 or less',
'2160 or less',
'best'
];
_opt_choose_from_list_value( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "no_height_ok" ) {
my $prompt = 'Download videos with unkown height';
my $list = [ 'no', 'yes' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "retries" ) {
my $digits = 2;
my $info = sprintf "Download retries\nNow: %${digits}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "timeout" ) {
my $digits = 3;
my $info = sprintf "Connection timeout (s)\nNow: %${digits}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "no_warnings" ) {
my $prompt = 'Disable youtube-dl warnings';
my $list = [ 'no', 'yes' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "prefer_free_formats" ) {
my $prompt = 'Prefer free formats';
my $list = [ 'no', 'yes' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "max_size_history" ) {
my $digits = 3;
my $info = sprintf "Max size of history\nNow: %${digits}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "sort_history_by_timestamp" ) {
my $prompt = 'Sort history by';
my $list = [ 'by name', 'by timestamp' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "entries_with_info" ) {
my $digits = 4;
my $sep_w = 1;
my $w = $digits + int( ( $digits - 1 ) / 3 ) * $sep_w;
my $info = sprintf "Number of entries with additional information\nNow: %${w}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "max_processes" ) {
my $digits = 2;
my $info = sprintf "Fetching additional information: the maximum number of parallel downloads\nNow: %${digits}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "list_sort_item" ) {
set_sort_videolist( $set, $opt );
}
elsif ( $key eq "show_view_count" ) {
my $prompt = 'Show the view-count in list-menus';
my $list = [ 'if sorted by "view count"', 'always' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "show_video_id" ) {
my $prompt = 'Show the video-id in list-menus';
my $list = [ 'no', 'yes' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
elsif ( $key eq "max_info_width" ) {
my $digits = 3;
my $info = sprintf "Max Info width\nNow: %${digits}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "max_rows_description" ) {
my $digits = 2;
my $info = sprintf "Max Rows of description\nNow: %${digits}s", insert_sep( $opt->{$key} );
my $name = 'New: ';
_opt_number_range( $set, $opt, $key, $name, $info, $digits );
}
elsif ( $key eq "yt_dl_config_location" ) {
my $info = "Youtube-dl Config File\nNow: ";
if ( defined $opt->{$key} ) {
$info .= $opt->{$key};
}
else {
$info .= 'default (';
$info .= $^O eq 'MSWin32' ? "%APPDATA%/youtube-dl/config.txt" : "~/.config/youtube-dl/config";
$info .= ')';
}
my $name = 'New: ';
_opt_choose_a_file( $set, $opt, $key, $info, $name );
}
elsif ( $key eq "_reset_yt_dl_config_location" ) {
my $prompt = 'Reset the youtube-dl config location to default';
my $list = [ 'no', 'yes' ];
$opt->{_reset_yt_dl_config_location} = 0;
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
if ( $opt->{_reset_yt_dl_config_location} ) {
$opt->{yt_dl_config_location} = undef;
}
delete $opt->{_reset_yt_dl_config_location};
}
elsif ( $key eq "yt_dl_ignore_config" ) {
my $prompt = 'Ignore youtube-dl config file';
my $list = [ 'no', 'yes' ];
_opt_choose_from_list_idx( $set, $opt, $key, $prompt, $list );
}
else { die $key }
}
}
return;
}
sub _opt_settings_menu {
my ( $set, $opt, $sub_menu, $current, $prompt ) = @_;
( run in 0.844 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )