Beispiel #1
0
 def __init__(self):
     super(UploadThread, self).__init__()
     self.ftp = QFtp(self)
     self.ftp.stateChanged.connect(self.on_ftp_stateChanged)
     self.ftp.commandFinished.connect(self.on_ftp_commandFinished)
     self.ftp.dataTransferProgress.connect(self.on_ftp_dataTransferProgress)
     self.uploading = False
    def __init__(self, destinationFile=None, mirror=None):
	QFtp.__init__(self) # TODO: or parent? solve this.
	self.updateProxy()

	self.mirror = mirror
	self.filePath = destinationFile
	self.downloading = False

	QtCore.QObject.connect(self, QtCore.SIGNAL('commandFinished(int,bool)'), self.logCommandFinished)
	QtCore.QObject.connect(self, QtCore.SIGNAL('stateChanged(int)'), self.logChangeState)
	QtCore.QObject.connect(self, QtCore.SIGNAL('done(bool)'), self.processDone)
	QtCore.QObject.connect(self, QtCore.SIGNAL('dataTransferProgress(qint64,qint64)'), self.traceTransferProgress)
	QtCore.QObject.connect(self, QtCore.SIGNAL('readyRead()'), self.writeBack)
Beispiel #3
0
    def __init__( self, parent=None ):

        # -------------------------------------------------------------------
        QFtp.__init__( self, parent );
        
        # -------------------------------------------------------------------
        self.PARENT                                 = parent;
        self.DEBUG                                  = False;
        self.LOG_TAG                                = str(self.__class__.__name__).upper();

        # -------------------------------------------------------------------
        self.stateChanged.connect( self.ON_STATE_CHANGED ); 
        self.listInfo.connect( self.ON_LIST_INFO_AVAILABLE ); 
        self.commandFinished.connect( self.ON_COMMAND_FINISHED ); 
        self.commandStarted.connect( self.ON_COMMAND_STARTED ); 
        self.readyRead.connect( self.ON_READY_READ ); 
        self.done.connect( self.ON_DONE ); 
        self.dataTransferProgress.connect( self.ON_DATA_TRANSFER_PROGRESS ); 
        self.rawCommandReply.connect( self.ON_RAW_COMMAND_REPLY ); 

        # -------------------------------------------------------------------
        self.HOST                                   = "";
        self.PATH                                   = "";
        self.USER                                   = "";
        self.PWD                                    = "";
        self.PORT                                   = 21;

        # -------------------------------------------------------------------
        self.FILE_INFO_LIST                         = [];
        self.LOGIN_SUCCESS                          = False;
        self.ALLOW_TO_RUN                           = True;
        self.LAST_ERROR                             = QFtp.NoError;

        self.NEW_URL                                = "";
        self.SHOW_HIDDEN_FILES                      = False;
        self.SHOW_FILES_FIRST                       = False;

        self.PRINT_CONN_INFO                        = False;

        # -------------------------------------------------------------------
        self.REQ_UIDS                               = {

            "connect"       : 0,
            "login"         : 0,
            "cd"            : 0,
            "list"          : 0,

        } 

        # -------------------------------------------------------------------
        self.PARENT.SPLASH.STATUS( self.LOG_TAG+": [INIT]" );
Beispiel #4
0
 def __init__(self):
     super(UploadThread,self).__init__()
     self.ftp = QFtp(self)   
     self.ftp.stateChanged.connect(self.on_ftp_stateChanged)
     self.ftp.commandFinished.connect(self.on_ftp_commandFinished)
     self.ftp.dataTransferProgress.connect(self.on_ftp_dataTransferProgress)
     self.uploading = False    
Beispiel #5
0
    def __init__(self, file_share, local_path, date):
        Download.__init__(self, file_share, local_path, date)
        self.ftp = QFtp(self)
        self.ftp.dataTransferProgress.connect(self.update_progress)
        self.ftp.done.connect(self.download_finished)
        self.ftp.stateChanged.connect(self.state_changed)
        self.url = QUrl(self._file_share.url)
        self.out_file = QFile(self.local_path)

        self.read_bytes = self.out_file.size() 
