Helpviewer/Download/DownloadItem.py

changeset 2055
9165261f3e06
parent 1509
c0b5e693b0eb
child 2302
f29e9405c851
equal deleted inserted replaced
2054:099993935e6d 2055:9165261f3e06
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.

eric ide

mercurial