Helpviewer/Download/DownloadItem.py

changeset 1094
743900906d8e
parent 978
11f8adbcac97
child 1101
43da69edffc4
diff -r 47bc4ef30315 -r 743900906d8e Helpviewer/Download/DownloadItem.py
--- a/Helpviewer/Download/DownloadItem.py	Tue May 31 16:35:45 2011 +0200
+++ b/Helpviewer/Download/DownloadItem.py	Tue May 31 19:50:35 2011 +0200
@@ -63,6 +63,7 @@
         self.tryAgainButton.setEnabled(False)
         self.tryAgainButton.setVisible(False)
         self.stopButton.setIcon(UI.PixmapCache.getIcon("stopLoading.png"))
+        self.pauseButton.setIcon(UI.PixmapCache.getIcon("pause.png"))
         self.openButton.setIcon(UI.PixmapCache.getIcon("open.png"))
         self.openButton.setEnabled(False)
         self.openButton.setVisible(False)
@@ -81,6 +82,7 @@
         self.__downloadTime = QTime()
         self.__output = QFile()
         self.__fileName = ""
+        self.__originalFileName = ""
         self.__startedSaving = False
         self.__finishedDownloading = False
         self.__gettingFileName = False
@@ -106,15 +108,16 @@
         self.__bytesReceived = 0
         self.__bytesTotal = -1
         
-        self.openButton.setEnabled(False)
-        self.openButton.setVisible(False)
-        
+##        self.openButton.setEnabled(False)
+##        self.openButton.setVisible(False)
+##        
         # start timer for the download estimation
         self.__downloadTime.start()
         
         # attach to the reply object
         self.__url = self.__reply.url()
         self.__reply.setParent(self)
+        self.__reply.setReadBufferSize(0)
         self.__reply.readyRead[()].connect(self.__readyRead)
         self.__reply.error.connect(self.__networkError)
         self.__reply.downloadProgress.connect(self.__downloadProgress)
@@ -144,17 +147,19 @@
         
         if self.__fileName:
             fileName = self.__fileName
+            originalFileName = self.__originalFileName
             self.__toDownload = True
             ask = False
         else:
-            defaultFileName = self.__saveFileName(downloadDirectory)
+            defaultFileName, originalFileName = self.__saveFileName(downloadDirectory)
             fileName = defaultFileName
+            self.__originalFileName = originalFileName
             ask = True
         self.__autoOpen = False
         if not self.__toDownload:
             url = self.__reply.url()
             dlg = DownloadAskActionDialog(
-                QFileInfo(fileName).fileName(),
+                QFileInfo(originalFileName).fileName(),
                 self.__reply.header(QNetworkRequest.ContentTypeHeader),
                 "{0}://{1}".format(url.scheme(), url.authority()),
                 self)
@@ -205,7 +210,7 @@
             fileInfo.absoluteDir().absolutePath())
         self.filenameLabel.setText(fileInfo.fileName())
         
-        self.__output.setFileName(fileName)
+        self.__output.setFileName(fileName + ".part")
         self.__fileName = fileName
         
         # check file path for saving
@@ -228,7 +233,7 @@
         Private method to calculate a name for the file to download.
         
         @param directory name of the directory to store the file into (string)
-        @return proposed filename (string)
+        @return proposed filename and original filename (string, string)
         """
         path = ""
         if self.__reply.hasRawHeader("Content-Disposition"):
@@ -249,17 +254,21 @@
         if not baseName:
             baseName = "unnamed_download"
         
+        origName = baseName
+        if endName:
+            origName += '.' + endName
+        
         name = directory + baseName
         if endName:
             name += '.' + endName
-        i = 1
-        while QFile.exists(name):
-            # file exists already, don't overwrite
-            name = directory + baseName + ('-{0:d}'.format(i))
-            if endName:
-                name += '.' + endName
-            i += 1
-        return name
+##        i = 1
+##        while QFile.exists(name):
+##            # file exists already, don't overwrite
+##            name = directory + baseName + ('-{0:d}'.format(i))
+##            if endName:
+##                name += '.' + endName
+##            i += 1
+        return name, origName
     
     def __open(self):
         """
@@ -289,6 +298,8 @@
         self.openButton.setVisible(False)
         self.stopButton.setEnabled(True)
         self.stopButton.setVisible(True)
+        self.pauseButton.setEnabled(True)
+        self.pauseButton.setVisible(True)
         self.progressBar.setVisible(True)
         
         if self.__page:
@@ -303,6 +314,20 @@
         self.__initialize(tryAgain=True)
         self.statusChanged.emit()
     
+    @pyqtSlot(bool)
+    def on_pauseButton_clicked(self, checked):
+        """
+        Private slot to pause the download.
+        
+        @param checked flag indicating the state of the button (boolean)
+        """
+        if checked:
+            self.__reply.readyRead[()].disconnect(self.__readyRead)
+            self.__reply.setReadBufferSize(16 * 1024)
+        else:
+            self.__reply.readyRead[()].connect(self.__readyRead)
+            self.__reply.setReadBufferSize(0)
+    
     @pyqtSlot()
     def on_stopButton_clicked(self):
         """
@@ -317,6 +342,8 @@
         self.setUpdatesEnabled(False)
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
+        self.pauseButton.setEnabled(False)
+        self.pauseButton.setVisible(False)
         self.tryAgainButton.setEnabled(True)
         self.tryAgainButton.setVisible(True)
         self.openButton.setEnabled(False)
@@ -543,9 +570,14 @@
         self.progressBar.setVisible(False)
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
+        self.pauseButton.setEnabled(False)
+        self.pauseButton.setVisible(False)
         self.openButton.setEnabled(noError)
         self.openButton.setVisible(noError)
         self.__output.close()
+        if QFile.exists(self.__fileName):
+            QFile.remove(self.__fileName)
+        self.__output.rename(self.__fileName)
         self.__updateInfoLabel()
         self.statusChanged.emit()
         self.downloadFinished.emit()
@@ -611,6 +643,8 @@
         
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
+        self.pauseButton.setEnabled(False)
+        self.pauseButton.setVisible(False)
         self.openButton.setEnabled(data[2])
         self.openButton.setVisible(data[2])
         self.tryAgainButton.setEnabled(not data[2])

eric ide

mercurial