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