[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