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,16 +82,36 @@ 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| {
match result {
// route by scheme // route by scheme
Ok(uri) => match uri.scheme().as_str() { Ok(uri) => match uri.scheme().as_str() {
"gemini" => driver.gemini.handle(uri, feature, cancellable), "gemini" => driver.gemini.handle(uri, feature, cancellable),
"titan" => subject.page.input.set_new_titan(|_data, _label| todo!()), "titan" => subject.page.input.set_new_titan(|data, label| {
// init data to send
const CHUNK: usize = 0x400;
let bytes_sent = 0;
let bytes_total = data.len();
// send by chunks for large content size
if bytes_total > CHUNK {
label.set_label(&format!(
"sent {}/{} {}",
format_bytes(bytes_sent),
format_bytes(bytes_total),
plural(bytes_sent, &["byte", "bytes", "bytes"])
));
} else {
label.set_visible(false);
}
todo!()
}),
scheme => { scheme => {
// no scheme match driver, complete with failure message // no scheme match driver, complete with failure message
let status = subject.page.content.to_status_failure(); let status = subject.page.content.to_status_failure();
status status.set_description(Some(&format!(
.set_description(Some(&format!("Scheme `{scheme}` yet not supported"))); "Scheme `{scheme}` yet not supported"
)));
subject.page.title.replace(status.title()); subject.page.title.replace(status.title());
subject subject
.page .page
@ -108,6 +130,7 @@ impl Client {
.load .load
.activate(Some(&uri.to_string()), false), .activate(Some(&uri.to_string()), false),
} }
}
}) })
} }