mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-09-10 14:02:15 +00:00
draft data chunks format
This commit is contained in:
parent
a5958bc36a
commit
a31afe2de4
@ -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),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user