diff options
author | abcd <amos.choy@nokia.com> | 2012-06-14 12:17:58 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-20 07:45:27 +0200 |
commit | 7d4a02df48b300fbb0cd19dab9d5a1fc719cf772 (patch) | |
tree | 91368dff35694f470439cfac1a7addddf6d46bc3 /src/plugins | |
parent | e3c6bc638f400193b2046bcad423e18c6b227af6 (diff) | |
download | qtlocation-7d4a02df48b300fbb0cd19dab9d5a1fc719cf772.tar.gz |
Refactor Search Results
The different types of search results should be spearated into
different classes.
Change-Id: I21f43e7979f9f0ae1dfb51e0b619a7c855a469bb
Reviewed-by: Aaron McCarthy <aaron.mccarthy@nokia.com>
Diffstat (limited to 'src/plugins')
4 files changed, 43 insertions, 23 deletions
diff --git a/src/plugins/geoservices/nokia/placesv2/qplacerecommendationreplyimpl.cpp b/src/plugins/geoservices/nokia/placesv2/qplacerecommendationreplyimpl.cpp index 9f32c217..76ddba43 100644 --- a/src/plugins/geoservices/nokia/placesv2/qplacerecommendationreplyimpl.cpp +++ b/src/plugins/geoservices/nokia/placesv2/qplacerecommendationreplyimpl.cpp @@ -56,6 +56,7 @@ #include <QtCore/QJsonObject> #include <QtCore/QJsonArray> #include <QtLocation/QPlaceIcon> +#include <QtLocation/QPlaceResult> QT_BEGIN_NAMESPACE @@ -111,9 +112,7 @@ void QPlaceRecommendationReplyImpl::replyFinished() for (int i = 0; i < items.count(); ++i) { QJsonObject item = items.at(i).toObject(); - QPlaceSearchResult result; - - result.setType(QPlaceSearchResult::PlaceResult); + QPlaceResult result; result.setDistance(item.value(QLatin1String("distance")).toDouble()); @@ -135,13 +134,18 @@ void QPlaceRecommendationReplyImpl::replyFinished() ratings.setMaximum(5.0); place.setRatings(ratings); - place.setName(item.value(QLatin1String("title")).toString()); + const QString title = item.value(QLatin1String("title")).toString(); + place.setName(title); + result.setTitle(title); + place.setCategories(parseCategories(item.value(QLatin1String("categories")).toArray(), m_engine)); - place.setIcon(m_engine->icon(item.value(QLatin1String("icon")).toString(), - place.categories())); + QPlaceIcon icon = m_engine->icon(item.value(QLatin1String("icon")).toString(), + place.categories()); + place.setIcon(icon); + result.setIcon(icon); //QJsonArray having = item.value(QLatin1String("having")).toArray(); diff --git a/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp b/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp index fd98243d..17244d73 100644 --- a/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp +++ b/src/plugins/geoservices/nokia/placesv2/qplacesearchreplyimpl.cpp @@ -56,6 +56,7 @@ #include <QtCore/QJsonObject> #include <QtCore/QJsonArray> #include <QtLocation/QPlaceIcon> +#include <QtLocation/QPlaceResult> #include <QtCore/QDebug> @@ -113,9 +114,7 @@ void QPlaceSearchReplyImpl::replyFinished() for (int i = 0; i < items.count(); ++i) { QJsonObject item = items.at(i).toObject(); - QPlaceSearchResult result; - - result.setType(QPlaceSearchResult::PlaceResult); + QPlaceResult result; if (item.contains(QLatin1String("distance"))) result.setDistance(item.value(QLatin1String("distance")).toDouble()); @@ -145,9 +144,13 @@ void QPlaceSearchReplyImpl::replyFinished() ratings.setMaximum(5.0); place.setRatings(ratings); - place.setName(item.value(QLatin1String("title")).toString()); + const QString title = item.value(QLatin1String("title")).toString(); + place.setName(title); + result.setTitle(title); - place.setIcon(m_engine->icon(item.value(QLatin1String("icon")).toString())); + QPlaceIcon icon = m_engine->icon(item.value(QLatin1String("icon")).toString()); + place.setIcon(icon); + result.setIcon(icon); place.setCategory(parseCategory(item.value(QLatin1String("category")).toObject(), m_engine)); diff --git a/src/plugins/geoservices/nokia_places_jsondb/searchreply.cpp b/src/plugins/geoservices/nokia_places_jsondb/searchreply.cpp index 664d369a..6c2ae59a 100644 --- a/src/plugins/geoservices/nokia_places_jsondb/searchreply.cpp +++ b/src/plugins/geoservices/nokia_places_jsondb/searchreply.cpp @@ -45,6 +45,7 @@ #include <QtCore/QDebug> #include <QtLocation/QGeoBoundingCircle> #include <QtJsonDb/QJsonDbReadRequest> +#include <QtLocation/QPlaceResult> SearchReply::SearchReply(QPlaceManagerEngineJsonDb *engine) : QPlaceSearchReply(engine), m_engine(engine) @@ -55,9 +56,14 @@ SearchReply::~SearchReply() { } -void SearchReply::setResults(const QList<QPlaceSearchResult> &results) +void SearchReply::setResults(const QList<QPlaceResult> &results) { - QPlaceSearchReply::setResults(results); + QList<QPlaceSearchResult> searchResults; + foreach (const QPlaceResult &placeResult, results) { + searchResults << placeResult; + } + + QPlaceSearchReply::setResults(searchResults); } void SearchReply::setRequest(const QPlaceSearchRequest &request) @@ -93,12 +99,17 @@ void SearchReply::start() static bool lessThanDistance(const QPlaceSearchResult &p0, const QPlaceSearchResult &p1) { - return p0.distance() < p1.distance(); + Q_ASSERT(p0.type() == QPlaceSearchResult::PlaceResult); + Q_ASSERT(p1.type() == QPlaceSearchResult::PlaceResult); + QPlaceResult r0 = p0; + QPlaceResult r1 = p1; + + return r0.distance() < r1.distance(); } static bool lessThanName(const QPlaceSearchResult &p0, const QPlaceSearchResult &p1) { - return p0.place().name() < p1.place().name(); + return p0.title() < p1.title(); } void SearchReply::searchFinished() @@ -108,9 +119,8 @@ void SearchReply::searchFinished() QList<QJsonObject> jsonResults = jsonDbRequest->takeResults(); QList<QPlace> places = JsonDb::convertJsonObjectsToPlaces(jsonResults, m_engine); - QList<QPlaceSearchResult> results; - QPlaceSearchResult result; - result.setType(QPlaceSearchResult::PlaceResult); + QList<QPlaceResult> results; + QPlaceResult result; const QGeoBoundingArea &area = request().searchArea(); const QGeoBoundingArea::AreaType &type = area.type(); @@ -149,7 +159,7 @@ void SearchReply::searchFinished() //See if we have to fetch any category data QStringList categoryUuids; - foreach (const QPlaceSearchResult &result, results) { + foreach (const QPlaceResult &result, results) { if (!result.place().categories().isEmpty()) { foreach (const QPlaceCategory &category, result.place().categories()) categoryUuids.append(category.categoryId()); @@ -186,13 +196,13 @@ void SearchReply::getCategoriesForPlacesFinished() QPlace place; for (int i=0; i < resultList.count(); ++i) { categories.clear(); - place = resultList.at(i).place(); + place = static_cast<QPlaceResult>(resultList.at(i)).place(); foreach (const QPlaceCategory &cat, place.categories()) { if (!cat.categoryId().isEmpty() && categoriesCollection.contains(cat.categoryId())) categories.append(categoriesCollection.value(cat.categoryId())); } place.setCategories(categories); - resultList[i].setPlace(place); + static_cast<QPlaceResult>(resultList[i]).setPlace(place); } setResults(resultList); triggerDone(); diff --git a/src/plugins/geoservices/nokia_places_jsondb/searchreply.h b/src/plugins/geoservices/nokia_places_jsondb/searchreply.h index 34e8e670..eb0d8115 100644 --- a/src/plugins/geoservices/nokia_places_jsondb/searchreply.h +++ b/src/plugins/geoservices/nokia_places_jsondb/searchreply.h @@ -44,10 +44,12 @@ #include "macro.h" #include "qplacemanagerengine_jsondb.h" -#include <qplacesearchreply.h> + #include <QtCore/QObject> #include <QtJsonDb/QJsonDbRequest> +#include <QtLocation/QPlaceResult> +#include <QtLocation/QPlaceSearchReply> QT_BEGIN_NAMESPACE @@ -58,7 +60,8 @@ class SearchReply : public QPlaceSearchReply public: SearchReply(QPlaceManagerEngineJsonDb *engine); virtual ~SearchReply(); - void setResults(const QList<QPlaceSearchResult> &results); + void setResults(const QList<QPlaceResult> &results); + using QPlaceSearchReply::setResults; void setRequest(const QPlaceSearchRequest &request); DECLARE_TRIGGER_DONE_FN |