Skip to content
This repository has been archived by the owner on Oct 24, 2018. It is now read-only.

Commit

Permalink
fix #68 and #134: sort search result by relevance
Browse files Browse the repository at this point in the history
  • Loading branch information
guinux committed Aug 25, 2016
1 parent 6660e83 commit eb57d65
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
37 changes: 36 additions & 1 deletion src/daemon.vala
Expand Up @@ -40,6 +40,39 @@ private int alpm_pkg_compare_name (Alpm.Package pkg_a, Alpm.Package pkg_b) {
return strcmp (pkg_a.name, pkg_b.name);
}

private string global_search_string;

private int alpm_pkg_sort_search_by_relevance (Alpm.Package pkg_a, Alpm.Package pkg_b) {
if (global_search_string != null) {
// display exact match first
if (pkg_a.name == global_search_string) {
return 0;
}
if (pkg_b.name == global_search_string) {
return 1;
}
if (pkg_a.name.has_prefix (global_search_string + "-")) {
return 0;
}
if (pkg_b.name.has_prefix (global_search_string + "-")) {
return 1;
}
if (pkg_a.name.has_prefix (global_search_string)) {
return 0;
}
if (pkg_b.name.has_prefix (global_search_string)) {
return 1;
}
if (pkg_a.name.contains (global_search_string)) {
return 0;
}
if (pkg_b.name.contains (global_search_string)) {
return 1;
}
}
return strcmp (pkg_a.name, pkg_b.name);
}

namespace Pamac {
[DBus (name = "org.manjaro.pamac")]
public class Daemon: Object {
Expand Down Expand Up @@ -535,7 +568,9 @@ namespace Pamac {
syncdbs.next ();
}
result.join (syncpkgs.diff (result, (Alpm.List.CompareFunc) alpm_pkg_compare_name));
//result.sort ((Alpm.List.CompareFunc) alpm_pkg_compare_name);
// use custom sort function
global_search_string = search_string;
result.sort (result.length, (Alpm.List.CompareFunc) alpm_pkg_sort_search_by_relevance);
return result;
}

Expand Down
6 changes: 4 additions & 2 deletions src/manager_window.vala
Expand Up @@ -195,8 +195,6 @@ namespace Pamac {
typeof (string), //repo
typeof (uint64), //isize
typeof (string)); //GLib.format (isize)
// sort packages by name by default
packages_list.set_sort_column_id (1, Gtk.SortType.ASCENDING);
packages_treeview.set_model (packages_list);
// add custom cellrenderer to packages_treeview and aur_treewiew
var packages_state_renderer = new ActivableCellRendererPixbuf ();
Expand Down Expand Up @@ -1091,6 +1089,8 @@ namespace Pamac {
switch (packages_stack.visible_child_name) {
case "repos":
transaction.search_pkgs.begin (search_string, (obj, res) => {
// get custom sort by relevance
packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0);
populate_packages_list (transaction.search_pkgs.end (res));
});
break;
Expand Down Expand Up @@ -1309,6 +1309,8 @@ namespace Pamac {
case "repos":
transaction.search_pkgs.begin (search_string, (obj, res) => {
var pkgs = transaction.search_pkgs.end (res);
// get custom sort by relevance
packages_list.set_sort_column_id (Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, 0);
populate_packages_list (pkgs);
if (search_aur_button.get_active ()) {
if (pkgs.length == 0) {
Expand Down

0 comments on commit eb57d65

Please sign in to comment.