App-YTDL
view release on metacpan or search on metacpan
lib/App/YTDL/ChooseVideos.pm view on Meta::CPAN
}
return;
}
my $choice = $menu->[$idx[0]];
if ( $choice eq $filter ) {
shift @idx;
@last_chosen_ids = ();
for my $i ( @idx ) {
my $id = $avail_ids[$i - @pre];
$chosen_ids->{$id}++;
push @last_chosen_ids, $id;
}
for my $m ( @$mark ) {
if ( none { $m == $_ } @idx ) {
my $id = $avail_ids[$m - @pre];
delete $chosen_ids->{$id};
}
}
my $trs = Term::Form->new();
$regexp = $trs->readline( "Regexp: " );
next FILTER;
}
elsif ( $choice eq $sort ) {
set_sort_videolist( $set, $opt );
next FILTER;
}
else {
if ( $choice eq $enter ) {
shift @idx;
}
@last_chosen_ids = ();
for my $i ( @idx ) {
my $id = $avail_ids[$i - @pre];
$chosen_ids->{$id}++;
push @last_chosen_ids, $id;
}
for my $m ( @$mark ) {
if ( none { $m == $_ } @idx ) {
my $id = $avail_ids[$m - @pre];
delete $chosen_ids->{$id};
}
}
if ( length $regexp ) {
$regexp = '';
next FILTER;
}
else {
my $chosen = [
sort { ( firstidx { $_ eq $a } @avail_ids ) <=> ( firstidx { $_ eq $b } @avail_ids ) }
keys %$chosen_ids
];
return $chosen;
}
}
}
}
sub set_sort_videolist {
my ( $set, $opt ) = @_;
my $backup_item = $opt->{list_sort_item};
my $backup_order = $set->{list_sort_order};
my $sort_items = [ 'upload_date', 'title', 'view_count_raw', 'duration' ];
my $confirm = ' CONFIRM';
my @pre = ( undef, $confirm );
my $menu = [ @pre, map { my $s = $_; $s =~ s/_raw\z//; $s =~ s/_/ /g; '- ' . $s } @$sort_items ];
ITEM: while ( 1 ) {
my $current = $opt->{list_sort_item};
$current =~ s/_raw\z//;
$current =~ s/_/ /g;
my $prompt = sprintf 'Sort item: [%s]', $current;
my $idx = choose (
$menu,
{ prompt => $prompt, clear_screen => 0, layout => 3, index => 1, undef => ' BACK' }
);
if ( ! defined $idx || ! defined $menu->[$idx] ) {
$opt->{list_sort_item} = $backup_item;
return;
}
if ( $menu->[$idx] eq $confirm ) {
last ITEM;
}
$idx -= @pre;
$opt->{list_sort_item} = $sort_items->[$idx];
}
ORDER: while ( 1 ) {
my $curr_sort_item = $opt->{list_sort_item};
$curr_sort_item =~ s/_raw\z//;
$curr_sort_item =~ s/_/ /g;
my $order_prompt = sprintf 'Sort order "%s": [%s]', $curr_sort_item, $set->{list_sort_order};
my $choice = choose (
[ @pre, '- Asc', '- Desc' ],
{ prompt => $order_prompt, clear_screen => 0, layout => 3, undef => ' BACK' }
);
if ( ! defined $choice ) {
$set->{list_sort_order} = $backup_order;
return;
}
if ( $choice eq $confirm ) {
$set->{change}++;
return;
}
$choice =~ s/^-\s//;
$set->{list_sort_order} = $choice;
}
}
1;
__END__
( run in 1.665 second using v1.01-cache-2.11-cpan-c966e8aa7e8 )