WebBrowser/Download/DownloadItem.py

branch
maintenance
changeset 5948
6f958d5765f4
parent 5752
1860eca908e4
child 5949
22657f04f332
equal deleted inserted replaced
5937:cc296ba99a3f 5948:6f958d5765f4
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()

eric ide

mercurial