From 448afde0d8c049b93f6f4e87dc9392a6bfdde409 Mon Sep 17 00:00:00 2001 From: Marcin Juszkiewicz Date: Thu, 24 Aug 2006 10:00:33 +0000 Subject: feed-browser: starting version of web browser for feeds (GPLv2 license) - show packages list - show sections list - show package information - allow to download package --- contrib/feed-browser/.mtn2git_empty | 0 contrib/feed-browser/css/.mtn2git_empty | 0 contrib/feed-browser/css/feed.css | 57 ++++ contrib/feed-browser/index.php | 540 ++++++++++++++++++++++++++++++++ contrib/feed-browser/update.php | 158 ++++++++++ 5 files changed, 755 insertions(+) create mode 100644 contrib/feed-browser/.mtn2git_empty create mode 100644 contrib/feed-browser/css/.mtn2git_empty create mode 100644 contrib/feed-browser/css/feed.css create mode 100644 contrib/feed-browser/index.php create mode 100644 contrib/feed-browser/update.php (limited to 'contrib/feed-browser') diff --git a/contrib/feed-browser/.mtn2git_empty b/contrib/feed-browser/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/contrib/feed-browser/css/.mtn2git_empty b/contrib/feed-browser/css/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/contrib/feed-browser/css/feed.css b/contrib/feed-browser/css/feed.css new file mode 100644 index 0000000000..fd9f65c5c1 --- /dev/null +++ b/contrib/feed-browser/css/feed.css @@ -0,0 +1,57 @@ +body +{ + color: #000; + background-color: #fff; + font-family: Sans; + padding: 0; + margin: 0; +} + +a +{ + text-decoration: none; + color: #0066cc +} + +table +{ + width: 100%; +} + +th +{ + font-weight: bold; +} + +td +{ + padding: 0 0.5em; + vertical-align: top; +} + +#page { + margin: 1em auto; + width: 80%; +} + +#letters +{ + margin: 1em 0; + text-align: center; +} + +h1 +{ + font-size: 125%; +} + +h2 +{ + font-size: 105%; +} + +#menu, #menu li +{ + display: inline; + list-style: none; +} diff --git a/contrib/feed-browser/index.php b/contrib/feed-browser/index.php new file mode 100644 index 0000000000..7921a42260 --- /dev/null +++ b/contrib/feed-browser/index.php @@ -0,0 +1,540 @@ + + + +Feed browser + + + + + +
+ + +
+ + +"; + $alfabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y'); + + foreach($alfabet as $letter) + { + if($letter == $searchletter) + { + $ipkgoutput .= sprintf(" %s |", $letter ); + } + else + { + $ipkgoutput .= sprintf(" %s |", $letter, $letter ); + } + } + + $ipkgoutput .= " z"; + + if(isset($searchletter)) + { + $ipkgoutput .= searchpkg("$searchletter%"); + } + + return $ipkgoutput; +} + +function searchpkg ($searchword) +{ + $result = db_query("SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_name LIKE '$searchword' ORDER BY p_name ASC;"); + + $ipkgoutput = "\n"; + $ipkgoutput .="\n"; + + foreach($result as $package) + { + if (!strstr ($package['p_name'], 'locale')) + { + if(strlen($package['p_desc']) > 40) + { + $pos = strpos($package['p_desc'],' ', 40); + + if($pos) + { + $package['p_desc'] = substr($package['p_desc'], 0, $pos) . '...'; + } + } + + $ipkgoutput .= sprintf + ("\n", + urlencode($package['p_name']), $package['p_name'], $package['p_section'], $package['p_section'], $package['p_desc']); + } + + } + + $ipkgoutput .= '
PackageSectionDescription
%s%s %s
'; + + return $ipkgoutput; +} + +function searchsection($section) +{ + $result= db_query("SELECT DISTINCT p_name,p_desc,p_section FROM packages WHERE p_section like '$section%' order by p_section asc, p_name asc;"); + + $ipkgoutput = "\n"; + $ipkgoutput .="\n"; + + foreach($result as $package) + { + if (!strstr ($package['p_name'], 'locale')) + { + if(strlen($package['p_desc'])> 40) + { + $pos = strpos($package['p_desc'],' ', 40); + + if($pos) + { + $package['p_desc'] = substr($package['p_desc'], 0, $pos) . '...'; + } + } + + $ipkgoutput .= sprintf ("", + urlencode($package['p_name']), + $package['p_name'], + $package['p_section'], $package['p_section'], + $package['p_desc']); + }//if strstr + } + + $ipkgoutput .= "
PackageSectionDescription
%s%s%s
\n"; + + return $ipkgoutput; +} + +function pkgdetails ($package) +{ + $result = db_query("SELECT * FROM packages,feeds WHERE packages.p_name='$package' AND feeds.f_name = packages.p_feed"); + + // display first result + + if ($result) + { + $package = $result[0]; + + $details = sprintf("

Package details for %s %s

", $package['packages.p_name'], $package['packages.p_version']); + $details .= sprintf ("

%s

", $package['packages.p_desc']); + $details .= ""; + + $details .= sprintf ("\n", htmlentities(str_replace('@', ' at ', $package['packages.p_maintainer']))); + + if($package['packages.p_homepage']) + { + $details .= sprintf ("\n", $package['packages.p_homepage']); + } + + if($package['packages.p_section']) + { + $details .= sprintf ("\n", $package['packages.p_section'],$package['packages.p_section']); + } + + if($package['packages.p_depends']) + { + $details .= sprintf ("\n", addlinks ($package['packages.p_depends'])); + } + + if($package['packages.p_recommends']) + { + $details .= sprintf ("\n", addlinks ($package['packages.p_recommends'])); + } + + if($package['packages.p_replaces']) + { + $details .= sprintf ("\n", addlinks ($package['packages.p_replaces'])); + } + + if($package['packages.p_provides']) + { + $details .= sprintf ("\n", addlinks ($package['packages.p_provides'])); + } + + if($package['packages.p_conflicts']) + { + $details .= sprintf ("\n", addlinks ($package['packages.p_conflicts'])); + } + + $size = $package['packages.p_size']; + + if(strlen($size) > 6) + { + $size = sprintf("%02.2f Megabytes", $size / (1024 * 1024)); + } + + if(strlen($size) > 3 && strlen($size) < 7) + { + $size = sprintf("%02.2f Kilobytes", $size / (1024 )); + } + + if(strlen($size) < 4) + { + $size = sprintf("%s Bytes", $size); + } + + $details .= sprintf ("\n
Maintainer:%s
Homepage:%s
Section:%s
Depends:%s
Recommends:%s
Replaces:%s
Provides:%s
Conflicts:%s
Size:%s
", $size); + + if($package['packages.p_source']) + { + $sourcearray = explode (" ", $package['packages.p_source']); + + $details .= "\n

Source:

'; + + } + + $details .= "\n

Available versions and architectures:

\n"; + } + else + { + $details = "

Sorry, package not found\n

return\n"; + } + + return $details; +} + +function addlinks ($input) +{ + // split input elements up + $elements = preg_split ('/[\s,]+/', $input); + + $offset = 0; + + foreach ($elements as $element) + { + // skip version information and empty elements (shouldn't happend) + if (!eregi('^([0-9a-z\-]*)$', $element) OR empty($element)) + { + continue; + } + + // do we have this package in the db? + $result = db_query ("SELECT DISTINCT p_name FROM packages WHERE p_name='{$element}'"); + + if(isset($result[0]['p_name'])) + { + // find position of string in line + $pos = strpos ($input, $element, $offset); + $link = sprintf("$element", urlencode ($element)); + + // replace element with a link + $input = substr_replace ($input, $link, $pos, strlen ($element)); + + // update offset + $offset = ($pos + strlen ($link)); + } + else + { + $offset += strlen ($element); + } + } + + + return $input; +} + +function sectionslist() +{ + $ipkgoutput = ''; + + if($result = db_query ("SELECT DISTINCT p_section FROM packages ORDER BY p_section")) + { + $ipkgoutput = "\n"; + } + + return $ipkgoutput; +} + +?> diff --git a/contrib/feed-browser/update.php b/contrib/feed-browser/update.php new file mode 100644 index 0000000000..5e5ba27e25 --- /dev/null +++ b/contrib/feed-browser/update.php @@ -0,0 +1,158 @@ += 2.4) +Provides: libfontconfig-utils +Replaces: libfontconfig-utils +Conflicts: libfontconfig-utils +Section: net +Architecture: armv5te +Maintainer: Angstrom Developers +MD5Sum: b8bd197224e24759d2162091a0fa727f +Size: 12346 +Filename: zeroconf_0.9-r0_armv5te.ipk +Source: http://www.progsoc.org/~wildfire/zeroconf/download/zeroconf-0.9.tar.gz file://zeroconf-default file://debian-zeroconf +Description: IPv4 link-local address allocator +*/ + + +$start = time(); +$p_count = 0; + + +$feeds = db_query("SELECT f_name, f_uri FROM feeds"); + +foreach($feeds as $feed) +{ + + print("Updating $feed[f_name]: $feed[f_uri]\n"); + db_query_n("DELETE FROM packages WHERE p_feed = '$feed[f_name]'"); + + $count = 0; + + $packagesgz_h = fopen("compress.zlib://$feed[f_uri]/Packages.gz", "r"); + if ($packagesgz_h) { + while (!feof($packagesgz_h)) { + $buffer = fscanf($packagesgz_h, "%[^:]: %[ -~]"); + list ($field, $value) = $buffer; + + + if($field == 'Package' && $count > 0) + { + insert_ipkgs ($package, $version, $depends, $section, $arch, $maintainer, $md5sum, $size, $file, $source, $desc,$feed[f_name], $conflicts, $provides, $replaces, $recommends); + unset($package, $version, $depends, $section, $arch, $maintainer, $md5sum, $size, $file, $source, $desc, $conflicts, $provides, $replaces, $recommends); + } + + + switch($field) + { + case 'Package': + $package = $value; + $count++; + break; + case 'Version': + $version = $value; + break; + case 'Depends': + $depends = $value; + break; + case 'Provides': + $provides = $value; + break; + case 'Recommends': + $recommends = $value; + break; + case 'Replaces': + $replaces = $value; + break; + case 'Conflicts': + $conflicts = $value; + break; + case 'Section': + $section = $value; + break; + case 'Architecture': + $arch = $value; + break; + case 'Maintainer': + $maintainer = str_replace("'","\"", $value); + break; + case 'MD5sum': + $md5sum = $value; + break; + case 'Size': + $size = $value; + break; + case 'Filename': + $file = $value; + break; + case 'Source': + $source = $value; + break; + case 'Description': + $desc = str_replace("'","\"", $value); + break; + } + + } + insert_ipkgs ($package, $version, $depends, $section, $arch, $maintainer, $md5sum, $size, $file, $source, $desc,$feed[f_name], $conflicts, $provides, $replaces, $recommends); + } + +$p_count = $count + $p_count; +gzclose($packagesgz_h); +} +//close the db + +$end = time(); +$difference = $end - $start; + +$days = floor($difference/86400); +$difference = $difference - ($days*86400); + +$hours = floor($difference/3600); +$difference = $difference - ($hours*3600); + +$minutes = floor($difference/60); +$difference = $difference - ($minutes*60); + +$seconds = $difference; + +print "Added $p_count packages in $days days, $hours hours, $minutes minutes and $seconds seconds \n"; + + +function insert_ipkgs ($package, $version, $depends, $section, $arch, $maintainer, $md5sum, $size, $file, $source, $desc, $feed, $conflicts, $provides, $replaces, $recommends) +{ + db_query_n( + "INSERT INTO packages (p_name, p_version, p_depends, p_arch, p_maintainer, p_section, p_size, p_md5, p_source, p_desc, p_feed, p_file, p_conflicts, p_provides, p_replaces, p_recommends) + VALUES ('$package', '$version', '$depends', '$arch', '$maintainer', '$section', '$size', '$md5sum', '$source', '$desc', '$feed', '$file', '$conflicts', '$provides', '$replaces', '$recommends') + "); +} + + +function db_query($query) +{ + $db_name = "/home/koen/feeds.db"; + $db_h = sqlite_open($db_name); + $query_h = sqlite_query ($db_h, $query); + $result = sqlite_fetch_all ($query_h, SQLITE_ASSOC); + sqlite_close($db_h); + return ($result); +} + + +function db_query_n($query) +{ + $db_name = "/home/koen/feeds.db"; + $db_h = sqlite_open($db_name); + $query_h = sqlite_query ($db_h, $query); + sqlite_close($db_h); + return ($result); +} + + + +?> -- cgit 1.2.3-korg