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 )