fixes
This commit is contained in:
@@ -33,6 +33,9 @@ pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
||||
);
|
||||
f.render_widget(header, message_chunks[0]);
|
||||
|
||||
// Ширина области сообщений (без рамок)
|
||||
let content_width = message_chunks[1].width.saturating_sub(2) as usize;
|
||||
|
||||
// Messages с группировкой по дате и отправителю
|
||||
let mut lines: Vec<Line> = Vec::new();
|
||||
let mut last_day: Option<i64> = None;
|
||||
@@ -45,13 +48,13 @@ pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
||||
if last_day.is_some() {
|
||||
lines.push(Line::from("")); // Пустая строка перед разделителем
|
||||
}
|
||||
// Добавляем разделитель даты
|
||||
// Добавляем разделитель даты по центру
|
||||
let date_str = format_date(msg.date);
|
||||
let date_line = format!("──────── {} ────────", date_str);
|
||||
let padding = content_width.saturating_sub(date_line.chars().count()) / 2;
|
||||
lines.push(Line::from(vec![
|
||||
Span::styled(
|
||||
format!("──────── {} ────────", date_str),
|
||||
Style::default().fg(Color::DarkGray),
|
||||
),
|
||||
Span::raw(" ".repeat(padding)),
|
||||
Span::styled(date_line, Style::default().fg(Color::Gray)),
|
||||
]));
|
||||
lines.push(Line::from(""));
|
||||
last_day = Some(msg_day);
|
||||
@@ -76,20 +79,28 @@ pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
||||
}
|
||||
|
||||
let sender_style = if msg.is_outgoing {
|
||||
Style::default()
|
||||
.fg(Color::Green)
|
||||
.add_modifier(Modifier::BOLD)
|
||||
Style::default().fg(Color::Green).add_modifier(Modifier::BOLD)
|
||||
} else {
|
||||
Style::default()
|
||||
.fg(Color::Cyan)
|
||||
.add_modifier(Modifier::BOLD)
|
||||
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)
|
||||
};
|
||||
|
||||
// Заголовок отправителя
|
||||
lines.push(Line::from(vec![
|
||||
Span::styled(format!("{} ", sender_name), sender_style),
|
||||
Span::styled("────────────────", Style::default().fg(Color::DarkGray)),
|
||||
]));
|
||||
if msg.is_outgoing {
|
||||
// Заголовок "Вы" справа
|
||||
let header_text = format!("{} ────────────────", sender_name);
|
||||
let header_len = header_text.chars().count();
|
||||
let padding = content_width.saturating_sub(header_len + 1);
|
||||
lines.push(Line::from(vec![
|
||||
Span::raw(" ".repeat(padding)),
|
||||
Span::styled(format!("{} ", sender_name), sender_style),
|
||||
Span::styled("────────────────", Style::default().fg(Color::Gray)),
|
||||
]));
|
||||
} else {
|
||||
// Заголовок входящих слева
|
||||
lines.push(Line::from(vec![
|
||||
Span::styled(format!("{} ", sender_name), sender_style),
|
||||
Span::styled("────────────────", Style::default().fg(Color::Gray)),
|
||||
]));
|
||||
}
|
||||
|
||||
last_sender = Some(current_sender);
|
||||
}
|
||||
@@ -97,24 +108,33 @@ pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
||||
// Форматируем время (HH:MM)
|
||||
let time = format_timestamp(msg.date);
|
||||
|
||||
let read_mark = if msg.is_outgoing {
|
||||
if msg.is_read { " ✓✓" } else { " ✓" }
|
||||
} else {
|
||||
""
|
||||
};
|
||||
if msg.is_outgoing {
|
||||
// Исходящие: справа, формат "текст (HH:MM ✓✓)"
|
||||
let read_mark = if msg.is_read { "✓✓" } else { "✓" };
|
||||
let time_mark = format!("({} {})", time, read_mark);
|
||||
let msg_text = format!("{} {}", msg.content, time_mark);
|
||||
let msg_len = msg_text.chars().count();
|
||||
let padding = content_width.saturating_sub(msg_len + 1);
|
||||
|
||||
// Сообщение с временем
|
||||
lines.push(Line::from(vec![
|
||||
Span::styled(format!(" [{}]", time), Style::default().fg(Color::DarkGray)),
|
||||
Span::raw(format!(" {}", msg.content)),
|
||||
Span::styled(read_mark.to_string(), Style::default().fg(Color::DarkGray)),
|
||||
]));
|
||||
lines.push(Line::from(vec![
|
||||
Span::raw(" ".repeat(padding)),
|
||||
Span::styled(msg.content.clone(), Style::default().fg(Color::Green)),
|
||||
Span::styled(format!(" {}", time_mark), Style::default().fg(Color::Gray)),
|
||||
]));
|
||||
} else {
|
||||
// Входящие: слева, формат "(HH:MM) текст"
|
||||
let time_str = format!("({})", time);
|
||||
lines.push(Line::from(vec![
|
||||
Span::styled(format!(" {}", time_str), Style::default().fg(Color::Gray)),
|
||||
Span::raw(format!(" {}", msg.content)),
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
||||
if lines.is_empty() {
|
||||
lines.push(Line::from(Span::styled(
|
||||
"Нет сообщений",
|
||||
Style::default().fg(Color::DarkGray),
|
||||
Style::default().fg(Color::Gray),
|
||||
)));
|
||||
}
|
||||
|
||||
@@ -142,7 +162,7 @@ pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
||||
format!("> {}", app.message_input)
|
||||
};
|
||||
let input_style = if app.message_input.is_empty() {
|
||||
Style::default().fg(Color::DarkGray)
|
||||
Style::default().fg(Color::Gray)
|
||||
} else {
|
||||
Style::default().fg(Color::Yellow)
|
||||
};
|
||||
@@ -153,7 +173,7 @@ pub fn render(f: &mut Frame, area: Rect, app: &App) {
|
||||
} else {
|
||||
let empty = Paragraph::new("Выберите чат")
|
||||
.block(Block::default().borders(Borders::ALL))
|
||||
.style(Style::default().fg(Color::DarkGray))
|
||||
.style(Style::default().fg(Color::Gray))
|
||||
.alignment(Alignment::Center);
|
||||
f.render_widget(empty, area);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user