Merge lp:~osomon/webbrowser-app/searchengine-qml into lp:webbrowser-app

Proposed by Olivier Tilloy on 2015-03-19
Status: Merged
Approved by: Olivier Tilloy on 2015-03-23
Approved revision: 935
Merged at revision: 945
Proposed branch: lp:~osomon/webbrowser-app/searchengine-qml
Merge into: lp:webbrowser-app
Diff against target: 312 lines (+81/-76)
6 files modified
src/app/webbrowser/Browser.qml (+7/-2)
src/app/webbrowser/searchengine.cpp (+51/-45)
src/app/webbrowser/searchengine.h (+17/-17)
src/app/webbrowser/settings.cpp (+2/-5)
src/app/webbrowser/settings.h (+2/-4)
src/app/webbrowser/webbrowser-app.cpp (+2/-3)
To merge this branch: bzr merge lp:~osomon/webbrowser-app/searchengine-qml
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing on 2015-03-22
Ubuntu Phablet Team 2015-03-19 Pending
Review via email: mp+253505@code.launchpad.net

Commit Message

Expose the SearchEngine type to QML.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/app/webbrowser/Browser.qml'
2--- src/app/webbrowser/Browser.qml 2015-02-05 13:09:42 +0000
3+++ src/app/webbrowser/Browser.qml 2015-03-19 12:49:51 +0000
4@@ -36,7 +36,7 @@
5 property var bookmarksModel: (bookmarksModelLoader.status == Loader.Ready) ? bookmarksModelLoader.item : null
6
7 property url homepage
8- property QtObject searchEngine
9+ property string searchEngine
10 property string allowOpenInBackgroundTab
11
12 // XXX: we might want to tweak this value depending
13@@ -121,11 +121,16 @@
14 asynchronous: true
15 }
16
17+ SearchEngine {
18+ id: searchEngine
19+ filename: browser.searchEngine
20+ }
21+
22 Chrome {
23 id: chrome
24
25 webview: browser.currentWebview
26- searchUrl: browser.searchEngine ? browser.searchEngine.template : ""
27+ searchUrl: searchEngine.urlTemplate
28
29 function isCurrentUrlBookmarked() {
30 return ((webview && browser.bookmarksModel) ? browser.bookmarksModel.contains(webview.url) : false)
31
32=== modified file 'src/app/webbrowser/searchengine.cpp'
33--- src/app/webbrowser/searchengine.cpp 2014-06-30 11:01:27 +0000
34+++ src/app/webbrowser/searchengine.cpp 2015-03-19 12:49:51 +0000
35@@ -1,5 +1,5 @@
36 /*
37- * Copyright 2014 Canonical Ltd.
38+ * Copyright 2014-2015 Canonical Ltd.
39 *
40 * This file is part of webbrowser-app.
41 *
42@@ -17,41 +17,71 @@
43 */
44
45 // local
46+#include "config.h"
47 #include "searchengine.h"
48
49 // Qt
50-#include <QtCore/QDir>
51 #include <QtCore/QFile>
52 #include <QtCore/QStandardPaths>
53 #include <QtCore/QXmlStreamReader>
54
55-SearchEngine::SearchEngine(const QString& name, QObject* parent)
56+SearchEngine::SearchEngine(QObject* parent)
57 : QObject(parent)
58 , m_name(DEFAULT_SEARCH_NAME)
59 , m_description(DEFAULT_SEARCH_DESC)
60 , m_template(DEFAULT_SEARCH_TEMPLATE)
61 {
62- QString searchenginesSubDir("searchengines");
63- QString filename = searchenginesSubDir + "/" + name + ".xml";
64- m_path = QStandardPaths::locate(QStandardPaths::DataLocation, filename);
65- if (!m_path.isEmpty()) {
66- parseOpenSearchDescription();
67+}
68+
69+const QString& SearchEngine::filename() const
70+{
71+ return m_filename;
72+}
73+
74+void SearchEngine::setFilename(const QString& filename)
75+{
76+ if (filename != m_filename) {
77+ m_filename = filename;
78+ Q_EMIT filenameChanged();
79+
80+ m_name = DEFAULT_SEARCH_NAME;
81+ m_description = DEFAULT_SEARCH_DESC;
82+ m_template = DEFAULT_SEARCH_TEMPLATE;
83+
84+ if (!filename.isEmpty()) {
85+ QString filepath = QStandardPaths::locate(QStandardPaths::DataLocation,
86+ "searchengines/" + filename + ".xml");
87+ if (!filepath.isEmpty()) {
88+ QFile file(filepath);
89+ if (file.open(QIODevice::ReadOnly)) {
90+ // Parse OpenSearch description file
91+ // (http://www.opensearch.org/Specifications/OpenSearch/1.1)
92+ QXmlStreamReader parser(&file);
93+ while (!parser.atEnd()) {
94+ parser.readNext();
95+ if (parser.isStartElement()) {
96+ QStringRef name = parser.name();
97+ if (name == "ShortName") {
98+ m_name = parser.readElementText();
99+ } else if (name == "Description") {
100+ m_description = parser.readElementText();
101+ } else if (name == "Url") {
102+ if (parser.attributes().value("type") == "text/html") {
103+ m_template = parser.attributes().value("template").toString();
104+ }
105+ }
106+ }
107+ }
108+ }
109+ }
110+ }
111+
112+ Q_EMIT nameChanged();
113+ Q_EMIT descriptionChanged();
114+ Q_EMIT urlTemplateChanged();
115 }
116 }
117
118-SearchEngine::SearchEngine(const SearchEngine& other)
119-{
120- m_path = other.m_path;
121- m_name = other.m_name;
122- m_description = other.m_description;
123- m_template = other.m_template;
124-}
125-
126-bool SearchEngine::isValid() const
127-{
128- return (!m_name.isEmpty() && !m_template.isEmpty());
129-}
130-
131 const QString& SearchEngine::name() const
132 {
133 return m_name;
134@@ -66,27 +96,3 @@
135 {
136 return m_template;
137 }
138-
139-void SearchEngine::parseOpenSearchDescription()
140-{
141- QFile file(m_path);
142- if (!file.open(QIODevice::ReadOnly)) {
143- return;
144- }
145- QXmlStreamReader parser(&file);
146- while (!parser.atEnd()) {
147- parser.readNext();
148- if (parser.isStartElement()) {
149- QStringRef name = parser.name();
150- if (name == "ShortName") {
151- m_name = parser.readElementText();
152- } else if (name == "Description") {
153- m_description = parser.readElementText();
154- } else if (name == "Url") {
155- if (parser.attributes().value("type") == "text/html") {
156- m_template = parser.attributes().value("template").toString();
157- }
158- }
159- }
160- }
161-}
162
163=== modified file 'src/app/webbrowser/searchengine.h'
164--- src/app/webbrowser/searchengine.h 2014-06-30 10:40:59 +0000
165+++ src/app/webbrowser/searchengine.h 2015-03-19 12:49:51 +0000
166@@ -1,5 +1,5 @@
167 /*
168- * Copyright 2014 Canonical Ltd.
169+ * Copyright 2014-2015 Canonical Ltd.
170 *
171 * This file is part of webbrowser-app.
172 *
173@@ -19,11 +19,7 @@
174 #ifndef __SEARCH_ENGINE_H__
175 #define __SEARCH_ENGINE_H__
176
177-// local
178-#include "config.h"
179-
180 // Qt
181-#include <QtCore/QMetaType>
182 #include <QtCore/QObject>
183 #include <QtCore/QString>
184
185@@ -31,28 +27,32 @@
186 {
187 Q_OBJECT
188
189- Q_PROPERTY(QString name READ name CONSTANT)
190- Q_PROPERTY(QString description READ description CONSTANT)
191- Q_PROPERTY(QString template READ urlTemplate CONSTANT)
192+ Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged)
193+ Q_PROPERTY(QString name READ name NOTIFY nameChanged)
194+ Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
195+ Q_PROPERTY(QString urlTemplate READ urlTemplate NOTIFY urlTemplateChanged)
196
197 public:
198- SearchEngine(const QString& name=DEFAULT_SEARCH_ENGINE, QObject* parent=0);
199- SearchEngine(const SearchEngine& other);
200-
201- bool isValid() const;
202+ SearchEngine(QObject* parent=0);
203+
204+ const QString& filename() const;
205+ void setFilename(const QString& filename);
206+
207 const QString& name() const;
208 const QString& description() const;
209 const QString& urlTemplate() const;
210
211+Q_SIGNALS:
212+ void filenameChanged() const;
213+ void nameChanged() const;
214+ void descriptionChanged() const;
215+ void urlTemplateChanged() const;
216+
217 private:
218- QString m_path;
219+ QString m_filename;
220 QString m_name;
221 QString m_description;
222 QString m_template;
223-
224- void parseOpenSearchDescription();
225 };
226
227-Q_DECLARE_METATYPE(SearchEngine);
228-
229 #endif // __SEARCH_ENGINE_H__
230
231=== modified file 'src/app/webbrowser/settings.cpp'
232--- src/app/webbrowser/settings.cpp 2015-02-09 10:16:16 +0000
233+++ src/app/webbrowser/settings.cpp 2015-03-19 12:49:51 +0000
234@@ -19,19 +19,16 @@
235 // local
236 #include "settings.h"
237 #include "config.h"
238-#include "searchengine.h"
239
240 // Qt
241 #include <QtCore/QSettings>
242
243 Settings::Settings(QObject* parent)
244 : QObject(parent)
245- , m_searchengine(NULL)
246 {
247 QSettings settings(QCoreApplication::applicationName(), "settings");
248 m_homepage = settings.value("homepage", QUrl(DEFAULT_HOMEPAGE)).toUrl();
249- QString name = settings.value("searchengine", QString(DEFAULT_SEARCH_ENGINE)).toString();
250- m_searchengine = new SearchEngine(name, this);
251+ m_searchengine = settings.value("searchengine", QString(DEFAULT_SEARCH_ENGINE)).toString();
252 m_allowOpenInBackgroundTab = settings.value("allowOpenInBackgroundTab", "default").toString().toLower();
253 m_restoreSession = settings.value("restoreSession", true).toBool();
254 }
255@@ -41,7 +38,7 @@
256 return m_homepage;
257 }
258
259-SearchEngine* Settings::searchEngine() const
260+const QString& Settings::searchEngine() const
261 {
262 return m_searchengine;
263 }
264
265=== modified file 'src/app/webbrowser/settings.h'
266--- src/app/webbrowser/settings.h 2015-02-09 10:16:16 +0000
267+++ src/app/webbrowser/settings.h 2015-03-19 12:49:51 +0000
268@@ -23,8 +23,6 @@
269 #include <QtCore/QObject>
270 #include <QtCore/QUrl>
271
272-class SearchEngine;
273-
274 /*
275 * Temporary helper class for read-only settings
276 * until Settings support lands in the SDK.
277@@ -37,13 +35,13 @@
278 Settings(QObject* parent=0);
279
280 const QUrl& homepage() const;
281- SearchEngine* searchEngine() const;
282+ const QString& searchEngine() const;
283 const QString& allowOpenInBackgroundTab() const;
284 bool restoreSession() const;
285
286 private:
287 QUrl m_homepage;
288- SearchEngine* m_searchengine;
289+ QString m_searchengine;
290 QString m_allowOpenInBackgroundTab; //"true" for enabled, "default" for form factor dependend behaviour (currently desktop only), anything else disables the option
291 bool m_restoreSession; // true by default
292 };
293
294=== modified file 'src/app/webbrowser/webbrowser-app.cpp'
295--- src/app/webbrowser/webbrowser-app.cpp 2015-02-27 09:28:41 +0000
296+++ src/app/webbrowser/webbrowser-app.cpp 2015-03-19 12:49:51 +0000
297@@ -92,13 +92,12 @@
298 qmlRegisterType<TabsModel>(uri, 0, 1, "TabsModel");
299 qmlRegisterType<BookmarksModel>(uri, 0, 1, "BookmarksModel");
300 qmlRegisterSingletonType<FileOperations>(uri, 0, 1, "FileOperations", FileOperations_singleton_factory);
301+ qmlRegisterType<SearchEngine>(uri, 0, 1, "SearchEngine");
302
303 if (BrowserApplication::initialize("webbrowser/webbrowser-app.qml")) {
304 Settings settings;
305- SearchEngine* searchEngine = settings.searchEngine();
306- searchEngine->setParent(m_window);
307 m_window->setProperty("homepage", settings.homepage());
308- m_window->setProperty("searchEngine", QVariant::fromValue(searchEngine));
309+ m_window->setProperty("searchEngine", settings.searchEngine());
310 m_window->setProperty("allowOpenInBackgroundTab", settings.allowOpenInBackgroundTab());
311 m_window->setProperty("restoreSession", settings.restoreSession() &&
312 !m_arguments.contains("--new-session"));

Subscribers

People subscribed via source and target branches

to status/vote changes: