Skip to content

Commit 8abd32b

Browse files
Merge pull request #207 from GuillaumeGomez/updates
Update gtk4, toml and sysinfo dependencies version
2 parents a509517 + 777237b commit 8abd32b

9 files changed

+499
-355
lines changed

Cargo.lock

+345-236
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+4-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ readme = "README.md"
1313
keywords = ["GUI", "process", "viewer", "gtk"]
1414

1515
[dependencies]
16-
gtk = { version = "0.7", package = "gtk4" }
17-
sysinfo = "0.28.2"
16+
gtk = { version = "0.8", package = "gtk4" }
17+
sysinfo = "0.30"
1818
libc = "0.2"
1919
serde = "1.0"
2020
serde_derive = "1.0"
21-
toml = "0.5"
21+
toml = "0.8"
22+
async-channel = "2.2.1"

src/display_disk.rs

+9-17
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
use std::cell::RefCell;
22
use std::rc::Rc;
3-
use std::sync::{Arc, Mutex};
43

54
use crate::utils::format_number;
65

76
use gtk::glib;
87
use gtk::prelude::*;
98

10-
use sysinfo::{DiskExt, SystemExt};
11-
129
struct DiskInfo {
1310
label: gtk::Label,
1411
progress: gtk::ProgressBar,
@@ -76,7 +73,7 @@ fn refresh_disks(container: &gtk::Box, disks: &[sysinfo::Disk], elems: &mut Vec<
7673
}
7774
}
7875

