Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: chrome/browser/ui/app_list/search/mixer.cc

Issue 23874015: Implement people search. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/app_list/search/mixer.h" 5 #include "chrome/browser/ui/app_list/search/mixer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "chrome/browser/ui/app_list/search/chrome_search_result.h" 12 #include "chrome/browser/ui/app_list/search/chrome_search_result.h"
13 #include "chrome/browser/ui/app_list/search/search_provider.h" 13 #include "chrome/browser/ui/app_list/search/search_provider.h"
14 14
15 namespace app_list { 15 namespace app_list {
16 16
17 namespace { 17 namespace {
18 18
19 // Maximum number of results to show. 19 // Maximum number of results to show.
20 const size_t kMaxResults = 6; 20 const size_t kMaxResults = 6;
21 const size_t kMaxMainGroupResults = 4; 21 const size_t kMaxMainGroupResults = 4;
22 const size_t kMaxWebstoreResults = 2; 22 const size_t kMaxWebstoreResults = 2;
23 const size_t kMaxPeopleResults = 2;
23 24
24 // A value to indicate no max number of results limit. 25 // A value to indicate no max number of results limit.
25 const size_t kNoMaxResultsLimit = 0; 26 const size_t kNoMaxResultsLimit = 0;
26 27
27 // Used for sorting and mixing results. 28 // Used for sorting and mixing results.
28 struct SortData { 29 struct SortData {
29 SortData() 30 SortData()
30 : result(NULL), 31 : result(NULL),
31 score(0.0) { 32 score(0.0) {
32 } 33 }
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 SortedResults results_; 165 SortedResults results_;
165 166
166 DISALLOW_COPY_AND_ASSIGN(Group); 167 DISALLOW_COPY_AND_ASSIGN(Group);
167 }; 168 };
168 169
169 Mixer::Mixer(AppListModel::SearchResults* ui_results) 170 Mixer::Mixer(AppListModel::SearchResults* ui_results)
170 : ui_results_(ui_results) {} 171 : ui_results_(ui_results) {}
171 Mixer::~Mixer() {} 172 Mixer::~Mixer() {}
172 173
173 void Mixer::Init() { 174 void Mixer::Init() {
174 groups_.push_back(new Group(kMaxMainGroupResults, 2.0)); 175 groups_.push_back(new Group(kMaxMainGroupResults, 3.0));
175 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0)); 176 groups_.push_back(new Group(kNoMaxResultsLimit, 2.0));
176 groups_.push_back(new Group(kMaxWebstoreResults, 0.0)); 177 groups_.push_back(new Group(kMaxWebstoreResults, 1.0));
178 groups_.push_back(new Group(kMaxPeopleResults, 0.0));
177 } 179 }
178 180
179 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { 181 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) {
180 size_t group_index = static_cast<size_t>(group); 182 size_t group_index = static_cast<size_t>(group);
181 groups_[group_index]->AddProvider(provider); 183 groups_[group_index]->AddProvider(provider);
182 } 184 }
183 185
184 void Mixer::MixAndPublish(const KnownResults& known_results) { 186 void Mixer::MixAndPublish(const KnownResults& known_results) {
185 FetchResults(known_results); 187 FetchResults(known_results);
186 188
187 SortedResults results; 189 SortedResults results;
188 results.reserve(kMaxResults); 190 results.reserve(kMaxResults);
189 191
190 // Adds main group and web store results first. 192 // Adds main group and web store results first.
191 results.insert(results.end(), 193 results.insert(results.end(),
192 groups_[MAIN_GROUP]->results().begin(), 194 groups_[MAIN_GROUP]->results().begin(),
193 groups_[MAIN_GROUP]->results().end()); 195 groups_[MAIN_GROUP]->results().end());
194 results.insert(results.end(), 196 results.insert(results.end(),
195 groups_[WEBSTORE_GROUP]->results().begin(), 197 groups_[WEBSTORE_GROUP]->results().begin(),
196 groups_[WEBSTORE_GROUP]->results().end()); 198 groups_[WEBSTORE_GROUP]->results().end());
199 results.insert(results.end(),
200 groups_[PEOPLE_GROUP]->results().begin(),
201 groups_[PEOPLE_GROUP]->results().end());
197 202
198 // Collapse duplicate apps from local and web store. 203 // Collapse duplicate apps from local and web store.
199 RemoveDuplicates(&results); 204 RemoveDuplicates(&results);
200 205
201 DCHECK_GE(kMaxResults, results.size()); 206 DCHECK_GE(kMaxResults, results.size());
202 size_t remaining_slots = kMaxResults - results.size(); 207 size_t remaining_slots = kMaxResults - results.size();
203 208
204 // Reserves at least one slot for the omnibox result. If there is no available 209 // Reserves at least one slot for the omnibox result. If there is no available
205 // slot for omnibox results, removes the last one from web store. 210 // slot for omnibox results, removes the last one from web store.
206 const size_t omnibox_results = groups_[OMNIBOX_GROUP]->results().size(); 211 const size_t omnibox_results = groups_[OMNIBOX_GROUP]->results().size();
(...skipping 15 matching lines...) Expand all
222 227
223 void Mixer::FetchResults(const KnownResults& known_results) { 228 void Mixer::FetchResults(const KnownResults& known_results) {
224 for (Groups::iterator group_it = groups_.begin(); 229 for (Groups::iterator group_it = groups_.begin();
225 group_it != groups_.end(); 230 group_it != groups_.end();
226 ++group_it) { 231 ++group_it) {
227 (*group_it)->FetchResults(known_results); 232 (*group_it)->FetchResults(known_results);
228 } 233 }
229 } 234 }
230 235
231 } // namespace app_list 236 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698