aboutsummaryrefslogtreecommitdiffstats
path: root/src/login_modal.rs
diff options
context:
space:
mode:
authorLibravatar cel 🌸 <cel@bunny.garden>2025-03-01 09:11:52 +0000
committerLibravatar cel 🌸 <cel@bunny.garden>2025-03-01 09:11:52 +0000
commitd0e122655926504cc2a29e7239cb88fddaed9c76 (patch)
treeb35890405c1ebe70e45c5101f4400c528e0c38ef /src/login_modal.rs
parent18e907386d629966236d0b6a30501f492133d2f6 (diff)
downloadmacaw-d0e122655926504cc2a29e7239cb88fddaed9c76.tar.gz
macaw-d0e122655926504cc2a29e7239cb88fddaed9c76.tar.bz2
macaw-d0e122655926504cc2a29e7239cb88fddaed9c76.zip
feat: store user data in correct dir, or according to config
Diffstat (limited to 'src/login_modal.rs')
-rw-r--r--src/login_modal.rs86
1 files changed, 4 insertions, 82 deletions
diff --git a/src/login_modal.rs b/src/login_modal.rs
index 02d878e..5a63158 100644
--- a/src/login_modal.rs
+++ b/src/login_modal.rs
@@ -34,16 +34,16 @@ pub enum Message {
#[derive(Debug, Clone)]
pub enum Error {
- InvalidJID(String),
- DatabaseConnection,
+ InvalidJID,
}
pub enum Action {
None,
ClientCreated(Task<crate::Message>),
+ CreateClient(String, String, bool),
}
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone)]
pub struct Creds {
pub jid: String,
pub password: String,
@@ -69,85 +69,7 @@ impl LoginModal {
let jid_str = self.jid.clone();
let password = self.password.clone();
let remember_me = self.remember_me.clone();
- Action::ClientCreated(
- Task::future(async move {
- let jid: Result<JID, _> = jid_str.parse();
- match jid {
- Ok(j) => {
- let result =
- LuzHandle::new(j.clone(), password.to_string(), "macaw.db")
- .await;
- match result {
- Ok((luz_handle, receiver)) => {
- let mut tasks = Vec::new();
- tasks.push(Task::done(crate::Message::ClientCreated(
- Client {
- client: luz_handle,
- jid: j,
- connection_status: Presence::Offline(
- Offline::default(),
- ),
- },
- )));
- let stream = ReceiverStream::new(receiver);
- let stream =
- stream.map(|message| crate::Message::Luz(message));
- tasks.push(Task::stream(stream));
-
- if remember_me {
- let entry = Entry::new("macaw", "macaw");
- match entry {
- Ok(e) => {
- let creds = Creds {
- jid: jid_str,
- password,
- };
- let creds = toml::to_string(&creds);
- match creds {
- Ok(c) => {
- let result = e.set_password(&c);
- if let Err(e) = result {
- tasks.push(Task::done(crate::Message::Error(
- crate::Error::CredentialsSave(e.into()),
- )));
- }
- }
- Err(e) => tasks.push(Task::done(
- crate::Message::Error(
- crate::Error::CredentialsSave(
- e.into(),
- ),
- ),
- )),
- }
- }
- Err(e) => {
- tasks.push(Task::done(crate::Message::Error(
- crate::Error::CredentialsSave(e.into()),
- )))
- }
- }
- }
- tasks
- }
- Err(_e) => {
- tracing::error!("error (database probably)");
- return vec![Task::done(crate::Message::LoginModal(
- Message::Error(Error::DatabaseConnection),
- ))];
- }
- }
- }
- Err(_) => {
- tracing::error!("parsing jid");
- return vec![Task::done(crate::Message::LoginModal(
- Message::Error(Error::InvalidJID(jid_str.to_string())),
- ))];
- }
- }
- })
- .then(|tasks| Task::batch(tasks)),
- )
+ Action::CreateClient(jid_str, password, remember_me)
}
Message::Error(error) => {
self.error = Some(error);