35 """ |
35 """ |
36 statusChanged = pyqtSignal() |
36 statusChanged = pyqtSignal() |
37 downloadFinished = pyqtSignal() |
37 downloadFinished = pyqtSignal() |
38 progress = pyqtSignal(int, int) |
38 progress = pyqtSignal(int, int) |
39 |
39 |
|
40 Downloading = 0 |
|
41 DownloadSuccessful = 1 |
|
42 DownloadCancelled = 2 |
|
43 |
40 def __init__(self, reply=None, requestFilename=False, webPage=None, |
44 def __init__(self, reply=None, requestFilename=False, webPage=None, |
41 download=False, parent=None, mainWindow=None): |
45 download=False, parent=None, mainWindow=None): |
42 """ |
46 """ |
43 Constructor |
47 Constructor |
44 |
48 |
56 p = self.infoLabel.palette() |
60 p = self.infoLabel.palette() |
57 p.setColor(QPalette.Text, Qt.darkGray) |
61 p.setColor(QPalette.Text, Qt.darkGray) |
58 self.infoLabel.setPalette(p) |
62 self.infoLabel.setPalette(p) |
59 |
63 |
60 self.progressBar.setMaximum(0) |
64 self.progressBar.setMaximum(0) |
|
65 |
|
66 self.__isFtpDownload = reply is not None and reply.url().scheme() == "ftp" |
61 |
67 |
62 self.tryAgainButton.setIcon(UI.PixmapCache.getIcon("restart.png")) |
68 self.tryAgainButton.setIcon(UI.PixmapCache.getIcon("restart.png")) |
63 self.tryAgainButton.setEnabled(False) |
69 self.tryAgainButton.setEnabled(False) |
64 self.tryAgainButton.setVisible(False) |
70 self.tryAgainButton.setVisible(False) |
65 self.stopButton.setIcon(UI.PixmapCache.getIcon("stopLoading.png")) |
71 self.stopButton.setIcon(UI.PixmapCache.getIcon("stopLoading.png")) |
66 self.pauseButton.setIcon(UI.PixmapCache.getIcon("pause.png")) |
72 self.pauseButton.setIcon(UI.PixmapCache.getIcon("pause.png")) |
67 self.openButton.setIcon(UI.PixmapCache.getIcon("open.png")) |
73 self.openButton.setIcon(UI.PixmapCache.getIcon("open.png")) |
68 self.openButton.setEnabled(False) |
74 self.openButton.setEnabled(False) |
69 self.openButton.setVisible(False) |
75 self.openButton.setVisible(False) |
|
76 if self.__isFtpDownload: |
|
77 self.stopButton.setEnabled(False) |
|
78 self.stopButton.setVisible(False) |
|
79 self.pauseButton.setEnabled(False) |
|
80 self.pauseButton.setVisible(False) |
|
81 |
|
82 self.__state = DownloadItem.Downloading |
70 |
83 |
71 icon = self.style().standardIcon(QStyle.SP_FileIcon) |
84 icon = self.style().standardIcon(QStyle.SP_FileIcon) |
72 self.fileIcon.setPixmap(icon.pixmap(48, 48)) |
85 self.fileIcon.setPixmap(icon.pixmap(48, 48)) |
73 |
86 |
74 self.__mainWindow = mainWindow |
87 self.__mainWindow = mainWindow |
299 |
312 |
300 self.tryAgainButton.setEnabled(False) |
313 self.tryAgainButton.setEnabled(False) |
301 self.tryAgainButton.setVisible(False) |
314 self.tryAgainButton.setVisible(False) |
302 self.openButton.setEnabled(False) |
315 self.openButton.setEnabled(False) |
303 self.openButton.setVisible(False) |
316 self.openButton.setVisible(False) |
304 self.stopButton.setEnabled(True) |
317 if not self.__isFtpDownload: |
305 self.stopButton.setVisible(True) |
318 self.stopButton.setEnabled(True) |
306 self.pauseButton.setEnabled(True) |
319 self.stopButton.setVisible(True) |
307 self.pauseButton.setVisible(True) |
320 self.pauseButton.setEnabled(True) |
|
321 self.pauseButton.setVisible(True) |
308 self.progressBar.setVisible(True) |
322 self.progressBar.setVisible(True) |
309 |
323 |
310 if self.__page: |
324 if self.__page: |
311 nam = self.__page.networkAccessManager() |
325 nam = self.__page.networkAccessManager() |
312 else: |
326 else: |
315 if self.__output.exists(): |
329 if self.__output.exists(): |
316 self.__output.remove() |
330 self.__output.remove() |
317 self.__output = QFile() |
331 self.__output = QFile() |
318 self.__reply = reply |
332 self.__reply = reply |
319 self.__initialize(tryAgain=True) |
333 self.__initialize(tryAgain=True) |
|
334 self.__state = DownloadItem.Downloading |
320 self.statusChanged.emit() |
335 self.statusChanged.emit() |
321 |
336 |
322 @pyqtSlot(bool) |
337 @pyqtSlot(bool) |
323 def on_pauseButton_clicked(self, checked): |
338 def on_pauseButton_clicked(self, checked): |
324 """ |
339 """ |
343 def cancelDownload(self): |
358 def cancelDownload(self): |
344 """ |
359 """ |
345 Public slot to stop the download. |
360 Public slot to stop the download. |
346 """ |
361 """ |
347 self.setUpdatesEnabled(False) |
362 self.setUpdatesEnabled(False) |
348 self.stopButton.setEnabled(False) |
363 if not self.__isFtpDownload: |
349 self.stopButton.setVisible(False) |
364 self.stopButton.setEnabled(False) |
350 self.pauseButton.setEnabled(False) |
365 self.stopButton.setVisible(False) |
351 self.pauseButton.setVisible(False) |
366 self.pauseButton.setEnabled(False) |
|
367 self.pauseButton.setVisible(False) |
352 self.tryAgainButton.setEnabled(True) |
368 self.tryAgainButton.setEnabled(True) |
353 self.tryAgainButton.setVisible(True) |
369 self.tryAgainButton.setVisible(True) |
354 self.openButton.setEnabled(False) |
370 self.openButton.setEnabled(False) |
355 self.openButton.setVisible(False) |
371 self.openButton.setVisible(False) |
356 self.setUpdatesEnabled(True) |
372 self.setUpdatesEnabled(True) |
|
373 self.__state = DownloadItem.DownloadCancelled |
357 self.__reply.abort() |
374 self.__reply.abort() |
358 self.downloadFinished.emit() |
375 self.downloadFinished.emit() |
359 |
376 |
360 @pyqtSlot() |
377 @pyqtSlot() |
361 def on_openButton_clicked(self): |
378 def on_openButton_clicked(self): |
547 """ |
564 """ |
548 Public method to determine, if a download is in progress. |
565 Public method to determine, if a download is in progress. |
549 |
566 |
550 @return flag indicating a download is in progress (boolean) |
567 @return flag indicating a download is in progress (boolean) |
551 """ |
568 """ |
552 return self.stopButton.isEnabled() |
569 return self.__state == DownloadItem.Downloading |
553 |
570 |
554 def downloadedSuccessfully(self): |
571 def downloadedSuccessfully(self): |
555 """ |
572 """ |
556 Public method to check for a successful download. |
573 Public method to check for a successful download. |
557 |
574 |
558 @return flag indicating a successful download (boolean) |
575 @return flag indicating a successful download (boolean) |
559 """ |
576 """ |
560 return self.stopButton.isHidden() and self.tryAgainButton.isHidden() |
577 return self.__state == DownloadItem.DownloadSuccessful |
561 |
578 |
562 def downloadCanceled(self): |
579 def downloadCanceled(self): |
563 """ |
580 """ |
564 Public method to check, if the download was cancelled. |
581 Public method to check, if the download was cancelled. |
565 |
582 |
566 @return flag indicating a canceled download (boolean) |
583 @return flag indicating a canceled download (boolean) |
567 """ |
584 """ |
568 return self.tryAgainButton.isEnabled() |
585 return self.__state == DownloadItem.DownloadCancelled |
569 |
586 |
570 def __finished(self): |
587 def __finished(self): |
571 """ |
588 """ |
572 Private slot to handle the download finished. |
589 Private slot to handle the download finished. |
573 """ |
590 """ |
576 return |
593 return |
577 |
594 |
578 noError = self.__reply.error() == QNetworkReply.NoError |
595 noError = self.__reply.error() == QNetworkReply.NoError |
579 |
596 |
580 self.progressBar.setVisible(False) |
597 self.progressBar.setVisible(False) |
581 self.stopButton.setEnabled(False) |
598 if not self.__isFtpDownload: |
582 self.stopButton.setVisible(False) |
599 self.stopButton.setEnabled(False) |
583 self.pauseButton.setEnabled(False) |
600 self.stopButton.setVisible(False) |
584 self.pauseButton.setVisible(False) |
601 self.pauseButton.setEnabled(False) |
|
602 self.pauseButton.setVisible(False) |
585 self.openButton.setEnabled(noError) |
603 self.openButton.setEnabled(noError) |
586 self.openButton.setVisible(noError) |
604 self.openButton.setVisible(noError) |
587 self.__output.close() |
605 self.__output.close() |
588 if QFile.exists(self.__fileName): |
606 if QFile.exists(self.__fileName): |
589 QFile.remove(self.__fileName) |
607 QFile.remove(self.__fileName) |
590 self.__output.rename(self.__fileName) |
608 self.__output.rename(self.__fileName) |
591 self.__updateInfoLabel() |
609 self.__updateInfoLabel() |
|
610 self.__state = DownloadItem.DownloadSuccessful |
592 self.statusChanged.emit() |
611 self.statusChanged.emit() |
593 self.downloadFinished.emit() |
612 self.downloadFinished.emit() |
594 |
613 |
595 if self.__autoOpen: |
614 if self.__autoOpen: |
596 self.__open() |
615 self.__open() |
645 URL of the related web page (QUrl, string, boolean, QUrl) |
664 URL of the related web page (QUrl, string, boolean, QUrl) |
646 """ |
665 """ |
647 self.__url = data[0] |
666 self.__url = data[0] |
648 self.__fileName = data[1] |
667 self.__fileName = data[1] |
649 self.__pageUrl = data[3] |
668 self.__pageUrl = data[3] |
|
669 self.__isFtpDownload = self.__url.scheme() == "ftp" |
650 |
670 |
651 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
671 self.filenameLabel.setText(QFileInfo(self.__fileName).fileName()) |
652 self.infoLabel.setText(self.__fileName) |
672 self.infoLabel.setText(self.__fileName) |
653 |
673 |
654 self.stopButton.setEnabled(False) |
674 self.stopButton.setEnabled(False) |
657 self.pauseButton.setVisible(False) |
677 self.pauseButton.setVisible(False) |
658 self.openButton.setEnabled(data[2]) |
678 self.openButton.setEnabled(data[2]) |
659 self.openButton.setVisible(data[2]) |
679 self.openButton.setVisible(data[2]) |
660 self.tryAgainButton.setEnabled(not data[2]) |
680 self.tryAgainButton.setEnabled(not data[2]) |
661 self.tryAgainButton.setVisible(not data[2]) |
681 self.tryAgainButton.setVisible(not data[2]) |
|
682 if data[2]: |
|
683 self.__state = DownloadItem.DownloadSuccessful |
|
684 else: |
|
685 self.__state = DownloadItem.DownloadCancelled |
662 self.progressBar.setVisible(False) |
686 self.progressBar.setVisible(False) |
663 |
687 |
664 def getInfoData(self): |
688 def getInfoData(self): |
665 """ |
689 """ |
666 Public method to get the text of the info label. |
690 Public method to get the text of the info label. |