WebBrowser/Download/DownloadManager.py

branch
QtWebEngine
changeset 4769
2b6f7e026cdc
parent 4768
57da9217196b
child 4772
db71b47b663e
equal deleted inserted replaced
4768:57da9217196b 4769:2b6f7e026cdc
8 """ 8 """
9 9
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 from PyQt5.QtCore import pyqtSlot, Qt, QModelIndex, QFileInfo 12 from PyQt5.QtCore import pyqtSlot, Qt, QModelIndex, QFileInfo
13 from PyQt5.QtGui import QCursor 13 from PyQt5.QtGui import QCursor, QKeySequence
14 from PyQt5.QtWidgets import QDialog, QStyle, QFileIconProvider, QMenu, \ 14 from PyQt5.QtWidgets import QDialog, QStyle, QFileIconProvider, QMenu, \
15 QApplication 15 QApplication, QShortcut
16 from PyQt5.QtNetwork import QNetworkRequest
17 from PyQt5.QtWebKit import QWebSettings
18 16
19 from E5Gui import E5MessageBox 17 from E5Gui import E5MessageBox
20 18
21 from .Ui_DownloadManager import Ui_DownloadManager 19 from .Ui_DownloadManager import Ui_DownloadManager
22 20
48 self.setWindowFlags(Qt.Window) 46 self.setWindowFlags(Qt.Window)
49 47
50 self.__saveTimer = AutoSaver(self, self.save) 48 self.__saveTimer = AutoSaver(self, self.save)
51 49
52 self.__model = DownloadModel(self) 50 self.__model = DownloadModel(self)
53 self.__manager = Helpviewer.HelpWindow.HelpWindow\ 51 self.__manager = WebBrowserWindow.networkManager()
54 .networkAccessManager()
55 52
56 self.__iconProvider = None 53 self.__iconProvider = None
57 self.__downloads = [] 54 self.__downloads = []
58 self.__downloadDirectory = "" 55 self.__downloadDirectory = ""
59 self.__loaded = False 56 self.__loaded = False
67 self.downloadsView.horizontalHeader().setStretchLastSection(True) 64 self.downloadsView.horizontalHeader().setStretchLastSection(True)
68 self.downloadsView.setModel(self.__model) 65 self.downloadsView.setModel(self.__model)
69 self.downloadsView.setContextMenuPolicy(Qt.CustomContextMenu) 66 self.downloadsView.setContextMenuPolicy(Qt.CustomContextMenu)
70 self.downloadsView.customContextMenuRequested.connect( 67 self.downloadsView.customContextMenuRequested.connect(
71 self.__customContextMenuRequested) 68 self.__customContextMenuRequested)
69
70 self.__clearShortcut = QShortcut(QKeySequence("Ctrl+L"), self)
71 self.__clearShortcut.activated.connect(self.on_cleanupButton_clicked)
72 72
73 self.__load() 73 self.__load()
74 74
75 def __customContextMenuRequested(self, pos): 75 def __customContextMenuRequested(self, pos):
76 """ 76 """
162 if not res: 162 if not res:
163 self.show() 163 self.show()
164 return False 164 return False
165 return True 165 return True
166 166
167 def download(self, requestOrUrl, requestFileName=False, mainWindow=None): 167 def download(self, downloadItem):
168 """ 168 """
169 Public method to download a file. 169 Public method to download a file.
170 170
171 @param requestOrUrl reference to a request object (QNetworkRequest) 171 @param downloadItem reference to the download object containing the
172 or a URL to be downloaded (QUrl) 172 download data.
173 @keyparam requestFileName flag indicating to ask for the 173 @type QWebEngineDownloadItem
174 download file name (boolean) 174 """
175 @keyparam mainWindow reference to the main window (HelpWindow) 175 if downloadItem.url().isEmpty():
176 """
177 request = QNetworkRequest(requestOrUrl)
178 if request.url().isEmpty():
179 return
180 self.handleUnsupportedContent(
181 self.__manager.get(request),
182 requestFileName=requestFileName,
183 download=True,
184 mainWindow=mainWindow)
185
186 def handleUnsupportedContent(self, reply, requestFileName=False,
187 webPage=None, download=False,
188 mainWindow=None):
189 """
190 Public method to handle unsupported content by downloading the
191 referenced resource.
192
193 @param reply reference to the reply object (QNetworkReply)
194 @keyparam requestFileName indicating to ask for a filename
195 (boolean)
196 @keyparam webPage reference to the web page (HelpWebPage)
197 @keyparam download flag indicating a download request (boolean)
198 @keyparam mainWindow reference to the main window (HelpWindow)
199 """
200 if reply is None or reply.url().isEmpty():
201 return
202
203 size = reply.header(QNetworkRequest.ContentLengthHeader)
204 if size == 0:
205 return 176 return
206 177
207 from .DownloadItem import DownloadItem 178 from .DownloadItem import DownloadItem
208 itm = DownloadItem( 179 itm = DownloadItem(downloadItem, parent=self)
209 reply=reply, requestFilename=requestFileName,
210 webPage=webPage, download=download, parent=self,
211 mainWindow=mainWindow)
212 self.__addItem(itm) 180 self.__addItem(itm)
213 181
214 if itm.canceledFileSelect(): 182 if itm.canceledFileSelect():
215 return 183 return
216 184
269 self.downloadsView.setRowHeight( 237 self.downloadsView.setRowHeight(
270 row, 238 row,
271 max(oldHeight, itm.minimumSizeHint().height() * 1.5)) 239 max(oldHeight, itm.minimumSizeHint().height() * 1.5))
272 240
273 remove = False 241 remove = False
274 globalSettings = QWebSettings.globalSettings() 242 # TODO: Private Browsing
275 if not itm.downloading() and \ 243 ## globalSettings = QWebSettings.globalSettings()
276 globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): 244 ## if not itm.downloading() and \
277 remove = True 245 ## globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled):
246 ## remove = True
278 247
279 if itm.downloadedSuccessfully() and \ 248 if itm.downloadedSuccessfully() and \
280 self.removePolicy() == DownloadManager.RemoveSuccessFullDownload: 249 self.removePolicy() == DownloadManager.RemoveSuccessFullDownload:
281 remove = True 250 remove = True
282 251
310 DownloadManager.RemoveSuccessFullDownload) 279 DownloadManager.RemoveSuccessFullDownload)
311 280
312 if policy == self.removePolicy(): 281 if policy == self.removePolicy():
313 return 282 return
314 283
315 Preferences.getWebBrowser("DownloadManagerRemovePolicy", self.policy) 284 Preferences.setWebBrowser("DownloadManagerRemovePolicy", self.policy)
316 285
317 def save(self): 286 def save(self):
318 """ 287 """
319 Public method to save the download settings. 288 Public method to save the download settings.
320 """ 289 """
324 Preferences.setWebBrowser("DownloadManagerSize", self.size()) 293 Preferences.setWebBrowser("DownloadManagerSize", self.size())
325 Preferences.setWebBrowser("DownloadManagerPosition", self.pos()) 294 Preferences.setWebBrowser("DownloadManagerPosition", self.pos())
326 if self.removePolicy() == DownloadManager.RemoveExit: 295 if self.removePolicy() == DownloadManager.RemoveExit:
327 return 296 return
328 297
329 downloads = [] 298 # TODO: Downloads: check saving downloads
330 for download in self.__downloads: 299 ## downloads = []
331 downloads.append(download.getData()) 300 ## for download in self.__downloads:
332 Preferences.setWebBrowser("DownloadManagerDownloads", downloads) 301 ## downloads.append(download.getData())
302 ## Preferences.setWebBrowser("DownloadManagerDownloads", downloads)
333 303
334 def __load(self): 304 def __load(self):
335 """ 305 """
336 Private method to load the download settings. 306 Private method to load the download settings.
337 """ 307 """
342 if size.isValid(): 312 if size.isValid():
343 self.resize(size) 313 self.resize(size)
344 pos = Preferences.getWebBrowser("DownloadManagerPosition") 314 pos = Preferences.getWebBrowser("DownloadManagerPosition")
345 self.move(pos) 315 self.move(pos)
346 316
347 downloads = Preferences.getWebBrowser("DownloadManagerDownloads") 317 # TODO: Downloads: check laoding downloads
348 for download in downloads: 318 ## downloads = Preferences.getWebBrowser("DownloadManagerDownloads")
349 if not download[0].isEmpty() and \ 319 ## for download in downloads:
350 download[1] != "": 320 ## if not download[0].isEmpty() and \
351 from .DownloadItem import DownloadItem 321 ## download[1] != "":
352 itm = DownloadItem(parent=self) 322 ## from .DownloadItem import DownloadItem
353 itm.setData(download) 323 ## itm = DownloadItem(parent=self)
354 self.__addItem(itm) 324 ## itm.setData(download)
325 ## self.__addItem(itm)
355 self.cleanupButton.setEnabled( 326 self.cleanupButton.setEnabled(
356 (len(self.__downloads) - self.activeDownloads()) > 0) 327 (len(self.__downloads) - self.activeDownloads()) > 0)
357 328
358 self.__loaded = True 329 self.__loaded = True
359 self.__updateActiveItemCount() 330 self.__updateActiveItemCount()
449 420
450 ########################################################################### 421 ###########################################################################
451 ## Context menu related methods below 422 ## Context menu related methods below
452 ########################################################################### 423 ###########################################################################
453 424
425 # TODO: Downloads: check the context menu actions
454 def __currentItem(self): 426 def __currentItem(self):
455 """ 427 """
456 Private method to get a reference to the current item. 428 Private method to get a reference to the current item.
457 429
458 @return reference to the current item (DownloadItem) 430 @return reference to the current item (DownloadItem)

eric ide

mercurial