Beispiel #6
0
    def __init__(self, destinationFile=None, mirror=None):
        QFtp.__init__(self)  # TODO: or parent? solve this.
        self.updateProxy()

        self.mirror = mirror
        self.filePath = destinationFile
        self.downloading = False

        QtCore.QObject.connect(self,
                               QtCore.SIGNAL('commandFinished(int,bool)'),
                               self.logCommandFinished)
        QtCore.QObject.connect(self, QtCore.SIGNAL('stateChanged(int)'),
                               self.logChangeState)
        QtCore.QObject.connect(self, QtCore.SIGNAL('done(bool)'),
                               self.processDone)
        QtCore.QObject.connect(
            self, QtCore.SIGNAL('dataTransferProgress(qint64,qint64)'),
            self.traceTransferProgress)
        QtCore.QObject.connect(self, QtCore.SIGNAL('readyRead()'),
                               self.writeBack)
Beispiel #7
0
class DownloadFtp(Download):
    def __init__(self, file_share, local_path, date):
        Download.__init__(self, file_share, local_path, date)
        self.ftp = QFtp(self)
        self.ftp.dataTransferProgress.connect(self.update_progress)
        self.ftp.done.connect(self.download_finished)
        self.ftp.stateChanged.connect(self.state_changed)
        self.url = QUrl(self._file_share.url)
        self.out_file = QFile(self.local_path)

        self.read_bytes = self.out_file.size() 
 
    def start_download(self):
        self.ftp.connectToHost(self.url.host(), self.url.port(21))
        self.ftp.login()
        
        if self.out_file.open(QIODevice.WriteOnly):
            self.ftp.get(self.url.path(), self.out_file)

    def stop(self):
        self.ftp

    def state_changed(self, state):
        if state == 1 or state == 2:
            self._state = 1

    def download_finished(self, _):
        print "finished !"

    def update_progress(self, read_bytes, total_bytes):
        self.read_bytes = read_bytes
Beispiel #8
0
 def __init__(self, file_share, local_path, date, state):
     Download.__init__(self, file_share, local_path, date, state)
     self.ftp = QFtp(self)
     # Signaux
     self.ftp.dataTransferProgress.connect(self.update_progress)
     self.ftp.done.connect(self.download_finished)
     self.ftp.stateChanged.connect(self.state_changed)
     # Ouverture de fichiers
     self.url = QUrl(self._file_share.url)
     self.out_file = QFile(self.local_path)
     # Vars
     self.read_bytes = self.out_file.size()
     # Timer
     self.timer = QTimer()
     self.timer.start(500)
     self.timer.timeout.connect(self.update_speed)
