From bbf8f5eb50588dcae976cc1e5bba8608757b1888 Mon Sep 17 00:00:00 2001 From: guinux Date: Fri, 19 Feb 2016 16:32:10 +0100 Subject: [PATCH] display deps for AUR packages --- src/manager_window.vala | 235 ++++++++++++++++++++++++++++++++++------ 1 file changed, 199 insertions(+), 36 deletions(-) diff --git a/src/manager_window.vala b/src/manager_window.vala index 6dbc7ef..d33a080 100644 --- a/src/manager_window.vala +++ b/src/manager_window.vala @@ -127,6 +127,7 @@ namespace Pamac { AURModel aur_list; public HashTable aur_search_results; + public HashTable aur_infos; public Alpm.Config alpm_config; @@ -212,6 +213,7 @@ namespace Pamac { sortinfo = {0, Gtk.SortType.ASCENDING}; aur_search_results = new HashTable (str_hash, str_equal); + aur_infos = new HashTable (str_hash, str_equal); update_lists (); show_default_pkgs (); @@ -424,27 +426,56 @@ namespace Pamac { link_label.set_markup ("%s".printf (url, url)); StringBuilder licenses = new StringBuilder (); licenses.append (dgettext (null, "Licenses")); - licenses.append (": "); + licenses.append (":"); foreach (unowned string license in pkg.licenses) { - if (licenses.len != 0) { - licenses.append (" "); - } + licenses.append (" "); licenses.append (license); } licenses_label.set_markup (licenses.str); } - public void set_aur_infos_list (Json.Object pkg_info) { - name_label.set_markup ("%s %s".printf (pkg_info.get_string_member ("Name"), - pkg_info.get_string_member ("Version"))); - desc_label.set_markup (Markup.escape_text (pkg_info.get_string_member ("Description"))); - string url = Markup.escape_text (pkg_info.get_string_member ("URL") ?? ""); - string aur_url = "http://aur.archlinux.org/packages/" + pkg_info.get_string_member ("Name"); + public async Json.Object get_aur_infos (string aur_name) { + if (!aur_infos.contains (aur_name)) { + this.get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.WATCH)); + Json.Array results = AUR.multiinfo ({aur_name}); + aur_infos.insert (aur_name, results.get_object_element (0)); + this.get_window ().set_cursor (null); + } + return aur_infos.lookup (aur_name); + } + + public async void set_aur_infos_list (Json.Object pkg_info) { + unowned Json.Node? node; + node = pkg_info.get_member ("Name"); + unowned string name = node.get_string (); + Json.Object all_infos = yield get_aur_infos (name); + node = all_infos.get_member ("Version"); + name_label.set_markup ("%s %s".printf (name, node.get_string ())); + node = all_infos.get_member ("Description"); + desc_label.set_markup (Markup.escape_text (node.get_string ())); + string url = ""; + node = all_infos.get_member ("URL"); + if (node != null) { + url = Markup.escape_text (node.get_string ()); + } + string aur_url = "http://aur.archlinux.org/packages/" + name; link_label.set_markup ("%s\n\n%s".printf (url, url, aur_url, aur_url)); StringBuilder licenses = new StringBuilder (); licenses.append (dgettext (null, "Licenses")); - licenses.append (": "); - licenses.append (pkg_info.get_string_member ("License") ?? dgettext (null, "Unknown")); + licenses.append (":"); + node = all_infos.get_member ("License"); + if (node != null) { + unowned Json.Array array = node.get_array (); + uint i = 0; + uint length = array.get_length (); + while (i < length) { + licenses.append (" "); + licenses.append (array.get_string_element (i)); + i++; + } + } else { + licenses.append (dgettext (null, "Unknown")); + } licenses_label.set_markup (licenses.str); } @@ -549,6 +580,128 @@ namespace Pamac { } } + public async void set_aur_deps_list (Json.Object pkg_info) { + deps_list.clear (); + Gtk.TreeIter iter; + unowned Json.Node? node; + node = pkg_info.get_member ("Name"); + Json.Object all_infos = yield get_aur_infos (node.get_string ()); + unowned Json.Array deps; + uint i; + uint length; + node = all_infos.get_member ("Depends"); + if (node != null) { + deps = node.get_array (); + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Depends On") + ":", + 1, deps.get_string_element (0)); + i = 1; + length = deps.get_length (); + while (i < length) { + deps_list.insert_with_values (out iter, -1, + 1, deps.get_string_element (i)); + i++; + } + } + node = all_infos.get_member ("MakeDepends"); + if (node != null) { + deps = node.get_array (); + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Make Dependencies") + ":", + 1, deps.get_string_element (0)); + i = 1; + length = deps.get_length (); + while (i < length) { + deps_list.insert_with_values (out iter, -1, + 1, deps.get_string_element (i)); + i++; + } + } + node = all_infos.get_member ("CheckDepends"); + if (node != null) { + deps = node.get_array (); + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Check Dependencies") + ":", + 1, deps.get_string_element (0)); + i = 1; + length = deps.get_length (); + while (i < length) { + deps_list.insert_with_values (out iter, -1, + 1, deps.get_string_element (i)); + i++; + } + } + node = all_infos.get_member ("OptDepends"); + if (node != null) { + deps = node.get_array (); + string optdep_str = deps.get_string_element (0); + var optdep = new StringBuilder (optdep_str); + if (Alpm.find_satisfier (alpm_config.handle.localdb.pkgcache, optdep_str) != null) { + optdep.append (" ["); + optdep.append (dgettext (null, "Installed")); + optdep.append ("]"); + } + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Optional Dependencies") + ":", + 1, optdep.str); + i = 1; + length = deps.get_length (); + while (i < length) { + optdep_str = deps.get_string_element (i); + optdep = new StringBuilder (optdep_str); + if (Alpm.find_satisfier (alpm_config.handle.localdb.pkgcache, optdep_str.split (": ", 2)[0]) != null) { + optdep.append (" ["); + optdep.append (dgettext (null, "Installed")); + optdep.append ("]"); + } + deps_list.insert_with_values (out iter, -1, 1, optdep.str); + i++; + } + } + node = all_infos.get_member ("Provides"); + if (node != null) { + deps = node.get_array (); + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Provides") + ":", + 1, deps.get_string_element (0)); + i = 1; + length = deps.get_length (); + while (i < length) { + deps_list.insert_with_values (out iter, -1, + 1, deps.get_string_element (i)); + i++; + } + } + node = all_infos.get_member ("Replaces"); + if (node != null) { + deps = node.get_array (); + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Replaces") + ":", + 1, deps.get_string_element (0)); + i = 1; + length = deps.get_length (); + while (i < length) { + deps_list.insert_with_values (out iter, -1, + 1, deps.get_string_element (i)); + i++; + } + } + node = all_infos.get_member ("Conflicts"); + if (node != null) { + deps = node.get_array (); + deps_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Conflicts With") + ":", + 1, deps.get_string_element (0)); + i = 1; + length = deps.get_length (); + while (i < length) { + deps_list.insert_with_values (out iter, -1, + 1, deps.get_string_element (1)); + i++; + } + } + } + public void set_package_details_list (Alpm.Package pkg) { details_list.clear (); Gtk.TreeIter iter; @@ -618,25 +771,39 @@ namespace Pamac { public void set_aur_details_list (Json.Object pkg_info) { details_list.clear (); Gtk.TreeIter iter; - details_list.insert_with_values (out iter, -1, - 0, dgettext (null, "Maintainer") + ":", - 1, pkg_info.get_string_member ("Maintainer")); - GLib.Time time = GLib.Time.local ((time_t) pkg_info.get_int_member ("FirstSubmitted")); - details_list.insert_with_values (out iter, -1, - 0, dgettext (null, "First Submitted") + ":", - 1, time.format ("%a %d %b %Y %X %Z")); - time = GLib.Time.local ((time_t) pkg_info.get_int_member ("LastModified")); - details_list.insert_with_values (out iter, -1, - 0, dgettext (null, "Last Modified") + ":", - 1, time.format ("%a %d %b %Y %X %Z")); - details_list.insert_with_values (out iter, -1, - 0, dgettext (null, "Votes") + ":", - 1, pkg_info.get_int_member ("NumVotes").to_string ()); - if (!pkg_info.get_null_member ("OutOfDate")) { - time = GLib.Time.local ((time_t) pkg_info.get_int_member ("OutOfDate")); + unowned Json.Node? node; + node = pkg_info.get_member ("PackageBase"); + unowned string package_base = node.get_string (); + node = pkg_info.get_member ("Name"); + if (package_base != node.get_string ()) { details_list.insert_with_values (out iter, -1, - 0, dgettext (null, "Out of Date") + ":", - 1, time.format ("%a %d %b %Y %X %Z")); + 0, dgettext (null, "Package Base") + ":", + 1, package_base); + } + node = pkg_info.get_member ("Maintainer"); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Maintainer") + ":", + 1, node.get_string()); + node = pkg_info.get_member ("FirstSubmitted"); + GLib.Time time = GLib.Time.local ((time_t) node.get_int ()); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "First Submitted") + ":", + 1, time.format ("%a %d %b %Y %X %Z")); + node = pkg_info.get_member ("LastModified"); + time = GLib.Time.local ((time_t) node.get_int ()); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Last Modified") + ":", + 1, time.format ("%a %d %b %Y %X %Z")); + node = pkg_info.get_member ("NumVotes"); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Votes") + ":", + 1, node.get_int ().to_string ()); + node = pkg_info.get_member ("OutOfDate"); + if (!node.is_null ()) { + time = GLib.Time.local ((time_t) node.get_int ()); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Out of Date") + ":", + 1, time.format ("%a %d %b %Y %X %Z")); } } @@ -768,14 +935,12 @@ namespace Pamac { switch (properties_notebook.get_current_page ()) { case 0: set_package_infos_list (pkg); - deps_scrolledwindow.visible = true; break; case 1: set_package_deps_list (pkg); break; case 2: set_package_details_list (pkg); - deps_scrolledwindow.visible = true; break; case 3: if (pkg.origin == Alpm.Package.From.LOCALDB) { @@ -802,14 +967,12 @@ namespace Pamac { switch (properties_notebook.get_current_page ()) { case 0: set_package_infos_list (pkg); - deps_scrolledwindow.visible = true; break; case 1: set_package_deps_list (pkg); break; case 2: set_package_details_list (pkg); - deps_scrolledwindow.visible = true; break; case 3: set_package_files_list (pkg); @@ -819,12 +982,12 @@ namespace Pamac { } } else { files_scrolledwindow.visible = false; - deps_scrolledwindow.visible = false; switch (properties_notebook.get_current_page ()) { case 0: - set_aur_infos_list (pkg_info); + set_aur_infos_list.begin (pkg_info); break; case 1: + set_aur_deps_list.begin (pkg_info); break; case 2: set_aur_details_list (pkg_info);