display human sizes
parent
8441d31535
commit
e8a13c32ba
|
@ -38,7 +38,7 @@ sub attachment_list ($) {
|
||||||
push @ret, {
|
push @ret, {
|
||||||
"field-select" => '<input type="checkbox" name="attachment_select" value="'.$f.'">',
|
"field-select" => '<input type="checkbox" name="attachment_select" value="'.$f.'">',
|
||||||
link => htmllink($page, $page, $f, noimageinline => 1),
|
link => htmllink($page, $page, $f, noimageinline => 1),
|
||||||
size => (stat(_))[7],
|
size => humansize((stat(_))[7]),
|
||||||
mtime => displaytime($IkiWiki::pagemtime{$f}),
|
mtime => displaytime($IkiWiki::pagemtime{$f}),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -174,32 +174,70 @@ sub formbuilder (@) { #{{{
|
||||||
}
|
}
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
package IkiWiki::PageSpec;
|
my %units=( # size in bytes
|
||||||
|
B => 1,
|
||||||
|
byte => 1,
|
||||||
|
KB => 2 ** 10,
|
||||||
|
kilobyte => 2 ** 10,
|
||||||
|
K => 2 ** 10,
|
||||||
|
KB => 2 ** 10,
|
||||||
|
kilobyte => 2 ** 10,
|
||||||
|
M => 2 ** 20,
|
||||||
|
MB => 2 ** 20,
|
||||||
|
megabyte => 2 ** 20,
|
||||||
|
G => 2 ** 30,
|
||||||
|
GB => 2 ** 30,
|
||||||
|
gigabyte => 2 ** 30,
|
||||||
|
T => 2 ** 40,
|
||||||
|
TB => 2 ** 40,
|
||||||
|
terabyte => 2 ** 40,
|
||||||
|
P => 2 ** 50,
|
||||||
|
PB => 2 ** 50,
|
||||||
|
petabyte => 2 ** 50,
|
||||||
|
E => 2 ** 60,
|
||||||
|
EB => 2 ** 60,
|
||||||
|
exabyte => 2 ** 60,
|
||||||
|
Z => 2 ** 70,
|
||||||
|
ZB => 2 ** 70,
|
||||||
|
zettabyte => 2 ** 70,
|
||||||
|
Y => 2 ** 80,
|
||||||
|
YB => 2 ** 80,
|
||||||
|
yottabyte => 2 ** 80,
|
||||||
|
# ikiwiki, if you find you need larger data quantities, either modify
|
||||||
|
# yourself to add them, or travel back in time to 2008 and kill me.
|
||||||
|
# -- Joey
|
||||||
|
);
|
||||||
|
|
||||||
sub parsesize ($) { #{{{
|
sub parsesize ($) { #{{{
|
||||||
my $size=shift;
|
my $size=shift;
|
||||||
|
|
||||||
no warnings;
|
no warnings;
|
||||||
my $base=$size+0; # force to number
|
my $base=$size+0; # force to number
|
||||||
use warnings;
|
use warnings;
|
||||||
my $multiple=1;
|
foreach my $unit (sort keys %units) {
|
||||||
if ($size=~/kb?$/i) {
|
if ($size=~/\Q$unit\E/i) {
|
||||||
$multiple=2**10;
|
return $base * $units{$unit};
|
||||||
}
|
}
|
||||||
elsif ($size=~/mb?$/i) {
|
|
||||||
$multiple=2**20;
|
|
||||||
}
|
}
|
||||||
elsif ($size=~/gb?$/i) {
|
return $base;
|
||||||
$multiple=2**30;
|
|
||||||
}
|
|
||||||
elsif ($size=~/tb?$/i) {
|
|
||||||
$multiple=2**40;
|
|
||||||
}
|
|
||||||
return $base * $multiple;
|
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
|
sub humansize ($) { #{{{
|
||||||
|
my $size=shift;
|
||||||
|
|
||||||
|
foreach my $unit (reverse sort { $units{$a} <=> $units{$b} || $b cmp $a } keys %units) {
|
||||||
|
if ($size / $units{$unit} > 0.25) {
|
||||||
|
return (int($size / $units{$unit} * 100)/100)."$unit";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $size; # near zero, or negative
|
||||||
|
} #}}}
|
||||||
|
|
||||||
|
package IkiWiki::PageSpec;
|
||||||
|
|
||||||
sub match_maxsize ($$;@) { #{{{
|
sub match_maxsize ($$;@) { #{{{
|
||||||
shift;
|
shift;
|
||||||
my $maxsize=eval{parsesize(shift)};
|
my $maxsize=eval{IkiWiki::Plugin::attachment::parsesize(shift)};
|
||||||
if ($@) {
|
if ($@) {
|
||||||
return IkiWiki::FailReason->new("unable to parse maxsize (or number too large)");
|
return IkiWiki::FailReason->new("unable to parse maxsize (or number too large)");
|
||||||
}
|
}
|
||||||
|
@ -219,7 +257,7 @@ sub match_maxsize ($$;@) { #{{{
|
||||||
|
|
||||||
sub match_minsize ($$;@) { #{{{
|
sub match_minsize ($$;@) { #{{{
|
||||||
shift;
|
shift;
|
||||||
my $minsize=eval{parsesize(shift)};
|
my $minsize=eval{IkiWiki::Plugin::attachment::parsesize(shift)};
|
||||||
if ($@) {
|
if ($@) {
|
||||||
return IkiWiki::FailReason->new("unable to parse minsize (or number too large)");
|
return IkiWiki::FailReason->new("unable to parse minsize (or number too large)");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue