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
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)