Connected Devices: Added sync feature

This commit is contained in:
Ultradesu
2026-07-24 00:54:27 +03:00
parent 7fe6ddfe05
commit adbb76b031
13 changed files with 3095 additions and 16 deletions
+61
View File
@@ -36,6 +36,15 @@ pub fn draw(frame: &mut Frame, state: &AppState) {
Some(Popup::LogDetail(entry)) => draw_log_detail(frame, entry),
Some(Popup::FedInput { field, input }) => draw_fed_input(frame, field.title(), input),
Some(Popup::FedText { title, text }) => draw_fed_text(frame, title, text),
Some(Popup::DevicePairing {
device_id,
name,
client_version,
..
}) => draw_device_pairing(frame, device_id, name, client_version),
Some(Popup::ConfirmDeviceRevoke { device_id, name }) => {
draw_device_revoke(frame, device_id, name)
}
None => {}
}
}
@@ -127,6 +136,58 @@ fn draw_fed_text(frame: &mut Frame, title: &str, text: &str) {
);
}
fn draw_device_pairing(frame: &mut Frame, device_id: &str, name: &str, client_version: &str) {
let area = centered(frame.area(), 64, 8);
let block = Block::bordered()
.title(" Pair device ")
.title_style(theme::header())
.border_style(theme::accent());
let inner = block.inner(area);
frame.render_widget(Clear, area);
frame.render_widget(block, area);
let lines = vec![
Line::from(vec![
Span::styled("Name ", theme::dim()),
Span::raw(name.to_string()),
]),
Line::from(vec![
Span::styled("Version ", theme::dim()),
Span::raw(client_version.to_string()),
]),
Line::from(vec![
Span::styled("Device ", theme::dim()),
Span::raw(device_id.chars().take(24).collect::<String>()),
]),
Line::default(),
Line::styled("enter/y accept · n/esc deny", theme::dim()),
];
frame.render_widget(Paragraph::new(lines), inner);
}
fn draw_device_revoke(frame: &mut Frame, device_id: &str, name: &str) {
let area = centered(frame.area(), 64, 7);
let block = Block::bordered()
.title(" Revoke device ")
.title_style(theme::header())
.border_style(theme::accent());
let inner = block.inner(area);
frame.render_widget(Clear, area);
frame.render_widget(block, area);
let lines = vec![
Line::from(vec![
Span::styled("Device ", theme::dim()),
Span::raw(name.to_string()),
]),
Line::from(vec![
Span::styled("ID ", theme::dim()),
Span::raw(device_id.chars().take(24).collect::<String>()),
]),
Line::default(),
Line::styled("enter/y revoke · n/esc cancel", theme::dim()),
];
frame.render_widget(Paragraph::new(lines), inner);
}
/// Metadata edit form: one bordered input per field, the focused field gets
/// the accent border and a cursor block.
fn draw_edit(