Helpviewer/DownloadDialog.py

changeset 256
04083f42042d
parent 168
3383117f894b
child 277
c1a90bd43161
child 278
c93823b96faa
equal deleted inserted replaced
255:eb0ffc3f12a2 256:04083f42042d
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)
128 QMessageBox.Save | \ 134 QMessageBox.Save | \
129 QMessageBox.Cancel)) 135 QMessageBox.Cancel))
130 if res == QMessageBox.Cancel: 136 if res == QMessageBox.Cancel:
131 self.__stop() 137 self.__stop()
132 self.close() 138 self.close()
133 return 139 return False
134 140
135 self.__autoOpen = res == QMessageBox.Open 141 self.__autoOpen = res == QMessageBox.Open
136 fileName = QDesktopServices.storageLocation(QDesktopServices.TempLocation) + \ 142 fileName = QDesktopServices.storageLocation(QDesktopServices.TempLocation) + \
137 '/' + baseName 143 '/' + baseName
138 144
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()

eric ide

mercurial