50
53
/* Listen for changes to the lens search entry */
51
54
scope.search_changed.connect ((search, search_type, cancellable) => {
52
if (search_type == SearchType.DEFAULT)
53
update_search_async.begin (search);
55
update_global_search_async.begin (search);
55
update_search_async.begin (search, search_type);
59
/* based on the filters(?) get the default results to show when the music lens is
60
* just opened without filters, like when someone hits Super+M
62
private async void update_without_search_async (LensSearch search)
64
yield perform_search_async (search, num_results_without_search);
68
* results for a global search from just hitting Super. here we want to return
69
* a smaller number of results with 0 filters.
71
private async void update_global_search_async (LensSearch search)
73
if (search_is_invalid (search))
75
search.results_model.clear ();
80
yield perform_search_async (search, num_results_global_search);
83
private async void update_search_async (LensSearch search)
85
// just pretend like there's no search
86
if (search_is_invalid (search))
88
yield update_without_search_async (search);
92
yield perform_search_async (search, num_results_lens_search);
95
private async void perform_search_async (LensSearch search, int max_results)
59
private async void update_search_async (LensSearch search,
60
SearchType search_type)
64
* results for a global search from just hitting Super.
65
* Here we want to return a smaller number of results with 0 filters.
67
if (search_type == SearchType.GLOBAL)
68
max_results = num_results_global_search;
69
else if (is_search_empty (search))
70
max_results = num_results_without_search;
72
max_results = num_results_lens_search;
74
yield prepare_search (search, search_type, max_results);
77
private async void prepare_search (LensSearch search,
78
SearchType search_type,
97
81
var results_model = search.results_model;
99
83
List<FilterParser> filters = new List<FilterParser> ();
100
Filter filter = scope.get_filter ("genre");
101
if (filter.filtering)
102
filters.append (new GenreFilterParser (filter as CheckOptionFilter));
104
filter = scope.get_filter ("decade");
105
if (filter.filtering)
106
filters.append (new DecadeFilterParser (filter as MultiRangeFilter));
84
// don't apply filters to global searches
85
if (search_type != SearchType.GLOBAL)
87
Filter filter = scope.get_filter ("genre");
89
filters.append (new GenreFilterParser (filter as CheckOptionFilterCompact));
91
filter = scope.get_filter ("decade");
93
filters.append (new DecadeFilterParser (filter as MultiRangeFilter));
108
96
results_model.clear ();
109
perform_search (search, results_model, filters, max_results);
98
yield perform_search (search, search_type, (owned) filters, max_results);
100
if (results_model.get_n_rows () == 0)
102
search.set_reply_hint ("no-results-hint",
103
_("Sorry, there is no music that matches your search."));
111
106
search.finished ();
114
protected bool search_is_invalid (LensSearch? search)
109
protected bool is_search_empty (LensSearch search)
110
requires (search.search_string != null)
116
/* This boolean expression is unfolded as we seem to get
117
* some null dereference if we join them in a big || expression */
120
else if (search.search_string == null)
123
return search.search_string.strip() == "";
112
return search.search_string.strip () == "";