root/swish_website/Plugin/My/Dirlist.pm

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
Note: See TracBrowser for help on using the browser.