Compare commits

...

2 commits

Author SHA1 Message Date
jane400
e041349ee9 feat: paket: welcome splash 2024-09-19 22:30:09 +02:00
jane400
ceb3764a20 fix: paket: more space for tracking search entry 2024-09-19 22:00:17 +02:00
2 changed files with 70 additions and 9 deletions

View file

@ -23,6 +23,7 @@ static KEYRING: OnceLock<oo7::Keyring> = OnceLock::new();
pub enum LoginInput { pub enum LoginInput {
LogOut, LogOut,
NeedsLogin, NeedsLogin,
ConsentToLogin,
NeedsRefresh, NeedsRefresh,
ReceivedAuthCode(String), ReceivedAuthCode(String),
BreakWorld, BreakWorld,
@ -30,6 +31,7 @@ pub enum LoginInput {
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum LoginState { pub enum LoginState {
Beginning,
InFlow, InFlow,
Offline, Offline,
} }
@ -90,17 +92,73 @@ impl AsyncComponent for Login {
view! { view! {
#[root] #[root]
adw::Bin { adw::Bin {
#[wrap(Some)]
set_child = &adw::ToolbarView {
add_top_bar = &adw::HeaderBar {},
#[wrap(Some)]
set_content = &adw::ViewStack {
#[name = "page_beginning"]
add = &adw::Bin {
#[wrap(Some)]
set_child = &adw::StatusPage {
set_title: "Welcome to Paket!",
#[wrap(Some)]
set_child = &adw::Clamp {
set_maximum_size: 260,
#[wrap(Some)]
set_child = &gtk::Button {
add_css_class: relm4::css::SUGGESTED_ACTION,
add_css_class: relm4::css::PILL,
set_label: "Log In",
connect_clicked => LoginInput::ConsentToLogin,
},
},
}
},
#[name = "page_webview"]
add = &adw::Bin {
#[wrap(Some)]
set_child = &adw::Clamp {
#[wrap(Some)]
set_child = &adw::Bin {
add_css_class: relm4::css::CARD,
set_margin_all: 12,
#[wrap(Some)] #[wrap(Some)]
#[name = "webview"] #[name = "webview"]
set_child = &WebView::builder().web_context(&webcontext).build() { set_child = &WebView::builder().web_context(&webcontext).build() {
#[track(model.changed(Self::state()))] set_margin_all: 12,
set_visible: model.state == LoginState::InFlow, // TODO: make webkitview rounded
#[track(model.changed_state() && model.state == LoginState::InFlow)] #[track(model.changed_state() && model.state == LoginState::InFlow)]
load_request?: &model.construct_request_uri(), load_request?: &model.construct_request_uri(),
} }
} }
},
},
#[name = "page_offline"]
add = &adw::Bin {
},
#[track(model.changed_state())]
set_visible_child: {
match model.state {
LoginState::Beginning => page_beginning.widget_ref(),
LoginState::Offline => page_offline.widget_ref(),
LoginState::InFlow => page_webview.widget_ref(),
}
}
},
},
}
} }
async fn init( async fn init(
@ -258,8 +316,12 @@ impl AsyncComponent for Login {
self.flow_model.replace(None); self.flow_model.replace(None);
} }
LoginInput::NeedsLogin => { LoginInput::NeedsLogin => {
self.set_state(LoginState::InFlow); self.set_state(LoginState::Beginning);
sender.output(LoginOutput::RequiresLogin).unwrap(); sender.output(LoginOutput::RequiresLogin).unwrap();
}
LoginInput::ConsentToLogin => {
sender.output(LoginOutput::RequiresLogin).unwrap();
self.set_state(LoginState::InFlow);
self.flow_model.replace(Some(LoginFlowModel { self.flow_model.replace(Some(LoginFlowModel {
code_verifier: CodeVerfier::new(), code_verifier: CodeVerfier::new(),
nonce: create_nonce(), nonce: create_nonce(),

View file

@ -59,7 +59,6 @@ impl Component for TrackingView {
set_child = &gtk::Box { set_child = &gtk::Box {
set_orientation: gtk::Orientation::Horizontal, set_orientation: gtk::Orientation::Horizontal,
set_margin_all: 2, set_margin_all: 2,
set_halign: gtk::Align::Center,
add_css_class: relm4::css::TOOLBAR, add_css_class: relm4::css::TOOLBAR,