65 self.__page = webPage |
65 self.__page = webPage |
66 self.__toDownload = download |
66 self.__toDownload = download |
67 self.__bytesReceived = 0 |
67 self.__bytesReceived = 0 |
68 self.__downloadTime = QTime() |
68 self.__downloadTime = QTime() |
69 self.__output = QFile() |
69 self.__output = QFile() |
70 |
70 |
71 self.__initialize() |
71 def initialize(self): |
72 |
72 """ |
73 def __initialize(self): |
73 Public method to (re)initialize the dialog. |
74 """ |
74 |
75 Private method to (re)initialize the dialog. |
75 @return flag indicating success (boolean) |
76 """ |
76 """ |
77 if self.__reply is None: |
77 if self.__reply is None: |
78 return |
78 return |
79 |
79 |
80 self.__startedSaving = False |
80 self.__startedSaving = False |
92 self.connect(self.__reply, SIGNAL("finished()"), self.__finished) |
92 self.connect(self.__reply, SIGNAL("finished()"), self.__finished) |
93 |
93 |
94 # reset info |
94 # reset info |
95 self.infoLabel.clear() |
95 self.infoLabel.clear() |
96 self.progressBar.setValue(0) |
96 self.progressBar.setValue(0) |
97 self.__getFileName() |
97 if not self.__getFileName(): |
|
98 return False |
98 |
99 |
99 # start timer for the download estimation |
100 # start timer for the download estimation |
100 self.__downloadTime.start() |
101 self.__downloadTime.start() |
101 |
102 |
102 if self.__reply.error() != QNetworkReply.NoError: |
103 if self.__reply.error() != QNetworkReply.NoError: |
103 self.__networkError() |
104 self.__networkError() |
104 self.__finished() |
105 self.__finished() |
|
106 return False |
|
107 |
|
108 return True |
105 |
109 |
106 def __getFileName(self): |
110 def __getFileName(self): |
107 """ |
111 """ |
108 Private method to get the filename to save to from the user. |
112 Private method to get the filename to save to from the user. |
|
113 |
|
114 @return flag indicating success (boolean) |
109 """ |
115 """ |
110 downloadDirectory = Preferences.getUI("DownloadPath") |
116 downloadDirectory = Preferences.getUI("DownloadPath") |
111 if not downloadDirectory: |
117 if not downloadDirectory: |
112 downloadDirectory = \ |
118 downloadDirectory = \ |
113 QDesktopServices.storageLocation(QDesktopServices.DocumentsLocation) |
119 QDesktopServices.storageLocation(QDesktopServices.DocumentsLocation) |
144 "") |
150 "") |
145 if not fileName: |
151 if not fileName: |
146 self.__reply.close() |
152 self.__reply.close() |
147 if not self.keepOpenCheckBox.isChecked(): |
153 if not self.keepOpenCheckBox.isChecked(): |
148 self.close() |
154 self.close() |
|
155 return False |
149 else: |
156 else: |
150 self.filenameLabel.setText(self.trUtf8("Download canceled: {0}")\ |
157 self.filenameLabel.setText(self.trUtf8("Download canceled: {0}")\ |
151 .format(QFileInfo(defaultFileName).fileName())) |
158 .format(QFileInfo(defaultFileName).fileName())) |
152 self.__stop() |
159 self.__stop() |
153 return |
160 return True |
154 |
161 |
155 self.__output.setFileName(fileName) |
162 self.__output.setFileName(fileName) |
156 self.filenameLabel.setText(QFileInfo(self.__output.fileName()).fileName()) |
163 self.filenameLabel.setText(QFileInfo(self.__output.fileName()).fileName()) |
157 if self.__requestFilename: |
164 if self.__requestFilename: |
158 self.__readyRead() |
165 self.__readyRead() |
|
166 |
|
167 return True |
159 |
168 |
160 def __saveFileName(self, directory): |
169 def __saveFileName(self, directory): |
161 """ |
170 """ |
162 Private method to calculate a name for the file to download. |
171 Private method to calculate a name for the file to download. |
163 |
172 |
242 nam = QNetworkAccessManager() |
251 nam = QNetworkAccessManager() |
243 reply = nam.get(QNetworkRequest(self.__url)) |
252 reply = nam.get(QNetworkRequest(self.__url)) |
244 if self.__output.exists(): |
253 if self.__output.exists(): |
245 self.__output.remove() |
254 self.__output.remove() |
246 self.__reply = reply |
255 self.__reply = reply |
247 self.__initialize() |
256 self.initialize() |
248 |
257 |
249 def __readyRead(self): |
258 def __readyRead(self): |
250 """ |
259 """ |
251 Private slot to read the available data. |
260 Private slot to read the available data. |
252 """ |
261 """ |
295 locationHeader = self.__reply.header(QNetworkRequest.LocationHeader) |
304 locationHeader = self.__reply.header(QNetworkRequest.LocationHeader) |
296 if locationHeader.isValid(): |
305 if locationHeader.isValid(): |
297 self.__url = locationHeader |
306 self.__url = locationHeader |
298 self.__reply = Helpviewer.HelpWindow.HelpWindow.networkAccessManager().get( |
307 self.__reply = Helpviewer.HelpWindow.HelpWindow.networkAccessManager().get( |
299 QNetworkRequest(self.__url)) |
308 QNetworkRequest(self.__url)) |
300 self.__initialize() |
309 self.initialize() |
301 |
310 |
302 def __downloadProgress(self, received, total): |
311 def __downloadProgress(self, received, total): |
303 """ |
312 """ |
304 Private method show the download progress. |
313 Private method show the download progress. |
305 |
314 |
373 """ |
382 """ |
374 unit = "" |
383 unit = "" |
375 if size < 1024: |
384 if size < 1024: |
376 unit = self.trUtf8("bytes") |
385 unit = self.trUtf8("bytes") |
377 elif size < 1024 * 1024: |
386 elif size < 1024 * 1024: |
378 size //= 1024 |
387 size /= 1024 |
379 unit = self.trUtf8("kB") |
388 unit = self.trUtf8("kB") |
380 else: |
389 else: |
381 size //= 1024 * 1024 |
390 size /= 1024 * 1024 |
382 unit = self.trUtf8("MB") |
391 unit = self.trUtf8("MB") |
383 return "{0} {1}".format(size, unit) |
392 return "{0:.1f} {1}".format(size, unit) |
384 |
393 |
385 def __downloading(self): |
394 def __downloading(self): |
386 """ |
395 """ |
387 Private method to determine, if a download is in progress. |
396 Private method to determine, if a download is in progress. |
388 |
397 |
414 def closeEvent(self, evt): |
423 def closeEvent(self, evt): |
415 """ |
424 """ |
416 Protected method called when the dialog is closed. |
425 Protected method called when the dialog is closed. |
417 """ |
426 """ |
418 self.__output.close() |
427 self.__output.close() |
|
428 |
|
429 self.disconnect(self.__reply, SIGNAL("readyRead()"), self.__readyRead) |
|
430 self.disconnect(self.__reply, SIGNAL("error(QNetworkReply::NetworkError)"), |
|
431 self.__networkError) |
|
432 self.disconnect(self.__reply, SIGNAL("downloadProgress(qint64, qint64)"), |
|
433 self.__downloadProgress) |
|
434 self.disconnect(self.__reply, SIGNAL("metaDataChanged()"), |
|
435 self.__metaDataChanged) |
|
436 self.disconnect(self.__reply, SIGNAL("finished()"), self.__finished) |
|
437 self.__reply.close() |
|
438 self.__reply.deleteLater() |
|
439 |
419 self.done.emit() |
440 self.done.emit() |