--- a/eric7/WebBrowser/Download/DownloadItem.py Sun Aug 29 17:48:26 2021 +0200 +++ b/eric7/WebBrowser/Download/DownloadItem.py Sun Aug 29 17:48:44 2021 +0200 @@ -14,7 +14,7 @@ ) from PyQt6.QtGui import QPalette, QDesktopServices from PyQt6.QtWidgets import QWidget, QStyle, QDialog -from PyQt6.QtWebEngineCore import QWebEngineDownloadItem +from PyQt6.QtWebEngineCore import QWebEngineDownloadRequest from EricWidgets import EricFileDialog @@ -39,17 +39,18 @@ downloadFinished = pyqtSignal(bool) progress = pyqtSignal(int, int) + # TODO: convert this to an enum Downloading = 0 DownloadSuccessful = 1 DownloadCancelled = 2 - def __init__(self, downloadItem=None, pageUrl=None, parent=None): + def __init__(self, downloadRequest=None, pageUrl=None, parent=None): """ Constructor - @param downloadItem reference to the download object containing the + @param downloadRequest reference to the download object containing the download data. - @type QWebEngineDownloadItem + @type QWebEngineDownloadRequest @param pageUrl URL of the calling page @type QUrl @param parent reference to the parent widget @@ -69,17 +70,13 @@ self.openButton.setIcon(UI.PixmapCache.getIcon("open")) self.openButton.setEnabled(False) self.openButton.setVisible(False) - if not hasattr(QWebEngineDownloadItem, "pause"): - # pause/resume was defined in Qt 5.10.0 / PyQt 5.10.0 - self.pauseButton.setEnabled(False) - self.pauseButton.setVisible(False) self.__state = DownloadItem.Downloading icon = self.style().standardIcon(QStyle.StandardPixmap.SP_FileIcon) self.fileIcon.setPixmap(icon.pixmap(48, 48)) - self.__downloadItem = downloadItem + self.__downloadRequest = downloadRequest if pageUrl is None: self.__pageUrl = QUrl() else: @@ -101,7 +98,7 @@ """ Private method to initialize the widget. """ - if self.__downloadItem is None: + if self.__downloadRequest is None: return self.__finishedDownloading = False @@ -112,9 +109,9 @@ self.__downloadTime = QTime.currentTime() # attach to the download item object - self.__url = self.__downloadItem.url() - self.__downloadItem.downloadProgress.connect(self.__downloadProgress) - self.__downloadItem.finished.connect(self.__finished) + self.__url = self.__downloadRequest.url() + self.__downloadRequest.receivedBytesChanged.connect(self.__downloadProgress) + self.__downloadRequest.isFinishedChanged.connect(self.__finished) # reset info self.datetimeLabel.clear() @@ -122,17 +119,17 @@ self.infoLabel.clear() self.progressBar.setValue(0) if ( - self.__downloadItem.state() == - QWebEngineDownloadItem.DownloadState.DownloadRequested + self.__downloadRequest.state() == + QWebEngineDownloadRequest.DownloadState.DownloadRequested ): self.__getFileName() if not self.__fileName: - self.__downloadItem.cancel() + self.__downloadRequest.cancel() else: - self.__downloadItem.setPath(self.__fileName) - self.__downloadItem.accept() + self.__downloadRequest.setDownloadFileName(self.__fileName) + self.__downloadRequest.accept() else: - fileName = self.__downloadItem.path() + fileName = self.__downloadRequest.downloadFileName() self.__setFileName(fileName) def __getFileName(self): @@ -142,9 +139,7 @@ if self.__gettingFileName: return - savePage = self.__downloadItem.type() == ( - QWebEngineDownloadItem.DownloadType.SavePage - ) + savePage = self.__downloadRequest.isSavePageDownload() documentLocation = QStandardPaths.writableLocation( QStandardPaths.StandardLocation.DocumentsLocation) @@ -167,7 +162,7 @@ if not savePage: from .DownloadAskActionDialog import DownloadAskActionDialog - url = self.__downloadItem.url() + url = self.__downloadRequest.url() mimetype = Utilities.MimeTypes.mimeType(originalFileName) dlg = DownloadAskActionDialog( QFileInfo(originalFileName).fileName(), @@ -266,7 +261,7 @@ @param directory name of the directory to store the file into (string) @return proposed filename and original filename (string, string) """ - path = self.__downloadItem.path() + path = self.__downloadRequest.downloadFileName() info = QFileInfo(path) baseName = info.completeBaseName() endName = info.suffix() @@ -289,9 +284,9 @@ @type bool """ if checked: - self.__downloadItem.pause() + self.__downloadRequest.pause() else: - self.__downloadItem.resume() + self.__downloadRequest.resume() @pyqtSlot() def on_stopButton_clicked(self): @@ -313,7 +308,7 @@ self.pauseButton.setVisible(False) self.setUpdatesEnabled(True) self.__state = DownloadItem.DownloadCancelled - self.__downloadItem.cancel() + self.__downloadRequest.cancel() self.__setDateTime() self.downloadFinished.emit(False) @@ -340,19 +335,17 @@ url = QUrl.fromLocalFile(info.absolutePath()) QDesktopServices.openUrl(url) - def __downloadProgress(self, bytesReceived, bytesTotal): + @pyqtSlot() + def __downloadProgress(self): """ - Private method to show the download progress. - - @param bytesReceived number of bytes received (integer) - @param bytesTotal number of total bytes (integer) + Private slot to show the download progress. """ - self.__bytesReceived = bytesReceived - self.__bytesTotal = bytesTotal + self.__bytesReceived = self.__downloadRequest.receivedBytes() + self.__bytesTotal = self.__downloadRequest.totalBytes() currentValue = 0 totalValue = 0 - if bytesTotal > 0: - currentValue = bytesReceived * 100 / bytesTotal + if self.__bytesTotal > 0: + currentValue = self.__bytesReceived * 100 / self.__bytesTotal totalValue = 100 self.progressBar.setValue(currentValue) self.progressBar.setMaximum(totalValue) @@ -376,7 +369,7 @@ @return total number of bytes (integer) """ if self.__bytesTotal == -1: - self.__bytesTotal = self.__downloadItem.totalBytes() + self.__bytesTotal = self.__downloadRequest.totalBytes() return self.__bytesTotal def bytesReceived(self): @@ -423,7 +416,7 @@ return ( self.__bytesReceived * 1000.0 / - self.__downloadTime.msecsTo(QTime.currentTime) + self.__downloadTime.msecsTo(QTime.currentTime()) ) def __updateInfoLabel(self): @@ -494,8 +487,8 @@ """ self.__finishedDownloading = True - noError = (self.__downloadItem.state() == - QWebEngineDownloadItem.DownloadState.DownloadCompleted) + noError = (self.__downloadRequest.state() == + QWebEngineDownloadRequest.DownloadState.DownloadCompleted) self.progressBar.setVisible(False) self.pauseButton.setEnabled(False)