# =============================================================================================================
# 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;
syntax highlighted by Code2HTML, v. 0.9.1