]> git.donarmstrong.com Git - infobot.git/commitdiff
added &searchDesc() if &searchContents() fails
authordms <dms@c11ca15a-4712-0410-83d8-924469b57eb5>
Sat, 16 Sep 2000 14:11:28 +0000 (14:11 +0000)
committerdms <dms@c11ca15a-4712-0410-83d8-924469b57eb5>
Sat, 16 Sep 2000 14:11:28 +0000 (14:11 +0000)
git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@106 c11ca15a-4712-0410-83d8-924469b57eb5

src/Modules/Debian.pl

index 6cb330a02f2520a9b77da472a2b6463da8b9be25..3482b0a97861dd84d49234439a560c993fe76950 100644 (file)
@@ -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 (<IN>) {
+       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 {