X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FPackages%2FDoIndex.pm;h=6af0c3ab34bee37de557845e6a1f9f2a389dc8f9;hb=HEAD;hp=239f3301a7af582f8faf1478483224fdb63548d8;hpb=e0996d1bc5a737ae3fbeb9d1598d106ad5496a6a;p=deb%2Fpackages.git diff --git a/lib/Packages/DoIndex.pm b/lib/Packages/DoIndex.pm index 239f330..6af0c3a 100644 --- a/lib/Packages/DoIndex.pm +++ b/lib/Packages/DoIndex.pm @@ -4,15 +4,20 @@ use strict; use warnings; use CGI qw( :cgi ); +use POSIX qw( strftime ); use Exporter; use Deb::Versions; use Packages::Config qw( $TOPDIR ); -use Packages::I18N::Locale; use Packages::CGI; our @ISA = qw( Exporter ); -our @EXPORT = qw( do_index do_allpackages ); +our @EXPORT = qw( do_homepage do_index do_allpackages ); + +sub do_homepage { + $_[1]->{suite} = []; + return send_file( 'index', @_ ); +} sub do_index { return send_file( 'index', @_ ); @@ -25,36 +30,45 @@ my %encoding = ( 'txt.gz' => 'x-gzip', ); sub send_file { - my ($file, $params, $opts, $html_header) = @_; + my ($file, $params, $opts) = @_; + my $cat = $opts->{cat}; if ($params->{errors}{suite}) { - fatal_error( _g( "suite not valid or not specified" ) ); + fatal_error( $cat->g( "suite not valid or not specified" ) ); } if (@{$opts->{suite}} > 1) { - fatal_error( sprintf( _g( "more than one suite specified for show_static (%s)" ), "@{$opts->{suite}}" ) ); + fatal_error( $cat->g( "more than one suite specified for show_static (%s)", + "@{$opts->{suite}}" ) ); } if (@{$opts->{subsection}} > 1) { - fatal_error( sprintf( _g( "more than one suite specified for show_static (%s)" ), "@{$opts->{suite}}" ) ); + fatal_error( $cat->g( "more than one subsection specified for show_static (%s)", + "@{$opts->{suite}}" ) ); } + if ($opts->{format} eq 'txt.gz') { + $opts->{po_lang} = 'en'; + } my $wwwdir = "$TOPDIR/www"; my $path = ""; $path .= "source/" if $opts->{source}; - $path .= "$opts->{suite}[0]/"; + $path .= "$opts->{suite}[0]/" if @{$opts->{suite}}; $path .= "$opts->{archive}[0]/" if @{$opts->{archive}} == 1; $path .= "$opts->{subsection}[0]/" if @{$opts->{subsection}}; $path .= "$opts->{priority}[0]/" if @{$opts->{priority}}; - # we don't have translated index pages for subsections yet - $opts->{lang} = 'en' if @{$opts->{subsection}} or $file eq 'allpackages'; - $path .= "$file.$opts->{lang}.$opts->{format}"; + $path .= "$file.$opts->{po_lang}.$opts->{format}"; unless (@Packages::CGI::fatal_errors) { my $buffer; if (open( INDEX, '<', "$wwwdir/$path" )) { my %headers; - $headers{'-charset'} = get_charset( $opts->{lang} ); + $headers{'-charset'} = 'UTF-8'; $headers{'-type'} = get_mime( $opts->{format}, 'text/plain' ); $headers{'-content-encoding'} = $encoding{$opts->{format}} if exists $encoding{$opts->{format}}; + my ($size,$mtime) = (stat("$wwwdir/$path"))[7,9]; + $headers{'-content-length'} = $size; + $headers{'-vary'} = 'negotiate,accept-language'; + $headers{'-last-modified'} = strftime("%a, %d %b %Y %T %z", localtime($mtime)); + $headers{'-expires'} = strftime("%a, %d %b %Y %T %z", localtime($mtime+(12*3600))); print header( %headers ); binmode INDEX; @@ -64,7 +78,7 @@ sub send_file { close INDEX; exit; } else { - fatal_error( sprintf( _g( "couldn't read index file %s: %s" ), + fatal_error( $cat->g( "couldn't read index file %s: %s", $path, $! ) ); } }