|
Revision 1986, 1.4 kB
(checked in by karpet, 10 months ago)
|
support .rpm files too
|
- Property svn:eol-style set to
native
- Property svn:keywords set to
Author Date Id Revision
|
| Line | |
|---|
| 1 |
package My::Dirlist; |
|---|
| 2 |
use strict; |
|---|
| 3 |
use base 'Template::Plugin'; |
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
sub new { |
|---|
| 7 |
my ( $class, $context, $download_dir ) = @_; |
|---|
| 8 |
|
|---|
| 9 |
my %dir; |
|---|
| 10 |
|
|---|
| 11 |
opendir DIR, $download_dir or die "Failed to open directory [$download_dir]: $!"; |
|---|
| 12 |
|
|---|
| 13 |
while ( my $file = readdir DIR ) { |
|---|
| 14 |
|
|---|
| 15 |
next if $file =~ /^\./; |
|---|
| 16 |
|
|---|
| 17 |
my $path = "$download_dir/$file"; |
|---|
| 18 |
|
|---|
| 19 |
next if -d $path; |
|---|
| 20 |
|
|---|
| 21 |
my $type = -d $path |
|---|
| 22 |
? 'dir' |
|---|
| 23 |
: get_file_type( $file ); |
|---|
| 24 |
|
|---|
| 25 |
next unless $type; |
|---|
| 26 |
|
|---|
| 27 |
push @{$dir{$type}}, { |
|---|
| 28 |
name => $file, |
|---|
| 29 |
mtime => (stat $path)[9], |
|---|
| 30 |
size => (stat _)[7], |
|---|
| 31 |
size_formatted => format_num( (stat _)[7] ), |
|---|
| 32 |
}; |
|---|
| 33 |
|
|---|
| 34 |
} |
|---|
| 35 |
for my $type ( keys %dir ) { |
|---|
| 36 |
$dir{$type} = [ sort { $b->{mtime} <=> $a->{mtime} } @{$dir{$type}} ]; |
|---|
| 37 |
} |
|---|
| 38 |
|
|---|
| 39 |
return \%dir; |
|---|
| 40 |
} |
|---|
| 41 |
|
|---|
| 42 |
sub get_file_type { |
|---|
| 43 |
my $type = shift; |
|---|
| 44 |
|
|---|
| 45 |
return $1 if $type =~ /\.(rpm|gz|exe|sig)$/; |
|---|
| 46 |
return; |
|---|
| 47 |
} |
|---|
| 48 |
|
|---|
| 49 |
sub format_num { |
|---|
| 50 |
my $number = shift; |
|---|
| 51 |
my $format = '%.1f'; |
|---|
| 52 |
|
|---|
| 53 |
|
|---|
| 54 |
my $suffix = ""; |
|---|
| 55 |
if ($number > 0x40000000) |
|---|
| 56 |
{ |
|---|
| 57 |
$number /= 0x40000000; |
|---|
| 58 |
$suffix = 'G'; |
|---|
| 59 |
} |
|---|
| 60 |
elsif ($number > 0x100000) |
|---|
| 61 |
{ |
|---|
| 62 |
$number /= 0x100000; |
|---|
| 63 |
$suffix = 'M'; |
|---|
| 64 |
} |
|---|
| 65 |
elsif ($number > 0x400) |
|---|
| 66 |
{ |
|---|
| 67 |
$number /= 0x400; |
|---|
| 68 |
$suffix = 'K'; |
|---|
| 69 |
} else { |
|---|
| 70 |
$format = '%d'; |
|---|
| 71 |
} |
|---|
| 72 |
|
|---|
| 73 |
$number = sprintf($format, $number); |
|---|
| 74 |
|
|---|
| 75 |
return $number.$suffix; |
|---|
| 76 |
} |
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 |
1; |
|---|
| 82 |
|
|---|