From 845b5d994eac8849aeba80aa2fa5d83627045315 Mon Sep 17 00:00:00 2001 From: dms Date: Sat, 16 Sep 2000 14:11:28 +0000 Subject: [PATCH] added &searchDesc() if &searchContents() fails git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@106 c11ca15a-4712-0410-83d8-924469b57eb5 --- src/Modules/Debian.pl | 77 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/src/Modules/Debian.pl b/src/Modules/Debian.pl index 6cb330a..3482b0a 100644 --- a/src/Modules/Debian.pl +++ b/src/Modules/Debian.pl @@ -276,7 +276,12 @@ sub searchContents { &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0); my $prefix = "Debian Search of '$query' "; - &main::performStrictReply( &main::formListReply(0, $prefix, @list) ); + if (scalar @list) { # @list. + &main::performStrictReply( &main::formListReply(0, $prefix, @list) ); + } else { # !@list. + &main::DEBUG("ok, !\@list, searching desc for '$query'."); + &searchDesc($query); + } } #### @@ -370,6 +375,76 @@ sub searchAuthor { &main::performStrictReply( &main::formListReply(0, $prefix, @pkg) ); } +#### +# Usage: &searchDesc($query); +sub searchDesc { + my ($dist, $query) = &getDistroFromStr($_[0]); + &main::DEBUG("searchDesc: dist => '$dist', query => '$query'."); + $query =~ s/^\s+|\s+$//g; + + # start of search. + my $start_time = &main::gettimeofday(); + &main::status("Debian: starting desc search."); + + my $files; + my ($bad,$good) = (0,0); + my %urls = %urlpackages; + + foreach (keys %urlpackages) { + s/##DIST/$dist/g; + + if (! -f $_) { + $bad++; + next; + } + + $good++; + $files .= " ".$_; + } + + &main::DEBUG("good = $good, bad = $bad..."); + + if ($good == 0 and $bad != 0) { + my %urls = &fixDist($dist, %urlpackages); + &main::DEBUG("deb: download 2c."); + if (!&DebianDownload($dist, %urls)) { + &main::ERROR("Debian(sD): could not download files."); + return; + } + } + + my (%desc, $package); + open(IN,"zegrep -h '^Package|^Description' $files |"); + while () { + if (/^Package: (\S+)$/) { + $package = $1; + } elsif (/^Description: (.*)$/) { + my $desc = $1; + next unless ($desc =~ /\Q$query\E/i); + $desc{$package} = $desc; + } else { + &main::WARN("invalid line: '$_'."); + } + } + close IN; + + my @list = keys %desc; + if (!scalar @list) { + my $prefix = "Debian Desc Search of '$query' "; + &main::performStrictReply( &main::formListReply(0, $prefix, ) ); + } elsif (scalar @list == 1) { # list = 1. + &main::DEBUG("list == 1; showing package info of '$query'."); + &infoPackages("info", $query); + } else { # list > 1. + my $prefix = "Debian Desc Search of '$query' "; + &main::performStrictReply( &main::formListReply(0, $prefix, @list) ); + } + + # show how long it took. + my $delta_time = &main::gettimeofday() - $start_time; + &main::status(sprintf("Debian: %.02f sec to complete query.", $delta_time)) if ($delta_time > 0); +} + #### # Usage: &generateIncoming(); sub generateIncoming { -- 2.39.2