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 |