From 332708744387d7658f3a22802f4aafde4d87f9f8 Mon Sep 17 00:00:00 2001 From: ClementTsang Date: Sun, 2 Feb 2020 00:52:41 -0500 Subject: [PATCH] Fix dd with new changes --- src/app.rs | 43 ++++++++++++++++++++++++++++++++++--------- src/canvas.rs | 33 +++++++++++++++++---------------- 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/src/app.rs b/src/app.rs index ea33077c..fd5a8934 100644 --- a/src/app.rs +++ b/src/app.rs @@ -5,7 +5,7 @@ use std::time::Instant; pub mod data_farmer; use data_farmer::*; -use crate::{canvas, constants, data_conversion::ConvertedProcessData, utils::error::Result}; +use crate::{canvas, constants, utils::error::Result}; mod process_killer; @@ -76,7 +76,7 @@ pub struct App { pub show_help: bool, pub show_dd: bool, pub dd_err: Option, - to_delete_process_list: Option>, + to_delete_process_list: Option<(String, Vec)>, pub is_frozen: bool, pub left_legend: bool, pub use_current_cpu_total: bool, @@ -390,12 +390,37 @@ impl App { if self.awaiting_second_char && self.second_char == 'd' { self.awaiting_second_char = false; self.second_char = ' '; - let current_process = Vec::new(); - // TODO: Fix + if self.currently_selected_process_position + < self.canvas_data.finalized_process_data.len() as i64 + { + let current_process = if self.is_grouped() { + let group_pids = &self.canvas_data.finalized_process_data + [self.currently_selected_process_position as usize] + .group_pids; + + let mut ret = ("".to_string(), group_pids.clone()); + + for pid in group_pids { + if let Some(process) = + self.canvas_data.process_data.get(&pid) + { + ret.0 = process.name.clone(); + break; + } + } + ret + } else { + let process = self.canvas_data.finalized_process_data + [self.currently_selected_process_position as usize] + .clone(); + (process.name.clone(), vec![process.pid]) + }; + + self.to_delete_process_list = Some(current_process); + self.show_dd = true; + } - self.to_delete_process_list = Some(current_process); - self.show_dd = true; self.reset_multi_tap_keys(); } else { self.awaiting_second_char = true; @@ -490,8 +515,8 @@ impl App { // Technically unnecessary but this is a good check... if let WidgetPosition::Process = self.current_widget_selected { if let Some(current_selected_processes) = &(self.to_delete_process_list) { - for current_selected_process in current_selected_processes { - process_killer::kill_process_given_pid(current_selected_process.pid)?; + for pid in ¤t_selected_processes.1 { + process_killer::kill_process_given_pid(*pid)?; } } self.to_delete_process_list = None; @@ -499,7 +524,7 @@ impl App { Ok(()) } - pub fn get_current_highlighted_process_list(&self) -> Option> { + pub fn get_to_delete_processes(&self) -> Option<(String, Vec)> { self.to_delete_process_list.clone() } diff --git a/src/canvas.rs b/src/canvas.rs index c4138f29..0cc5904e 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -239,23 +239,23 @@ pub fn draw_data( .alignment(Alignment::Center) .wrap(true) .render(&mut f, middle_dialog_chunk[1]); - } else if let Some(process_list) = app_state.get_current_highlighted_process_list() { - if let Some(process) = process_list.first() { + } else if let Some(to_kill_processes) = app_state.get_to_delete_processes() { + if let Some(first_pid) = to_kill_processes.1.first() { let dd_text = [ - if app_state.is_grouped() { - Text::raw(format!( - "\nAre you sure you want to kill {} process(es) with name {}?", - process_list.len(), process.name - )) - } else { - Text::raw(format!( - "\nAre you sure you want to kill process {} with PID {}?", - process.name, process.pid - )) - }, - Text::raw("\n\nPress ENTER to proceed, ESC to exit."), - Text::raw("\nNote that if bottom is frozen, it must be unfrozen for changes to be shown."), - ]; + if app_state.is_grouped() { + Text::raw(format!( + "\nAre you sure you want to kill {} process(es) with name {}?", + to_kill_processes.1.len(), to_kill_processes.0 + )) + } else { + Text::raw(format!( + "\nAre you sure you want to kill process {} with PID {}?", + to_kill_processes.0, first_pid + )) + }, + Text::raw("\n\nPress ENTER to proceed, ESC to exit."), + Text::raw("\nNote that if bottom is frozen, it must be unfrozen for changes to be shown."), + ]; Paragraph::new(dd_text.iter()) .block( @@ -268,6 +268,7 @@ pub fn draw_data( .wrap(true) .render(&mut f, middle_dialog_chunk[1]); } else { + // This is a bit nasty, but it works well... I guess. app_state.show_dd = false; } } else {