Update toss
This commit is contained in:
parent
32bb9898dc
commit
2d1c953250
7 changed files with 34 additions and 33 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -1248,7 +1248,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toss"
|
name = "toss"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/Garmelon/toss.git?rev=464aefa6d744e671806789dfd6fbd22c7e333273#464aefa6d744e671806789dfd6fbd22c7e333273"
|
source = "git+https://github.com/Garmelon/toss.git?rev=26a8936cf50ee4b775fd4d1bf96f1b3077421e5c#26a8936cf50ee4b775fd4d1bf96f1b3077421e5c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"unicode-linebreak",
|
"unicode-linebreak",
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ features = ["rustls-tls-native-roots"]
|
||||||
|
|
||||||
[dependencies.toss]
|
[dependencies.toss]
|
||||||
git = "https://github.com/Garmelon/toss.git"
|
git = "https://github.com/Garmelon/toss.git"
|
||||||
rev = "464aefa6d744e671806789dfd6fbd22c7e333273"
|
rev = "26a8936cf50ee4b775fd4d1bf96f1b3077421e5c"
|
||||||
|
|
||||||
# [patch."https://github.com/Garmelon/toss.git"]
|
# [patch."https://github.com/Garmelon/toss.git"]
|
||||||
# toss = { path = "../toss/" }
|
# toss = { path = "../toss/" }
|
||||||
|
|
|
||||||
|
|
@ -43,11 +43,11 @@ impl Msg for LogMsg {
|
||||||
Level::Trace => ContentStyle::default().bold().magenta(),
|
Level::Trace => ContentStyle::default().bold().magenta(),
|
||||||
};
|
};
|
||||||
let text = format!("{}", self.level);
|
let text = format!("{}", self.level);
|
||||||
Styled::new((text, style))
|
Styled::new(text, style)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn content(&self) -> Styled {
|
fn content(&self) -> Styled {
|
||||||
Styled::new(&self.content)
|
Styled::new_plain(&self.content)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn last_possible_id() -> Self::Id {
|
fn last_possible_id() -> Self::Id {
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ impl EuphRoom {
|
||||||
Segment::new(Text::new("Choose nick ")),
|
Segment::new(Text::new("Choose nick ")),
|
||||||
Segment::new(
|
Segment::new(
|
||||||
ed.widget()
|
ed.widget()
|
||||||
.highlight(|s| Styled::new((s, euph::nick_style(s)))),
|
.highlight(|s| Styled::new(s, euph::nick_style(s))),
|
||||||
),
|
),
|
||||||
]))
|
]))
|
||||||
.left(1),
|
.left(1),
|
||||||
|
|
@ -146,19 +146,21 @@ impl EuphRoom {
|
||||||
fn status_widget(&self, status: &Option<Option<Status>>) -> BoxedWidget {
|
fn status_widget(&self, status: &Option<Option<Status>>) -> BoxedWidget {
|
||||||
let room = self.chat.store().room();
|
let room = self.chat.store().room();
|
||||||
let room_style = ContentStyle::default().bold().blue();
|
let room_style = ContentStyle::default().bold().blue();
|
||||||
let mut info = Styled::new((format!("&{room}"), room_style));
|
let mut info = Styled::new(format!("&{room}"), room_style);
|
||||||
info = match status {
|
info = match status {
|
||||||
None => info.then(", archive"),
|
None => info.then_plain(", archive"),
|
||||||
Some(None) => info.then(", connecting..."),
|
Some(None) => info.then_plain(", connecting..."),
|
||||||
Some(Some(Status::Joining(j))) if j.bounce.is_some() => info.then(", auth required"),
|
Some(Some(Status::Joining(j))) if j.bounce.is_some() => {
|
||||||
Some(Some(Status::Joining(_))) => info.then(", joining..."),
|
info.then_plain(", auth required")
|
||||||
|
}
|
||||||
|
Some(Some(Status::Joining(_))) => info.then_plain(", joining..."),
|
||||||
Some(Some(Status::Joined(j))) => {
|
Some(Some(Status::Joined(j))) => {
|
||||||
let nick = &j.session.name;
|
let nick = &j.session.name;
|
||||||
if nick.is_empty() {
|
if nick.is_empty() {
|
||||||
info.then(", present without nick")
|
info.then_plain(", present without nick")
|
||||||
} else {
|
} else {
|
||||||
let nick_style = euph::nick_style(nick);
|
let nick_style = euph::nick_style(nick);
|
||||||
info.then(", present as ").then((nick, nick_style))
|
info.then_plain(", present as ").then(nick, nick_style)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -202,8 +204,10 @@ impl EuphRoom {
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
|
|
||||||
let normal = Styled::new(owner).then((name, style)).then(perms);
|
let normal = Styled::new_plain(owner).then(name, style).then_plain(perms);
|
||||||
let selected = Styled::new(owner).then((name, style_inv)).then(perms);
|
let selected = Styled::new_plain(owner)
|
||||||
|
.then(name, style_inv)
|
||||||
|
.then_plain(perms);
|
||||||
list.add_sel(
|
list.add_sel(
|
||||||
id,
|
id,
|
||||||
Text::new(normal),
|
Text::new(normal),
|
||||||
|
|
@ -227,7 +231,7 @@ impl EuphRoom {
|
||||||
list.add_unsel(Empty);
|
list.add_unsel(Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
let row = Styled::new((name, heading_style)).then(format!(" ({})", sessions.len()));
|
let row = Styled::new(name, heading_style).then_plain(format!(" ({})", sessions.len()));
|
||||||
list.add_unsel(Text::new(row));
|
list.add_unsel(Text::new(row));
|
||||||
|
|
||||||
for session in sessions {
|
for session in sessions {
|
||||||
|
|
|
||||||
|
|
@ -107,9 +107,7 @@ impl Rooms {
|
||||||
Segment::new(Text::new("Connect to ")),
|
Segment::new(Text::new("Connect to ")),
|
||||||
Segment::new(HJoin::new(vec![
|
Segment::new(HJoin::new(vec![
|
||||||
Segment::new(Text::new(("&", room_style))),
|
Segment::new(Text::new(("&", room_style))),
|
||||||
Segment::new(
|
Segment::new(ed.widget().highlight(|s| Styled::new(s, room_style))),
|
||||||
ed.widget().highlight(|s| Styled::new((s, room_style))),
|
|
||||||
),
|
|
||||||
])),
|
])),
|
||||||
]))
|
]))
|
||||||
.left(1),
|
.left(1),
|
||||||
|
|
@ -166,7 +164,7 @@ impl Rooms {
|
||||||
|
|
||||||
async fn render_rows(&self, list: &mut List<String>, rooms: Vec<String>) {
|
async fn render_rows(&self, list: &mut List<String>, rooms: Vec<String>) {
|
||||||
let heading_style = ContentStyle::default().bold();
|
let heading_style = ContentStyle::default().bold();
|
||||||
let heading = Styled::new(("Rooms", heading_style)).then(format!(" ({})", rooms.len()));
|
let heading = Styled::new("Rooms", heading_style).then_plain(format!(" ({})", rooms.len()));
|
||||||
list.add_unsel(Text::new(heading));
|
list.add_unsel(Text::new(heading));
|
||||||
|
|
||||||
for room in rooms {
|
for room in rooms {
|
||||||
|
|
@ -175,13 +173,13 @@ impl Rooms {
|
||||||
let room_style = ContentStyle::default().bold().blue();
|
let room_style = ContentStyle::default().bold().blue();
|
||||||
let room_sel_style = ContentStyle::default().bold().black().on_white();
|
let room_sel_style = ContentStyle::default().bold().black().on_white();
|
||||||
|
|
||||||
let mut normal = Styled::new((format!("&{room}"), room_style));
|
let mut normal = Styled::new(format!("&{room}"), room_style);
|
||||||
let mut selected = Styled::new((format!("&{room}"), room_sel_style));
|
let mut selected = Styled::new(format!("&{room}"), room_sel_style);
|
||||||
if let Some(room) = self.euph_rooms.get(&room) {
|
if let Some(room) = self.euph_rooms.get(&room) {
|
||||||
if let Some(status) = room.status().await {
|
if let Some(status) = room.status().await {
|
||||||
let status = Self::format_status(&status);
|
let status = Self::format_status(&status);
|
||||||
normal = normal.then((status.clone(), bg_style));
|
normal = normal.then(status.clone(), bg_style);
|
||||||
selected = selected.then((status, bg_sel_style));
|
selected = selected.then(status, bg_sel_style);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ impl EditorState {
|
||||||
|
|
||||||
pub fn widget(&self) -> Editor {
|
pub fn widget(&self) -> Editor {
|
||||||
let guard = self.0.lock();
|
let guard = self.0.lock();
|
||||||
let text = Styled::new(guard.text.clone());
|
let text = Styled::new_plain(guard.text.clone());
|
||||||
let idx = guard.idx;
|
let idx = guard.idx;
|
||||||
Editor {
|
Editor {
|
||||||
state: self.0.clone(),
|
state: self.0.clone(),
|
||||||
|
|
@ -239,9 +239,8 @@ impl Editor {
|
||||||
where
|
where
|
||||||
F: FnOnce(&str) -> Styled,
|
F: FnOnce(&str) -> Styled,
|
||||||
{
|
{
|
||||||
let text = self.text.text();
|
let new_text = f(self.text.text());
|
||||||
let new_text = f(&text);
|
assert_eq!(self.text.text(), new_text.text());
|
||||||
assert_eq!(text, new_text.text());
|
|
||||||
self.text = new_text;
|
self.text = new_text;
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
@ -264,7 +263,7 @@ impl Editor {
|
||||||
|
|
||||||
pub fn cursor_row(&self, frame: &mut Frame) -> usize {
|
pub fn cursor_row(&self, frame: &mut Frame) -> usize {
|
||||||
let width: usize = frame.size().width.into();
|
let width: usize = frame.size().width.into();
|
||||||
let indices = frame.wrap(&self.text.text(), width);
|
let indices = frame.wrap(self.text.text(), width);
|
||||||
let (row, _) = Self::wrapped_cursor(self.idx, &indices);
|
let (row, _) = Self::wrapped_cursor(self.idx, &indices);
|
||||||
row
|
row
|
||||||
}
|
}
|
||||||
|
|
@ -275,12 +274,12 @@ impl Widget for Editor {
|
||||||
fn size(&self, frame: &mut Frame, max_width: Option<u16>, _max_height: Option<u16>) -> Size {
|
fn size(&self, frame: &mut Frame, max_width: Option<u16>, _max_height: Option<u16>) -> Size {
|
||||||
let max_width = max_width.map(|w| w as usize).unwrap_or(usize::MAX).max(1);
|
let max_width = max_width.map(|w| w as usize).unwrap_or(usize::MAX).max(1);
|
||||||
let max_text_width = max_width - 1;
|
let max_text_width = max_width - 1;
|
||||||
let indices = frame.wrap(&self.text.text(), max_text_width);
|
let indices = frame.wrap(self.text.text(), max_text_width);
|
||||||
let lines = self.text.clone().split_at_indices(&indices);
|
let lines = self.text.clone().split_at_indices(&indices);
|
||||||
|
|
||||||
let min_width = lines
|
let min_width = lines
|
||||||
.iter()
|
.iter()
|
||||||
.map(|l| frame.width_styled(l))
|
.map(|l| frame.width(l.text()))
|
||||||
.max()
|
.max()
|
||||||
.unwrap_or(0)
|
.unwrap_or(0)
|
||||||
+ 1;
|
+ 1;
|
||||||
|
|
@ -291,7 +290,7 @@ impl Widget for Editor {
|
||||||
async fn render(self: Box<Self>, frame: &mut Frame) {
|
async fn render(self: Box<Self>, frame: &mut Frame) {
|
||||||
let width = frame.size().width.max(1);
|
let width = frame.size().width.max(1);
|
||||||
let text_width = (width - 1) as usize;
|
let text_width = (width - 1) as usize;
|
||||||
let indices = frame.wrap(&self.text.text(), text_width);
|
let indices = frame.wrap(self.text.text(), text_width);
|
||||||
let lines = self.text.split_at_indices(&indices);
|
let lines = self.text.split_at_indices(&indices);
|
||||||
|
|
||||||
let (cursor_row, cursor_line_idx) = Self::wrapped_cursor(self.idx, &indices);
|
let (cursor_row, cursor_line_idx) = Self::wrapped_cursor(self.idx, &indices);
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ impl Text {
|
||||||
usize::MAX
|
usize::MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
let indices = frame.wrap(&self.styled.text(), max_width);
|
let indices = frame.wrap(self.styled.text(), max_width);
|
||||||
self.styled.clone().split_at_indices(&indices)
|
self.styled.clone().split_at_indices(&indices)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -40,7 +40,7 @@ impl Widget for Text {
|
||||||
let lines = self.wrapped(frame, max_width);
|
let lines = self.wrapped(frame, max_width);
|
||||||
let min_width = lines
|
let min_width = lines
|
||||||
.iter()
|
.iter()
|
||||||
.map(|l| frame.width_styled(l))
|
.map(|l| frame.width(l.text()))
|
||||||
.max()
|
.max()
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
let min_height = lines.len();
|
let min_height = lines.len();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue