mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-03-13 06:01:21 +00:00
handle undefined mime type errors with download status page, optional rename constructors from new
to build
This commit is contained in:
parent
fe5eeb04f9
commit
14159d54e1
@ -235,7 +235,7 @@ impl Page {
|
|||||||
},
|
},
|
||||||
Response::Failure(failure) => match failure {
|
Response::Failure(failure) => match failure {
|
||||||
Failure::Status { message }
|
Failure::Status { message }
|
||||||
| Failure::Mime { message }
|
|
||||||
| Failure::Error { message } => {
|
| Failure::Error { message } => {
|
||||||
// Update widget
|
// Update widget
|
||||||
let status_page = content.to_status_failure();
|
let status_page = content.to_status_failure();
|
||||||
@ -245,6 +245,18 @@ impl Page {
|
|||||||
status.replace(Status::Failure { time: now() });
|
status.replace(Status::Failure { time: now() });
|
||||||
title.replace(status_page.title());
|
title.replace(status_page.title());
|
||||||
|
|
||||||
|
// Update window
|
||||||
|
browser_action.update.activate(Some(&id));
|
||||||
|
}
|
||||||
|
Failure::Mime { base, mime, message } => {
|
||||||
|
// Update widget
|
||||||
|
let status_page = content.to_status_mime(&mime, Some((&tab_action, &base)));
|
||||||
|
status_page.set_description(Some(&message));
|
||||||
|
|
||||||
|
// Update meta
|
||||||
|
status.replace(Status::Failure { time: now() });
|
||||||
|
title.replace(status_page.title());
|
||||||
|
|
||||||
// Update window
|
// Update window
|
||||||
browser_action.update.activate(Some(&id));
|
browser_action.update.activate(Some(&id));
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,8 @@ pub fn handle(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
mime => callback(Response::Failure(Failure::Mime {
|
mime => callback(Response::Failure(Failure::Mime {
|
||||||
|
base,
|
||||||
|
mime: mime.to_string(),
|
||||||
message: format!("Content type `{mime}` yet not supported"),
|
message: format!("Content type `{mime}` yet not supported"),
|
||||||
})),
|
})),
|
||||||
} // @TODO handle `None`
|
} // @TODO handle `None`
|
||||||
|
@ -1,5 +1,19 @@
|
|||||||
|
use gtk::glib::Uri;
|
||||||
|
|
||||||
|
/// Failure type for client `Response`
|
||||||
pub enum Failure {
|
pub enum Failure {
|
||||||
Status { message: String },
|
Status {
|
||||||
Mime { message: String },
|
message: String,
|
||||||
Error { message: String },
|
},
|
||||||
|
/// This failure type provides `base` member to build Download page
|
||||||
|
/// for the constructed request [Uri](https://docs.gtk.org/glib/struct.Uri.html)
|
||||||
|
Mime {
|
||||||
|
base: Uri,
|
||||||
|
mime: String,
|
||||||
|
message: String,
|
||||||
|
},
|
||||||
|
/// Common error type
|
||||||
|
Error {
|
||||||
|
message: String,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ use adw::StatusPage;
|
|||||||
use gtk::{
|
use gtk::{
|
||||||
gdk::Paintable,
|
gdk::Paintable,
|
||||||
gio::{Cancellable, File},
|
gio::{Cancellable, File},
|
||||||
glib::{GString, Uri},
|
glib::Uri,
|
||||||
prelude::{BoxExt, IsA, WidgetExt},
|
prelude::{BoxExt, IsA, WidgetExt},
|
||||||
Box, Orientation,
|
Box, Orientation,
|
||||||
};
|
};
|
||||||
@ -77,10 +77,10 @@ impl Content {
|
|||||||
pub fn to_status_mime(
|
pub fn to_status_mime(
|
||||||
&self,
|
&self,
|
||||||
mime: &str,
|
mime: &str,
|
||||||
download: Option<(Rc<TabAction>, GString)>,
|
download: Option<(&Rc<TabAction>, &Uri)>,
|
||||||
) -> StatusPage {
|
) -> StatusPage {
|
||||||
self.clean();
|
self.clean();
|
||||||
let status = status::mime::new(mime, download);
|
let status = status::mime::build(mime, download);
|
||||||
self.g_box.append(&status);
|
self.g_box.append(&status);
|
||||||
status
|
status
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ impl Content {
|
|||||||
/// * action removes previous children component from `Self`
|
/// * action removes previous children component from `Self`
|
||||||
pub fn to_status_identity(&self) -> StatusPage {
|
pub fn to_status_identity(&self) -> StatusPage {
|
||||||
self.clean();
|
self.clean();
|
||||||
let status = status::identity::new(self.tab_action.clone());
|
let status = status::identity::build(self.tab_action.clone());
|
||||||
self.g_box.append(&status);
|
self.g_box.append(&status);
|
||||||
status
|
status
|
||||||
}
|
}
|
||||||
@ -100,7 +100,7 @@ impl Content {
|
|||||||
/// * action removes previous children component from `Self`
|
/// * action removes previous children component from `Self`
|
||||||
pub fn to_status_loading(&self, show_with_delay: Option<Duration>) -> StatusPage {
|
pub fn to_status_loading(&self, show_with_delay: Option<Duration>) -> StatusPage {
|
||||||
self.clean();
|
self.clean();
|
||||||
let status = status::loading::new(show_with_delay);
|
let status = status::loading::build(show_with_delay);
|
||||||
self.g_box.append(&status);
|
self.g_box.append(&status);
|
||||||
status
|
status
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ const DEFAULT_BUTTON_CLASS: &str = "suggested-action";
|
|||||||
|
|
||||||
/// Create new default preset for `Identity`
|
/// Create new default preset for `Identity`
|
||||||
/// [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
|
/// [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
|
||||||
pub fn new(action: Rc<Action>) -> StatusPage {
|
pub fn build(action: Rc<Action>) -> StatusPage {
|
||||||
// Init certificate selection
|
// Init certificate selection
|
||||||
let button = &Button::builder()
|
let button = &Button::builder()
|
||||||
.css_classes([DEFAULT_BUTTON_CLASS])
|
.css_classes([DEFAULT_BUTTON_CLASS])
|
||||||
|
@ -11,7 +11,7 @@ const DEFAULT_TITLE: &str = "Loading..";
|
|||||||
|
|
||||||
/// Create new default preset for loading
|
/// Create new default preset for loading
|
||||||
/// [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
|
/// [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
|
||||||
pub fn new(show_with_delay: Option<Duration>) -> StatusPage {
|
pub fn build(show_with_delay: Option<Duration>) -> StatusPage {
|
||||||
// Init spinner component
|
// Init spinner component
|
||||||
let spinner = Spinner::builder()
|
let spinner = Spinner::builder()
|
||||||
.width_request(SPINNER_SIZE)
|
.width_request(SPINNER_SIZE)
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
use super::TabAction;
|
use super::TabAction;
|
||||||
use adw::StatusPage;
|
use adw::StatusPage;
|
||||||
use gtk::{glib::GString, prelude::ButtonExt, Align, Button};
|
use gtk::{glib::Uri, prelude::ButtonExt, Align, Button};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
/// Create new default `GObject` preset for mime issue
|
/// Create new default `GObject` preset for mime issue
|
||||||
/// [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
|
/// [StatusPage](https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.StatusPage.html)
|
||||||
pub fn new(mime: &str, download: Option<(Rc<TabAction>, GString)>) -> StatusPage {
|
pub fn build(mime: &str, download: Option<(&Rc<TabAction>, &Uri)>) -> StatusPage {
|
||||||
let status_page = StatusPage::builder()
|
let status_page = StatusPage::builder()
|
||||||
.description(format!("Content type `{mime}` not supported!"))
|
.description(format!("Content type `{mime}` not supported!"))
|
||||||
.icon_name("dialog-question-symbolic")
|
.icon_name("dialog-question-symbolic")
|
||||||
@ -20,8 +20,14 @@ pub fn new(mime: &str, download: Option<(Rc<TabAction>, GString)>) -> StatusPage
|
|||||||
.tooltip_text("Download as file to open with external application")
|
.tooltip_text("Download as file to open with external application")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
button.connect_clicked(move |_| {
|
button.connect_clicked({
|
||||||
action.load.activate(Some(request.as_str()), true);
|
let action = action.clone();
|
||||||
|
let request = request.clone();
|
||||||
|
move |_| {
|
||||||
|
action
|
||||||
|
.load
|
||||||
|
.activate(Some(&format!("download:{}", request.to_string())), true);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
status_page.set_child(Some(&button));
|
status_page.set_child(Some(&button));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user