Skip to content

Commit

Permalink
Merge pull request #779 from marhkb/fix/process-list/continue-stats-s…
Browse files Browse the repository at this point in the history
…tream

fix(process-list): Always continue top stream
  • Loading branch information
marhkb committed Jan 3, 2024
2 parents fafd444 + 89f9363 commit a6bef81
Showing 1 changed file with 46 additions and 47 deletions.
93 changes: 46 additions & 47 deletions src/model/process_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,56 +72,55 @@ mod imp {
utils::run_stream(
processes_source,
move |top_source| top_source.stream(),
clone!(@weak obj => @default-return glib::ControlFlow::Break, move |result: podman::Result<ProcessFields>| match result {
Ok(process_fields) => {
let to_remove = obj
.imp()
.list
.borrow()
.keys()
.filter(|pid| {
!process_fields
.iter()
.any(|process_field| &process_field[1] == *pid)
})
.cloned()
.collect::<Vec<_>>();
to_remove.iter().for_each(|pid| {
obj.remove(pid);
});

process_fields.into_iter().for_each(|process_field| {
use indexmap::map::Entry;

let mut list = obj.imp().list.borrow_mut();
let index = list.len() as u32;

match list.entry(process_field[1].clone()) {
Entry::Vacant(e) => {
let process =
model::Process::new(&obj, process_field.as_slice());
e.insert(process.clone());

drop(list);

obj.items_changed(index, 0, 1);
clone!(@weak obj => @default-return glib::ControlFlow::Break, move |result: podman::Result<ProcessFields>| {
match result {
Ok(process_fields) => {
let to_remove = obj
.imp()
.list
.borrow()
.keys()
.filter(|pid| {
!process_fields
.iter()
.any(|process_field| &process_field[1] == *pid)
})
.cloned()
.collect::<Vec<_>>();
to_remove.iter().for_each(|pid| {
obj.remove(pid);
});

process_fields.into_iter().for_each(|process_field| {
use indexmap::map::Entry;

let mut list = obj.imp().list.borrow_mut();
let index = list.len() as u32;

match list.entry(process_field[1].clone()) {
Entry::Vacant(e) => {
let process =
model::Process::new(&obj, process_field.as_slice());
e.insert(process.clone());

drop(list);

obj.items_changed(index, 0, 1);
}
Entry::Occupied(e) => {
let process = e.get().clone();
drop(list);
process.update(process_field.as_slice());
}
}
Entry::Occupied(e) => {
let process = e.get().clone();
drop(list);
process.update(process_field.as_slice());
}
}
});

obj.emit_by_name::<()>("updated", &[]);
});

glib::ControlFlow::Continue
}
Err(e) => {
log::warn!("Stopping top stream due to error: {e}");
glib::ControlFlow::Break
obj.emit_by_name::<()>("updated", &[]);
}
Err(e) => log::warn!("Failed to read top stream element: {e}"),
}

glib::ControlFlow::Continue
}),
);
}
Expand Down

0 comments on commit a6bef81

Please sign in to comment.