From: timriker <timriker@c11ca15a-4712-0410-83d8-924469b57eb5>
Date: Sat, 2 Nov 2002 02:57:20 +0000 (+0000)
Subject: fix freshmeat for dbm, (should not break others)
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=61643a72c366f13e2332f24f63bbf82bd9db45e7;p=infobot.git

fix freshmeat for dbm, (should not break others)


git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@584 c11ca15a-4712-0410-83d8-924469b57eb5
---

diff --git a/src/Modules/Freshmeat.pl b/src/Modules/Freshmeat.pl
index c33685f..f543c54 100644
--- a/src/Modules/Freshmeat.pl
+++ b/src/Modules/Freshmeat.pl
@@ -22,7 +22,7 @@ sub Freshmeat {
     my $refresh	= &::getChanConfDefault("freshmeatRefreshInterval",
 			"", 24) * 60 * 60 * 7;
 
-    my $last_refresh = &::dbGet("freshmeat", "latest_version", "projectname_short='_'");
+    my $last_refresh = &::dbGet("freshmeat", "latest_version", "projectname_short=".&::dbQuote('_'));
     my $renewtable   = 0;
 
     if (defined $last_refresh and $last_refresh =~ /^\d+$/) {
@@ -35,8 +35,7 @@ sub Freshmeat {
     if ($renewtable) {
 	if ($$ == $::bot_pid) {
 	    &::Forker("freshmeat", sub {
-		&downloadIndex();
-		&Freshmeat($sstr);
+		&Freshmeat($sstr) if &downloadIndex();
 	    } );
 	    # both parent/fork runs here, in case the following looks weird.
 	} else {
@@ -82,21 +81,25 @@ sub Freshmeat {
     }
 }
 
-sub showPackage {
+sub packageText {
     my ($pkg)	= @_;
-    my @fm	= &::dbGet("freshmeat", "*",
-			"projectname_short=".&::dbQuote($pkg) );
+    my %fm	= &::dbGetColNiceHash("freshmeat", "*", "projectname_short=".&::dbQuote($pkg));
 
-    if (scalar @fm) {		#1: perfect match of name.
+    if (scalar keys %fm) {		#1: perfect match of name.
 	my $retval;
-	$retval  = "$fm[0] \002(\002$fm[5]\002)\002, ";
-#	$retval .= "section $fm[3], ";
-	$retval .= "is $fm[2]. ";
-	$retval .= "Version: \002$fm[1]\002, ";
-#	$retval .= "Development: \002$fm[2]\002. ";
-	$retval .= $fm[4];
-### ???
-#	$retval .= " deb: ".$fm[3] if ($fm[3] ne ""); # 'deb'.
+	$retval  = "$fm{'projectname_short'} \002(\002$fm{'desc_short'}\002)\002, ";
+	$retval .= "is $fm{'license'}. ";
+	$retval .= "Version: \002$fm{'latest_version'}\002, $fm{'url_homepage'}";
+	return $retval;
+    } else {
+	return;
+    }
+}
+
+sub showPackage {
+    my ($pkg) = @_;
+    my ($retval);
+    if ($retval = packageText($pkg)) {
 	&::performStrictReply($retval);
 	return 1;
     } else {
@@ -105,23 +108,8 @@ sub showPackage {
 }
 
 sub randPackage {
-    my @fm	= &::randKey("freshmeat","*");
-
-    if (scalar @fm) {		#1: perfect match of name.
-	my $retval;
-	$retval  = "$fm[0] \002(\002$fm[5]\002)\002, ";
-#	$retval .= "section $fm[3], ";
-	$retval .= "is $fm[2]. ";
-	$retval .= "Version: \002$fm[1]\002, ";
-#	$retval .= "Development: \002$fm[2]\002. ";
-	$retval .= $fm[4];
-### ???
-#	$retval .= " deb: ".$fm[3] if ($fm[3] ne ""); # 'deb'.
-
-	return $retval;
-    } else {
-	return;
-    }
+    my @fm = &::randKey("freshmeat","*");
+    return &packageText($fm[0]);
 }
 
 sub downloadIndex {
@@ -130,7 +118,7 @@ sub downloadIndex {
 
     if (!&::loadPerlModule("XML::Parser")) {
 	&::WARN("don't have xml::parser...");
-	return;
+	return 0;
     }
     my $p = new XML::Parser(Style => 'Objects');
     my %pkg;
@@ -161,14 +149,14 @@ sub downloadIndex {
 
     if (! -e $idx) {
 	&::msg($::who, "the freshmeat butcher is closed.");
-	return;
+	return 0;
     }
 
     if ( -s $idx < 100000) {
 	&::DEBUG("FM: index too small?");
 	unlink $idx;
 	&::msg($::who, "internal error?");
-	return;
+	return 0;
     }
 
     if ($idx =~ /bz2$/) {
@@ -187,7 +175,7 @@ sub downloadIndex {
     &::dbSet("freshmeat", 
 	{ "projectname_short"	=> "_" },
 	{ "latest_version"	=> time(),
-	  "desc_short"		=> "" }
+	  "desc_short"		=> "dummy project to track date" }
     );
 
 #    &::dbRaw("LOCK", "LOCK TABLES freshmeat WRITE");
@@ -256,6 +244,7 @@ sub downloadIndex {
 
     my $count = &::countKeys("freshmeat");
     &::status("Freshmeat: $count entries loaded.");
+    return 1;
 }
 
 sub freshmeatAnnounce {
@@ -342,7 +331,7 @@ sub xml_end {
 	$i++;
 	my %data;
 	foreach(@cols) {
-	    $data{$_} = $pkg{$_};
+	    $data{$_} = $pkg{$_} if ($pkg{$_});
 	}
 	&::dbReplace("freshmeat", "projectname_short", %data);
 	undef %data;
diff --git a/src/db_dbm.pl b/src/db_dbm.pl
index e1ff747..b40e6e5 100644
--- a/src/db_dbm.pl
+++ b/src/db_dbm.pl
@@ -12,7 +12,6 @@ if (&IsParam('useStrict')) { use strict;}
 
 use vars qw(%factoids %freshmeat %seen %rootwarn);	# db hash.
 
-
 {
     my %formats = (
 	'factoids', [
@@ -29,18 +28,11 @@ use vars qw(%factoids %freshmeat %seen %rootwarn);	# db hash.
 	    'locked_time'
 	],
 	'freshmeat', [
-	    'name',
-	    'stable',
-	    'devel',
-	    'section',
+	    'projectname_short',
+	    'latest_version',
 	    'license',
-	    'homepage',
-	    'download',
-	    'changelog',
-	    'deb',
-	    'rpm',
-	    'link',
-	    'oneliner'
+	    'url_homepage',
+	    'desc_short'
 	],
 	'rootwarn', [
 	    'nick',
@@ -144,14 +136,14 @@ sub dbGet {
 	return(@retval);
     }
 
-    &DEBUG("dbGet: select => '$select'.");
+    &DEBUG("dbGet: select=>'$select'.");
     my @array = split "$;", ${"$table"}{lc $val};
     unshift(@array,$key);
     for (0 .. $#format) {
 	my $str = $format[$_];
 	next unless (grep /^$str$/, split(/\,/, $select));
 	$array[$_] ||= '';
-	&DEBUG("dG: pushing $format[$_]=>'$array[$_]'.");
+	&DEBUG("dG: '$format[$_]'=>'$array[$_]'.");
 	push(@retval, $array[$_]);
     }
 
@@ -210,13 +202,13 @@ sub dbInsert {
 	$array[$i - 1]=$hash{$col};
 	$array[$i - 1]='' unless $array[$i - 1];
 	delete $hash{$col};
-	&DEBUG("dbI: setting $table->$primkey\{$col\} => '$array[$i - 1]'.");
+	&DEBUG("dbI: '$col'=>'$array[$i - 1]'");
     }
 
     if (scalar keys %hash) {
 	&ERROR("dbI: not added...");
 	foreach (keys %hash) {
-	    &ERROR("dbI:   '$_' => '$hash{$_}'");
+	    &ERROR("dbI: '$_'=>'$hash{$_}'");
 	}
 	return 0;
     }
@@ -227,7 +219,7 @@ sub dbInsert {
 }
 
 sub dbUpdate {
-    &FIXME("STUB: &dbUpdate(@_); => somehow use dbInsert!");
+    &FIXME("STUB: &dbUpdate(@_);=>somehow use dbInsert!");
 }
 
 #####
@@ -296,6 +288,7 @@ sub dbSet {
     my $where = $key . "=" . $phref->{$key};
 
     my %hash = &dbGetColNiceHash($table, "*", $where);
+    $hash{$key}=$phref->{$key};
     foreach (keys %{$href}) {
 	&DEBUG("dbSet: setting $_=${$href}{$_}");
 	$hash{$_} = ${$href}{$_};
@@ -327,7 +320,22 @@ sub getKeys {
 }
 
 sub randKey {
-    &FIXME("STUB: &randKey(@_);");
+    &DEBUG("STUB: &randKey(@_);");
+    my @format = &dbGetColInfo($table);
+    if (!scalar @format) {
+	return;
+    }
+
+    my $rand = int(rand(&countKeys($table) - 1));
+    my @keys = keys %{$table};
+    &dbGet($table, '*', "@format[0]=@keys[$rand]");
+}
+
+#####
+# Usage: &deleteTable($table);
+sub deleteTable {
+    my ($table) = @_;
+    &FIXME("STUB: deleteTable($table)");
 }
 
 ##### $select is misleading???