From 4cb47c7abd49a4b19933c11717a7aa7ead034fea Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Fri, 26 Dec 2014 10:56:33 +0000 Subject: [PATCH] Fix Meta Autocomplete ranking .. when using '*' for values we autocomplete based upon previously entered values for the field, but we didn't take into account ranking. .. now the autocomplete list is ranked to most popular values complete first. --- src/RideCache.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/RideCache.cpp b/src/RideCache.cpp index d371b195b..5e900ed5f 100644 --- a/src/RideCache.cpp +++ b/src/RideCache.cpp @@ -698,20 +698,40 @@ RideCache::getRankedValues(QString field) QString value = item->metadata().value(field, ""); if (value != "") { int count = returning.value(value,0); - returning.insert(value,count); + returning.insert(value,++count); } } return returning; } +class OrderedList { + public: + OrderedList(QString string, int rank) : string(string), rank(rank) {} + QString string; + int rank; +}; + +bool rideCacheOrderListGreaterThan(const OrderedList a, const OrderedList b) { return a.rank > b.rank; } + QStringList RideCache::getDistinctValues(QString field) { QStringList returning; + + // ranked QHashIterator i(getRankedValues(field)); + QList ranked; while(i.hasNext()) { i.next(); - returning << i.key(); + ranked << OrderedList(i.key(), i.value()); } + + // sort from big to small + qSort(ranked.begin(), ranked.end(), rideCacheOrderListGreaterThan); + + // extract ordered values + foreach(OrderedList x, ranked) + returning << x.string; + return returning; }