Beispiel #9
0
class UploadThread(QThread):
    information = pyqtSignal(str)

    def __init__(self):
        super(UploadThread, self).__init__()
        self.ftp = QFtp(self)
        self.ftp.stateChanged.connect(self.on_ftp_stateChanged)
        self.ftp.commandFinished.connect(self.on_ftp_commandFinished)
        self.ftp.dataTransferProgress.connect(self.on_ftp_dataTransferProgress)
        self.uploading = False

    def setData(self, files, servers):
        self.files = files
        self.servers = servers
        self.servers_index = 0
        self.succeed = 0

    def run(self):
        num = len(self.servers)
        for self.servers_index in range(num):
            self.files_index = 0
            self.ftp.connectToHost(
                self.servers[self.servers_index]["host"],
                int(self.servers[self.servers_index]["port"]))
            self.uploading = True
            while self.uploading:
                QThread.sleep(1)

        self.information.emit(
            u"<font color=green>所有服务器上传完成。成功:%s 失败:%s</font><br />" %
            (self.succeed, num - self.succeed))

    def terminate(self):
        self.ftp.abort()
        super(UploadThread, self).terminate()
        self.information.emit(u"<font color=red>上传任务被终止!</font><br />")

    def on_ftp_stateChanged(self, state):
        if self.ftp.error():
            self.information.emit(u"<font color=red>错误:%s</font>" %
                                  self.ftp.errorString())
            if self.ftp.error() == 1:
                self.ftp.close()
            else:
                self.do_ftp_close()

        if state == QFtp.HostLookup:
            s = Template(
                u"""创建连接:${platform}-${server_name} 主机:${host} 端口:${port}""")
            self.information.emit(
                s.substitute(self.servers[self.servers_index]))
        elif state == QFtp.Connecting:
            pass
        elif state == QFtp.Connected:
            self.information.emit(u"登陆账号:%s" %
                                  self.servers[self.servers_index]["account"])
            self.do_ftp_login()
        elif state == QFtp.LoggedIn:
            self.information.emit(u"进入目录:%s" %
                                  self.servers[self.servers_index]["path"])
            self.do_ftp_cd()
        elif state == QFtp.Closing:
            self.do_ftp_close()

    def on_ftp_commandFinished(self):
        if self.ftp.error():
            self.information.emit(u"<font color=red>错误:%s</font>" %
                                  self.ftp.errorString())
            if self.ftp.error() == 1:
                self.ftp.close()
            else:
                self.do_ftp_close()

        if self.ftp.currentCommand() == QFtp.Login:
            pass
        elif self.ftp.currentCommand() == QFtp.Cd:
            self.do_ftp_put()
        elif self.ftp.currentCommand() == QFtp.Put:
            self.information.emit(u"上传成功:%s" % self.files[self.files_index])

            self.files_index += 1
            if self.files_index == len(self.files):
                self.information.emit(u"上传完成")
                self.succeed += 1

    def do_ftp_login(self):
        self.ftp.login(self.servers[self.servers_index]["account"],
                       self.servers[self.servers_index]["password"])

    def do_ftp_cd(self):
        self.ftp.cd(self.servers[self.servers_index]["path"])

    def do_ftp_put(self):
        num = len(self.files)
        for i in range(num):
            file = self.files[i]
            fhandle = QFile(file)
            fhandle.open(QIODevice.ReadOnly)
            byte_array = QByteArray()
            byte_array.append(fhandle.readData(fhandle.size()))

            fileinfo = QFileInfo(file)
            filename = fileinfo.fileName()
            self.ftp.put(byte_array, filename)

        self.ftp.close()

    def on_ftp_dataTransferProgress(self, done, total):
        pass

    def do_ftp_close(self):
        self.ftp.abort()
        self.information.emit(u"断开连接<br />")
        self.uploading = False
Beispiel #10
0
class DownloadFtp(Download):
    progressModified = pyqtSignal(object)
    stateChanged = pyqtSignal(object)
    downloadFinished = pyqtSignal(object)
    speedModified = pyqtSignal(object)

    def __init__(self, file_share, local_path, date, state):
        Download.__init__(self, file_share, local_path, date, state)
        self.ftp = QFtp(self)
        # Signaux
        self.ftp.dataTransferProgress.connect(self.update_progress)
        self.ftp.done.connect(self.download_finished)
        self.ftp.stateChanged.connect(self.state_changed)
        # Ouverture de fichiers
        self.url = QUrl(self._file_share.url)
        self.out_file = QFile(self.local_path)
        # Vars
        self.read_bytes = self.out_file.size()
        # Timer
        self.timer = QTimer()
        self.timer.start(500)
        self.timer.timeout.connect(self.update_speed)

    def start_download(self):
        self.ftp.connectToHost(self.url.host(), self.url.port(21))
        self.ftp.login()
        if self.out_file.open(QIODevice.WriteOnly):
            self.ftp.get(self.url.path(), self.out_file)

    def stop(self):
        self._state = 5
        self.ftp.abort()
        self.timer.stop()
        self.ftp.close()

    def state_changed(self, state):
        if state == 1 or state == 2:
            self._state = 1
        elif state == 3 or state == 4:
            self._state = 3
        self.stateChanged.emit(self)

    def download_finished(self, _):
        print "finished !"
        if self.read_bytes != self.file_share.size:
            self._state = 7
        self._speed = 0
        self.timer.stop()
        self.ftp.abort()
        self.ftp.close()
        self._state = 4
        self.stateChanged.emit(self)
        self.ftp.done.disconnect(self.download_finished)
        self.ftp.stateChanged.disconnect(self.state_changed)
        self.ftp.dataTransferProgress.disconnect(self.update_progress)
        self.downloadFinished.emit(self)

    def update_speed(self):
        delta = time.time() - self._last_time
        self._speed = float(self.read_bytes - self._last_size) / delta
        self.last_time = time.time()
        self.last_size = self.read_bytes
        self.speedModified.emit(self)

    def update_progress(self, read_bytes, total_bytes):
        self.read_bytes = read_bytes
        self.progressModified.emit(self)
