draft data chunks format

This commit is contained in:
yggverse 2025-01-22 08:47:32 +02:00
parent a5958bc36a
commit a31afe2de4

View File

@ -3,14 +3,16 @@ mod feature;
mod subject; mod subject;
use super::Page; use super::Page;
use crate::tool::format_bytes;
use adw::TabPage; use adw::TabPage;
use driver::Driver; use driver::Driver;
use feature::Feature; use feature::Feature;
use gtk::{ use gtk::{
gio::Cancellable, gio::Cancellable,
glib::{Uri, UriFlags}, glib::{Uri, UriFlags},
prelude::{CancellableExt, EditableExt, EntryExt}, prelude::{CancellableExt, EditableExt, EntryExt, WidgetExt},
}; };
use plurify::ns as plural;
use std::{cell::Cell, rc::Rc}; use std::{cell::Cell, rc::Rc};
use subject::Subject; use subject::Subject;
@ -80,33 +82,54 @@ impl Client {
lookup(request, self.cancellable(), { lookup(request, self.cancellable(), {
let driver = self.driver.clone(); let driver = self.driver.clone();
let subject = self.subject.clone(); let subject = self.subject.clone();
move |feature, cancellable, result| match result { move |feature, cancellable, result| {
// route by scheme match result {
Ok(uri) => match uri.scheme().as_str() { // route by scheme
"gemini" => driver.gemini.handle(uri, feature, cancellable), Ok(uri) => match uri.scheme().as_str() {
"titan" => subject.page.input.set_new_titan(|_data, _label| todo!()), "gemini" => driver.gemini.handle(uri, feature, cancellable),
scheme => { "titan" => subject.page.input.set_new_titan(|data, label| {
// no scheme match driver, complete with failure message // init data to send
let status = subject.page.content.to_status_failure(); const CHUNK: usize = 0x400;
status let bytes_sent = 0;
.set_description(Some(&format!("Scheme `{scheme}` yet not supported"))); let bytes_total = data.len();
subject.page.title.replace(status.title());
subject // send by chunks for large content size
.page if bytes_total > CHUNK {
.navigation label.set_label(&format!(
.request "sent {}/{} {}",
.widget format_bytes(bytes_sent),
.entry format_bytes(bytes_total),
.set_progress_fraction(0.0); plural(bytes_sent, &["byte", "bytes", "bytes"])
subject.tab_page.set_loading(false); ));
} } else {
}, label.set_visible(false);
// begin redirection to new address suggested }
Err(uri) => subject todo!()
.page }),
.tab_action scheme => {
.load // no scheme match driver, complete with failure message
.activate(Some(&uri.to_string()), false), let status = subject.page.content.to_status_failure();
status.set_description(Some(&format!(
"Scheme `{scheme}` yet not supported"
)));
subject.page.title.replace(status.title());
subject
.page
.navigation
.request
.widget
.entry
.set_progress_fraction(0.0);
subject.tab_page.set_loading(false);
}
},
// begin redirection to new address suggested
Err(uri) => subject
.page
.tab_action
.load
.activate(Some(&uri.to_string()), false),
}
} }
}) })
} }