1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtLocation module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL3$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or later as published by the Free
28 ** Software Foundation and appearing in the file LICENSE.GPL included in
29 ** the packaging of this file. Please review the following information to
30 ** ensure the GNU General Public License version 2.0 requirements will be
31 ** met: http://www.gnu.org/licenses/gpl-2.0.html.
32 **
33 ** $QT_END_LICENSE$
34 **
35 ****************************************************************************/
36 
37 #ifndef QPLACEMANAGERENGINE_NOKIAV2_H
38 #define QPLACEMANAGERENGINE_NOKIAV2_H
39 
40 #include <QtCore/QPointer>
41 #include <QtNetwork/QNetworkReply>
42 #include <QtLocation/QPlaceManagerEngine>
43 #include <QtLocation/QGeoServiceProvider>
44 
45 QT_BEGIN_NAMESPACE
46 
47 class QPlaceContentReply;
48 class QNetworkReply;
49 class QNetworkAccessManager;
50 class QPlaceCategoriesReplyHere;
51 class QGeoNetworkAccessManager;
52 class QGeoUriProvider;
53 
54 struct PlaceCategoryNode
55 {
56     QString parentId;
57     QStringList childIds;
58     QPlaceCategory category;
59 };
60 
61 typedef QMap<QString, PlaceCategoryNode> QPlaceCategoryTree;
62 
63 class QPlaceManagerEngineNokiaV2 : public QPlaceManagerEngine
64 {
65     Q_OBJECT
66 
67 public:
68     QPlaceManagerEngineNokiaV2(QGeoNetworkAccessManager *networkManager,
69                                const QVariantMap &parameters,
70                                QGeoServiceProvider::Error *error,
71                                QString *errorString);
72     ~QPlaceManagerEngineNokiaV2();
73 
74     QPlaceDetailsReply *getPlaceDetails(const QString &placeId) override;
75 
76     QPlaceContentReply *getPlaceContent(const QPlaceContentRequest &request) override;
77 
78     QPlaceSearchReply *search(const QPlaceSearchRequest &query) override;
79 
80     QPlaceSearchSuggestionReply *searchSuggestions(const QPlaceSearchRequest &query) override;
81 
82     QPlaceIdReply *savePlace(const QPlace &place) override;
83     QPlaceIdReply *removePlace(const QString &placeId) override;
84 
85     QPlaceIdReply *saveCategory(const QPlaceCategory &category, const QString &parentId) override;
86     QPlaceIdReply *removeCategory(const QString &categoryId) override;
87 
88     QPlaceReply *initializeCategories() override;
89     QString parentCategoryId(const QString &categoryId) const override;
90     QStringList childCategoryIds(const QString &categoryId) const override;
91     QPlaceCategory category(const QString &categoryId) const override;
92     QList<QPlaceCategory> childCategories(const QString &parentId) const override;
93 
94     QList<QLocale> locales() const override;
95     void setLocales(const QList<QLocale> &locales) override;
96 
97     QPlaceIcon icon(const QString &remotePath,
98                     const QList<QPlaceCategory> &categories = QList<QPlaceCategory>()) const;
99 
100     QUrl constructIconUrl(const QPlaceIcon &icon, const QSize &size) const override;
101 
102 private:
103     QNetworkReply *sendRequest(const QUrl &url);
104     QByteArray createLanguageString() const;
105 
106 private Q_SLOTS:
107     void replyFinished();
108     void replyError(QPlaceReply::Error error_, const QString &errorString);
109     void categoryReplyFinished();
110     void categoryReplyError();
111 
112 private:
113     QGeoNetworkAccessManager *m_manager;
114     QGeoUriProvider *m_uriProvider;
115 
116     QList<QLocale> m_locales;
117 
118     QPlaceCategoryTree m_categoryTree;
119     QPlaceCategoryTree m_tempTree;
120     QHash<QString, QString> m_restIdToIconHash;
121 
122     QPointer<QPlaceCategoriesReplyHere> m_categoryReply;
123     QHash<QString, QNetworkReply *> m_categoryRequests;
124 
125     QString m_appId;
126     QString m_appCode;
127 
128     QString m_localDataPath;
129     QString m_theme;
130 };
131 
132 QT_END_NAMESPACE
133 
134 #endif // QPLACEMANAGERENGINE_NOKIAV2_H
135