X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FPackages%2FDoIndex.pm;h=a0cae2baf2f435cff7fa59f1f698d1d2ee19894c;hb=968c41e87231365eb85c185481b0f3c175c5f65a;hp=3e6041d26d03a735459e3e59301ccd58333a99b4;hpb=e23d2d2080a904ddd6d989a878f3c9b164f0a075;p=deb%2Fpackages.git diff --git a/lib/Packages/DoIndex.pm b/lib/Packages/DoIndex.pm index 3e6041d..a0cae2b 100644 --- a/lib/Packages/DoIndex.pm +++ b/lib/Packages/DoIndex.pm @@ -8,38 +8,62 @@ 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 ); +our @EXPORT = qw( do_index do_allpackages ); sub do_index { - my ($params, $opts, $html_header) = @_; + return send_file( 'index', @_ ); +} +sub do_allpackages { + return send_file( 'allpackages', @_ ); +} + +my %encoding = ( + 'txt.gz' => 'x-gzip', + ); +sub send_file { + 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}}" ) ); } my $wwwdir = "$TOPDIR/www"; - my $path = "$opts->{suite}[0]/"; + my $path = ""; + $path .= "source/" if $opts->{source}; + $path .= "$opts->{suite}[0]/"; $path .= "$opts->{archive}[0]/" if @{$opts->{archive}} == 1; $path .= "$opts->{subsection}[0]/" if @{$opts->{subsection}}; - # we don't have translated index pages for subsections yet - $opts->{lang} = 'en' if @{$opts->{subsection}}; - $path .= "index.$opts->{lang}.html"; + $path .= "$opts->{priority}[0]/" if @{$opts->{priority}}; + + #FIXME: ugly hack + if ($opts->{lang} ne 'en' and !-f "$wwwdir/$path$file.$opts->{lang}.$opts->{format}") { + $opts->{lang} = 'en'; + } + $path .= "$file.$opts->{lang}.$opts->{format}"; unless (@Packages::CGI::fatal_errors) { my $buffer; if (open( INDEX, '<', "$wwwdir/$path" )) { - my $charset = get_charset( $opts->{lang} ); - print header( -charset => $charset ); + my %headers; + $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{'-last-modified'} = gmtime($mtime); + print header( %headers ); binmode INDEX; while (read INDEX, $buffer, 4096) { @@ -48,25 +72,10 @@ sub do_index { 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, $! ) ); } } - - %$html_header = ( title => _g('Error'), - lang => $opts->{lang}, - print_title => 1, - print_search_field => 'packages', - search_field_values => { - keywords => _g('search for a package'), - searchon => 'default', - arch => 'any', - suite => 'all', - section => 'all', - exact => 1, - debug => $Packages::Search::debug, - }, - ); } 1;