mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
dnetview: remove redundant id vec
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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 })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user