[kde-services-devel] r531 - trunk/hotstuff/src

josef at new.kstuff.org josef at new.kstuff.org
Sat Oct 3 18:21:37 CEST 2009


Author: josef
Date: 2009-10-03 18:21:36 +0200 (Sat, 03 Oct 2009)
New Revision: 531

Removed:
   trunk/hotstuff/src/hotstuff-search
Modified:
   trunk/hotstuff/src/hotstuff-stuff
Log:
- merge hotstuff-search functionality into hotstuff-stuff
- this includes both an (improved) RSS feed and restriction of items based on name/summary search phrases



Deleted: trunk/hotstuff/src/hotstuff-search
===================================================================
--- trunk/hotstuff/src/hotstuff-search	2009-10-03 15:41:33 UTC (rev 530)
+++ trunk/hotstuff/src/hotstuff-search	2009-10-03 16:21:36 UTC (rev 531)
@@ -1,70 +0,0 @@
-#!/usr/bin/perl
-#
-# OpenSearch frontend for the Hotstuff database
-# Copyright (C) 2005 - 2009 Josef Spillner <josef at kstuff.org>
-# Published under 'GNU AGPLv3 or later' conditions
-
-binmode STDOUT, ":encoding(utf-8)";
-
-use CGI;
-use XML::Writer;
-use DBI;
-use strict;
-
-my $default_config = "/etc/hotstuff.conf";
-
-use vars qw($dbhost $dbname $dbuser $dbpass);
-require $default_config;
-
-my $query = new CGI;
-
-$query->import_names("params");
-
-my $conn = DBI->connect("DBI:Pg:host=$dbhost;dbname=$dbname;user=$dbuser;password=$dbpass");
-$conn || die DBI::errstr;
-
-my %results;
-my ($index, $content);
-my $res = $conn->prepare("SELECT index, content FROM contents " .
-	"WHERE type = 'summary' AND content LIKE '\%$params::q\%';");
-$res->execute();
-$res->bind_columns(\$index, \$content);
-while($res->fetch()){
-	my $name;
-	my $res2 = $conn->prepare("SELECT name FROM directory WHERE meta_ref = $index");
-	$res2->execute();
-	$res2->bind_columns(\$name);
-	if($res2->fetch()){
-		my @res = ($name, $content);
-		$results{$name} = \@res;
-	}
-}
-
-print "Content-type: text/xml\n\n";
-
-my $writer = new XML::Writer(DATA_MODE => 1);
-
-$writer->xmlDecl("UTF-8");
-$writer->startTag("rss", "version" => "2.0");
-$writer->startTag("channel");
-
-$writer->dataElement("title", "Get Hot New Stuff Repository Search");
-$writer->dataElement("link", "http://ghns.freedesktop.org/");
-$writer->dataElement("description", "Find content for your desktop.");
-
-foreach my $resultkey(keys(%results)){
-	my $resref = $results{$resultkey};
-	my @res = @$resref;
-	my ($name, $content) = @res;
-
-	$writer->startTag("item");
-	$writer->dataElement("title", $name);
-	$writer->dataElement("link", "http://ghns.freedesktop.org/");
-	$writer->dataElement("description", $content);
-	$writer->endTag("item");
-}
-
-$writer->endTag("channel");
-$writer->endTag("rss");
-$writer->end();
-

Modified: trunk/hotstuff/src/hotstuff-stuff
===================================================================
--- trunk/hotstuff/src/hotstuff-stuff	2009-10-03 15:41:33 UTC (rev 530)
+++ trunk/hotstuff/src/hotstuff-stuff	2009-10-03 16:21:36 UTC (rev 531)
@@ -55,6 +55,9 @@
 	$format = "knewstuff";
 }
 
+if($params::q ne ""){
+	$dbquery = "$dbquery AND meta_ref IN (SELECT DISTINCT index FROM contents WHERE (type = 'summary' OR type = 'name') AND content LIKE '\%$params::q\%')";
+}
 if($params::category ne ""){
 	$dbquery = "$dbquery AND category = '$params::category'";
 }
@@ -77,6 +80,9 @@
 if($params::format ne ""){
 	if($params::format eq "knewstuff"){
 		$format = "knewstuff";
+	}elsif($params::format eq "rss"){
+		$format = "rss";
+		$alllanguages = 0;
 	}
 }
 
@@ -189,16 +195,30 @@
 	$results{$oldname} = \@result;
 }
 
-print $query->header(
-	-type => "text/xml",
-	-charset => "utf-8",
-	-attachment => "stuff.xml"
-);
+if($format eq "rss"){
+	print $query->header(
+		-type => "text/plain",
+		-charset => "utf-8"
+	);
+}else{
+	print $query->header(
+		-type => "text/xml",
+		-charset => "utf-8",
+		-attachment => "stuff.xml"
+	);
+}
 
 my $writer = new XML::Writer(DATA_MODE => 1);
 
 $writer->xmlDecl("UTF-8");
