From 00fd98ae27ea33623033c4913a91c0262d98b984 Mon Sep 17 00:00:00 2001 From: guinux Date: Wed, 7 Oct 2015 15:35:26 +0200 Subject: [PATCH] add build_date for repo pkgs and details tab for AUR pkgs --- po/pamac.pot | 25 +++++++++++++ src/aur.vala | 15 ++++---- src/common.vala | 1 - src/daemon.vala | 80 ++++++++++++++++++++++++++-------------- src/manager_window.vala | 81 ++++++++++++++++++++++++----------------- src/package.vala | 21 +++++++---- src/packages_model.vala | 4 +- 7 files changed, 146 insertions(+), 81 deletions(-) diff --git a/po/pamac.pot b/po/pamac.pot index 6db0129..678b8dc 100644 --- a/po/pamac.pot +++ b/po/pamac.pot @@ -21,6 +21,7 @@ msgstr "" msgid "Authentication is required" msgstr "" + #: ../src/daemon.vala msgid "Failed to initialize alpm library" msgstr "" @@ -415,10 +416,26 @@ msgstr "" msgid "Groups" msgstr "" +#: ../src/manager_window.vala +msgid "Maintainer" +msgstr "" + +#: ../src/manager_window.vala +msgid "First Submitted" +msgstr "" + +#: ../src/manager_window.vala +msgid "Last Modified" +msgstr "" + #: ../src/manager_window.vala msgid "Packager" msgstr "" +#: ../src/manager_window.vala +msgid "Build Date" +msgstr "" + #: ../src/manager_window.vala msgid "Install Date" msgstr "" @@ -443,6 +460,14 @@ msgstr "" msgid "Signatures" msgstr "" +#: ../src/manager_window.vala +msgid "Votes" +msgstr "" + +#: ../src/manager_window.vala +msgid "Out of Date" +msgstr "" + #: ../src/manager_window.vala msgid "Backup files" msgstr "" diff --git a/src/aur.vala b/src/aur.vala index fa4d28a..c681f4e 100644 --- a/src/aur.vala +++ b/src/aur.vala @@ -72,14 +72,14 @@ namespace AUR { found = root.get_object ().get_array_member ("results"); } } - foreach (var prev_inter_node in prev_inter.get_elements ()) { - foreach (var found_node in found.get_elements ()) { + prev_inter.foreach_element ((prev_inter_array, prev_inter_index, prev_inter_node) => { + found.foreach_element ((found_array, found_index, found_node) => { 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; } @@ -88,8 +88,7 @@ namespace AUR { return inter; } - public Json.Object info (string pkgname) { - var pkg_info = new Json.Object (); + public unowned Json.Object? info (string pkgname) { string uri = rpc_url + rpc_info + Uri.escape_string (pkgname); var session = new Soup.Session (); var message = new Soup.Message ("GET", uri); @@ -106,10 +105,10 @@ namespace AUR { if (root.get_object ().get_string_member ("type") == "error") { stderr.printf ("Failed to get infos about %s from AUR\n", pkgname); } else { - pkg_info = root.get_object ().get_object_member ("results"); + return root.get_object ().get_object_member ("results"); } } - return pkg_info; + return null; } public Json.Array multiinfo (string[] pkgnames) { diff --git a/src/common.vala b/src/common.vala index df121d3..5986ab1 100644 --- a/src/common.vala +++ b/src/common.vala @@ -22,7 +22,6 @@ namespace Pamac { public string name; public string version; public string db_name; - public string tarpath; public uint64 download_size; } diff --git a/src/daemon.vala b/src/daemon.vala index 9fd405b..344d6ee 100644 --- a/src/daemon.vala +++ b/src/daemon.vala @@ -434,7 +434,7 @@ namespace Pamac { aur_pkgs = AUR.search (splitted); aur_search_results.insert (search_string, aur_pkgs); } - foreach (var node in aur_pkgs.get_elements ()) { + aur_pkgs.foreach_element ((array, index, node) => { var aur_pkg = node.get_object (); var pamac_pkg = Pamac.Package (null, aur_pkg); bool found = false; @@ -447,7 +447,7 @@ namespace Pamac { if (found == false) { result += pamac_pkg; } - } + }); } return result; } @@ -531,6 +531,7 @@ namespace Pamac { string has_signature = _("No"); int reason = 0; string packager = ""; + string build_date = ""; string install_date = ""; string[] groups = {}; string[] backups = {}; @@ -539,27 +540,59 @@ namespace Pamac { if (alpm_pkg == null) { alpm_pkg = get_syncpkg (pkgname); } - if (alpm_pkg != null) { - repo = alpm_pkg.db.name; - packager = alpm_pkg.packager; + if (alpm_pkg == null) { + // search for the corresponding Json.Object in aur_search_result + var iter = HashTableIter (aur_search_results); + unowned Json.Array array; + bool found = false; + while (iter.next (null, out array)) { + array.foreach_element((array, index, node) => { + var pkg_info = node.get_object (); + if (pkg_info.get_string_member ("Name") == pkgname) { + found = true; + repo = "AUR"; + if (!pkg_info.get_null_member ("OutOfDate")) { + GLib.Time time = GLib.Time.local ((time_t) pkg_info.get_int_member ("OutOfDate")); + has_signature = time.format ("%a %d %b %Y %X %Z"); + } + reason = (int) pkg_info.get_int_member ("NumVotes"); + packager = pkg_info.get_string_member ("Maintainer") ?? ""; + GLib.Time time = GLib.Time.local ((time_t) pkg_info.get_int_member ("FirstSubmitted")); + build_date = time.format ("%a %d %b %Y %X %Z"); + time = GLib.Time.local ((time_t) pkg_info.get_int_member ("LastModified")); + install_date = time.format ("%a %d %b %Y %X %Z"); + } + }); + if (found) { + break; + } + } + } else { + packager = alpm_pkg.packager ?? ""; foreach (var group in alpm_pkg.groups) { groups += group; } - if (alpm_pkg.db.name == "local") { - reason = alpm_pkg.reason; - GLib.Time time = GLib.Time.local ((time_t) alpm_pkg.installdate); - install_date = time.format ("%a %d %b %Y %X %Z"); - foreach (var backup in alpm_pkg.backups) { - backups += backup.name; + GLib.Time time = GLib.Time.local ((time_t) alpm_pkg.builddate); + build_date = time.format ("%a %d %b %Y %X %Z"); + if (alpm_pkg.db != null) { + repo = alpm_pkg.db.name ?? ""; + if (alpm_pkg.db.name == "local") { + reason = alpm_pkg.reason; + time = GLib.Time.local ((time_t) alpm_pkg.installdate); + install_date = time.format ("%a %d %b %Y %X %Z"); + foreach (var backup in alpm_pkg.backups) { + backups += backup.name; + } + } else { + has_signature = alpm_pkg.base64_sig != null ? _("Yes") : _("No"); } - } else { - has_signature = alpm_pkg.base64_sig != null ? _("Yes") : _("No"); } } details.repo = repo; details.has_signature = has_signature; details.reason = reason; details.packager = packager; + details.build_date = build_date; details.install_date = install_date; details.groups = groups; details.backups = backups; @@ -641,7 +674,6 @@ namespace Pamac { infos.name = candidate.name; infos.version = candidate.version; infos.db_name = candidate.db.name; - infos.tarpath = ""; infos.download_size = candidate.download_size; updates_infos += infos; } @@ -661,7 +693,6 @@ namespace Pamac { infos.name = candidate.name; infos.version = candidate.version; infos.db_name = candidate.db.name; - infos.tarpath = ""; infos.download_size = candidate.download_size; updates_infos += infos; } else { @@ -686,25 +717,20 @@ namespace Pamac { if (aur_updates_results.get_length () == 0) { aur_updates_results = AUR.multiinfo (local_pkgs); } - int cmp; - unowned Json.Object pkg_info; - string version; - string name; updates_infos = {}; - foreach (var node in aur_updates_results.get_elements ()) { - pkg_info = node.get_object (); - version = pkg_info.get_string_member ("Version"); - name = pkg_info.get_string_member ("Name"); - cmp = Alpm.pkg_vercmp (version, alpm_config.handle.localdb.get_pkg (name).version); + aur_updates_results.foreach_element ((array, index,node) => { + unowned Json.Object pkg_info = node.get_object (); + string version = pkg_info.get_string_member ("Version"); + string name = pkg_info.get_string_member ("Name"); + int cmp = Alpm.pkg_vercmp (version, alpm_config.handle.localdb.get_pkg (name).version); if (cmp == 1) { infos.name = name; infos.version = version; infos.db_name = "AUR"; - infos.tarpath = pkg_info.get_string_member ("URLPath"); infos.download_size = 0; updates_infos += infos; } - } + }); updates.aur_updates = updates_infos; } return updates; @@ -955,7 +981,6 @@ namespace Pamac { } else { info.db_name = ""; } - info.tarpath = ""; info.download_size = pkg.download_size; infos += info; } @@ -969,7 +994,6 @@ namespace Pamac { info.name = pkg.name; info.version = pkg.version; info.db_name = pkg.db.name; - info.tarpath = ""; info.download_size = pkg.download_size; infos += info; } diff --git a/src/manager_window.vala b/src/manager_window.vala index 4f9a413..744d809 100644 --- a/src/manager_window.vala +++ b/src/manager_window.vala @@ -257,7 +257,12 @@ namespace Pamac { name_label.set_markup ("%s %s".printf (pkg.name, pkg.version)); desc_label.set_markup (Markup.escape_text (pkg.desc)); string url = Markup.escape_text (pkg.url); - link_label.set_markup ("%s".printf (url, url)); + if (pkg.repo == "AUR") { + string aur_url = "http://aur.archlinux.org/packages/" + pkg.name; + link_label.set_markup ("%s\n\n%s".printf (url, url, aur_url, aur_url)); + } else { + link_label.set_markup ("%s".printf (url, url)); + } StringBuilder licenses = new StringBuilder (); licenses.append (dgettext (null, "Licenses")); licenses.append (": "); @@ -366,7 +371,7 @@ namespace Pamac { Gtk.TreeIter iter; PackageDetails details = transaction.get_pkg_details (pkgname); int i; - if (details.repo != "local") { + if (details.repo != "local" && details.repo != "AUR") { details_list.insert_with_values (out iter, -1, 0, dgettext (null, "Repository") + ":", 1, details.repo); @@ -382,9 +387,24 @@ namespace Pamac { i++; } } - details_list.insert_with_values (out iter, -1, - 0, dgettext (null, "Packager") + ":", - 1, details.packager); + if (details.repo == "AUR") { + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Maintainer") + ":", + 1, details.packager); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "First Submitted") + ":", + 1, details.build_date); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Last Modified") + ":", + 1, details.install_date); + } else { + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Packager") + ":", + 1, details.packager); + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Build Date") + ":", + 1, details.build_date); + } if (details.repo == "local") { details_list.insert_with_values (out iter, -1, 0, dgettext (null, "Install Date") + ":", @@ -401,11 +421,21 @@ namespace Pamac { 0, dgettext (null, "Install Reason") + ":", 1, reason); } - if (details.repo != "local") { + if (details.repo != "local" && details.repo != "AUR") { details_list.insert_with_values (out iter, -1, 0, dgettext (null, "Signatures") + ":", 1, details.has_signature); } + if (details.repo == "AUR") { + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Votes") + ":", + 1, details.reason.to_string ()); + if (details.has_signature != "") { + details_list.insert_with_values (out iter, -1, + 0, dgettext (null, "Out of Date") + ":", + 1, details.has_signature); + } + } if (details.repo == "local") { if (details.backups.length != 0) { details_list.insert_with_values (out iter, -1, @@ -492,48 +522,31 @@ namespace Pamac { if (selected.length () > 0) { // display info for the first package of the selection Pamac.Package pkg = packages_list.get_pkg_at_path (selected.nth_data (0)); + if (pkg.name == dgettext (null, "No package found")) { + return; + } if (pkg.repo == "local") { + deps_scrolledwindow.visible = true; files_scrolledwindow.visible = true; + } else if (pkg.repo == "AUR") { + deps_scrolledwindow.visible = false; + files_scrolledwindow.visible = false; } else { + deps_scrolledwindow.visible = true; files_scrolledwindow.visible = false; } switch (properties_notebook.get_current_page ()) { case 0: set_infos_list (pkg); - if (pkg.repo == "AUR") { - deps_scrolledwindow.visible = false; - details_scrolledwindow.visible = false; - } else { - deps_scrolledwindow.visible = true; - details_scrolledwindow.visible = true; - } break; case 1: - if (pkg.repo == "AUR") { - deps_scrolledwindow.visible = false; - details_scrolledwindow.visible = false; - } else { - set_deps_list (pkg.name); - } + set_deps_list (pkg.name); break; case 2: - if (pkg.repo == "AUR") { - deps_scrolledwindow.visible = false; - details_scrolledwindow.visible = false; - } else { - set_details_list (pkg.name); - } + set_details_list (pkg.name); break; case 3: - if (pkg.repo == "local") { - set_files_list (pkg.name); - } else { - files_scrolledwindow.visible = false; - if (pkg.repo == "AUR") { - deps_scrolledwindow.visible = false; - details_scrolledwindow.visible = false; - } - } + set_files_list (pkg.name); break; default: break; diff --git a/src/package.vala b/src/package.vala index 0c36423..44c6a7e 100644 --- a/src/package.vala +++ b/src/package.vala @@ -31,13 +31,12 @@ namespace Pamac { public Package (Alpm.Package? alpm_pkg, Json.Object? aur_json) { if (alpm_pkg != null) { - name = alpm_pkg.name; - version = alpm_pkg.version; - desc = alpm_pkg.desc; - repo = alpm_pkg.db != null ? alpm_pkg.db.name : ""; + name = alpm_pkg.name ?? ""; + version = alpm_pkg.version ?? ""; + desc = alpm_pkg.desc ?? ""; + repo = (alpm_pkg.db != null ? (alpm_pkg.db.name ?? "") : ""); size = alpm_pkg.isize; size_string = format_size (alpm_pkg.isize); - // alpm pkg url can be null url = alpm_pkg.url ?? ""; StringBuilder licenses_build = new StringBuilder (); foreach (var license in alpm_pkg.licenses) { @@ -49,9 +48,9 @@ namespace Pamac { licenses = licenses_build.str; reason = alpm_pkg.reason; } else if (aur_json != null ) { - name = aur_json.get_string_member ("Name"); - version = aur_json.get_string_member ("Version"); - desc = aur_json.get_string_member ("Description"); + name = aur_json.get_string_member ("Name") ?? ""; + version = aur_json.get_string_member ("Version") ?? ""; + desc = aur_json.get_string_member ("Description") ?? ""; repo = "AUR"; size = 0; size_string = ""; @@ -74,9 +73,15 @@ namespace Pamac { public struct PackageDetails { string repo; + // for AUR package it is OutOfDate string has_signature; + // for AUR package it is NumVotes int reason; + // for AUR package it is Maintainer string packager; + // for AUR package it is FirstSubmitted + string build_date; + // for AUR package it is LastModified string install_date; string[] groups; string[] backups; diff --git a/src/packages_model.vala b/src/packages_model.vala index 9f52450..2650888 100644 --- a/src/packages_model.vala +++ b/src/packages_model.vala @@ -82,8 +82,8 @@ namespace Pamac { val.set_object (manager_window.uninstalled_icon); } } else if (pkg.name == dgettext (null, "No package found")) { - Object? object = null; - val.set_object (object); + // nothing to do + break; } else if (manager_window.transaction.to_add.contains (pkg.name)) { val.set_object (manager_window.to_install_icon); } else {