Explorar o código

dnetview: fixed bug in list due to method consuming self

changed:

view.update(mut self)

to:

view.update(&mut self)

method now borrows 'self' mutably instead of consuming it.
lunar-mining %!s(int64=4) %!d(string=hai) anos
pai
achega
2490435167
Modificáronse 3 ficheiros con 66 adicións e 53 borrados
  1. 6 7
      bin/dnetview/src/main.rs
  2. 27 27
      bin/dnetview/src/ui.rs
  3. 33 19
      bin/dnetview/src/view.rs

+ 6 - 7
bin/dnetview/src/main.rs

@@ -388,7 +388,7 @@ async fn render<B: Backend>(terminal: &mut Terminal<B>, model: Arc<Model>) -> Re
 
     let mut view = View::new(
         id_list.clone(),
-        info_list,
+        info_list.clone(),
         node_view.clone(),
         session_view.clone(),
         connect_view.clone(),
@@ -397,10 +397,7 @@ async fn render<B: Backend>(terminal: &mut Terminal<B>, model: Arc<Model>) -> Re
     view.info_list.index = 0;
 
     loop {
-        //debug!("MODEL: {:?}", model.infos.lock().await.clone());
-        //debug!("VIEW BEFORE UPDATE: {:?}", &view.id_list.ids);
-        let mut view = view.clone().update(model.infos.lock().await.clone())?;
-        //debug!("VIEW AFTER UPDATE: {:?}", view.clone().id_list.ids);
+        view.update(model.infos.lock().await.clone())?;
 
         terminal.draw(|f| {
             view.clone().render(f);
@@ -412,10 +409,12 @@ async fn render<B: Backend>(terminal: &mut Terminal<B>, model: Arc<Model>) -> Re
                     return Ok(())
                 }
                 Key::Char('j') => {
-                    view.clone().id_list.next();
+                    view.id_list.next();
+                    //debug!("ID LIST STATE {:?}", view.id_list.state);
                 }
                 Key::Char('k') => {
-                    view.clone().id_list.previous();
+                    view.id_list.previous();
+                    //debug!("ID LIST STATE {:?}", view.id_list.state);
                 }
                 _ => (),
             }

+ 27 - 27
bin/dnetview/src/ui.rs

@@ -1,4 +1,4 @@
-//use crate::model::SelectableObject;
+////use crate::model::SelectableObject;
 //use crate::view::View;
 //use log::debug;
 //
@@ -33,32 +33,32 @@
 //                        //let mut lines = vec![Spans::from(name_span)];
 //                        //let id = &node_info.node_id;
 //                        //let name = &node_info.node_name;
-//                        for child in &node_info.children {
-//                            match child.session_name.as_str() {
-//                                "Outgoing" => {
-//                                    lines.push(Spans::from(Span::styled(
-//                                        "   Outgoing",
-//                                        Style::default(),
-//                                    )));
-//                                }
-//                                "Incoming" => {
-//                                    lines.push(Spans::from(Span::styled(
-//                                        "   Outgoing",
-//                                        Style::default(),
-//                                    )));
-//                                }
-//                                "Manual" => {
-//                                    lines.push(Spans::from(Span::styled(
-//                                        "   Outgoing",
-//                                        Style::default(),
-//                                    )));
-//                                }
-//                                _ => {}
-//                            }
-//                            for child in &child.children {
-//                                // do something
-//                            }
-//                        }
+//                        //for child in &node_info.children {
+//                        //    match child.session_name.as_str() {
+//                        //        "Outgoing" => {
+//                        //            lines.push(Spans::from(Span::styled(
+//                        //                "   Outgoing",
+//                        //                Style::default(),
+//                        //            )));
+//                        //        }
+//                        //        "Incoming" => {
+//                        //            lines.push(Spans::from(Span::styled(
+//                        //                "   Outgoing",
+//                        //                Style::default(),
+//                        //            )));
+//                        //        }
+//                        //        "Manual" => {
+//                        //            lines.push(Spans::from(Span::styled(
+//                        //                "   Outgoing",
+//                        //                Style::default(),
+//                        //            )));
+//                        //        }
+//                        //        _ => {}
+//                        //    }
+//                        //    for child in &child.children {
+//                        //        // do something
+//                        //    }
+//                        //}
 //                        //if !node.outbound.iter().all(|node| node.is_empty) {
 //                        //    lines.push(Spans::from(Span::styled("   Outgoing", Style::default())));
 //                        //}

+ 33 - 19
bin/dnetview/src/view.rs

@@ -36,38 +36,32 @@ impl View {
         View { id_list, info_list, node_info, session_info, connect_info }
     }
 
-    pub fn update(mut self, model: Vec<SelectableObject>) -> Result<View> {
+    pub fn update(&mut self, model: Vec<SelectableObject>) -> Result<()> {
         for obj in model {
             let obj_clone = obj.clone();
             match obj {
                 SelectableObject::Node(node) => {
                     let node1 = node.clone();
-                    //self.node_info.clone().update(node1.clone())?;
+                    self.node_info.clone().update(node1.clone())?;
                     self.id_list.ids.insert(node1.clone().node_id);
                     self.info_list.infos.insert(node.node_id, obj_clone);
                 }
                 SelectableObject::Session(session) => {
                     let session1 = session.clone();
-                    //self.session_info.clone().update(session1.clone())?;
+                    self.session_info.clone().update(session1.clone())?;
                     self.id_list.ids.insert(session1.clone().session_id);
                     self.info_list.infos.insert(session1.clone().session_id, obj_clone);
                 }
                 SelectableObject::Connect(connect) => {
                     let connect1 = connect.clone();
-                    //self.connect_info.clone().update(connect)?;
+                    self.connect_info.clone().update(connect)?;
                     self.id_list.ids.insert(connect1.clone().connect_id);
                     self.info_list.infos.insert(connect1.clone().connect_id, obj_clone);
                 }
             }
         }
 
-        let id_list = self.id_list;
-        let info_list = self.info_list;
-        let node_info = self.node_info;
-        let session_info = self.session_info;
-        let connect_info = self.connect_info;
-
-        Ok(View { id_list, info_list, node_info, session_info, connect_info })
+        Ok(())
     }
 
     pub fn render<B: Backend>(mut self, f: &mut Frame<'_, B>) {
@@ -90,20 +84,34 @@ impl View {
                             //lines.push(Spans::from(name_span));
                             let names = ListItem::new(lines);
                             nodes.push(names);
+                            //for child in &info.children {
+                            //    let name_span = Span::raw(&child.session_name);
+                            //    let lines = vec![Spans::from(name_span)];
+                            //    let names = ListItem::new(lines);
+                            //    nodes.push(names);
+                            //    for child in &child.children {
+                            //        let name_span = Span::raw(&child.connect_id);
+                            //        let lines = vec![Spans::from(name_span)];
+                            //        let names = ListItem::new(lines);
+                            //        nodes.push(names);
+                            //    }
+                            //    // thing
+                            //}
+
                             //nodes.push(node);
                         }
                         SelectableObject::Session(info) => {
-                            let name_span = Span::raw(&info.session_name);
-                            let lines = vec![Spans::from(name_span)];
-                            let names = ListItem::new(lines);
-                            nodes.push(names);
+                            //let name_span = Span::raw(&info.session_name);
+                            //let lines = vec![Spans::from(name_span)];
+                            //let names = ListItem::new(lines);
+                            //nodes.push(names);
                             //self.session_info.clone().render(info),
                         }
                         SelectableObject::Connect(info) => {
-                            let name_span = Span::raw(&info.connect_id);
-                            let lines = vec![Spans::from(name_span)];
-                            let names = ListItem::new(lines);
-                            nodes.push(names);
+                            //let name_span = Span::raw(&info.connect_id);
+                            //let lines = vec![Spans::from(name_span)];
+                            //let names = ListItem::new(lines);
+                            //nodes.push(names);
                             //self.connect_info.clone().render(info),
                         }
                     }
@@ -271,6 +279,7 @@ impl IdListView {
     pub fn next(&mut self) {
         let i = match self.state.selected() {
             Some(i) => {
+                debug!("INDEX: {}", i);
                 if i >= self.ids.len() - 1 {
                     0
                 } else {
@@ -279,6 +288,8 @@ impl IdListView {
             }
             None => 0,
         };
+        debug!("NEW INDEX: {}", i);
+        debug!("IDS LEN: {}", self.ids.len());
         self.state.select(Some(i));
     }
 
@@ -288,11 +299,14 @@ impl IdListView {
                 if i == 0 {
                     self.ids.len() - 1
                 } else {
+                    debug!("NEW INDEX {}", i);
                     i - 1
                 }
             }
             None => 0,
         };
+        debug!("INDEX: {}", i);
+        debug!("IDS LEN: {}", self.ids.len());
         self.state.select(Some(i));
     }