9 |
9 |
10 from __future__ import unicode_literals |
10 from __future__ import unicode_literals |
11 |
11 |
12 import os |
12 import os |
13 |
13 |
14 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QUrl, \ |
14 from PyQt5.QtCore import pyqtSlot, pyqtSignal, PYQT_VERSION, Qt, QTime, QUrl, \ |
15 QStandardPaths, QFileInfo |
15 QStandardPaths, QFileInfo, QDateTime |
16 from PyQt5.QtGui import QPalette, QDesktopServices |
16 from PyQt5.QtGui import QPalette, QDesktopServices |
17 from PyQt5.QtWidgets import QWidget, QStyle, QDialog |
17 from PyQt5.QtWidgets import QWidget, QStyle, QDialog |
18 from PyQt5.QtWebEngineWidgets import QWebEngineDownloadItem |
18 from PyQt5.QtWebEngineWidgets import QWebEngineDownloadItem |
19 |
19 |
20 from E5Gui import E5FileDialog |
20 from E5Gui import E5FileDialog |
84 self.__originalFileName = "" |
84 self.__originalFileName = "" |
85 self.__finishedDownloading = False |
85 self.__finishedDownloading = False |
86 self.__gettingFileName = False |
86 self.__gettingFileName = False |
87 self.__canceledFileSelect = False |
87 self.__canceledFileSelect = False |
88 self.__autoOpen = False |
88 self.__autoOpen = False |
|
89 self.__downloadedDateTime = QDateTime() |
89 |
90 |
90 self.__initialize() |
91 self.__initialize() |
91 |
92 |
92 def __initialize(self): |
93 def __initialize(self): |
93 """ |
94 """ |
107 self.__url = self.__downloadItem.url() |
108 self.__url = self.__downloadItem.url() |
108 self.__downloadItem.downloadProgress.connect(self.__downloadProgress) |
109 self.__downloadItem.downloadProgress.connect(self.__downloadProgress) |
109 self.__downloadItem.finished.connect(self.__finished) |
110 self.__downloadItem.finished.connect(self.__finished) |
110 |
111 |
111 # reset info |
112 # reset info |
|
113 self.datetimeLabel.clear() |
|
114 self.datetimeLabel.hide() |
112 self.infoLabel.clear() |
115 self.infoLabel.clear() |
113 self.progressBar.setValue(0) |
116 self.progressBar.setValue(0) |
114 if self.__downloadItem.state() == \ |
117 if self.__downloadItem.state() == \ |
115 QWebEngineDownloadItem.DownloadRequested: |
118 QWebEngineDownloadItem.DownloadRequested: |
116 self.__getFileName() |
119 self.__getFileName() |
128 Private method to get the file name to save to from the user. |
131 Private method to get the file name to save to from the user. |
129 """ |
132 """ |
130 if self.__gettingFileName: |
133 if self.__gettingFileName: |
131 return |
134 return |
132 |
135 |
133 if qVersionTuple() >= (5, 8, 0): |
136 if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800: |
134 savePage = self.__downloadItem.type() == \ |
137 savePage = self.__downloadItem.type() == \ |
135 QWebEngineDownloadItem.SavePage |
138 QWebEngineDownloadItem.SavePage |
136 elif qVersionTuple() >= (5, 7, 0): |
139 elif qVersionTuple() >= (5, 7, 0) and PYQT_VERSION >= 0x50700: |
137 savePage = self.__downloadItem.savePageFormat() != \ |
140 savePage = self.__downloadItem.savePageFormat() != \ |
138 QWebEngineDownloadItem.UnknownSaveFormat |
141 QWebEngineDownloadItem.UnknownSaveFormat |
139 else: |
142 else: |
140 savePage = self.__downloadItem.path().lower().endswith( |
143 savePage = self.__downloadItem.path().lower().endswith( |
141 (".mhtml", ".mht")) |
144 (".mhtml", ".mht")) |
174 self.on_stopButton_clicked() |
177 self.on_stopButton_clicked() |
175 self.filenameLabel.setText( |
178 self.filenameLabel.setText( |
176 self.tr("Download canceled: {0}").format( |
179 self.tr("Download canceled: {0}").format( |
177 QFileInfo(defaultFileName).fileName())) |
180 QFileInfo(defaultFileName).fileName())) |
178 self.__canceledFileSelect = True |
181 self.__canceledFileSelect = True |
|
182 self.__setDateTime() |
179 return |
183 return |
180 |
184 |
181 if dlg.getAction() == "scan": |
185 if dlg.getAction() == "scan": |
182 self.__mainWindow.requestVirusTotalScan(url) |
186 self.__mainWindow.requestVirusTotalScan(url) |
183 |
187 |
254 self.on_stopButton_clicked() |
258 self.on_stopButton_clicked() |
255 self.filenameLabel.setText( |
259 self.filenameLabel.setText( |
256 self.tr("Download canceled: {0}") |
260 self.tr("Download canceled: {0}") |
257 .format(QFileInfo(defaultFileName).fileName())) |
261 .format(QFileInfo(defaultFileName).fileName())) |
258 self.__canceledFileSelect = True |
262 self.__canceledFileSelect = True |
|
263 self.__setDateTime() |
259 return |
264 return |
260 |
265 |
261 self.__setFileName(fileName) |
266 self.__setFileName(fileName) |
262 |
267 |
263 def __setFileName(self, fileName): |
268 def __setFileName(self, fileName): |
281 self.progressBar.setVisible(False) |
286 self.progressBar.setVisible(False) |
282 self.on_stopButton_clicked() |
287 self.on_stopButton_clicked() |
283 self.infoLabel.setText(self.tr( |
288 self.infoLabel.setText(self.tr( |
284 "Download directory ({0}) couldn't be created.") |
289 "Download directory ({0}) couldn't be created.") |
285 .format(saveDirPath.absolutePath())) |
290 .format(saveDirPath.absolutePath())) |
|
291 self.__setDateTime() |
286 return |
292 return |
287 |
293 |
288 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
294 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
289 |
295 |
290 def __saveFileName(self, directory): |
296 def __saveFileName(self, directory): |
333 self.openButton.setEnabled(False) |
339 self.openButton.setEnabled(False) |
334 self.openButton.setVisible(False) |
340 self.openButton.setVisible(False) |
335 self.setUpdatesEnabled(True) |
341 self.setUpdatesEnabled(True) |
336 self.__state = DownloadItem.DownloadCancelled |
342 self.__state = DownloadItem.DownloadCancelled |
337 self.__downloadItem.cancel() |
343 self.__downloadItem.cancel() |
|
344 self.__setDateTime() |
338 self.downloadFinished.emit() |
345 self.downloadFinished.emit() |
339 |
346 |
340 @pyqtSlot() |
347 @pyqtSlot() |
341 def on_openButton_clicked(self): |
348 def on_openButton_clicked(self): |
342 """ |
349 """ |
505 self.stopButton.setVisible(False) |
512 self.stopButton.setVisible(False) |
506 self.openButton.setEnabled(noError) |
513 self.openButton.setEnabled(noError) |
507 self.openButton.setVisible(noError) |
514 self.openButton.setVisible(noError) |
508 self.__state = DownloadItem.DownloadSuccessful |
515 self.__state = DownloadItem.DownloadSuccessful |
509 self.__updateInfoLabel() |
516 self.__updateInfoLabel() |
|
517 self.__setDateTime() |
|
518 |
|
519 self.__adjustSize() |
|
520 |
510 self.statusChanged.emit() |
521 self.statusChanged.emit() |
511 self.downloadFinished.emit() |
522 self.downloadFinished.emit() |
512 |
523 |
513 if self.__autoOpen: |
524 if self.__autoOpen: |
514 self.__open() |
525 self.__open() |
547 |
558 |
548 def getData(self): |
559 def getData(self): |
549 """ |
560 """ |
550 Public method to get the relevant download data. |
561 Public method to get the relevant download data. |
551 |
562 |
552 @return tuple of URL, save location, flag and the |
563 @return tuple of URL, save location, flag, the |
553 URL of the related web page (QUrl, string, boolean,QUrl) |
564 URL of the related web page and the date and time |
|
565 of the download |
|
566 @rtype tuple of (QUrl, str, bool, QUrl, QDateTime) |
554 """ |
567 """ |
555 return (self.__url, QFileInfo(self.__fileName).filePath(), |
568 return (self.__url, QFileInfo(self.__fileName).filePath(), |
556 self.downloadedSuccessfully(), self.__pageUrl) |
569 self.downloadedSuccessfully(), self.__pageUrl, |
|
570 self.__downloadedDateTime) |
557 |
571 |
558 def setData(self, data): |
572 def setData(self, data): |
559 """ |
573 """ |
560 Public method to set the relevant download data. |
574 Public method to set the relevant download data. |
561 |
575 |
562 @param data tuple of URL, save location, flag and the |
576 @param data tuple of URL, save location, flag, the |
563 URL of the related web page (QUrl, string, boolean, QUrl) |
577 URL of the related web page and the date and time |
|
578 of the download |
|
579 @type QUrl, str, bool, QUrl, QDateTime |
564 """ |
580 """ |
565 self.__url = data[0] |
581 self.__url = data[0] |
566 self.__fileName = data[1] |
582 self.__fileName = data[1] |
567 self.__pageUrl = data[3] |
583 self.__pageUrl = data[3] |
568 |
584 |
569 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
585 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
570 self.infoLabel.setText(self.__fileName) |
586 self.infoLabel.setText(self.__fileName) |
|
587 |
|
588 if len(data) == 5: |
|
589 self.__setDateTime(data[4]) |
|
590 else: |
|
591 self.__setDateTime(QDateTime()) |
571 |
592 |
572 self.stopButton.setEnabled(False) |
593 self.stopButton.setEnabled(False) |
573 self.stopButton.setVisible(False) |
594 self.stopButton.setVisible(False) |
574 self.openButton.setEnabled(data[2]) |
595 self.openButton.setEnabled(data[2]) |
575 self.openButton.setVisible(data[2]) |
596 self.openButton.setVisible(data[2]) |
576 if data[2]: |
597 if data[2]: |
577 self.__state = DownloadItem.DownloadSuccessful |
598 self.__state = DownloadItem.DownloadSuccessful |
578 else: |
599 else: |
579 self.__state = DownloadItem.DownloadCancelled |
600 self.__state = DownloadItem.DownloadCancelled |
580 self.progressBar.setVisible(False) |
601 self.progressBar.setVisible(False) |
|
602 |
|
603 self.__adjustSize() |
581 |
604 |
582 def getInfoData(self): |
605 def getInfoData(self): |
583 """ |
606 """ |
584 Public method to get the text of the info label. |
607 Public method to get the text of the info label. |
585 |
608 |
592 Public method to get the URL of the download page. |
615 Public method to get the URL of the download page. |
593 |
616 |
594 @return URL of the download page (QUrl) |
617 @return URL of the download page (QUrl) |
595 """ |
618 """ |
596 return self.__pageUrl |
619 return self.__pageUrl |
|
620 |
|
621 def __adjustSize(self): |
|
622 """ |
|
623 Private method to adjust the size of the download item. |
|
624 """ |
|
625 self.ensurePolished() |
|
626 |
|
627 msh = self.minimumSizeHint() |
|
628 self.resize(max(self.width(), msh.width()), msh.height()) |
|
629 |
|
630 def __setDateTime(self, dateTime=None): |
|
631 """ |
|
632 Private method to set the download date and time. |
|
633 |
|
634 @param dateTime date and time to be set |
|
635 @type QDateTime |
|
636 """ |
|
637 if dateTime is None: |
|
638 self.__downloadedDateTime = QDateTime.currentDateTime() |
|
639 else: |
|
640 self.__downloadedDateTime = dateTime |
|
641 if self.__downloadedDateTime.isValid(): |
|
642 labelText = self.__downloadedDateTime.toString("yyyy-MM-dd hh:mm") |
|
643 self.datetimeLabel.setText(labelText) |
|
644 self.datetimeLabel.show() |
|
645 else: |
|
646 self.datetimeLabel.clear() |
|
647 self.datetimeLabel.hide() |