dnetview: remove redundant id vec

This commit is contained in:
lunar-mining
2022-08-22 11:07:12 +02:00
parent 59b954fa69
commit ba7e75c75b
4 changed files with 21 additions and 41 deletions

View File

@@ -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;

View File

@@ -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 })
}
}

View File

@@ -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;
}
}
}

View File

@@ -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) => {