async registration working

This commit is contained in:
filipriec
2025-04-18 22:36:30 +02:00
parent 420ce71fb2
commit 8d1adccec6
3 changed files with 116 additions and 5 deletions

View File

@@ -22,6 +22,7 @@ use crate::ui::handlers::context::DialogPurpose;
use crate::tui::terminal::{EventReader, TerminalCore};
use crate::ui::handlers::render::render_ui;
use crate::tui::functions::common::login::LoginResult;
use crate::tui::functions::common::register::RegisterResult;
use std::time::Instant;
use anyhow::{Context, Result};
use crossterm::cursor::SetCursorStyle;
@@ -39,7 +40,12 @@ pub async fn run_ui() -> Result<()> {
// --- Channel for Login Results ---
let (login_result_sender, mut login_result_receiver) =
mpsc::channel::<LoginResult>(1);
let mut event_handler = EventHandler::new(login_result_sender.clone()).await.context("Failed to create event handler")?;
let (register_result_sender, mut register_result_receiver) =
mpsc::channel::<RegisterResult>(1);
let mut event_handler = EventHandler::new(
login_result_sender.clone(),
register_result_sender.clone(),
).await.context("Failed to create event handler")?;
let event_reader = EventReader::new();
let mut auth_state = AuthState::default();
@@ -241,6 +247,52 @@ pub async fn run_ui() -> Result<()> {
}
}
// --- Check for Register Results from Channel ---
match register_result_receiver.try_recv() {
Ok(register_result) => {
// A result arrived from the register task!
match register_result {
RegisterResult::Success(response) => {
// Update Dialog
let success_message = format!(
"Registration Successful!\n\nUser ID: {}\nUsername: {}\nEmail: {}\nRole: {}",
response.id, response.username, response.email, response.role
);
app_state.update_dialog_content( // Update loading dialog
&success_message,
vec!["OK".to_string()], // Simple OK for now
DialogPurpose::RegisterSuccess,
);
info!(message = %success_message, "Registration successful");
}
RegisterResult::Failure(err_msg) => {
app_state.update_dialog_content( // Update loading dialog
&err_msg,
vec!["OK".to_string()],
DialogPurpose::RegisterFailed,
);
register_state.error_message = Some(err_msg.clone()); // Keep error message
error!(error = %err_msg, "Registration failed");
}
RegisterResult::ConnectionError(err_msg) => {
app_state.update_dialog_content( // Update loading dialog
&err_msg, // Show connection error
vec!["OK".to_string()],
DialogPurpose::RegisterFailed, // Still a failure from user perspective
);
register_state.error_message = Some(err_msg.clone());
error!(error = %err_msg, "Registration connection error");
}
}
register_state.set_has_unsaved_changes(false); // Clear unsaved changes flag after processing
needs_redraw = true; // Set flag: Register result processed, UI state (dialog) changed
}
Err(mpsc::error::TryRecvError::Empty) => { /* No message waiting */ }
Err(mpsc::error::TryRecvError::Disconnected) => {
error!("Register result channel disconnected unexpectedly.");
}
}
// --- Centralized Consequence Handling ---
let mut should_exit = false;
match event_outcome_result {