224 if not fileName: |
224 if not fileName: |
225 self.progressBar.setVisible(False) |
225 self.progressBar.setVisible(False) |
226 self.__reply.close() |
226 self.__reply.close() |
227 self.on_stopButton_clicked() |
227 self.on_stopButton_clicked() |
228 self.filenameLabel.setText( |
228 self.filenameLabel.setText( |
229 self.trUtf8("Download canceled: {0}")\ |
229 self.trUtf8("Download canceled: {0}") |
230 .format(QFileInfo(defaultFileName).fileName())) |
230 .format(QFileInfo(defaultFileName).fileName())) |
231 self.__canceledFileSelect = True |
231 self.__canceledFileSelect = True |
232 return |
232 return |
233 |
233 |
234 fileInfo = QFileInfo(fileName) |
234 fileInfo = QFileInfo(fileName) |
244 if not saveDirPath.exists(): |
244 if not saveDirPath.exists(): |
245 if not saveDirPath.mkpath(saveDirPath.absolutePath()): |
245 if not saveDirPath.mkpath(saveDirPath.absolutePath()): |
246 self.progressBar.setVisible(False) |
246 self.progressBar.setVisible(False) |
247 self.on_stopButton_clicked() |
247 self.on_stopButton_clicked() |
248 self.infoLabel.setText(self.trUtf8( |
248 self.infoLabel.setText(self.trUtf8( |
249 "Download directory ({0}) couldn't be created.")\ |
249 "Download directory ({0}) couldn't be created.") |
250 .format(saveDirPath.absolutePath())) |
250 .format(saveDirPath.absolutePath())) |
251 return |
251 return |
252 |
252 |
253 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
253 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
254 if self.__requestFilename: |
254 if self.__requestFilename: |
420 # in case someone else has already put a file there |
420 # in case someone else has already put a file there |
421 if not self.__requestFilename: |
421 if not self.__requestFilename: |
422 self.__getFileName() |
422 self.__getFileName() |
423 if not self.__output.open(QIODevice.WriteOnly): |
423 if not self.__output.open(QIODevice.WriteOnly): |
424 self.infoLabel.setText( |
424 self.infoLabel.setText( |
425 self.trUtf8("Error opening save file: {0}")\ |
425 self.trUtf8("Error opening save file: {0}") |
426 .format(self.__output.errorString())) |
426 .format(self.__output.errorString())) |
427 self.on_stopButton_clicked() |
427 self.on_stopButton_clicked() |
428 self.statusChanged.emit() |
428 self.statusChanged.emit() |
429 return |
429 return |
430 self.statusChanged.emit() |
430 self.statusChanged.emit() |
432 buffer = self.__reply.readAll() |
432 buffer = self.__reply.readAll() |
433 self.__sha1Hash.addData(buffer) |
433 self.__sha1Hash.addData(buffer) |
434 self.__md5Hash.addData(buffer) |
434 self.__md5Hash.addData(buffer) |
435 bytesWritten = self.__output.write(buffer) |
435 bytesWritten = self.__output.write(buffer) |
436 if bytesWritten == -1: |
436 if bytesWritten == -1: |
437 self.infoLabel.setText(self.trUtf8("Error saving: {0}")\ |
437 self.infoLabel.setText(self.trUtf8("Error saving: {0}") |
438 .format(self.__output.errorString())) |
438 .format(self.__output.errorString())) |
439 self.on_stopButton_clicked() |
439 self.on_stopButton_clicked() |
440 else: |
440 else: |
441 self.__startedSaving = True |
441 self.__startedSaving = True |
442 if self.__finishedDownloading: |
442 if self.__finishedDownloading: |
444 |
444 |
445 def __networkError(self): |
445 def __networkError(self): |
446 """ |
446 """ |
447 Private slot to handle a network error. |
447 Private slot to handle a network error. |
448 """ |
448 """ |
449 self.infoLabel.setText(self.trUtf8("Network Error: {0}")\ |
449 self.infoLabel.setText(self.trUtf8("Network Error: {0}") |
450 .format(self.__reply.errorString())) |
450 .format(self.__reply.errorString())) |
451 self.tryAgainButton.setEnabled(True) |
451 self.tryAgainButton.setEnabled(True) |
452 self.tryAgainButton.setVisible(True) |
452 self.tryAgainButton.setVisible(True) |
453 self.downloadFinished.emit() |
453 self.downloadFinished.emit() |
454 |
454 |
515 return -1.0 |
515 return -1.0 |
516 |
516 |
517 if self.bytesTotal() == -1: |
517 if self.bytesTotal() == -1: |
518 return -1.0 |
518 return -1.0 |
519 |
519 |
520 timeRemaining = (self.bytesTotal() - |
520 timeRemaining = (self.bytesTotal() - |
521 self.bytesReceived()) / self.currentSpeed() |
521 self.bytesReceived()) / self.currentSpeed() |
522 |
522 |
523 # ETA should never be 0 |
523 # ETA should never be 0 |
524 if timeRemaining == 0: |
524 if timeRemaining == 0: |
525 timeRemaining = 1 |
525 timeRemaining = 1 |
558 remaining = timeString(timeRemaining) |
558 remaining = timeString(timeRemaining) |
559 |
559 |
560 info = self.trUtf8("{0} of {1} ({2}/sec)\n{3}")\ |
560 info = self.trUtf8("{0} of {1} ({2}/sec)\n{3}")\ |
561 .format( |
561 .format( |
562 dataString(self.__bytesReceived), |
562 dataString(self.__bytesReceived), |
563 bytesTotal == -1 and self.trUtf8("?") \ |
563 bytesTotal == -1 and self.trUtf8("?") |
564 or dataString(bytesTotal), |
564 or dataString(bytesTotal), |
565 dataString(int(speed)), |
565 dataString(int(speed)), |
566 remaining) |
566 remaining) |
567 else: |
567 else: |
568 if self.__bytesReceived == bytesTotal or bytesTotal == -1: |
568 if self.__bytesReceived == bytesTotal or bytesTotal == -1: |
569 info = self.trUtf8("{0} downloaded\nSHA1: {1}\nMD5: {2}")\ |
569 info = self.trUtf8("{0} downloaded\nSHA1: {1}\nMD5: {2}")\ |
570 .format(dataString(self.__output.size()), |
570 .format(dataString(self.__output.size()), |
571 str(self.__sha1Hash.result().toHex(), |
571 str(self.__sha1Hash.result().toHex(), |
572 encoding="ascii"), |
572 encoding="ascii"), |
573 str(self.__md5Hash.result().toHex(), |
573 str(self.__md5Hash.result().toHex(), |
574 encoding="ascii") |
574 encoding="ascii") |
575 ) |
575 ) |
576 else: |
576 else: |
577 info = self.trUtf8("{0} of {1} - Stopped")\ |
577 info = self.trUtf8("{0} of {1} - Stopped")\ |
578 .format(dataString(self.__bytesReceived), |
578 .format(dataString(self.__bytesReceived), |
579 dataString(bytesTotal)) |
579 dataString(bytesTotal)) |
580 self.infoLabel.setText(info) |
580 self.infoLabel.setText(info) |