# ============================================================================================================= # directory listing related functions # ============================================================================================================= use strict; use warnings; #-------------------------------------------------------------------------------------------------------------- # List Directory #-------------------------------------------------------------------------------------------------------------- sub ls_dir { print "\$main::filter_use_re = $main::filter_use_re\n\$main::filter_string = $main::filter_string\n"; my @file_list = ""; my @dirlist = &ci_sort(&readdir($main::dir)); $main::LISTING = 1; $main::hl_counter = 0; $main::hlist2->delete("all"); chdir $main::dir; # shift directory, not just list ;) # $main::dir = cwd; # avoid having ../ in dir string :) if($main::filter_use_re == 0) { $main::filter_string_escaped = &escape_string($main::filter_string); } else { $main::filter_string_escaped = $main::filter_string; } if($main::recr) { $_ = ".."; &ls_dir_print; find(\&ls_dir_print, "$main::dir"); $main::LISTING = 0; $main::FIRST_DIR_LISTED = 0; return; } else { for(@dirlist) { if(-d $_) { &ls_dir_print; # print directorys 1st } else { push @file_list, $_; # push files to array } } for(@file_list) { &ls_dir_print; # then print the file array after all dirs have been printed } $main::LISTING = 0; $main::FIRST_DIR_LISTED = 0; return; } } #-------------------------------------------------------------------------------------------------------------- # ls_dir_print #-------------------------------------------------------------------------------------------------------------- # this function is only called from ls_dir sub ls_dir_print { # no vars are passed, instead we use $_ $main::hlist_cwd = cwd; my $tag = ""; my $art = ""; my $tit = ""; my $tra = ""; my $alb = ""; my $com = ""; my $gen = ""; my $year = ""; if(!$_ || $_ eq "" || $_ eq ".") { return; } # FIXME, this causes listing problem if($main::filter_string && &match_filter($_) == 0) { return; } if(-d $_) { # atm directorys are always printed if($main::recr && $main::FIRST_DIR_LISTED) { &nf_print("", ""); } elsif($main::recr) { $main::FIRST_DIR_LISTED = 1; } &nf_print($_, $_); return; } if($_ =~ /.*\.mp3$/i && $main::id3_mode == 1) { ($tag, $art, $tit, $tra, $alb, $gen, $year, $com) = &get_tags($_); if ($tag eq "id3v1") { &nf_print($_, $_, $art, $tit, $tra, $alb, $com, $gen, $year); return; } } &nf_print($_, $_); } #-------------------------------------------------------------------------------------------------------------- # Dir Dialog #-------------------------------------------------------------------------------------------------------------- sub dir_dialog { my $old_dir = $main::dir; my $dd_dir = $main::mw->chooseDirectory ( -initialdir=>$main::dir, -title=>"Choose a directory" ); if($dd_dir) { $main::dir = $dd_dir; chdir $main::dir; &ls_dir; } else { $main::dir = $old_dir; } } 1;