12 str = unicode |
12 str = unicode |
13 except NameError: |
13 except NameError: |
14 pass |
14 pass |
15 |
15 |
16 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QFile, QFileInfo, \ |
16 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QFile, QFileInfo, \ |
17 QUrl, QIODevice, QCryptographicHash, PYQT_VERSION_STR |
17 QUrl, QIODevice, QCryptographicHash, PYQT_VERSION_STR, QDateTime |
18 from PyQt5.QtGui import QPalette, QDesktopServices |
18 from PyQt5.QtGui import QPalette, QDesktopServices |
19 from PyQt5.QtWidgets import QWidget, QStyle, QDialog |
19 from PyQt5.QtWidgets import QWidget, QStyle, QDialog |
20 from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply |
20 from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply |
21 |
21 |
22 from E5Gui import E5FileDialog |
22 from E5Gui import E5FileDialog |
106 self.__startedSaving = False |
106 self.__startedSaving = False |
107 self.__finishedDownloading = False |
107 self.__finishedDownloading = False |
108 self.__gettingFileName = False |
108 self.__gettingFileName = False |
109 self.__canceledFileSelect = False |
109 self.__canceledFileSelect = False |
110 self.__autoOpen = False |
110 self.__autoOpen = False |
|
111 self.__downloadedDateTime = QDateTime() |
111 |
112 |
112 self.__sha1Hash = QCryptographicHash(QCryptographicHash.Sha1) |
113 self.__sha1Hash = QCryptographicHash(QCryptographicHash.Sha1) |
113 self.__md5Hash = QCryptographicHash(QCryptographicHash.Md5) |
114 self.__md5Hash = QCryptographicHash(QCryptographicHash.Md5) |
114 |
115 |
115 if not requestFilename: |
116 if not requestFilename: |
147 self.__reply.downloadProgress.connect(self.__downloadProgress) |
148 self.__reply.downloadProgress.connect(self.__downloadProgress) |
148 self.__reply.metaDataChanged.connect(self.__metaDataChanged) |
149 self.__reply.metaDataChanged.connect(self.__metaDataChanged) |
149 self.__reply.finished.connect(self.__finished) |
150 self.__reply.finished.connect(self.__finished) |
150 |
151 |
151 # reset info |
152 # reset info |
|
153 self.datetimeLabel.clear() |
|
154 self.datetimeLabel.hide() |
152 self.infoLabel.clear() |
155 self.infoLabel.clear() |
153 self.progressBar.setValue(0) |
156 self.progressBar.setValue(0) |
154 self.__getFileName() |
157 self.__getFileName() |
155 |
158 |
156 if self.__reply.error() != QNetworkReply.NoError: |
159 if self.__reply.error() != QNetworkReply.NoError: |
194 self.on_stopButton_clicked() |
197 self.on_stopButton_clicked() |
195 self.filenameLabel.setText( |
198 self.filenameLabel.setText( |
196 self.tr("Download canceled: {0}").format( |
199 self.tr("Download canceled: {0}").format( |
197 QFileInfo(defaultFileName).fileName())) |
200 QFileInfo(defaultFileName).fileName())) |
198 self.__canceledFileSelect = True |
201 self.__canceledFileSelect = True |
|
202 self.__setDateTime() |
199 return |
203 return |
200 |
204 |
201 if dlg.getAction() == "scan": |
205 if dlg.getAction() == "scan": |
202 self.__mainWindow.requestVirusTotalScan(url) |
206 self.__mainWindow.requestVirusTotalScan(url) |
203 |
207 |
236 self.on_stopButton_clicked() |
240 self.on_stopButton_clicked() |
237 self.filenameLabel.setText( |
241 self.filenameLabel.setText( |
238 self.tr("Download canceled: {0}") |
242 self.tr("Download canceled: {0}") |
239 .format(QFileInfo(defaultFileName).fileName())) |
243 .format(QFileInfo(defaultFileName).fileName())) |
240 self.__canceledFileSelect = True |
244 self.__canceledFileSelect = True |
|
245 self.__setDateTime() |
241 return |
246 return |
242 |
247 |
243 fileInfo = QFileInfo(fileName) |
248 fileInfo = QFileInfo(fileName) |
244 Helpviewer.HelpWindow.HelpWindow.downloadManager()\ |
249 Helpviewer.HelpWindow.HelpWindow.downloadManager()\ |
245 .setDownloadDirectory(fileInfo.absoluteDir().absolutePath()) |
250 .setDownloadDirectory(fileInfo.absoluteDir().absolutePath()) |
255 self.progressBar.setVisible(False) |
260 self.progressBar.setVisible(False) |
256 self.on_stopButton_clicked() |
261 self.on_stopButton_clicked() |
257 self.infoLabel.setText(self.tr( |
262 self.infoLabel.setText(self.tr( |
258 "Download directory ({0}) couldn't be created.") |
263 "Download directory ({0}) couldn't be created.") |
259 .format(saveDirPath.absolutePath())) |
264 .format(saveDirPath.absolutePath())) |
|
265 self.__setDateTime() |
260 return |
266 return |
261 |
267 |
262 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
268 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
263 if self.__requestFilename: |
269 if self.__requestFilename: |
264 self.__readyRead() |
270 self.__readyRead() |
377 self.openButton.setEnabled(False) |
383 self.openButton.setEnabled(False) |
378 self.openButton.setVisible(False) |
384 self.openButton.setVisible(False) |
379 self.setUpdatesEnabled(True) |
385 self.setUpdatesEnabled(True) |
380 self.__state = DownloadItem.DownloadCancelled |
386 self.__state = DownloadItem.DownloadCancelled |
381 self.__reply.abort() |
387 self.__reply.abort() |
|
388 self.__setDateTime() |
382 self.downloadFinished.emit() |
389 self.downloadFinished.emit() |
383 |
390 |
384 @pyqtSlot() |
391 @pyqtSlot() |
385 def on_openButton_clicked(self): |
392 def on_openButton_clicked(self): |
386 """ |
393 """ |
623 self.openButton.setVisible(noError) |
630 self.openButton.setVisible(noError) |
624 self.__output.close() |
631 self.__output.close() |
625 if QFile.exists(self.__fileName): |
632 if QFile.exists(self.__fileName): |
626 QFile.remove(self.__fileName) |
633 QFile.remove(self.__fileName) |
627 self.__output.rename(self.__fileName) |
634 self.__output.rename(self.__fileName) |
|
635 self.__state = DownloadItem.DownloadSuccessful |
628 self.__updateInfoLabel() |
636 self.__updateInfoLabel() |
629 self.__state = DownloadItem.DownloadSuccessful |
637 self.__setDateTime() |
|
638 |
|
639 self.__adjustSize() |
|
640 |
630 self.statusChanged.emit() |
641 self.statusChanged.emit() |
631 self.downloadFinished.emit() |
642 self.downloadFinished.emit() |
632 |
643 |
633 if self.__autoOpen: |
644 if self.__autoOpen: |
634 self.__open() |
645 self.__open() |
667 |
678 |
668 def getData(self): |
679 def getData(self): |
669 """ |
680 """ |
670 Public method to get the relevant download data. |
681 Public method to get the relevant download data. |
671 |
682 |
672 @return tuple of URL, save location, flag and the |
683 @return tuple of URL, save location, flag, the |
673 URL of the related web page (QUrl, string, boolean,QUrl) |
684 URL of the related web page and the date and time |
|
685 of the download |
|
686 @rtype tuple of (QUrl, str, bool, QUrl, QDateTime) |
674 """ |
687 """ |
675 return (self.__url, QFileInfo(self.__fileName).filePath(), |
688 return (self.__url, QFileInfo(self.__fileName).filePath(), |
676 self.downloadedSuccessfully(), self.__pageUrl) |
689 self.downloadedSuccessfully(), self.__pageUrl, |
|
690 self.__downloadedDateTime) |
677 |
691 |
678 def setData(self, data): |
692 def setData(self, data): |
679 """ |
693 """ |
680 Public method to set the relevant download data. |
694 Public method to set the relevant download data. |
681 |
695 |
682 @param data tuple of URL, save location, flag and the |
696 @param data tuple of URL, save location, flag, the |
683 URL of the related web page (QUrl, string, boolean, QUrl) |
697 URL of the related web page and the date and time |
|
698 of the download |
|
699 @type QUrl, str, bool, QUrl, QDateTime |
684 """ |
700 """ |
685 self.__url = data[0] |
701 self.__url = data[0] |
686 self.__fileName = data[1] |
702 self.__fileName = data[1] |
687 self.__pageUrl = data[3] |
703 self.__pageUrl = data[3] |
688 self.__isFtpDownload = self.__url.scheme() == "ftp" |
704 self.__isFtpDownload = self.__url.scheme() == "ftp" |
689 |
705 |
690 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
706 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
691 self.infoLabel.setText(self.__fileName) |
707 self.infoLabel.setText(self.__fileName) |
|
708 |
|
709 if len(data) == 5: |
|
710 self.__setDateTime(data[4]) |
|
711 else: |
|
712 self.__setDateTime(QDateTime()) |
692 |
713 |
693 self.stopButton.setEnabled(False) |
714 self.stopButton.setEnabled(False) |
694 self.stopButton.setVisible(False) |
715 self.stopButton.setVisible(False) |
695 self.pauseButton.setEnabled(False) |
716 self.pauseButton.setEnabled(False) |
696 self.pauseButton.setVisible(False) |
717 self.pauseButton.setVisible(False) |
717 Public method to get the URL of the download page. |
740 Public method to get the URL of the download page. |
718 |
741 |
719 @return URL of the download page (QUrl) |
742 @return URL of the download page (QUrl) |
720 """ |
743 """ |
721 return self.__pageUrl |
744 return self.__pageUrl |
|
745 |
|
746 def __adjustSize(self): |
|
747 """ |
|
748 Private method to adjust the size of the download item. |
|
749 """ |
|
750 self.ensurePolished() |
|
751 |
|
752 msh = self.minimumSizeHint() |
|
753 self.resize(max(self.width(), msh.width()), msh.height()) |
|
754 |
|
755 def __setDateTime(self, dateTime=None): |
|
756 """ |
|
757 Private method to set the download date and time. |
|
758 |
|
759 @param dateTime date and time to be set |
|
760 @type QDateTime |
|
761 """ |
|
762 if dateTime is None: |
|
763 self.__downloadedDateTime = QDateTime.currentDateTime() |
|
764 else: |
|
765 self.__downloadedDateTime = dateTime |
|
766 if self.__downloadedDateTime.isValid(): |
|
767 labelText = self.__downloadedDateTime.toString("yyyy-MM-dd hh:mm") |
|
768 self.datetimeLabel.setText(labelText) |
|
769 self.datetimeLabel.show() |
|
770 else: |
|
771 self.datetimeLabel.clear() |
|
772 self.datetimeLabel.hide() |