fix the flow for display passkey

This commit is contained in:
Badr
2025-11-12 09:04:33 +01:00
parent 08b6867fb3
commit e9beca520b
3 changed files with 37 additions and 22 deletions

View File

@@ -165,17 +165,14 @@ pub async fn display_pin_code(request: DisplayPinCode, agent: AuthAgent) -> ReqR
}
pub async fn display_passkey(request: DisplayPasskey, agent: AuthAgent) -> ReqResult<()> {
agent
.event_sender
.send(Event::RequestDisplayPasskey(
crate::requests::display_passkey::DisplayPasskey::new(
request.adapter,
request.device,
request.passkey,
request.entered.to_string(),
),
))
.unwrap();
let _ = agent.event_sender.send(Event::RequestDisplayPasskey(
crate::requests::display_passkey::DisplayPasskey::new(
request.adapter,
request.device,
request.passkey,
request.entered,
),
));
tokio::select! {
_ = agent.rx_display_passkey.recv() => {
@@ -185,5 +182,10 @@ pub async fn display_passkey(request: DisplayPasskey, agent: AuthAgent) -> ReqRe
_ = agent.rx_cancel.recv() => {
Err(ReqError::Canceled)
}
_ = request.cancel => {
let _ = agent.event_sender.send(Event::DisplayPasskeySeen);
Err(ReqError::Canceled)
}
}
}

View File

@@ -98,7 +98,7 @@ async fn main() -> AppResult<()> {
Event::RequestDisplayPasskey(request) => {
if let Some(req) = &mut app.requests.display_passkey {
req.entered.push_str(&request.entered);
req.entered = request.entered;
} else {
app.requests.init_display_passkey(request);
app.focused_block = bluetui::app::FocusedBlock::DisplayPasskey;

View File

@@ -2,7 +2,7 @@ use ratatui::{
Frame,
layout::{Constraint, Direction, Layout, Margin},
style::{Color, Style, Stylize},
text::Line,
text::{Line, Span},
widgets::{Block, BorderType, Borders, Clear, Paragraph},
};
@@ -15,11 +15,11 @@ pub struct DisplayPasskey {
pub adapter: String,
pub device: Address,
pub passkey: u32,
pub entered: String,
pub entered: u16,
}
impl DisplayPasskey {
pub fn new(adapter: String, device: Address, passkey: u32, entered: String) -> Self {
pub fn new(adapter: String, device: Address, passkey: u32, entered: u16) -> Self {
Self {
adapter,
device,
@@ -51,20 +51,33 @@ impl DisplayPasskey {
.direction(Direction::Horizontal)
.constraints([
Constraint::Fill(1),
Constraint::Max(60),
Constraint::Max(70),
Constraint::Fill(1),
])
.margin(1)
.split(block)[1];
let message = vec![
Line::from(format!("The Passkey: {}", self.passkey)),
Line::from(format!("Entered passkey for the device {} ", self.device)).centered(),
Line::from(format!("Authentication for the device {}", self.device)).centered(),
Line::from(""),
Line::from(self.entered.to_string())
.centered()
.bold()
.bg(Color::DarkGray),
Line::from(vec![
Span::from("Enter the following passkey on the remote device: "),
Span::styled(self.passkey.to_string(), Style::new().bold()),
])
.centered(),
Line::from(""),
Line::from({
match self.entered {
0 => ". - . - . - . - . - .",
1 => "* - . - . - . - . - .",
2 => "* - * - . - . - . - .",
3 => "* - * - * - . - . - .",
4 => "* - * - * - * - . - .",
5 => "* - * - * - * - * - .",
_ => "* - * - * - * - * - *",
}
})
.centered(),
];
let message = Paragraph::new(message).centered();