Helpviewer/Download/DownloadItem.py

changeset 1101
43da69edffc4
parent 1094
743900906d8e
child 1112
8a7d1b9d18db
equal deleted inserted replaced
1100:c32d3256e63a 1101:43da69edffc4
6 """ 6 """
7 Module implementing a widget controlling a download. 7 Module implementing a widget controlling a download.
8 """ 8 """
9 9
10 from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QFile, QFileInfo, QUrl, \ 10 from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QFile, QFileInfo, QUrl, \
11 QIODevice 11 QIODevice, QCryptographicHash
12 from PyQt4.QtGui import QWidget, QPalette, QStyle, QDesktopServices, QDialog 12 from PyQt4.QtGui import QWidget, QPalette, QStyle, QDesktopServices, QDialog
13 from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply 13 from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply
14 14
15 from E5Gui import E5FileDialog 15 from E5Gui import E5FileDialog
16 16
87 self.__finishedDownloading = False 87 self.__finishedDownloading = False
88 self.__gettingFileName = False 88 self.__gettingFileName = False
89 self.__canceledFileSelect = False 89 self.__canceledFileSelect = False
90 self.__autoOpen = False 90 self.__autoOpen = False
91 91
92 self.__sha1Hash = QCryptographicHash(QCryptographicHash.Sha1)
93 self.__md5Hash = QCryptographicHash(QCryptographicHash.Md5)
94
92 if not requestFilename: 95 if not requestFilename:
93 self.__requestFilename = Preferences.getUI("RequestDownloadFilename") 96 self.__requestFilename = Preferences.getUI("RequestDownloadFilename")
94 97
95 self.__initialize() 98 self.__initialize()
96 99
106 self.__startedSaving = False 109 self.__startedSaving = False
107 self.__finishedDownloading = False 110 self.__finishedDownloading = False
108 self.__bytesReceived = 0 111 self.__bytesReceived = 0
109 self.__bytesTotal = -1 112 self.__bytesTotal = -1
110 113
111 ## self.openButton.setEnabled(False) 114 self.__sha1Hash.reset()
112 ## self.openButton.setVisible(False) 115 self.__md5Hash.reset()
113 ## 116
114 # start timer for the download estimation 117 # start timer for the download estimation
115 self.__downloadTime.start() 118 self.__downloadTime.start()
116 119
117 # attach to the reply object 120 # attach to the reply object
118 self.__url = self.__reply.url() 121 self.__url = self.__reply.url()
259 origName += '.' + endName 262 origName += '.' + endName
260 263
261 name = directory + baseName 264 name = directory + baseName
262 if endName: 265 if endName:
263 name += '.' + endName 266 name += '.' + endName
264 ## i = 1 267 if not self.__requestFilename:
265 ## while QFile.exists(name): 268 # do not overwrite, if the user is not being asked
266 ## # file exists already, don't overwrite 269 i = 1
267 ## name = directory + baseName + ('-{0:d}'.format(i)) 270 while QFile.exists(name):
268 ## if endName: 271 # file exists already, don't overwrite
269 ## name += '.' + endName 272 name = directory + baseName + ('-{0:d}'.format(i))
270 ## i += 1 273 if endName:
274 name += '.' + endName
275 i += 1
271 return name, origName 276 return name, origName
272 277
273 def __open(self): 278 def __open(self):
274 """ 279 """
275 Private slot to open the downloaded file. 280 Private slot to open the downloaded file.
392 self.on_stopButton_clicked() 397 self.on_stopButton_clicked()
393 self.statusChanged.emit() 398 self.statusChanged.emit()
394 return 399 return
395 self.statusChanged.emit() 400 self.statusChanged.emit()
396 401
397 bytesWritten = self.__output.write(self.__reply.readAll()) 402 buffer = self.__reply.readAll()
403 self.__sha1Hash.addData(buffer)
404 self.__md5Hash.addData(buffer)
405 bytesWritten = self.__output.write(buffer)
398 if bytesWritten == -1: 406 if bytesWritten == -1:
399 self.infoLabel.setText(self.trUtf8("Error saving: {0}")\ 407 self.infoLabel.setText(self.trUtf8("Error saving: {0}")\
400 .format(self.__output.errorString())) 408 .format(self.__output.errorString()))
401 self.on_stopButton_clicked() 409 self.on_stopButton_clicked()
402 else: 410 else:
514 remaining = "" 522 remaining = ""
515 523
516 if bytesTotal > 0: 524 if bytesTotal > 0:
517 remaining = timeString(timeRemaining) 525 remaining = timeString(timeRemaining)
518 526
519 info = self.trUtf8("{0} of {1} ({2}/sec) - {3}")\ 527 info = self.trUtf8("{0} of {1} ({2}/sec)\n{3}")\
520 .format( 528 .format(
521 dataString(self.__bytesReceived), 529 dataString(self.__bytesReceived),
522 bytesTotal == -1 and self.trUtf8("?") \ 530 bytesTotal == -1 and self.trUtf8("?") \
523 or dataString(bytesTotal), 531 or dataString(bytesTotal),
524 dataString(int(speed)), 532 dataString(int(speed)),
525 remaining) 533 remaining)
526 else: 534 else:
527 if self.__bytesReceived == bytesTotal or bytesTotal == -1: 535 if self.__bytesReceived == bytesTotal or bytesTotal == -1:
528 info = self.trUtf8("{0} downloaded")\ 536 info = self.trUtf8("{0} downloaded\nSHA1: {1}\nMD5: {2}")\
529 .format(dataString(self.__output.size())) 537 .format(dataString(self.__output.size()),
538 str(self.__sha1Hash.result().toHex(), encoding = "ascii"),
539 str(self.__md5Hash.result().toHex(), encoding = "ascii"))
530 else: 540 else:
531 info = self.trUtf8("{0} of {1} - Stopped")\ 541 info = self.trUtf8("{0} of {1} - Stopped")\
532 .format(dataString(self.__bytesReceived), 542 .format(dataString(self.__bytesReceived),
533 dataString(bytesTotal)) 543 dataString(bytesTotal))
534 self.infoLabel.setText(info) 544 self.infoLabel.setText(info)

eric ide

mercurial