feat: visual improvments for advices
This commit is contained in:
parent
609fc65816
commit
0e1167adb2
2 changed files with 56 additions and 36 deletions
|
@ -1,13 +1,13 @@
|
||||||
|
use adw::{gio, glib};
|
||||||
|
use gtk::gdk;
|
||||||
use libpaket::advices::UatToken;
|
use libpaket::advices::UatToken;
|
||||||
use libpaket::LibraryError;
|
use libpaket::LibraryError;
|
||||||
use relm4::gtk;
|
use relm4::gtk;
|
||||||
use gtk::gdk;
|
|
||||||
use adw::{gio, glib};
|
|
||||||
|
|
||||||
use relm4::prelude::*;
|
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use glib::prelude::*;
|
|
||||||
use gio::prelude::*;
|
use gio::prelude::*;
|
||||||
|
use glib::prelude::*;
|
||||||
|
use relm4::prelude::*;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AppAdviceMetadata {
|
pub struct AppAdviceMetadata {
|
||||||
|
@ -42,16 +42,25 @@ impl FactoryComponent for AppAdvice {
|
||||||
add_overlay = >k::Spinner {
|
add_overlay = >k::Spinner {
|
||||||
start: (),
|
start: (),
|
||||||
set_align: gtk::Align::Center,
|
set_align: gtk::Align::Center,
|
||||||
|
|
||||||
#[track(self.changed_texture())]
|
#[track(self.changed_texture())]
|
||||||
set_visible: self.texture.is_none(),
|
set_visible: self.texture.is_none(),
|
||||||
},
|
},
|
||||||
|
|
||||||
add_overlay = >k::Label {
|
add_overlay = >k::Box {
|
||||||
set_halign: gtk::Align::Center,
|
add_css_class: relm4::css::OSD,
|
||||||
set_valign: gtk::Align::Center,
|
add_css_class: relm4::css::NUMERIC,
|
||||||
|
|
||||||
set_label: self.metadata.date.as_str(),
|
set_valign: gtk::Align::End,
|
||||||
|
set_halign: gtk::Align::End,
|
||||||
|
|
||||||
|
set_margin_all: 8,
|
||||||
|
|
||||||
|
gtk::Label {
|
||||||
|
set_margin_all: 4,
|
||||||
|
|
||||||
|
set_label: self.metadata.date.as_str(),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
#[wrap(Some)]
|
#[wrap(Some)]
|
||||||
|
@ -71,9 +80,11 @@ impl FactoryComponent for AppAdvice {
|
||||||
|
|
||||||
let advice = _self.metadata.advice.clone();
|
let advice = _self.metadata.advice.clone();
|
||||||
let uat = value.1;
|
let uat = value.1;
|
||||||
|
|
||||||
sender.oneshot_command(async move {
|
sender.oneshot_command(async move {
|
||||||
let res = libpaket::advices::AdviceClient::new().fetch_advice_image(&advice, &uat).await;
|
let res = libpaket::advices::AdviceClient::new()
|
||||||
|
.fetch_advice_image(&advice, &uat)
|
||||||
|
.await;
|
||||||
|
|
||||||
let res = match res {
|
let res = match res {
|
||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
|
@ -83,13 +94,21 @@ impl FactoryComponent for AppAdvice {
|
||||||
let file = {
|
let file = {
|
||||||
let (file, io_stream) = gio::File::new_tmp(None::<&std::path::Path>).unwrap();
|
let (file, io_stream) = gio::File::new_tmp(None::<&std::path::Path>).unwrap();
|
||||||
let output_stream = io_stream.output_stream();
|
let output_stream = io_stream.output_stream();
|
||||||
output_stream.write(res.as_slice(), None::<&gio::Cancellable>).unwrap();
|
output_stream
|
||||||
|
.write(res.as_slice(), None::<&gio::Cancellable>)
|
||||||
|
.unwrap();
|
||||||
file
|
file
|
||||||
};
|
};
|
||||||
|
|
||||||
let image = glycin::Loader::new(file).load().await.expect("Image decoding failed");
|
let image = glycin::Loader::new(file)
|
||||||
let frame = image.next_frame().await.expect("Image frame decoding failed");
|
.load()
|
||||||
|
.await
|
||||||
|
.expect("Image decoding failed");
|
||||||
|
let frame = image
|
||||||
|
.next_frame()
|
||||||
|
.await
|
||||||
|
.expect("Image frame decoding failed");
|
||||||
|
|
||||||
AppAdviceCmds::GotTexture(frame.texture())
|
AppAdviceCmds::GotTexture(frame.texture())
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -99,8 +118,7 @@ impl FactoryComponent for AppAdvice {
|
||||||
fn update_cmd(&mut self, message: Self::CommandOutput, sender: FactorySender<Self>) {
|
fn update_cmd(&mut self, message: Self::CommandOutput, sender: FactorySender<Self>) {
|
||||||
match message {
|
match message {
|
||||||
AppAdviceCmds::GotTexture(texture) => self.set_texture(Some(texture)),
|
AppAdviceCmds::GotTexture(texture) => self.set_texture(Some(texture)),
|
||||||
AppAdviceCmds::Error(err) => todo!()
|
AppAdviceCmds::Error(err) => todo!(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -77,18 +77,23 @@ impl Component for Ready {
|
||||||
set_title: "No mail notifications available."
|
set_title: "No mail notifications available."
|
||||||
},
|
},
|
||||||
#[name = "advices_page_have_some"]
|
#[name = "advices_page_have_some"]
|
||||||
add = >k::Box {
|
add = &adw::Clamp {
|
||||||
set_orientation: gtk::Orientation::Horizontal,
|
#[wrap(Some)]
|
||||||
|
set_child = >k::Box {
|
||||||
|
set_orientation: gtk::Orientation::Horizontal,
|
||||||
|
|
||||||
#[local_ref]
|
#[local_ref]
|
||||||
advices_carousel -> adw::Carousel {
|
advices_carousel -> adw::Carousel {
|
||||||
set_orientation: gtk::Orientation::Vertical,
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
adw::CarouselIndicatorDots {
|
||||||
|
#[watch]
|
||||||
|
set_carousel: Some(advices_carousel),
|
||||||
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
adw::CarouselIndicatorDots {
|
|
||||||
set_carousel: Some(advices_carousel),
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
#[track(model.changed_advices_state())]
|
#[track(model.changed_advices_state())]
|
||||||
|
@ -103,9 +108,10 @@ impl Component for Ready {
|
||||||
},
|
},
|
||||||
} -> /*page_advices: adw::ViewStackPage*/ {
|
} -> /*page_advices: adw::ViewStackPage*/ {
|
||||||
set_title: Some("Mail notification"),
|
set_title: Some("Mail notification"),
|
||||||
|
set_name: Some("page_advices"),
|
||||||
/*#[track(model.changed_have_service_advices())]
|
/*#[track(model.changed_have_service_advices())]
|
||||||
set_visible: model.have_service_advices,*/
|
set_visible: model.have_service_advices,*/
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,11 +161,11 @@ impl Component for Ready {
|
||||||
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>, _: &Self::Root) {
|
fn update(&mut self, message: Self::Input, sender: ComponentSender<Self>, _: &Self::Root) {
|
||||||
self.reset();
|
self.reset();
|
||||||
|
|
||||||
let token = self.login.clone();
|
|
||||||
match message {
|
match message {
|
||||||
ReadyInput::Activate => {
|
ReadyInput::Activate => {
|
||||||
self.set_activate(true);
|
self.set_activate(true);
|
||||||
if self.changed_activate() {
|
if self.changed_activate() {
|
||||||
|
let token = self.login.clone();
|
||||||
sender.oneshot_command(async move {
|
sender.oneshot_command(async move {
|
||||||
let token = crate::login::get_id_token(&token).await.unwrap();
|
let token = crate::login::get_id_token(&token).await.unwrap();
|
||||||
let client = libpaket::StammdatenClient::new();
|
let client = libpaket::StammdatenClient::new();
|
||||||
|
@ -171,6 +177,7 @@ impl Component for Ready {
|
||||||
self.set_activate(false);
|
self.set_activate(false);
|
||||||
}
|
}
|
||||||
ReadyInput::HaveAdvicesService => {
|
ReadyInput::HaveAdvicesService => {
|
||||||
|
let token = self.login.clone();
|
||||||
sender.oneshot_command(async move {
|
sender.oneshot_command(async move {
|
||||||
// fetching advices
|
// fetching advices
|
||||||
let dhli_token = crate::login::get_id_token(&token).await.unwrap();
|
let dhli_token = crate::login::get_id_token(&token).await.unwrap();
|
||||||
|
@ -217,7 +224,6 @@ impl Component for Ready {
|
||||||
ReadyCmds::LoggedOut => sender.input(ReadyInput::Deactivate),
|
ReadyCmds::LoggedOut => sender.input(ReadyInput::Deactivate),
|
||||||
ReadyCmds::GotCustomerDataFull(res) => match res {
|
ReadyCmds::GotCustomerDataFull(res) => match res {
|
||||||
Ok(res) => {
|
Ok(res) => {
|
||||||
let mut a_service_was_activated = false;
|
|
||||||
for service in &res.common.services {
|
for service in &res.common.services {
|
||||||
match service {
|
match service {
|
||||||
libpaket::stammdaten::CustomerDataService::Packstation => (),
|
libpaket::stammdaten::CustomerDataService::Packstation => (),
|
||||||
|
@ -226,16 +232,12 @@ impl Component for Ready {
|
||||||
libpaket::stammdaten::CustomerDataService::Digiben => (),
|
libpaket::stammdaten::CustomerDataService::Digiben => (),
|
||||||
libpaket::stammdaten::CustomerDataService::GeraetAktiviert => (),
|
libpaket::stammdaten::CustomerDataService::GeraetAktiviert => (),
|
||||||
libpaket::stammdaten::CustomerDataService::Briefankuendigung => {
|
libpaket::stammdaten::CustomerDataService::Briefankuendigung => {
|
||||||
a_service_was_activated = true;
|
|
||||||
sender.input(ReadyInput::HaveAdvicesService);
|
sender.input(ReadyInput::HaveAdvicesService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if a_service_was_activated {
|
|
||||||
sender.output(ReadyOutput::Ready).unwrap()
|
sender.output(ReadyOutput::Ready).unwrap()
|
||||||
} else {
|
|
||||||
sender.output(ReadyOutput::NoServicesEnabled).unwrap();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Err(err) => sender.output(ReadyOutput::FatalError(err)).unwrap(),
|
Err(err) => sender.output(ReadyOutput::FatalError(err)).unwrap(),
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue