[aur-dev] [PATCH/RFC] Add pkglist command to the RPC interface
This returns a list of all package names from the database. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- 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>&arg=<em>data</em></pre> @@ -35,6 +36,7 @@ else { <dt><tt>info</tt></dt><dd><tt>http://aur-url/rpc.php?type=info&arg=foobar</tt></dd> <dt><tt>multiinfo</tt></dt><dd><tt>http://aur-url/rpc.php?type=multiinfo&arg[]=foo&arg[]=bar</tt></dd> <dt><tt>msearch</tt></dt><dd><tt>http://aur-url/rpc.php?type=msearch&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&arg=foobar&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
participants (1)
-
Lukas Fleischer