79-
pub fn create_disk_info(sys: &Arc<Mutex<sysinfo::System>>, stack: &gtk::Stack) {
76+
pub fn create_disk_info(stack: &gtk::Stack) {
8077
let elems: Rc<RefCell<Vec<DiskInfo>>> = Rc::new(RefCell::new(Vec::new()));
8178
let vertical_layout = gtk::Box::new(gtk::Orientation::Vertical, 0);
8279
let container = gtk::Box::new(gtk::Orientation::Vertical, 0);
@@ -86,24 +83,19 @@ pub fn create_disk_info(sys: &Arc<Mutex<sysinfo::System>>, stack: &gtk::Stack) {
8683
.child(&container)
8784
.build();
8885

86+
let disks = RefCell::new(sysinfo::Disks::new_with_refreshed_list());
87+
88+
refresh_disks(&container, &disks.borrow(), &mut elems.borrow_mut());
89+
8990
let refresh_but = gtk::Button::with_label("Refresh disks");
9091

91-
refresh_but.connect_clicked(
92-
glib::clone!(@weak sys, @weak container, @strong elems => move |_| {
93-
let mut sys = sys.lock().expect("failed to lock to refresh disks");
94-
sys.refresh_disks();
95-
refresh_disks(&container, sys.disks(), &mut elems.borrow_mut());
96-
}),
97-
);
92+
refresh_but.connect_clicked(glib::clone!(@weak container, @strong elems => move |_| {
93+
disks.borrow_mut().refresh_list();
94+
refresh_disks(&container, &disks.borrow(), &mut elems.borrow_mut());
95+
}));
9896

9997
vertical_layout.append(&scroll);
10098
vertical_layout.append(&refresh_but);
10199

102100
stack.add_titled(&vertical_layout, Some("Disks"), "Disks");
103-
104-
refresh_disks(
105-
&container,
106-
sys.lock().expect("failed to lock to get disks").disks(),
107-
&mut elems.borrow_mut(),
108-
);
109101
}

src/display_network.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::network_dialog::{self, NetworkDialog};
33
use crate::utils::{format_number, format_number_full};
44
use gtk::glib;
55
use gtk::prelude::*;
6-
use sysinfo::{NetworkExt, NetworksExt, System, SystemExt};
6+
use sysinfo::Networks;
77

88
use std::cell::RefCell;
99
use std::collections::HashSet;
@@ -41,13 +41,12 @@ fn append_column(
4141

4242
pub struct Network {
4343
list_store: gtk::ListStore,
44-
pub filter_entry: gtk::SearchEntry,
4544
pub search_bar: gtk::SearchBar,
4645
dialogs: Rc<RefCell<Vec<NetworkDialog>>>,
4746
}
4847

4948
impl Network {
50-
pub fn new(stack: &gtk::Stack, sys: &Arc<Mutex<System>>) -> Network {
49+
pub fn new(stack: &gtk::Stack, networks: &Arc<Mutex<Networks>>) -> Self {
5150
let tree = gtk::TreeView::builder().headers_visible(true).build();
5251
let scroll = gtk::ScrolledWindow::builder().child(&tree).build();
5352
let info_button = gtk::Button::builder()
@@ -99,7 +98,7 @@ impl Network {
9998
// The filter model
10099
let filter_model = gtk::TreeModelFilter::new(&list_store, None);
101100
filter_model.set_visible_func(
102-
glib::clone!(@weak filter_entry => @default-return false, move |model, iter| {
101+
glib::clone!(@strong filter_entry => @default-return false, move |model, iter| {
103102
if !WidgetExt::is_visible(&filter_entry) {
104103
return true;
105104
}
@@ -173,19 +172,19 @@ impl Network {
173172

174173
let dialogs = Rc::new(RefCell::new(Vec::new()));
175174

176-
info_button.connect_clicked(glib::clone!(@weak dialogs, @weak sys => move |_| {
175+
info_button.connect_clicked(glib::clone!(@weak dialogs, @weak networks => move |_| {
177176
let current_network = current_network.borrow();
178177
if let Some(ref interface_name) = *current_network {
179178
create_network_dialog(
180179
&mut dialogs.borrow_mut(),
181180
interface_name,
182-
&sys.lock().expect("failed to lock for new network dialog"),
181+
&networks.lock().expect("failed to lock for new network dialog"),
183182
);
184183
}
185184
}));
186185

187186
tree.connect_row_activated(
188-
glib::clone!(@weak sys, @weak dialogs => move |tree_view, path, _| {
187+
glib::clone!(@weak networks, @weak dialogs => move |tree_view, path, _| {
189188
let model = tree_view.model().expect("couldn't get model");
190189
let iter = model.iter(path).expect("couldn't get iter");
191190
let interface_name = model.get_value(&iter, 0)
@@ -194,26 +193,24 @@ impl Network {
194193
create_network_dialog(
195194
&mut dialogs.borrow_mut(),
196195
&interface_name,
197-
&sys.lock().expect("failed to lock for new network dialog (from tree)"),
196+
&networks.lock().expect("failed to lock for new network dialog (from tree)"),
198197
);
199198
}),
200199
);
201200

202201
Network {
203202
list_store,
204-
filter_entry,
205203
search_bar,
206204
dialogs,
207205
}
208206
}
209207

210-
pub fn update_networks(&mut self, sys: &System) {
208+
pub fn update_networks(&mut self, networks: &Networks) {
211209
// first part, deactivate sorting
212210
let sorted = TreeSortableExtManual::sort_column_id(&self.list_store);
213211
self.list_store.set_unsorted();
214212

215213
let mut seen: HashSet<String> = HashSet::new();
216-
let networks = sys.networks();
217214

218215
if let Some(iter) = self.list_store.iter_first() {
219216
let mut valid = true;
@@ -319,15 +316,18 @@ fn create_and_fill_model(
319316
);
320317
}
321318

322-
fn create_network_dialog(dialogs: &mut Vec<NetworkDialog>, interface_name: &str, sys: &System) {
319+
fn create_network_dialog(
320+
dialogs: &mut Vec<NetworkDialog>,
321+
interface_name: &str,
322+
networks: &Networks,
323+
) {
323324
for dialog in dialogs.iter() {
324325
if dialog.name == interface_name {
325326
dialog.show();
326327
return;
327328
}
328329
}
329-
if let Some((_, data)) = sys
330-
.networks()
330+
if let Some((_, data)) = networks
331331
.iter()
332332
.find(|(name, _)| name.as_str() == interface_name)
333333
{

src/display_procs.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use gtk::glib;
22
use gtk::prelude::*;
33

4-
use sysinfo::{Pid, PidExt, Process, ProcessExt};
4+
use sysinfo::{Pid, Process};
55

66
use crate::utils::format_number;
77

@@ -42,6 +42,7 @@ impl Procs {
4242
.margin_top(6)
4343
.margin_bottom(6)
4444
.margin_end(6)
45+
.margin_start(6)
4546
.sensitive(false)
4647
.build();
4748

@@ -80,8 +81,7 @@ impl Procs {
8081
for pro in proc_list.values() {
8182
if let Some(exe) = pro
8283
.exe()
83-
.file_name()
84-
.and_then(|f| f.to_str())
84+
.and_then(|exe| exe.file_name().and_then(|f| f.to_str()))
8585
.or_else(|| Some(pro.name()))
8686
{
8787
create_and_fill_model(

src/display_sysinfo.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use gtk::glib;
22
use gtk::prelude::*;
3-
use sysinfo::{ComponentExt, CpuExt, SystemExt};
43

54
use std::cell::RefCell;
65
use std::iter;
@@ -71,6 +70,7 @@ pub struct DisplaySysInfo {
7170
impl DisplaySysInfo {
7271
pub fn new(
7372
sys: &Arc<Mutex<sysinfo::System>>,
73+
sys_components: &sysinfo::Components,
7474
stack: &gtk::Stack,
7575
settings: &Settings,
7676
) -> DisplaySysInfo {
@@ -192,13 +192,13 @@ impl DisplaySysInfo {
192192
//
193193
// TEMPERATURES PART
194194
//
195-
if !sys.components().is_empty() {
195+
if !sys_components.is_empty() {
196196
check_box3 = Some(create_header(
197197
"Components' temperature",
198198
&vertical_layout,
199199
settings.display_graph,
200200
));
201-
for component in sys.components() {
201+
for component in sys_components {
202202
let horizontal_layout = gtk::Box::new(gtk::Orientation::Horizontal, 10);
203203
// TODO: add max and critical temperatures as well
204204
let temp = gtk::Label::new(Some(&format!("{:.1} °C", component.temperature())));
@@ -273,7 +273,7 @@ impl DisplaySysInfo {
273273
temperature_usage_history,
274274
temperature_check_box: check_box3,
275275
};
276-
tmp.update_system_info(&sys, settings.display_fahrenheit);
276+
tmp.update_system_info(&sys, sys_components, settings.display_fahrenheit);
277277
tmp
278278
}
279279

@@ -285,7 +285,12 @@ impl DisplaySysInfo {
285285
}
286286
}
287287

288-
pub fn update_system_info(&mut self, sys: &sysinfo::System, display_fahrenheit: bool) {
288+
pub fn update_system_info(
289+
&mut self,
290+
sys: &sysinfo::System,
291+
sys_components: &sysinfo::Components,
292+
display_fahrenheit: bool,
293+
) {
289294
let disp = |total, used| {
290295
format!(
291296
"{} / {}",
@@ -337,8 +342,7 @@ impl DisplaySysInfo {
337342

338343
// temperature part
339344
let t = self.temperature_usage_history.borrow_mut();
340-
for (pos, (component, label)) in sys
341-
.components()
345+
for (pos, (component, label)) in sys_components
342346
.iter()
343347
.zip(self.components.iter())
344348
.enumerate()
@@ -385,7 +389,7 @@ impl DisplaySysInfo {
385389
}
386390
}
387391

388-
pub fn show_if_necessary<U: gtk::glib::IsA<gtk::CheckButton>, T: WidgetExt>(
392+
pub fn show_if_necessary<U: gtk::glib::object::IsA<gtk::CheckButton>, T: WidgetExt>(
389393
check_box: &U,
390394
proc_horizontal_layout: &GraphWidget,
391395
non_graph_layout: &T,

0 commit comments

Comments
 (0)