-if($format eq "knewstuff"){
+if($format eq "rss"){
+	$writer->startTag("rss", "version" => "2.0");
+	$writer->startTag("channel");
+
+	$writer->dataElement("title", "Get Hot New Stuff Repository Search");
+	$writer->dataElement("link", "http://ghns.freedesktop.org/");
+	$writer->dataElement("description", "Find content for your desktop.");
+}elsif($format eq "knewstuff"){
 	$writer->startTag("knewstuff");
 }else{
 	# Add new attribute @notapproved to feed top-level element
@@ -266,80 +286,104 @@
 	my $preview = $previews{@previewkeys[0]};
 	my ($previewurl, $payloadurl);
 
-	if($format eq "knewstuff"){
+	if($format eq "rss"){
+		$writer->startTag("item");
+	}elsif($format eq "knewstuff"){
 		$writer->startTag("stuff", "type" => $category);
 	}elsif($format eq "ghns-experimental"){
 		$writer->startTag("stuff", "category" => $category, "id" => $entryid);
 	}else{
 		$writer->startTag("stuff", "category" => $category);
 	}
-	foreach my $lang(keys(%names)){
-		$name = $names{$lang};
-		$nameinfo{"lang"} = $lang;
-		$writer->dataElement("name", $name, %nameinfo);
-	}
-	if($format ne "knewstuff"){
-		if($webpage ne ""){
-			$writer->dataElement("webpage", $webpage);
+
+	if($format eq "rss"){
+		foreach my $lang(keys(%names)){
+			$name = $names{$lang};
+			$writer->dataElement("title", $name);
 		}
-	}
-	$writer->dataElement("author", $author, %authorinfo);
-	$writer->dataElement("licence", $licence, %licenceinfo);
-	$writer->dataElement("rating", $rating);
-	$writer->dataElement("downloads", $downloads);
-	$writer->dataElement("version", $version);
-	if($format eq "knewstuff"){
-		$writer->dataElement("release", $release);
-	}
-	$writer->dataElement("releasedate", $releasedate);
-	foreach my $lang(keys(%summaries)){
-		$summary = $summaries{$lang};
-		$summaryinfo{"lang"} = $lang;
-		$writer->startTag("summary", %summaryinfo);
-		$writer->cdata($summary);
-		$writer->endTag("summary");
-	}
-	foreach my $lang(keys(%previews)){
-		$preview = $previews{$lang};
-		if(!$repository){
-			$preview = "$category/$preview";
+		$writer->dataElement("author", $author);
+		$writer->dataElement("link", "http://newstuff.kde.org/repo/$params::site/");
+		foreach my $lang(keys(%summaries)){
+			$summary = $summaries{$lang};
+			$writer->dataElement("description", $summary);
 		}
-		$previewinfo{"lang"} = $lang;
-		if($accessurl ne ""){
-			if($params::site ne ""){
-				$previewurl = "$accessurl?file=$preview&site=$params::site";
-			}else{
-				$previewurl = "$accessurl?file=$preview";
+	}else{
+		foreach my $lang(keys(%names)){
+			$name = $names{$lang};
+			$nameinfo{"lang"} = $lang;
+			$writer->dataElement("name", $name, %nameinfo);
+		}
+		if($format ne "knewstuff"){
+			if($webpage ne ""){
+				$writer->dataElement("webpage", $webpage);
 			}
-		}else{
-			$previewurl = "$baseurl/$preview";
 		}
-		$writer->dataElement("preview", $previewurl, %previewinfo);
-	}
-	foreach my $lang(keys(%payloads)){
-		$payload = $payloads{$lang};
-		if(!$repository){
-			$payload = "$category/$payload";
+		$writer->dataElement("author", $author, %authorinfo);
+		$writer->dataElement("licence", $licence, %licenceinfo);
+		$writer->dataElement("rating", $rating);
+		$writer->dataElement("downloads", $downloads);
+		$writer->dataElement("version", $version);
+		if($format eq "knewstuff"){
+			$writer->dataElement("release", $release);
 		}
-		$payloadinfo{"lang"} = $lang;
-		if($accessurl ne ""){
-			if($params::site ne ""){
-				$payloadurl = "$accessurl?file=$payload&site=$params::site";
+		$writer->dataElement("releasedate", $releasedate);
+		foreach my $lang(keys(%summaries)){
+			$summary = $summaries{$lang};
+			$summaryinfo{"lang"} = $lang;
+			$writer->startTag("summary", %summaryinfo);
+			$writer->cdata($summary);
+			$writer->endTag("summary");
+		}
+		foreach my $lang(keys(%previews)){
+			$preview = $previews{$lang};
+			if(!$repository){
+				$preview = "$category/$preview";
+			}
+			$previewinfo{"lang"} = $lang;
+			if($accessurl ne ""){
+				if($params::site ne ""){
+					$previewurl = "$accessurl?file=$preview&site=$params::site";
+				}else{
+					$previewurl = "$accessurl?file=$preview";
+				}
 			}else{
-				$payloadurl = "$accessurl?file=$payload";
+				$previewurl = "$baseurl/$preview";
 			}
-		}else{
-			$payloadurl = "$baseurl/$payload";
+			$writer->dataElement("preview", $previewurl, %previewinfo);
 		}
-		$writer->dataElement("payload", $payloadurl, %payloadinfo);
+		foreach my $lang(keys(%payloads)){
+			$payload = $payloads{$lang};
+			if(!$repository){
+				$payload = "$category/$payload";
+			}
+			$payloadinfo{"lang"} = $lang;
+			if($accessurl ne ""){
+				if($params::site ne ""){
+					$payloadurl = "$accessurl?file=$payload&site=$params::site";
+				}else{
+					$payloadurl = "$accessurl?file=$payload";
+				}
+			}else{
+				$payloadurl = "$baseurl/$payload";
+			}
+			$writer->dataElement("payload", $payloadurl, %payloadinfo);
+		}
+		if($signature ne ""){
+			$writer->dataElement("signature", $signature);
+		}
 	}
-	if($signature ne ""){
-		$writer->dataElement("signature", $signature);
+
+	if($format eq "rss"){
+		$writer->endTag("item");
+	}else{
+		$writer->endTag("stuff");
 	}
-	$writer->endTag("stuff");
 }
 
-if($format eq "knewstuff"){
+if($format eq "rss"){
+	$writer->endTag("channel");
+	$writer->endTag("rss");
+}elsif($format eq "knewstuff"){
 	$writer->endTag("knewstuff");
 }else{
 	$writer->endTag("ghnsdownload");



More information about the kde-services-devel mailing list