16 |
16 |
17 from UI.Info import Program |
17 from UI.Info import Program |
18 |
18 |
19 import Preferences |
19 import Preferences |
20 |
20 |
|
21 |
21 class OpenSearchEngine(QObject): |
22 class OpenSearchEngine(QObject): |
22 """ |
23 """ |
23 Class implementing the open search engine. |
24 Class implementing the open search engine. |
24 |
25 |
25 @signal imageChanged() emitted after the icon has been changed |
26 @signal imageChanged() emitted after the icon has been changed |
26 @signal suggestions(list of strings) emitted after the suggestions have |
27 @signal suggestions(list of strings) emitted after the suggestions have |
27 been received |
28 been received |
28 """ |
29 """ |
29 imageChanged = pyqtSignal() |
30 imageChanged = pyqtSignal() |
30 suggestions = pyqtSignal(list) |
31 suggestions = pyqtSignal(list) |
31 |
32 |
59 self.__image = QImage() |
60 self.__image = QImage() |
60 self.__iconMoved = False |
61 self.__iconMoved = False |
61 self.__searchMethod = "get" |
62 self.__searchMethod = "get" |
62 self.__suggestionsMethod = "get" |
63 self.__suggestionsMethod = "get" |
63 self.__requestMethods = { |
64 self.__requestMethods = { |
64 "get" : QNetworkAccessManager.GetOperation, |
65 "get": QNetworkAccessManager.GetOperation, |
65 "post" : QNetworkAccessManager.PostOperation, |
66 "post": QNetworkAccessManager.PostOperation, |
66 } |
67 } |
67 |
68 |
68 self.__replies = [] |
69 self.__replies = [] |
69 |
70 |
70 @classmethod |
71 @classmethod |
81 result = result.replace("{startIndex}", "0") |
82 result = result.replace("{startIndex}", "0") |
82 result = result.replace("{startPage}", "0") |
83 result = result.replace("{startPage}", "0") |
83 result = result.replace("{language}", cls._language) |
84 result = result.replace("{language}", cls._language) |
84 result = result.replace("{inputEncoding}", "UTF-8") |
85 result = result.replace("{inputEncoding}", "UTF-8") |
85 result = result.replace("{outputEncoding}", "UTF-8") |
86 result = result.replace("{outputEncoding}", "UTF-8") |
86 result = result.replace("{searchTerms}", |
87 result = result.replace("{searchTerms}", |
87 bytes(QUrl.toPercentEncoding(searchTerm)).decode()) |
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) |
93 def name(self): |
94 def name(self): |
94 """ |
95 """ |
95 Public method to get the name of the engine. |
96 Public method to get the name of the engine. |
96 |
97 |
97 @return name of the engine (string) |
98 @return name of the engine (string) |
150 |
151 |
151 ret = QUrl.fromEncoded(self.parseTemplate(searchTerm, self._searchUrlTemplate)) |
152 ret = QUrl.fromEncoded(self.parseTemplate(searchTerm, self._searchUrlTemplate)) |
152 |
153 |
153 if self.__searchMethod != "post": |
154 if self.__searchMethod != "post": |
154 for parameter in self._searchParameters: |
155 for parameter in self._searchParameters: |
155 ret.addQueryItem(parameter[0], |
156 ret.addQueryItem(parameter[0], |
156 self.parseTemplate(searchTerm, parameter[1])) |
157 self.parseTemplate(searchTerm, parameter[1])) |
157 |
158 |
158 return ret |
159 return ret |
159 |
160 |
160 def providesSuggestions(self): |
161 def providesSuggestions(self): |
195 ret = QUrl.fromEncoded(QByteArray( |
196 ret = QUrl.fromEncoded(QByteArray( |
196 self.parseTemplate(searchTerm, self._suggestionsUrlTemplate))) |
197 self.parseTemplate(searchTerm, self._suggestionsUrlTemplate))) |
197 |
198 |
198 if self.__searchMethod != "post": |
199 if self.__searchMethod != "post": |
199 for parameter in self._suggestionsParameters: |
200 for parameter in self._suggestionsParameters: |
200 ret.addQueryItem(parameter[0], |
201 ret.addQueryItem(parameter[0], |
201 self.parseTemplate(searchTerm, parameter[1])) |
202 self.parseTemplate(searchTerm, parameter[1])) |
202 |
203 |
203 return ret |
204 return ret |
204 |
205 |
205 def searchParameters(self): |
206 def searchParameters(self): |
228 |
229 |
229 def setSuggestionsParameters(self, suggestionsParameters): |
230 def setSuggestionsParameters(self, suggestionsParameters): |
230 """ |
231 """ |
231 Public method to set the engine suggestions parameters. |
232 Public method to set the engine suggestions parameters. |
232 |
233 |
233 @param suggestionsParameters suggestions parameters of the |
234 @param suggestionsParameters suggestions parameters of the |
234 engine (list of two tuples) |
235 engine (list of two tuples) |
235 """ |
236 """ |
236 self._suggestionsParameters = suggestionsParameters[:] |
237 self._suggestionsParameters = suggestionsParameters[:] |
237 |
238 |
238 def searchMethod(self): |
239 def searchMethod(self): |
385 |
386 |
386 return self._name == other._name and \ |
387 return self._name == other._name and \ |
387 self._description == other._description and \ |
388 self._description == other._description and \ |
388 self._imageUrl == other._imageUrl and \ |
389 self._imageUrl == other._imageUrl and \ |
389 self._searchUrlTemplate == other._searchUrlTemplate and \ |
390 self._searchUrlTemplate == other._searchUrlTemplate and \ |
390 self._suggestionsUrlTemplate ==other._suggestionsUrlTemplate and \ |
391 self._suggestionsUrlTemplate == other._suggestionsUrlTemplate and \ |
391 self._searchParameters == other._searchParameters and \ |
392 self._searchParameters == other._searchParameters and \ |
392 self._suggestionsParameters == other._suggestionsParameters |
393 self._suggestionsParameters == other._suggestionsParameters |
393 |
394 |
394 def __lt__(self, other): |
395 def __lt__(self, other): |
395 """ |
396 """ |
471 |
472 |
472 def setNetworkAccessManager(self, networkAccessManager): |
473 def setNetworkAccessManager(self, networkAccessManager): |
473 """ |
474 """ |
474 Public method to set the reference to the network access manager. |
475 Public method to set the reference to the network access manager. |
475 |
476 |
476 @param networkAccessManager reference to the network access manager |
477 @param networkAccessManager reference to the network access manager |
477 object (QNetworkAccessManager) |
478 object (QNetworkAccessManager) |
478 """ |
479 """ |
479 self.__networkAccessManager = networkAccessManager |
480 self.__networkAccessManager = networkAccessManager |