Просмотр исходного кода

dnetview: remove redundant id vec

lunar-mining 4 лет назад
Родитель
Сommit
ba7e75c75b
4 измененных файлов с 21 добавлено и 41 удалено
  1. 2 2
      bin/dnetview/src/main.rs
  2. 1 5
      bin/dnetview/src/model.rs
  3. 3 21
      bin/dnetview/src/parser.rs
  4. 15 13
      bin/dnetview/src/view.rs

+ 2 - 2
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<DnetViewError> = None;
 

+ 1 - 5
bin/dnetview/src/model.rs

@@ -25,8 +25,6 @@ pub enum SelectableObject {
 
 #[derive(Debug)]
 pub struct Model {
-    pub unique_ids: Mutex<FxHashSet<String>>,
-    pub id_vec: Mutex<Vec<String>>,
     pub msg_map: MsgMap,
     pub msg_log: Mutex<MsgLog>,
     pub selectables: Mutex<FxHashMap<String, SelectableObject>>,
@@ -34,12 +32,10 @@ pub struct Model {
 
 impl Model {
     pub fn new() -> Arc<Self> {
-        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 })
     }
 }
 

+ 3 - 21
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<SessionInfo>,
         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;
                     }
                 }
             }

+ 15 - 13
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<String, MsgLog>;
@@ -39,22 +39,17 @@ impl<'a> View {
         View { id_menu, msg_list, selectables }
     }
 
-    pub fn update(
-        &mut self,
-        ids: Vec<String>,
-        msg_map: MsgMap,
-        selectables: FxHashMap<String, SelectableObject>,
-    ) {
-        self.update_selectable(selectables);
+    pub fn update(&mut self, msg_map: MsgMap, selectables: FxHashMap<String, SelectableObject>) {
+        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<String>) {
-        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<String, SelectableObject>) {
+        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<String> needs to be reordered according to the order of nodes: Vec<Spans>
+    // or Vec<Spans> needs to be reordered according to Vec<String>
     fn render_ids<B: Backend>(
         &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<String>) -> IdMenu {
         IdMenu { state: ListState::default(), ids }
     }
+
     pub fn next(&mut self) {
         let i = match self.state.selected() {
             Some(i) => {