def stream_binary_file(self, filename, progress_bar=True): binary_file = file_(filename, "rb") file_size = path_getsize(filename) buffer = binary_file.read(self.BUFFER_SIZE) if progress_bar: self.ui.set_progress_range(file_size) self.ui.set_progress_update_interval(file_size/50) self.ui.increase_progress(len(buffer)) while buffer: yield buffer buffer = binary_file.read(self.BUFFER_SIZE) if progress_bar: self.ui.increase_progress(len(buffer)) if progress_bar: self.ui.set_progress_value(file_size)
def stream_binary_file(self, filename, progress_bar=True): binary_file = file_(filename, "rb") file_size = path_getsize(filename) buffer = binary_file.read(self.BUFFER_SIZE) if progress_bar: self.ui.set_progress_range(file_size) self.ui.set_progress_update_interval(file_size / 50) self.ui.increase_progress(len(buffer)) while buffer: yield buffer buffer = binary_file.read(self.BUFFER_SIZE) if progress_bar: self.ui.increase_progress(len(buffer)) if progress_bar: self.ui.set_progress_value(file_size)
def put_client_binary_files(self, filenames, total_size): # Filenames are relative to the data_dir. self.ui.set_progress_range(total_size) self.ui.set_progress_update_interval(total_size/50) for filename in filenames: self.request_connection() self.con.putrequest("PUT", self.url("/client_binary_file?session_token=%s&filename=%s" \ % (self.server_info["session_token"], urllib.quote(filename.encode("utf-8"), "")))) full_path = path_join(self.database.data_dir(), filename) file_size = path_getsize(full_path) self.con.putheader("content-length", file_size) self.con.endheaders() for buffer in self.stream_binary_file(full_path, progress_bar=False): self.con.send(buffer) self.ui.increase_progress(len(buffer)) self._check_response_for_errors(self.con.getresponse()) self.ui.set_progress_value(total_size)
def put_client_media_files(self, reupload_all=False): self.ui.set_progress_text("Sending media files...") # Get list of filenames in the format <mediadir>/<filename>, i.e. # relative to the data_dir. Note we always use / internally. subdir = os.path.basename(self.database.media_dir()) if reupload_all: filenames = [subdir + "/" + filename for filename in \ self.database.all_media_filenames()] else: filenames = [subdir + "/" + filename for filename in \ self.database.media_filenames_to_sync_for(\ self.server_info["machine_id"])] # Calculate file size and upload. total_size = 0 for filename in filenames: total_size += path_getsize(os.path.join(\ self.database.data_dir(), filename)) self.put_client_binary_files(filenames, total_size) self.ui.close_progress()
def put_client_binary_files(self, filenames, total_size): # Filenames are relative to the data_dir. self.ui.set_progress_range(total_size) self.ui.set_progress_update_interval(total_size / 50) for filename in filenames: self.request_connection() self.con.putrequest("PUT", self.url("/client_binary_file?session_token=%s&filename=%s" \ % (self.server_info["session_token"], urllib.quote(filename.encode("utf-8"), "")))) full_path = path_join(self.database.data_dir(), filename) file_size = path_getsize(full_path) self.con.putheader("content-length", file_size) self.con.endheaders() for buffer in self.stream_binary_file(full_path, progress_bar=False): self.con.send(buffer) self.ui.increase_progress(len(buffer)) self._check_response_for_errors(self.con.getresponse()) self.ui.set_progress_value(total_size)