From db61ae39293dac1cee275bb182ccf842f7e2de89 Mon Sep 17 00:00:00 2001 From: guinux Date: Fri, 21 Nov 2014 15:19:46 +0100 Subject: [PATCH] fix multiple words search in AUR --- src/aur.vala | 58 +++++++++++++++++++++------------ src/aur3.vala | 72 ----------------------------------------- src/manager_window.vala | 2 +- 3 files changed, 39 insertions(+), 93 deletions(-) delete mode 100644 src/aur3.vala diff --git a/src/aur.vala b/src/aur.vala index 5fa661c..27928c8 100644 --- a/src/aur.vala +++ b/src/aur.vala @@ -17,8 +17,6 @@ * along with this program. If not, see . */ -//~ const string srcpkgdir = "/tmp/pamac"; - namespace AUR { // AUR urls const string aur_url = "http://aur.archlinux.org"; @@ -29,33 +27,57 @@ namespace AUR { const string rpc_multiinfo_arg = "&arg[]="; const string aur_url_id = "/packages.php?setlang=en&ID="; - public Json.Array search (string needle) { - string uri = rpc_url + rpc_search + needle; + public Json.Array search (string[] needles) { + Json.Array prev_inter = new Json.Array (); + string uri = rpc_url + rpc_search + Uri.escape_string (needles[0]); var session = new Soup.Session (); var message = new Soup.Message ("GET", uri); + var parser = new Json.Parser (); + unowned Json.Object root_object; session.send_message (message); - Json.Array results = new Json.Array (); - try { - var parser = new Json.Parser (); parser.load_from_data ((string) message.response_body.flatten ().data, -1); - - unowned Json.Object root_object = parser.get_root ().get_object (); - results = root_object.get_array_member ("results"); -//~ foreach (unowned Json.Node node in results.get_elements ()) { -//~ Json.Object pkg_info = node.get_object (); -//~ results.append (new Pamac.Package (null, pkg_info)); -//~ } + root_object = parser.get_root ().get_object (); + prev_inter = root_object.get_array_member ("results"); } catch (Error e) { print (e.message); } - return results; + int length = needles.length; + if (length == 1) + return prev_inter; + int i = 1; + Json.Array inter = new Json.Array (); + Json.Array found = new Json.Array (); + while (i < length) { + inter = new Json.Array (); + uri = rpc_url + rpc_search + Uri.escape_string (needles[i]); + message = new Soup.Message ("GET", uri); + session.send_message (message); + try { + parser.load_from_data ((string) message.response_body.flatten ().data, -1); + root_object = parser.get_root ().get_object (); + found = root_object.get_array_member ("results"); + } catch (Error e) { + print (e.message); + } + foreach (Json.Node prev_inter_node in prev_inter.get_elements ()) { + foreach (Json.Node found_node in found.get_elements ()) { + if (strcmp (prev_inter_node.get_object ().get_string_member ("Name"), + found_node.get_object ().get_string_member ("Name")) == 0) { + inter.add_element (prev_inter_node); + } + } + } + if (i != (length -1)) + prev_inter = inter; + i += 1; + } + return inter; } public Json.Object? info (string pkgname) { unowned Json.Object? pkg_info = null; string uri = rpc_url + rpc_info + pkgname; - stdout.printf("get %s from AUR\n", pkgname); var session = new Soup.Session (); var message = new Soup.Message ("GET", uri); session.send_message (message); @@ -90,10 +112,6 @@ namespace AUR { unowned Json.Object root_object = parser.get_root ().get_object (); results = root_object.get_array_member ("results"); -//~ foreach (var node in results.get_elements ()) { -//~ var pkg_info = node.get_object (); -//~ results.append (new Pamac.Package (null, pkg_info)); -//~ } } catch (Error e) { print (e.message); } diff --git a/src/aur3.vala b/src/aur3.vala deleted file mode 100644 index df90424..0000000 --- a/src/aur3.vala +++ /dev/null @@ -1,72 +0,0 @@ -/* - * pamac-vala - * - * Copyright (C) 2014 Guillaume Benoit - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a get of the GNU General Public License - * along with this program. If not, see . - */ - -//~ const string srcpkgdir = "/tmp/pamac"; - -namespace AUR { - // AUR urls - const string aur_url = "http://aur3.org/"; - - - public string[] search (string needle) { - string[] results = {}; - try { - // Resolve hostname to IP address - var resolver = Resolver.get_default (); - var addresses = resolver.lookup_by_name (host, null); - var address = addresses.nth_data (0); - // Connect - var client = new SocketClient (); - var conn = client.connect (new InetSocketAddress (address, 1819)); - // Send HTTP GET request - var message = @"nd $query"; - conn.output_stream.write (message.data); - // Receive response - var response = new DataInputStream (conn.input_stream); - string line; - while ((line = response.read_line (null)) != null) { - results += line; - } - } catch (Error e) { - stderr.printf ("%s\n", e.message); - } - return results; - } - - public void info (string pkgname) { - string uri = rpc_url + rpc_info + pkgname; - var session = new Soup.Session (); - var message = new Soup.Message ("GET", uri); - session.send_message (message); - - try { - var parser = new Json.Parser (); - parser.load_from_data ((string) message.response_body.flatten ().data, -1); - - var root_object = parser.get_root ().get_object (); - var pkg_info = root_object.get_object_member ("results"); - AUR.Pkg aur_pkg = new AUR.Pkg (pkg_info); - stdout.printf ("got %s (%s)\n", aur_pkg.name, aur_pkg.license); - } catch (Error e) { - stderr.printf ("Failed to get infos about %s from AUR\n", pkgname); - print (e.message); - } - } - -} diff --git a/src/manager_window.vala b/src/manager_window.vala index a8bdcd4..26cdcad 100644 --- a/src/manager_window.vala +++ b/src/manager_window.vala @@ -466,7 +466,7 @@ namespace Pamac { if (aur_results.contains (search_string)) { aur_pkgs = aur_results.get (search_string); } else { - aur_pkgs = AUR.search (search_string); + aur_pkgs = AUR.search (splitted); aur_results.insert (search_string, aur_pkgs); } } else {