Helpviewer/Download/DownloadItem.py

changeset 978
11f8adbcac97
parent 945
8cd4d08fa9f6
child 1094
743900906d8e
equal deleted inserted replaced
977:7a523bd4b00d 978:11f8adbcac97
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
12 from PyQt4.QtGui import QWidget, QPalette, QStyle, QDesktopServices 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 E5MessageBox, E5FileDialog 15 from E5Gui import E5FileDialog
16 16
17 from .Ui_DownloadItem import Ui_DownloadItem 17 from .Ui_DownloadItem import Ui_DownloadItem
18 18
19 import Helpviewer.HelpWindow 19 import Helpviewer.HelpWindow
20 20
21 from .DownloadUtilities import timeString, dataString 21 from .DownloadUtilities import timeString, dataString
22 from .DownloadAskActionDialog import DownloadAskActionDialog
22 23
23 import UI.PixmapCache 24 import UI.PixmapCache
24 import Preferences 25 import Preferences
25 26
26 27
35 statusChanged = pyqtSignal() 36 statusChanged = pyqtSignal()
36 downloadFinished = pyqtSignal() 37 downloadFinished = pyqtSignal()
37 progress = pyqtSignal(int, int) 38 progress = pyqtSignal(int, int)
38 39
39 def __init__(self, reply=None, requestFilename=False, webPage=None, 40 def __init__(self, reply=None, requestFilename=False, webPage=None,
40 download=False, parent=None): 41 download=False, parent=None, mainWindow=None):
41 """ 42 """
42 Constructor 43 Constructor
43 44
44 @param reply reference to the network reply object (QNetworkReply) 45 @keyparam reply reference to the network reply object (QNetworkReply)
45 @param requestFilename flag indicating to ask the user for a filename (boolean) 46 @keyparam requestFilename flag indicating to ask the user for a filename (boolean)
46 @param webPage reference to the web page object the download originated 47 @keyparam webPage reference to the web page object the download originated
47 from (QWebPage) 48 from (QWebPage)
48 @param download flag indicating a download operation (boolean) 49 @keyparam download flag indicating a download operation (boolean)
49 @param parent reference to the parent widget (QWidget) 50 @keyparam parent reference to the parent widget (QWidget)
51 @keyparam mainWindow reference to the main window (HelpWindow)
50 """ 52 """
51 QWidget.__init__(self, parent) 53 QWidget.__init__(self, parent)
52 self.setupUi(self) 54 self.setupUi(self)
53 55
54 p = self.infoLabel.palette() 56 p = self.infoLabel.palette()
66 self.openButton.setVisible(False) 68 self.openButton.setVisible(False)
67 69
68 icon = self.style().standardIcon(QStyle.SP_FileIcon) 70 icon = self.style().standardIcon(QStyle.SP_FileIcon)
69 self.fileIcon.setPixmap(icon.pixmap(48, 48)) 71 self.fileIcon.setPixmap(icon.pixmap(48, 48))
70 72
73 self.__mainWindow = mainWindow
71 self.__reply = reply 74 self.__reply = reply
72 self.__requestFilename = requestFilename 75 self.__requestFilename = requestFilename
73 self.__page = webPage 76 self.__page = webPage
74 self.__pageUrl = webPage and webPage.mainFrame().url() or QUrl() 77 self.__pageUrl = webPage and webPage.mainFrame().url() or QUrl()
75 self.__toDownload = download 78 self.__toDownload = download
147 defaultFileName = self.__saveFileName(downloadDirectory) 150 defaultFileName = self.__saveFileName(downloadDirectory)
148 fileName = defaultFileName 151 fileName = defaultFileName
149 ask = True 152 ask = True
150 self.__autoOpen = False 153 self.__autoOpen = False
151 if not self.__toDownload: 154 if not self.__toDownload:
152 res = E5MessageBox.question(self, 155 url = self.__reply.url()
153 self.trUtf8("Downloading"), 156 dlg = DownloadAskActionDialog(
154 self.trUtf8("""<p>You are about to download the file <b>{0}</b>.</p>""" 157 QFileInfo(fileName).fileName(),
155 """<p>What do you want to do?</p>""").format(fileName), 158 self.__reply.header(QNetworkRequest.ContentTypeHeader),
156 E5MessageBox.StandardButtons( 159 "{0}://{1}".format(url.scheme(), url.authority()),
157 E5MessageBox.Open | \ 160 self)
158 E5MessageBox.Save | \ 161 if dlg.exec_() == QDialog.Rejected or dlg.getAction() == "cancel":
159 E5MessageBox.Cancel))
160 if res == E5MessageBox.Cancel:
161 self.progressBar.setVisible(False) 162 self.progressBar.setVisible(False)
162 self.__reply.close() 163 self.__reply.close()
163 self.on_stopButton_clicked() 164 self.on_stopButton_clicked()
164 self.filenameLabel.setText(self.trUtf8("Download canceled: {0}").format( 165 self.filenameLabel.setText(self.trUtf8("Download canceled: {0}").format(
165 QFileInfo(defaultFileName).fileName())) 166 QFileInfo(defaultFileName).fileName()))
166 self.__canceledFileSelect = True 167 self.__canceledFileSelect = True
167 return 168 return
168 169
169 self.__autoOpen = res == E5MessageBox.Open 170 if dlg.getAction() == "scan":
171 self.__mainWindow.requestVirusTotalScan(url)
172
173 self.progressBar.setVisible(False)
174 self.__reply.close()
175 self.on_stopButton_clicked()
176 self.filenameLabel.setText(
177 self.trUtf8("VirusTotal scan scheduled: {0}").format(
178 QFileInfo(defaultFileName).fileName()))
179 self.__canceledFileSelect = True
180 return
181
182 self.__autoOpen = dlg.getAction() == "open"
170 fileName = QDesktopServices.storageLocation(QDesktopServices.TempLocation) + \ 183 fileName = QDesktopServices.storageLocation(QDesktopServices.TempLocation) + \
171 '/' + QFileInfo(fileName).completeBaseName() 184 '/' + QFileInfo(fileName).completeBaseName()
172 185
173 if ask and not self.__autoOpen and self.__requestFilename: 186 if ask and not self.__autoOpen and self.__requestFilename:
174 self.__gettingFileName = True 187 self.__gettingFileName = True

eric ide

mercurial