MCPcopy Create free account
hub / github.com/Recordscript/recordscript / read

Method read

libs/hbb_common/src/fs.rs:438–518  ·  view source on GitHub ↗
(&mut self, stream: &mut Stream)

Source from the content-addressed store, hash-verified

436 }
437
438 pub async fn read(&mut self, stream: &mut Stream) -> ResultType<Option<FileTransferBlock>> {
439 let file_num = self.file_num as usize;
440 if file_num >= self.files.len() {
441 self.file.take();
442 return Ok(None);
443 }
444 let name = &self.files[file_num].name;
445 if self.file.is_none() {
446 match File::open(self.join(name)).await {
447 Ok(file) => {
448 self.file = Some(file);
449 self.file_confirmed = false;
450 self.file_is_waiting = false;
451 }
452 Err(err) => {
453 self.file_num += 1;
454 self.file_confirmed = false;
455 self.file_is_waiting = false;
456 return Err(err.into());
457 }
458 }
459 }
460 if self.enable_overwrite_detection && !self.file_confirmed() {
461 if !self.file_is_waiting() {
462 self.send_current_digest(stream).await?;
463 self.set_file_is_waiting(true);
464 }
465 return Ok(None);
466 }
467 const BUF_SIZE: usize = 128 * 1024;
468 let mut buf: Vec<u8> = vec![0; BUF_SIZE];
469 let mut compressed = false;
470 let mut offset: usize = 0;
471 loop {
472 match self
473 .file
474 .as_mut()
475 .ok_or(anyhow!("file is None"))?
476 .read(&mut buf[offset..])
477 .await
478 {
479 Err(err) => {
480 self.file_num += 1;
481 self.file = None;
482 self.file_confirmed = false;
483 self.file_is_waiting = false;
484 return Err(err.into());
485 }
486 Ok(n) => {
487 offset += n;
488 if n == 0 || offset == BUF_SIZE {
489 break;
490 }
491 }
492 }
493 }
494 unsafe { buf.set_len(offset) };
495 if offset == 0 {

Callers 3

handle_read_jobsFunction · 0.45
temporary_passwordFunction · 0.45
decode_audioFunction · 0.45

Calls 8

is_compressed_fileFunction · 0.85
compressFunction · 0.85
takeMethod · 0.80
joinMethod · 0.80
file_confirmedMethod · 0.80
file_is_waitingMethod · 0.80
send_current_digestMethod · 0.80
set_file_is_waitingMethod · 0.80

Tested by

no test coverage detected