1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
use signal_hook::consts::signal;
use crate::context::JoshutoContext;
use crate::history::DirectoryHistory;
use crate::io::{FileOp, IOWorkerProgress};
use crate::ui;
use crate::util::event::JoshutoEvent;
use crate::util::format;
pub fn process_noninteractive(event: JoshutoEvent, context: &mut JoshutoContext) {
match event {
JoshutoEvent::IOWorkerProgress(res) => process_worker_progress(context, res),
JoshutoEvent::IOWorkerResult(res) => process_finished_worker(context, res),
JoshutoEvent::Signal(signal::SIGWINCH) => {}
_ => {}
}
}
pub fn process_worker_progress(context: &mut JoshutoContext, res: IOWorkerProgress) {
context.set_worker_progress(res);
context.update_worker_msg();
}
pub fn process_finished_worker(
context: &mut JoshutoContext,
res: std::io::Result<IOWorkerProgress>,
) {
let observer = context.remove_job().unwrap();
let options = context.config_ref().sort_option.clone();
for tab in context.tab_context_mut().iter_mut() {
let _ = tab.history_mut().reload(observer.dest_path(), &options);
let _ = tab.history_mut().reload(observer.src_path(), &options);
}
observer.join();
match res {
Ok(progress) => {
let op = match progress.kind() {
FileOp::Copy => "copied",
FileOp::Cut => "moved",
};
let size_str = format::file_size_to_string(progress.processed());
let msg = format!(
"successfully {} {} items ({})",
op,
progress.len(),
size_str
);
context.push_msg(msg);
}
Err(e) => {
let msg = format!("{}", e);
context.push_msg(msg);
}
}
}
|