This commit is contained in:
Erica Z 2024-11-02 11:30:00 +01:00
parent 055df38c32
commit 34bec8fdae

View file

@ -67,8 +67,12 @@ mod imp {
#[template_callback]
pub(super) async fn on_authn_validate_activated(&self) {
assert!(self.obj().authn_can_validate());
self.obj().set_authn_can_validate(false);
assert!(self.obj().authn_can_edit());
self.obj().set_authn_can_edit(false);
self.obj().set_status("Connecting...");
let api = match crate::subsonic::Client::with_password(
@ -85,10 +89,33 @@ mod imp {
}
};
match api.ping().await {
Ok(()) => {
if let Err(err) = api.ping().await {
self.obj().set_status(format!("Error: {err}"));
self.obj().set_authn_can_validate(true);
self.obj().set_authn_can_edit(true);
return;
}
self.obj().set_status("Connected");
self.save().await;
self.obj().set_authn_can_edit(false);
// FIXME: remove unwraps
let keyring = oo7::Keyring::new().await.unwrap();
let mut attributes = vec![("xdg:schema", crate::APP_ID.to_string())];
// clear previous passwords
keyring.delete(&attributes).await.unwrap();
attributes.push(("server-url", self.obj().server_url()));
attributes.push(("username", self.obj().username()));
keyring
.create_item(
"Audrey Subsonic password",
&attributes,
self.obj().password(),
true,
)
.await
.unwrap();
// please REMOVEME once we've killed vala
fn get_random_salt(length: usize) -> String {
@ -115,43 +142,10 @@ mod imp {
&new_token,
&new_salt,
);
self.obj().set_authn_can_edit(true);
self.obj().emit_by_name::<()>("connected", &[&vala_api]);
}
Err(err) => {
self.obj().set_status(format!("Error: {err}"));
self.obj().set_authn_can_validate(true);
}
}
self.obj().set_authn_can_edit(true);
}
async fn save(&self) {
assert!(self.obj().authn_can_edit());
self.obj().set_authn_can_edit(false);
async fn wrapper(self_: &Setup) -> Result<(), impl std::error::Error> {
let keyring = oo7::Keyring::new().await?;
let mut attributes = vec![("xdg:schema", crate::APP_ID.to_string())];
// clear previous passwords
keyring.delete(&attributes).await?;
attributes.push(("server-url", self_.obj().server_url()));
attributes.push(("username", self_.obj().username()));
keyring
.create_item(
"Audrey Subsonic password",
&attributes,
self_.obj().password(),
true,
)
.await
}
let result = wrapper(self).await;
self.obj().set_authn_can_edit(true);
result.unwrap(); // FIXME
}
}
}
@ -170,8 +164,11 @@ impl Setup {
#[weak(rename_to = self_)]
self,
async move {
assert!(self_.authn_can_edit())
self_.set_server_url("");
self_.set_username("");
self_.set_password("");
self_.set_authn_can_edit(false);
self_.set_authn_can_validate(false);
// TODO remove unwraps, make sure authn_can_edit is set back to true
let keyring = oo7::Keyring::new().await.unwrap();
@ -180,9 +177,6 @@ impl Setup {
if items.is_empty() {
// didn't find shit, leave all empty
self_.set_server_url("");
self_.set_username("");
self_.set_password("");
// TODO: onboarding
self_.set_authn_can_edit(true);
self_.set_authn_can_validate(true);
@ -196,6 +190,7 @@ impl Setup {
self_.set_password(String::from_utf8_lossy(&item.secret().await.unwrap()));
// first connection
self_.set_authn_can_edit(true); // act as if the user had inputted this
self_.set_authn_can_validate(true);
self_.imp().on_authn_validate_activated().await;
}