10 from __future__ import unicode_literals # __IGNORE_WARNING__ |
10 from __future__ import unicode_literals # __IGNORE_WARNING__ |
11 |
11 |
12 import re |
12 import re |
13 import json |
13 import json |
14 |
14 |
15 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, QBuffer, \ |
15 from PyQt4.QtCore import pyqtSignal, pyqtSlot, QLocale, QUrl, QByteArray, \ |
16 QIODevice, QObject |
16 QBuffer, QIODevice, QObject |
17 from PyQt4.QtGui import QImage |
17 from PyQt4.QtGui import QImage |
18 from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager |
18 from PyQt4.QtNetwork import QNetworkRequest, QNetworkAccessManager |
19 |
19 |
20 from UI.Info import Program |
20 from UI.Info import Program |
21 |
21 |
81 result = result.replace("{startPage}", "0") |
81 result = result.replace("{startPage}", "0") |
82 result = result.replace("{language}", language) |
82 result = result.replace("{language}", language) |
83 result = result.replace("{country}", country) |
83 result = result.replace("{country}", country) |
84 result = result.replace("{inputEncoding}", "UTF-8") |
84 result = result.replace("{inputEncoding}", "UTF-8") |
85 result = result.replace("{outputEncoding}", "UTF-8") |
85 result = result.replace("{outputEncoding}", "UTF-8") |
86 result = result.replace("{searchTerms}", |
86 result = result.replace( |
87 bytes(QUrl.toPercentEncoding(searchTerm)).decode()) |
87 "{searchTerms}", |
|
88 bytes(QUrl.toPercentEncoding(searchTerm)).decode()) |
88 result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result) |
89 result = re.sub(r"""\{([^\}]*:|)source\??\}""", Program, result) |
89 |
90 |
90 return result |
91 return result |
91 |
92 |
92 @pyqtSlot(result=str) |
93 @pyqtSlot(result=str) |
146 @return URL (QUrl) |
147 @return URL (QUrl) |
147 """ |
148 """ |
148 if not self._searchUrlTemplate: |
149 if not self._searchUrlTemplate: |
149 return QUrl() |
150 return QUrl() |
150 |
151 |
151 ret = QUrl.fromEncoded(self.parseTemplate(searchTerm, self._searchUrlTemplate)) |
152 ret = QUrl.fromEncoded( |
|
153 self.parseTemplate(searchTerm, self._searchUrlTemplate)) |
152 |
154 |
153 if self.__searchMethod != "post": |
155 if self.__searchMethod != "post": |
154 for parameter in self._searchParameters: |
156 for parameter in self._searchParameters: |
155 ret.addQueryItem(parameter[0], |
157 ret.addQueryItem(parameter[0], |
156 self.parseTemplate(searchTerm, parameter[1])) |
158 self.parseTemplate(searchTerm, parameter[1])) |
212 |
214 |
213 def setSearchParameters(self, searchParameters): |
215 def setSearchParameters(self, searchParameters): |
214 """ |
216 """ |
215 Public method to set the engine search parameters. |
217 Public method to set the engine search parameters. |
216 |
218 |
217 @param searchParameters search parameters of the engine (list of two tuples) |
219 @param searchParameters search parameters of the engine |
|
220 (list of two tuples) |
218 """ |
221 """ |
219 self._searchParameters = searchParameters[:] |
222 self._searchParameters = searchParameters[:] |
220 |
223 |
221 def suggestionsParameters(self): |
224 def suggestionsParameters(self): |
222 """ |
225 """ |
235 """ |
238 """ |
236 self._suggestionsParameters = suggestionsParameters[:] |
239 self._suggestionsParameters = suggestionsParameters[:] |
237 |
240 |
238 def searchMethod(self): |
241 def searchMethod(self): |
239 """ |
242 """ |
240 Public method to get the HTTP request method used to perform search requests. |
243 Public method to get the HTTP request method used to perform search |
|
244 requests. |
241 |
245 |
242 @return HTTP request method (string) |
246 @return HTTP request method (string) |
243 """ |
247 """ |
244 return self.__searchMethod |
248 return self.__searchMethod |
245 |
249 |
246 def setSearchMethod(self, method): |
250 def setSearchMethod(self, method): |
247 """ |
251 """ |
248 Public method to set the HTTP request method used to perform search requests. |
252 Public method to set the HTTP request method used to perform search |
|
253 requests. |
249 |
254 |
250 @param method HTTP request method (string) |
255 @param method HTTP request method (string) |
251 """ |
256 """ |
252 requestMethod = method.lower() |
257 requestMethod = method.lower() |
253 if requestMethod not in self.__requestMethods: |
258 if requestMethod not in self.__requestMethods: |
255 |
260 |
256 self.__searchMethod = requestMethod |
261 self.__searchMethod = requestMethod |
257 |
262 |
258 def suggestionsMethod(self): |
263 def suggestionsMethod(self): |
259 """ |
264 """ |
260 Public method to get the HTTP request method used to perform suggestions requests. |
265 Public method to get the HTTP request method used to perform |
|
266 suggestions requests. |
261 |
267 |
262 @return HTTP request method (string) |
268 @return HTTP request method (string) |
263 """ |
269 """ |
264 return self.__suggestionsMethod |
270 return self.__suggestionsMethod |
265 |
271 |
266 def setSuggestionsMethod(self, method): |
272 def setSuggestionsMethod(self, method): |
267 """ |
273 """ |
268 Public method to set the HTTP request method used to perform suggestions requests. |
274 Public method to set the HTTP request method used to perform |
|
275 suggestions requests. |
269 |
276 |
270 @param method HTTP request method (string) |
277 @param method HTTP request method (string) |
271 """ |
278 """ |
272 requestMethod = method.lower() |
279 requestMethod = method.lower() |
273 if requestMethod not in self.__requestMethods: |
280 if requestMethod not in self.__requestMethods: |
285 |
292 |
286 def setImageUrl(self, imageUrl): |
293 def setImageUrl(self, imageUrl): |
287 """ |
294 """ |
288 Public method to set the engine image URL. |
295 Public method to set the engine image URL. |
289 |
296 |
290 @param description image URL of the engine (string) |
297 @param imageUrl image URL of the engine (string) |
291 """ |
298 """ |
292 self._imageUrl = imageUrl |
299 self._imageUrl = imageUrl |
293 |
300 |
294 def setImageUrlAndLoad(self, imageUrl): |
301 def setImageUrlAndLoad(self, imageUrl): |
295 """ |
302 """ |
296 Public method to set the engine image URL. |
303 Public method to set the engine image URL. |
297 |
304 |
298 @param description image URL of the engine (string) |
305 @param imageUrl image URL of the engine (string) |
299 """ |
306 """ |
300 self.setImageUrl(imageUrl) |
307 self.setImageUrl(imageUrl) |
301 self.__iconMoved = False |
308 self.__iconMoved = False |
302 self.loadImage() |
309 self.loadImage() |
303 |
310 |
357 """ |
364 """ |
358 if not self._imageUrl: |
365 if not self._imageUrl: |
359 imageBuffer = QBuffer() |
366 imageBuffer = QBuffer() |
360 imageBuffer.open(QIODevice.ReadWrite) |
367 imageBuffer.open(QIODevice.ReadWrite) |
361 if image.save(imageBuffer, "PNG"): |
368 if image.save(imageBuffer, "PNG"): |
362 self._imageUrl = "data:image/png;base64,{0}"\ |
369 self._imageUrl = "data:image/png;base64,{0}".format( |
363 .format(bytes(imageBuffer.buffer().toBase64()).decode()) |
370 bytes(imageBuffer.buffer().toBase64()).decode()) |
364 |
371 |
365 self.__image = QImage(image) |
372 self.__image = QImage(image) |
366 self.imageChanged.emit() |
373 self.imageChanged.emit() |
367 |
374 |
368 def isValid(self): |
375 def isValid(self): |
414 |
421 |
415 if self.__networkAccessManager is None: |
422 if self.__networkAccessManager is None: |
416 return |
423 return |
417 |
424 |
418 if self.__suggestionsReply is not None: |
425 if self.__suggestionsReply is not None: |
419 ## self.__suggestionsReply.finished[()].disconnect(self.__suggestionsObtained) |
|
420 self.__suggestionsReply.abort() |
426 self.__suggestionsReply.abort() |
421 self.__suggestionsReply.deleteLater() |
427 self.__suggestionsReply.deleteLater() |
422 self.__suggestionsReply = None |
428 self.__suggestionsReply = None |
423 |
429 |
424 if self.__suggestionsMethod not in self.__requestMethods: |
430 if self.__suggestionsMethod not in self.__requestMethods: |
433 for parameter in self._suggestionsParameters: |
439 for parameter in self._suggestionsParameters: |
434 parameters.append(parameter[0] + "=" + parameter[1]) |
440 parameters.append(parameter[0] + "=" + parameter[1]) |
435 data = "&".join(parameters) |
441 data = "&".join(parameters) |
436 self.__suggestionsReply = self.networkAccessManager().post( |
442 self.__suggestionsReply = self.networkAccessManager().post( |
437 QNetworkRequest(self.suggestionsUrl(searchTerm)), data) |
443 QNetworkRequest(self.suggestionsUrl(searchTerm)), data) |
438 self.__suggestionsReply.finished[()].connect(self.__suggestionsObtained) |
444 self.__suggestionsReply.finished[()].connect( |
|
445 self.__suggestionsObtained) |
439 |
446 |
440 def __suggestionsObtained(self): |
447 def __suggestionsObtained(self): |
441 """ |
448 """ |
442 Private slot to receive the suggestions. |
449 Private slot to receive the suggestions. |
443 """ |
450 """ |
465 |
472 |
466 def networkAccessManager(self): |
473 def networkAccessManager(self): |
467 """ |
474 """ |
468 Public method to get a reference to the network access manager object. |
475 Public method to get a reference to the network access manager object. |
469 |
476 |
470 @return reference to the network access manager object (QNetworkAccessManager) |
477 @return reference to the network access manager object |
|
478 (QNetworkAccessManager) |
471 """ |
479 """ |
472 return self.__networkAccessManager |
480 return self.__networkAccessManager |
473 |
481 |
474 def setNetworkAccessManager(self, networkAccessManager): |
482 def setNetworkAccessManager(self, networkAccessManager): |
475 """ |
483 """ |