Skip to content

Commit 8eb4309

Browse files
committed
Save RoomInfo in TextPrinter
1 parent b4339cf commit 8eb4309

File tree

3 files changed

+76
-27
lines changed

3 files changed

+76
-27
lines changed

src/message/html.rs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ impl Table {
191191
if let Some(caption) = &self.caption {
192192
let subw = width.saturating_sub(6);
193193
let mut printer =
194-
TextPrinter::new(subw, style, true, settings).align(Alignment::Center);
195-
caption.print(&mut printer, style, info);
194+
TextPrinter::new(subw, style, true, settings, info).align(Alignment::Center);
195+
caption.print(&mut printer, style);
196196

197197
for mut line in printer.finish().lines {
198198
line.spans.insert(0, Span::styled(" ", style));
@@ -312,8 +312,8 @@ impl StyleTreeNode {
312312
settings: &'a ApplicationSettings,
313313
info: &'a RoomInfo,
314314
) -> Text<'a> {
315-
let mut printer = TextPrinter::new(width, style, true, settings);
316-
self.print(&mut printer, style, info);
315+
let mut printer = TextPrinter::new(width, style, true, settings, info);
316+
self.print(&mut printer, style);
317317
printer.finish()
318318
}
319319

@@ -369,21 +369,21 @@ impl StyleTreeNode {
369369
}
370370
}
371371

372-
pub fn print<'a>(&'a self, printer: &mut TextPrinter<'a>, style: Style, info: &'a RoomInfo) {
372+
pub fn print<'a>(&'a self, printer: &mut TextPrinter<'a>, style: Style) {
373373
let width = printer.width();
374374

375375
match self {
376376
StyleTreeNode::Anchor(child, c, _) => {
377377
let bold = style.add_modifier(StyleModifier::BOLD);
378-
child.print(printer, bold, info);
378+
child.print(printer, bold);
379379

380380
let link = format!("[{c}]");
381381
let span = Span::styled(link, style);
382382
printer.push_span_nobreak(span);
383383
},
384384
StyleTreeNode::Blockquote(child) => {
385385
let mut subp = printer.sub(3);
386-
child.print(&mut subp, style, info);
386+
child.print(&mut subp, style);
387387

388388
for mut line in subp.finish() {
389389
line.spans.insert(0, Span::styled(" ", style));
@@ -394,7 +394,7 @@ impl StyleTreeNode {
394394
}
395395
},
396396
StyleTreeNode::Code(child, _) => {
397-
child.print(printer, style, info);
397+
child.print(printer, style);
398398
},
399399
StyleTreeNode::Header(child, level) => {
400400
let style = style.add_modifier(StyleModifier::BOLD);
@@ -404,7 +404,7 @@ impl StyleTreeNode {
404404
}
405405

406406
printer.push_str(" ", style);
407-
child.print(printer, style, info);
407+
child.print(printer, style);
408408
},
409409
StyleTreeNode::Image(None) => {},
410410
StyleTreeNode::Image(Some(alt)) => {
@@ -420,7 +420,7 @@ impl StyleTreeNode {
420420
for child in children {
421421
let mut subp = printer.sub(liw);
422422
let mut bullet = bullets.next();
423-
child.print(&mut subp, style, info);
423+
child.print(&mut subp, style);
424424

425425
for mut line in subp.finish() {
426426
let leading = if let Some(bullet) = bullet.take() {
@@ -436,14 +436,14 @@ impl StyleTreeNode {
436436
},
437437
StyleTreeNode::Paragraph(child) => {
438438
printer.push_break();
439-
child.print(printer, style, info);
439+
child.print(printer, style);
440440
printer.commit();
441441
},
442442
StyleTreeNode::Pre(child) => {
443443
let mut subp = printer.sub(2).literal(true);
444444
let subw = subp.width();
445445

446-
child.print(&mut subp, style, info);
446+
child.print(&mut subp, style);
447447

448448
printer.commit();
449449
printer.push_line(
@@ -478,7 +478,7 @@ impl StyleTreeNode {
478478
}
479479

480480
printer.push_break();
481-
child.print(printer, style, info);
481+
child.print(printer, style);
482482
printer.commit();
483483
},
484484
StyleTreeNode::Ruler => {
@@ -487,7 +487,7 @@ impl StyleTreeNode {
487487
}
488488
},
489489
StyleTreeNode::Table(table) => {
490-
let text = table.to_text(width, style, printer.settings, info);
490+
let text = table.to_text(width, style, printer.settings, printer.info);
491491
printer.push_text(text);
492492
},
493493
StyleTreeNode::Break => {
@@ -497,15 +497,15 @@ impl StyleTreeNode {
497497
printer.push_str(s.as_ref(), style);
498498
},
499499

500-
StyleTreeNode::Style(child, patch) => child.print(printer, style.patch(*patch), info),
500+
StyleTreeNode::Style(child, patch) => child.print(printer, style.patch(*patch)),
501501
StyleTreeNode::Sequence(children) => {
502502
for child in children {
503-
child.print(printer, style, info);
503+
child.print(printer, style);
504504
}
505505
},
506506

507507
StyleTreeNode::UserId(user_id, _) => {
508-
let span: Span<'a> = printer.settings().get_user_span(user_id, info);
508+
let span: Span<'a> = printer.settings().get_user_span(user_id, printer.info);
509509
let style = span.style;
510510

511511
let Cow::Borrowed(name) = span.content else {
@@ -553,10 +553,10 @@ impl StyleTree {
553553
settings: &'a ApplicationSettings,
554554
info: &'a RoomInfo,
555555
) -> Text<'a> {
556-
let mut printer = TextPrinter::new(width, style, hide_reply, settings);
556+
let mut printer = TextPrinter::new(width, style, hide_reply, settings, info);
557557

558558
for child in self.children.iter() {
559-
child.print(&mut printer, style, info);
559+
child.print(&mut printer, style);
560560
}
561561

562562
printer.finish()

src/message/mod.rs

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@ impl MessageColumns {
615615

616616
struct MessageFormatter<'a> {
617617
settings: &'a ApplicationSettings,
618+
info: &'a RoomInfo,
618619

619620
/// How many columns to print.
620621
cols: MessageColumns,
@@ -767,7 +768,8 @@ impl<'a> MessageFormatter<'a> {
767768
}
768769

769770
fn push_reactions(&mut self, counts: Vec<(&'a str, usize)>, style: Style, text: &mut Text<'a>) {
770-
let mut emojis = printer::TextPrinter::new(self.width(), style, false, self.settings);
771+
let mut emojis =
772+
printer::TextPrinter::new(self.width(), style, false, self.settings, self.info);
771773
let mut reactions = 0;
772774

773775
for (key, count) in counts {
@@ -816,7 +818,8 @@ impl<'a> MessageFormatter<'a> {
816818
let plural = len != 1;
817819
let style = Style::default();
818820
let mut threaded =
819-
printer::TextPrinter::new(self.width(), style, false, self.settings).literal(true);
821+
printer::TextPrinter::new(self.width(), style, false, self.settings, self.info)
822+
.literal(true);
820823
let len = Span::styled(len.to_string(), style.add_modifier(StyleModifier::BOLD));
821824
threaded.push_str(" \u{2937} ", style);
822825
threaded.push_span_nobreak(len);
@@ -951,31 +954,71 @@ impl Message {
951954
.map(|user_id| user_id.to_owned())
952955
.collect();
953956

954-
MessageFormatter { settings, cols, orig, fill, user, date, time, read }
957+
MessageFormatter {
958+
settings,
959+
cols,
960+
orig,
961+
fill,
962+
user,
963+
date,
964+
time,
965+
read,
966+
info,
967+
}
955968
} else if user_gutter + TIME_GUTTER + MIN_MSG_LEN <= width {
956969
let cols = MessageColumns::Three;
957970
let fill = width - user_gutter - TIME_GUTTER;
958971
let user = self.show_sender(prev, true, info, settings);
959972
let time = self.timestamp.show_time();
960973
let read = Vec::new();
961974

962-
MessageFormatter { settings, cols, orig, fill, user, date, time, read }
975+
MessageFormatter {
976+
settings,
977+
cols,
978+
orig,
979+
fill,
980+
user,
981+
date,
982+
time,
983+
read,
984+
info,
985+
}
963986
} else if user_gutter + MIN_MSG_LEN <= width {
964987
let cols = MessageColumns::Two;
965988
let fill = width - user_gutter;
966989
let user = self.show_sender(prev, true, info, settings);
967990
let time = None;
968991
let read = Vec::new();
969992

970-
MessageFormatter { settings, cols, orig, fill, user, date, time, read }
993+
MessageFormatter {
994+
settings,
995+
cols,
996+
orig,
997+
fill,
998+
user,
999+
date,
1000+
time,
1001+
read,
1002+
info,
1003+
}
9711004
} else {
9721005
let cols = MessageColumns::One;
9731006
let fill = width.saturating_sub(2);
9741007
let user = self.show_sender(prev, false, info, settings);
9751008
let time = None;
9761009
let read = Vec::new();
9771010

978-
MessageFormatter { settings, cols, orig, fill, user, date, time, read }
1011+
MessageFormatter {
1012+
settings,
1013+
cols,
1014+
orig,
1015+
fill,
1016+
user,
1017+
date,
1018+
time,
1019+
read,
1020+
info,
1021+
}
9791022
}
9801023
}
9811024

src/message/printer.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use ratatui::text::{Line, Span, Text};
1111
use unicode_segmentation::UnicodeSegmentation;
1212
use unicode_width::UnicodeWidthStr;
1313

14+
use crate::base::RoomInfo;
1415
use crate::config::{ApplicationSettings, TunableValues};
1516
use crate::util::{
1617
replace_emojis_in_line,
@@ -33,6 +34,7 @@ pub struct TextPrinter<'a> {
3334
literal: bool,
3435

3536
pub(super) settings: &'a ApplicationSettings,
37+
pub(super) info: &'a RoomInfo,
3638
}
3739

3840
impl<'a> TextPrinter<'a> {
@@ -42,6 +44,7 @@ impl<'a> TextPrinter<'a> {
4244
base_style: Style,
4345
hide_reply: bool,
4446
settings: &'a ApplicationSettings,
47+
info: &'a RoomInfo,
4548
) -> Self {
4649
TextPrinter {
4750
text: Text::default(),
@@ -54,6 +57,7 @@ impl<'a> TextPrinter<'a> {
5457
curr_width: 0,
5558
literal: false,
5659
settings,
60+
info,
5761
}
5862
}
5963

@@ -105,6 +109,7 @@ impl<'a> TextPrinter<'a> {
105109
curr_width: 0,
106110
literal: self.literal,
107111
settings: self.settings,
112+
info: self.info,
108113
}
109114
}
110115

@@ -303,12 +308,13 @@ impl<'a> TextPrinter<'a> {
303308
#[cfg(test)]
304309
pub mod tests {
305310
use super::*;
306-
use crate::tests::mock_settings;
311+
use crate::tests::{mock_room, mock_settings};
307312

308313
#[test]
309314
fn test_push_nobreak() {
310315
let settings = mock_settings();
311-
let mut printer = TextPrinter::new(5, Style::default(), false, &settings);
316+
let info = mock_room();
317+
let mut printer = TextPrinter::new(5, Style::default(), false, &settings, &info);
312318
printer.push_span_nobreak("hello world".into());
313319
let text = printer.finish();
314320
assert_eq!(text.lines.len(), 1);

0 commit comments

Comments
 (0)