diff --git a/bin/dnetview/src/main.rs b/bin/dnetview/src/main.rs index 701c8a31d..acba88463 100644 --- a/bin/dnetview/src/main.rs +++ b/bin/dnetview/src/main.rs @@ -52,12 +52,12 @@ impl DnetView { loop { self.view.update( - self.model.id_vec.lock().await.clone(), self.model.msg_map.lock().await.clone(), self.model.selectables.lock().await.clone(), ); - debug!(target: "dnetview::render_view()", "ID LIST: {:?}", self.view.id_menu.ids); + //debug!(target: "dnetview::render_view()", "ID MENU: {:?}", self.view.id_menu.ids); + //debug!(target: "dnetview::render_view()", "SELECTABLES ID LIST: {:?}", self.model.selectables.lock().await.keys()); let mut err: Option = None; diff --git a/bin/dnetview/src/model.rs b/bin/dnetview/src/model.rs index 2d4529d49..83019f53b 100644 --- a/bin/dnetview/src/model.rs +++ b/bin/dnetview/src/model.rs @@ -25,8 +25,6 @@ pub enum SelectableObject { #[derive(Debug)] pub struct Model { - pub unique_ids: Mutex>, - pub id_vec: Mutex>, pub msg_map: MsgMap, pub msg_log: Mutex, pub selectables: Mutex>, @@ -34,12 +32,10 @@ pub struct Model { impl Model { pub fn new() -> Arc { - let unique_ids = Mutex::new(FxHashSet::default()); - let id_vec = Mutex::new(Vec::new()); let selectables = Mutex::new(FxHashMap::default()); let msg_map = Mutex::new(FxHashMap::default()); let msg_log = Mutex::new(Vec::new()); - Arc::new(Model { unique_ids, id_vec, msg_map, msg_log, selectables }) + Arc::new(Model { msg_map, msg_log, selectables }) } } diff --git a/bin/dnetview/src/parser.rs b/bin/dnetview/src/parser.rs index 70d4906fc..aee10c6d9 100644 --- a/bin/dnetview/src/parser.rs +++ b/bin/dnetview/src/parser.rs @@ -125,8 +125,7 @@ impl DataParser { true, ); - self.update_selectable_and_ids(sessions, node.clone()).await?; - self.update_id_vec().await; + self.update_selectables(sessions, node.clone()).await?; Ok(()) } @@ -164,9 +163,8 @@ impl DataParser { false, ); - self.update_selectable_and_ids(sessions.clone(), node.clone()).await?; + self.update_selectables(sessions.clone(), node.clone()).await?; self.update_msgs(sessions.clone()).await?; - self.update_id_vec().await; //debug!("IDS: {:?}", self.model.ids.lock().await); //debug!("INFOS: {:?}", self.model.nodes.lock().await); @@ -202,19 +200,7 @@ impl DataParser { Ok(()) } - async fn update_unique_ids(&self, id: String) { - self.model.unique_ids.lock().await.insert(id); - } - - async fn update_id_vec(&self) { - let ids = self.model.unique_ids.lock().await.clone(); - - for id in ids.iter() { - self.model.id_vec.lock().await.push(id.to_string()); - } - } - - async fn update_selectable_and_ids( + async fn update_selectables( &self, sessions: Vec, node: NodeInfo, @@ -222,20 +208,16 @@ impl DataParser { if node.is_offline == true { let node_obj = SelectableObject::Node(node.clone()); self.model.selectables.lock().await.insert(node.id.clone(), node_obj); - self.update_unique_ids(node.id.clone()).await; } else { let node_obj = SelectableObject::Node(node.clone()); self.model.selectables.lock().await.insert(node.id.clone(), node_obj); - self.update_unique_ids(node.id.clone()).await; for session in sessions { if !session.is_empty { let session_obj = SelectableObject::Session(session.clone()); self.model.selectables.lock().await.insert(session.clone().id, session_obj); - self.update_unique_ids(session.clone().id).await; for connect in session.children { let connect_obj = SelectableObject::Connect(connect.clone()); self.model.selectables.lock().await.insert(connect.clone().id, connect_obj); - self.update_unique_ids(connect.clone().id).await; } } } diff --git a/bin/dnetview/src/view.rs b/bin/dnetview/src/view.rs index 134ee4bbd..0bcc85d88 100644 --- a/bin/dnetview/src/view.rs +++ b/bin/dnetview/src/view.rs @@ -17,7 +17,7 @@ use crate::{ model::{NodeInfo, SelectableObject}, }; -//use log::debug; +use log::debug; type MsgLog = Vec<(NanoTimestamp, String, String)>; type MsgMap = FxHashMap; @@ -39,22 +39,17 @@ impl<'a> View { View { id_menu, msg_list, selectables } } - pub fn update( - &mut self, - ids: Vec, - msg_map: MsgMap, - selectables: FxHashMap, - ) { - self.update_selectable(selectables); + pub fn update(&mut self, msg_map: MsgMap, selectables: FxHashMap) { + self.update_selectable(selectables.clone()); self.update_msg_list(msg_map); - self.update_id_menu(ids); + self.update_id_menu(selectables); self.update_msg_index(); } - fn update_id_menu(&mut self, ids: Vec) { - for id in ids { - if !self.id_menu.ids.iter().any(|i| i == &id) { - self.id_menu.ids.push(id); + fn update_id_menu(&mut self, selectables: FxHashMap) { + for id in selectables.keys() { + if !self.id_menu.ids.iter().any(|i| i == id) { + self.id_menu.ids.push(id.to_string()); } } } @@ -121,6 +116,8 @@ impl<'a> View { } } + // either the Vec needs to be reordered according to the order of nodes: Vec + // or Vec needs to be reordered according to Vec fn render_ids( &mut self, f: &mut Frame<'_, B>, @@ -243,9 +240,11 @@ impl<'a> View { return Ok(()) } else { let info = self.selectables.get(&selected); + debug!(target: "dnetview", "render_info()::selected {}", selected); match info { Some(SelectableObject::Node(node)) => { + debug!(target: "dnetview", "render_info()::SelectableObject::Node"); match &node.external_addr { Some(addr) => { let node_info = Span::styled(format!("External addr: {}", addr), style); @@ -262,6 +261,7 @@ impl<'a> View { ))); } Some(SelectableObject::Session(session)) => { + debug!(target: "dnetview", "render_info()::SelectableObject::Session"); if session.accept_addr.is_some() { let session_info = Span::styled( format!("Accept addr: {}", session.accept_addr.as_ref().unwrap()), @@ -271,6 +271,7 @@ impl<'a> View { } } Some(SelectableObject::Connect(connect)) => { + debug!(target: "dnetview", "render_info()::SelectableObject::Connect"); let text = self.parse_msg_list(connect.id.clone())?; f.render_stateful_widget(text, slice[1], &mut self.msg_list.state); } @@ -298,6 +299,7 @@ impl IdMenu { pub fn new(ids: Vec) -> IdMenu { IdMenu { state: ListState::default(), ids } } + pub fn next(&mut self) { let i = match self.state.selected() { Some(i) => {