1 /**************************************************************************
2 * Otter Browser: Web browser controlled by the user, not vice-versa.
3 * Copyright (C) 2013 - 2018 Michal Dutkiewicz aka Emdek <michal@emdek.pl>
4 * Copyright (C) 2017 Jan Bajer aka bajasoft <jbajer@gmail.com>
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 **************************************************************************/
20 
21 #ifndef OTTER_SEARCHSUGGESTER_H
22 #define OTTER_SEARCHSUGGESTER_H
23 
24 #include <QtCore/QObject>
25 #include <QtGui/QStandardItemModel>
26 #include <QtNetwork/QNetworkReply>
27 
28 namespace Otter
29 {
30 
31 class SearchSuggester final : public QObject
32 {
33 	Q_OBJECT
34 
35 public:
36 	struct SearchSuggestion final
37 	{
38 		QString completion;
39 		QString description;
40 		QString url;
41 	};
42 
43 	explicit SearchSuggester(const QString &searchEngine, QObject *parent = nullptr);
44 
45 	QStandardItemModel* getModel();
46 	QVector<SearchSuggestion> getSuggestions() const;
47 
48 public slots:
49 	void setSearchEngine(const QString &searchEngine);
50 	void setQuery(const QString &query);
51 
52 protected slots:
53 	void handleReplyFinished();
54 
55 private:
56 	QNetworkReply *m_networkReply;
57 	QStandardItemModel *m_model;
58 	QString m_searchEngine;
59 	QString m_query;
60 	QVector<SearchSuggestion> m_suggestions;
61 
62 signals:
63 	void suggestionsChanged(const QVector<SearchSuggester::SearchSuggestion> &suggestions);
64 };
65 
66 }
67 
68 #endif
69