This returns a list of all package names from the database.

Signed-off-by: Lukas Fleischer <[email protected]>
---
What do you think about this? Does this sound like a useful feature? Do
we need to cache the results?

 web/html/rpc.php          |  2 ++
 web/lib/aurjson.class.php | 33 +++++++++++++++++++++++++++++----
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/web/html/rpc.php b/web/html/rpc.php
index 415dcb8..f43792a 100644
--- a/web/html/rpc.php
+++ b/web/html/rpc.php
@@ -24,6 +24,7 @@ else {
   <li><tt>info</tt></li>
   <li><tt>multiinfo</tt></li>
   <li><tt>msearch</tt></li>
+  <li><tt>pkglist</tt></li>
 </ul>
 <p>Each method requires the following HTTP GET syntax:</p>
 <pre>type=<em>methodname</em>&amp;arg=<em>data</em></pre>
@@ -35,6 +36,7 @@ else {
   
<dt><tt>info</tt></dt><dd><tt>http://aur-url/rpc.php?type=info&amp;arg=foobar</tt></dd>
   
<dt><tt>multiinfo</tt></dt><dd><tt>http://aur-url/rpc.php?type=multiinfo&amp;arg[]=foo&amp;arg[]=bar</tt></dd>
   
<dt><tt>msearch</tt></dt><dd><tt>http://aur-url/rpc.php?type=msearch&amp;arg=john</tt></li></dd>
+  
<dt><tt>pkglist</tt></dt><dd><tt>http://aur-url/rpc.php?type=pkglist</tt></li></dd>
   
<dt>Callback</dt><dd><tt>http://aur-url/rpc.php?type=search&amp;arg=foobar&amp;callback=jsonp1192244621103</tt></dd>
 </dl>
 </body></html>
diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index 50d859c..bc42ac4 100644
--- a/web/lib/aurjson.class.php
+++ b/web/lib/aurjson.class.php
@@ -13,7 +13,7 @@ class AurJSON {
        private $dbh = false;
        private $version = 1;
        private static $exposed_methods = array(
-               'search', 'info', 'multiinfo', 'msearch', 'suggest'
+               'search', 'info', 'multiinfo', 'msearch', 'suggest', 'pkglist'
        );
        private static $fields_v1 = array(
                'Packages.ID', 'Packages.Name',
@@ -63,8 +63,11 @@ class AurJSON {
                        return $this->json_error('Invalid version specified.');
                }
 
-               if (!isset($http_data['type']) || !isset($http_data['arg'])) {
-                       return $this->json_error('No request type/data 
specified.');
+               if (!isset($http_data['type'])) {
+                       return $this->json_error('No request type specified.');
+               }
+               if ($http_data['type'] != 'pkglist' && 
!isset($http_data['arg'])) {
+                       return $this->json_error('No request argument 
specified.');
                }
                if (!in_array($http_data['type'], self::$exposed_methods)) {
                        return $this->json_error('Incorrect request type 
specified.');
@@ -72,7 +75,11 @@ class AurJSON {
 
                $this->dbh = DB::connect();
 
-               $json = call_user_func(array(&$this, $http_data['type']), 
$http_data['arg']);
+               if (isset($http_data['arg'])) {
+                       $json = call_user_func(array(&$this, 
$http_data['type']), $http_data['arg']);
+               } else {
+                       $json = call_user_func(array(&$this, 
$http_data['type']));
+               }
 
                $etag = md5($json);
                header("Etag: \"$etag\"");
@@ -387,5 +394,23 @@ class AurJSON {
 
                return json_encode($result_array);
        }
+
+       /*
+        * Get the names of all packages.
+        *
+        * @return string The JSON formatted response data.
+        */
+       private function pkglist() {
+               $query = 'SELECT Name FROM Packages';
+
+               $result = $this->dbh->query($query);
+               $result_array = array();
+
+               if ($result) {
+                       $result_array = $result->fetchAll(PDO::FETCH_COLUMN, 0);
+               }
+
+               return $this->json_results('pkglist', count($result_array), 
$result_array);
+       }
 }
 
-- 
1.9.2

Reply via email to