make Pixbuf init async

This commit is contained in:
yggverse 2024-10-29 18:41:05 +02:00
parent 66dc0ecfe8
commit 1d03e98b89

View File

@ -559,48 +559,50 @@ impl Page {
Priority::DEFAULT, Priority::DEFAULT,
0x400, // 1024 bytes per chunk, optional step for images download tracking 0x400, // 1024 bytes per chunk, optional step for images download tracking
0xA00000, // 10M bytes max to prevent memory overflow if server play with promises @TODO optional? 0xA00000, // 10M bytes max to prevent memory overflow if server play with promises @TODO optional?
move |(_, total)| { move |(_, _total)| {
println!("{total}");
// Update loading progress // Update loading progress
// description = gformat!("{total}"); // description = gformat!("{total}");
}, },
move |result| match result { move |result| match result {
Ok(memory_input_stream) => { Ok(memory_input_stream) => {
match Pixbuf::from_stream( // @TODO async Pixbuf::from_stream_async(
&memory_input_stream, &memory_input_stream,
None::<&Cancellable>, None::<&Cancellable>,
) { move |result| {
Ok(buffer) => { match result {
// Update page meta Ok(buffer) => {
meta.borrow_mut().status = Some(Status::Success); // Update page meta
meta.borrow_mut().title = Some(gformat!("Image")); meta.borrow_mut().status = Some(Status::Success);
meta.borrow_mut().title = Some(gformat!("Image"));
// Update page content // Update page content
content.set_image(&buffer); content.set_image(&buffer);
// Update window components // Update window components
action_update.activate(Some(&id)); action_update.activate(Some(&id));
}
Err(reason) => { // Pixbuf::from_stream
// Define common data
let status = Status::Failure;
let title = gformat!("Oops");
let description = gformat!("{}", reason.message());
// Update widget
content.set_status_failure(
Some(title.as_str()),
Some(description.as_str())
);
// Update meta
meta.replace(Meta {
status: Some(status),
title: Some(title),
//description: Some(description),
});
}
}
} }
Err(reason) => { // Pixbuf::from_stream );
// Define common data
let status = Status::Failure;
let title = gformat!("Oops");
let description = gformat!("{}", reason.message());
// Update widget
content.set_status_failure(
Some(title.as_str()),
Some(description.as_str())
);
// Update meta
meta.replace(Meta {
status: Some(status),
title: Some(title),
//description: Some(description),
});
}
}
}, },
Err((error, reason)) => { Err((error, reason)) => {
// Define common data // Define common data