datum parsing

This commit is contained in:
TIBERGHIEN corentin
2026-01-22 03:19:43 +01:00
parent fb2c3310af
commit 26fa7a833f
5 changed files with 96 additions and 92 deletions

View File

@@ -6,6 +6,7 @@ use crossbeam_channel::{Receiver, Sender};
use egui::{
Align, Align2, Button, CentralPanel, CollapsingHeader, Context, Id, LayerId, Layout, Order,
Popup, ScrollArea, SidePanel, TextStyle, TopBottomPanel, Ui, ViewportCommand,
debug_text::print,
};
use std::{collections::HashMap, fmt::format};
@@ -120,8 +121,36 @@ impl eframe::App for P2PClientApp {
self.known_peers = peers;
}
NetworkEvent::FileTreeReceived(node_hash, merklenode) => {
//self.status_message = "🔄 File tree updated successfully.".to_string();
NetworkEvent::FileTreeReceived(node_hash, merklenode, ip) => {
match &self.active_peer {
Some(active_peer) => {
if let Some(maptree) = self.loaded_fs.get_mut(active_peer) {
maptree.data.insert(node_hash, merklenode.clone());
match merklenode {
MerkleNode::Directory(d) => {
for entry in d.entries {
let _ = self.network_cmd_tx.send(
NetworkCommand::GetChildren(
entry.content_hash,
ip.clone(),
),
);
}
}
MerkleNode::BigDirectory(bigd) => {
for entry in bigd.children_hashes {
let _ = self.network_cmd_tx.send(
NetworkCommand::GetChildren(entry, ip.clone()),
);
}
}
_ => {}
}
}
}
None => {}
}
}
NetworkEvent::FileTreeRootReceived(peer_id, root_hash) => {
// todo!();
@@ -133,8 +162,10 @@ impl eframe::App for P2PClientApp {
);*/
if let Ok(chunknode) = ChunkNode::new(Vec::new()) {
let mut data_map: HashMap<NodeHash, MerkleNode> = HashMap::new();
data_map.insert(root_hash, MerkleNode::Chunk(chunknode));
let data_map: HashMap<NodeHash, MerkleNode> = HashMap::new();
//data_map.insert(root_hash, MerkleNode::Chunk(chunknode));
println!("len root: {}", data_map.len());
println!("node hash: {:?}", root_hash.to_vec());
let tree = MerkleTree {
data: data_map,
root: root_hash,
@@ -242,64 +273,7 @@ impl eframe::App for P2PClientApp {
}
_ => {}
}
/* ui.horizontal(|ui| {
ui.label("Server peer name:");
ui.text_edit_singleline(&mut self.connect_server_name_input);
if ui.button("Connect").clicked() {
let addr = self.connect_address_input.clone();
let serv_name = self.connect_server_name_input.clone();
let _ = self
.network_cmd_tx
.send(NetworkCommand::ConnectToServer(addr, serv_name));
self.server_status = ServerStatus::Loading;
ui.close();
}
});*/
});
// état
/*if ui.button("Network").clicked() {
self.show_network_popup = true;
}*/
/*if self.show_network_popup {
egui::Window::new("Network")
.collapsible(false)
.resizable(false)
.show(ctx, |ui| {
ui.horizontal_wrapped(|ui| {
ui.with_layout(
egui::Layout::right_to_left(egui::Align::TOP),
|ui| {
if ui.button("✕").clicked() {
self.show_network_popup = false;
}
},
);
});
ui.horizontal(|ui| {
ui.label("Server IP:");
ui.text_edit_singleline(&mut self.connect_address_input);
});
ui.horizontal(|ui| {
ui.label("Server peer name:");
ui.text_edit_singleline(&mut self.connect_server_name_input);
if ui.button("Connect").clicked() {
// envoyer commande...
let addr = self.connect_address_input.clone();
let serv_name = self.connect_server_name_input.clone();
let _ = self
.network_cmd_tx
.send(NetworkCommand::ConnectToServer(addr, serv_name));
self.server_status = ServerStatus::Loading;
self.show_network_popup = false;
}
});
});
}*/
});
});
@@ -514,11 +488,12 @@ impl P2PClientApp {
if let Some(current) = tree.data.get(&to_draw) {
let name = {
if filename.is_some() {
filename_to_string(filename.unwrap())
String::from_utf8(filename.unwrap().to_vec()).expect("err")
} else {
node_hash_to_hex_string(&to_draw)
}
};
match current {
MerkleNode::Chunk(node) => {
if ui
@@ -544,13 +519,7 @@ impl P2PClientApp {
entry.content_hash,
tree,
depth + 1,
Some(
entry
.filename
.as_slice()
.try_into()
.expect("incorrect size"),
),
Some(entry.filename.try_into().expect("incorrect size")),
);
}
});