def part_download_finished(self, file_id, part_num): file_id = str(file_id) FilesManager.set_status_part_for_file(file_id, part_num, "completed") if self.download_queues.has_key(file_id): queue = self.download_queues[file_id] if queue: queue.emit(SIGNAL("part_download_finished"), file_id, part_num)
def download_part(self, peer_ip, peer_port, file_id, file_part): FilesManager.set_status_part_for_file(file_id, file_part, "downloading") downloadSocket = connect_socket(peer_ip, peer_port) downloadSocket.send("RETP"+format_fileid(file_id)+format_partnum(file_part)) #downloadSocket.send(format_fileid(file_id)) #downloadSocket.send(format_partnum(file_part)) # Star a thread that will take care of the download and of the socket management f = FilesManager.find_file_by_id(file_id) dlThread = DownloadThread(downloadSocket, f.filename, f.id, file_part, peer_ip, self, self.ui_handler) dlThread.start() self.download_threads.append(dlThread)
def run(self): command = str(read_from_socket(self._socket, 4)) if command == "AREP": klog("Received AREP") chunk_number = int(read_from_socket(self._socket, 6)) #try: klog("Download started") klog("chunk number: " + str(chunk_number)) newFile = open(FilesManager.get_filepart_path_from_file(self._file_id, self._file_part), "wb") # a = append, b = binary mode for i in range(0, chunk_number): chunk_length = read_from_socket(self._socket, 5) chunk_length = int(chunk_length) chunk_data = read_from_socket(self._socket, chunk_length) newFile.write(chunk_data) percent = i* 100/chunk_number self._ui_handler.download_file_changed(self._filename, self._file_id, self._file_part, self._peer_ip, percent) newFile.close() self._ui_handler.download_file_changed(self._filename, self._file_id, self._file_part, self._peer_ip, 100) klog("Download completed") f = FilesManager.find_file_by_id(self._file_id) self._request_emitter.part_download_finished(self._file_id, self._file_part) self._request_emitter.register_part_to_tracker(f, self._file_part) # except Exception, ex: # klog("An exception has occurred: "+str(ex)) else: FilesManager.set_status_part_for_file(self._file_id, self._file_part, "empty") self._socket.close()