Beispiel #11
0
class UploadThread(QThread):
    information = pyqtSignal(str)
    
    def __init__(self):
        super(UploadThread,self).__init__()
        self.ftp = QFtp(self)   
        self.ftp.stateChanged.connect(self.on_ftp_stateChanged)
        self.ftp.commandFinished.connect(self.on_ftp_commandFinished)
        self.ftp.dataTransferProgress.connect(self.on_ftp_dataTransferProgress)
        self.uploading = False    
        
    def setData(self, files, servers):
        self.files = files
        self.servers = servers
        self.servers_index = 0
        self.succeed = 0
        
    def run(self):
        num = len(self.servers)
        for self.servers_index in range(num):        
            self.files_index = 0
            self.ftp.connectToHost(self.servers[self.servers_index]["host"], int(self.servers[self.servers_index]["port"]))
            self.uploading = True
            while self.uploading:
                QThread.sleep(1)
        
        self.information.emit(u"<font color=green>所有服务器上传完成。成功:%s 失败:%s</font><br />" % (self.succeed, num - self.succeed))
    
    def terminate(self):
        self.ftp.abort()
        super(UploadThread, self).terminate()
        self.information.emit(u"<font color=red>上传任务被终止!</font><br />")
        
    def on_ftp_stateChanged(self, state):
        if self.ftp.error():
            self.information.emit(u"<font color=red>错误:%s</font>" % self.ftp.errorString())
            if self.ftp.error() == 1:
                self.ftp.close()
            else:
                self.do_ftp_close()
        
        if state == QFtp.HostLookup:
            s = Template(
            u"""创建连接:${platform}-${server_name} 主机:${host} 端口:${port}"""
            )
            self.information.emit(s.substitute(self.servers[self.servers_index]))    
        elif state == QFtp.Connecting:
            pass
        elif state == QFtp.Connected:
            self.information.emit(u"登陆账号:%s" % self.servers[self.servers_index]["account"])
            self.do_ftp_login()
        elif state == QFtp.LoggedIn:
            self.information.emit(u"进入目录:%s" % self.servers[self.servers_index]["path"])
            self.do_ftp_cd()
        elif state == QFtp.Closing:                      
            self.do_ftp_close()
        
    def on_ftp_commandFinished(self):     
        if self.ftp.error():
            self.information.emit(u"<font color=red>错误:%s</font>" % self.ftp.errorString())
            if self.ftp.error() == 1:
                self.ftp.close()
            else:
                self.do_ftp_close()
            
        if self.ftp.currentCommand() == QFtp.Login:
            pass
        elif self.ftp.currentCommand() == QFtp.Cd:            
            self.do_ftp_put()          
        elif self.ftp.currentCommand() == QFtp.Put:            
            self.information.emit(u"上传成功:%s" % self.files[self.files_index])
            
            self.files_index += 1
            if self.files_index == len(self.files):
                self.information.emit(u"上传完成")                
                self.succeed += 1
    
    def do_ftp_login(self):
        self.ftp.login(self.servers[self.servers_index]["account"], self.servers[self.servers_index]["password"])
        
    def do_ftp_cd(self):
        self.ftp.cd(self.servers[self.servers_index]["path"])
        
    def do_ftp_put(self):
        num = len(self.files)
        for i in range(num):
            file = self.files[i]
            fhandle = QFile(file)
            fhandle.open(QIODevice.ReadOnly)
            byte_array = QByteArray()
            byte_array.append(fhandle.readData(fhandle.size()))
            
            fileinfo = QFileInfo(file)
            filename = fileinfo.fileName()
            self.ftp.put(byte_array, filename)  
                   
        self.ftp.close()
        
    def on_ftp_dataTransferProgress(self, done,total):
        pass
        
    def do_ftp_close(self):
        self.ftp.abort()
        self.information.emit(u"断开连接<br />")
        self.uploading = False