|
@ -288,7 +288,6 @@ fn does_file_need_updating(file_info: &FileInfoReply, patch_file_lookup: &HashMa |
|
|
struct SendFileIterator {
|
|
|
struct SendFileIterator {
|
|
|
done: bool,
|
|
|
done: bool,
|
|
|
file_iter: Box<dyn Iterator<Item = PatchTreeIterItem>>,
|
|
|
file_iter: Box<dyn Iterator<Item = PatchTreeIterItem>>,
|
|
|
file_ids_to_update: HashSet<u32>,
|
|
|
|
|
|
patch_file_lookup: HashMap<u32, PatchFile>,
|
|
|
patch_file_lookup: HashMap<u32, PatchFile>,
|
|
|
current_file: Option<io::BufReader<fs::File>>,
|
|
|
current_file: Option<io::BufReader<fs::File>>,
|
|
|
chunk_num: u32,
|
|
|
chunk_num: u32,
|
|
@ -303,9 +302,15 @@ impl SendFileIterator { |
|
|
|
|
|
|
|
|
SendFileIterator {
|
|
|
SendFileIterator {
|
|
|
done: false,
|
|
|
done: false,
|
|
|
file_ids_to_update: file_ids_to_update,
|
|
|
|
|
|
patch_file_lookup: state.patch_file_lookup.clone(),
|
|
|
patch_file_lookup: state.patch_file_lookup.clone(),
|
|
|
file_iter: Box::new(state.patch_file_tree.flatten().into_iter()),
|
|
|
|
|
|
|
|
|
file_iter: Box::new(state.patch_file_tree.flatten().into_iter().filter(move |file| {
|
|
|
|
|
|
match file {
|
|
|
|
|
|
PatchTreeIterItem::File(path, id) => {
|
|
|
|
|
|
file_ids_to_update.contains(&id)
|
|
|
|
|
|
},
|
|
|
|
|
|
_ => true,
|
|
|
|
|
|
}
|
|
|
|
|
|
})),
|
|
|
current_file: None,
|
|
|
current_file: None,
|
|
|
chunk_num: 0,
|
|
|
chunk_num: 0,
|
|
|
}
|
|
|
}
|
|
@ -350,16 +355,11 @@ impl Iterator for SendFileIterator { |
|
|
Some(SendPatchPacket::ChangeDirectory(ChangeDirectory::new(path.to_str().unwrap())))
|
|
|
Some(SendPatchPacket::ChangeDirectory(ChangeDirectory::new(path.to_str().unwrap())))
|
|
|
},
|
|
|
},
|
|
|
PatchTreeIterItem::File(path, id) => {
|
|
|
PatchTreeIterItem::File(path, id) => {
|
|
|
if self.file_ids_to_update.contains(&id) {
|
|
|
|
|
|
let patch_file = self.patch_file_lookup.get(&id).unwrap();
|
|
|
let patch_file = self.patch_file_lookup.get(&id).unwrap();
|
|
|
let file = fs::File::open(&patch_file.path).unwrap();
|
|
|
let file = fs::File::open(&patch_file.path).unwrap();
|
|
|
let size = file.metadata().unwrap().len();
|
|
|
let size = file.metadata().unwrap().len();
|
|
|
self.current_file = Some(io::BufReader::new(file));
|
|
|
self.current_file = Some(io::BufReader::new(file));
|
|
|
Some(SendPatchPacket::StartFileSend(StartFileSend::new(path.to_str().unwrap(), size as u32, id)))
|
|
|
Some(SendPatchPacket::StartFileSend(StartFileSend::new(path.to_str().unwrap(), size as u32, id)))
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
self.next()
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
},
|
|
|
PatchTreeIterItem::UpDirectory => {
|
|
|
PatchTreeIterItem::UpDirectory => {
|
|
|
Some(SendPatchPacket::UpOneDirectory(UpOneDirectory {}))
|
|
|
Some(SendPatchPacket::UpOneDirectory(UpOneDirectory {}))
|
|
|