commit a9ea0b6e2c9e6f66ce420b6ebff68bfbe3299e85
parent b606ee17b2d7602e6a013a670efbce4424589324
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Thu, 30 Mar 2023 22:50:16 -0700
cleanup
Diffstat:
| M | src/main.rs | | | 393 | ++++++++++++++++++++++++++++++++++++++++++++----------------------------------- |
1 file changed, 218 insertions(+), 175 deletions(-)
diff --git a/src/main.rs b/src/main.rs
@@ -1078,199 +1078,242 @@ impl LeChatPHPClient {
Ok(())
}
- fn handle_normal_mode_key_event(
- &mut self,
- app: &mut App,
- key_event: KeyEvent,
- messages: &Arc<Mutex<Vec<Message>>>,
- ) -> std::result::Result<(), ExitSignal> {
- match key_event {
- KeyEvent { code: KeyCode::Char('/'), modifiers: KeyModifiers::NONE, .. } => {
- app.items.unselect();
- app.input = "/".to_owned();
- app.input_idx = app.input.width();
- app.input_mode = InputMode::Editing;
- }
- KeyEvent { code: KeyCode::Char('j'), modifiers: KeyModifiers::NONE, .. }
- | KeyEvent { code: KeyCode::Down, modifiers: KeyModifiers::NONE, .. } => {
- app.items.next();
- }
- KeyEvent { code: KeyCode::Char('k'), modifiers: KeyModifiers::NONE, .. }
- | KeyEvent { code: KeyCode::Up, modifiers: KeyModifiers::NONE, .. } => {
- app.items.previous();
- }
- KeyEvent { code: KeyCode::Enter, modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(item) = app.items.items.get(idx) {
- app.long_message = Some(item.clone());
- app.input_mode = InputMode::LongMessage;
- }
- }
- }
- KeyEvent { code: KeyCode::Backspace, modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(item) = app.items.items.get(idx) {
- let mut messages = messages.lock().unwrap();
- if let Some(pos) = messages
- .iter()
- .position(|m| m.date == item.date && m.text.text() == item.text.text())
- {
- if item.deleted {
- messages.remove(pos);
- } else {
- messages[pos].hide = !messages[pos].hide;
- }
- }
- }
- }
- }
- KeyEvent { code: KeyCode::Char('y'), modifiers: KeyModifiers::NONE, .. }
- | KeyEvent { code: KeyCode::Char('c'), modifiers: KeyModifiers::CONTROL, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(item) = app.items.items.get(idx) {
- if let Some(upload_link) = &item.upload_link {
- let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
- let mut out = format!("{}{}", self.config.url, upload_link);
- if let Some((_, _, msg)) =
- get_message(&item.text, &self.config.members_tag)
- {
- out = format!("{} {}", msg, out);
- }
- ctx.set_contents(out).unwrap();
- } else if let Some((_, _, msg)) =
- get_message(&item.text, &self.config.members_tag)
- {
- let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
- ctx.set_contents(msg).unwrap();
- }
- }
- }
+ fn handle_normal_mode_key_event_up(&mut self, app: &mut App) {
+ app.items.previous()
+ }
+
+ fn handle_normal_mode_key_event_down(&mut self, app: &mut App) {
+ app.items.next()
+ }
+
+ fn handle_normal_mode_key_event_slash(&mut self, app: &mut App) {
+ app.items.unselect();
+ app.input = "/".to_owned();
+ app.input_idx = app.input.width();
+ app.input_mode = InputMode::Editing;
+ }
+
+ fn handle_normal_mode_key_event_enter(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(item) = app.items.items.get(idx) {
+ app.long_message = Some(item.clone());
+ app.input_mode = InputMode::LongMessage;
}
- KeyEvent { code: KeyCode::Char('Y'), modifiers: KeyModifiers::SHIFT, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(item) = app.items.items.get(idx) {
- if let Some(upload_link) = &item.upload_link {
- let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
- let out = format!("{}{}", self.config.url, upload_link);
- ctx.set_contents(out).unwrap();
- } else if let Some((_, _, msg)) =
- get_message(&item.text, &self.config.members_tag)
- {
- let finder = LinkFinder::new();
- let links: Vec<_> = finder.links(msg.as_str()).collect();
- if let Some(link) = links.get(0) {
- let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
- ctx.set_contents(link.as_str().to_owned()).unwrap();
- }
- }
+ }
+ }
+
+ fn handle_normal_mode_key_event_backspace(&mut self, app: &mut App, messages: &Arc<Mutex<Vec<Message>>>) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(item) = app.items.items.get(idx) {
+ let mut messages = messages.lock().unwrap();
+ if let Some(pos) = messages.iter().position(|m| m.date == item.date && m.text.text() == item.text.text()) {
+ if item.deleted {
+ messages.remove(pos);
+ } else {
+ messages[pos].hide = !messages[pos].hide;
}
}
}
- KeyEvent { code: KeyCode::Char('d'), modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(item) = app.items.items.get(idx) {
- eprintln!("{:?}", item.text.text());
+ }
+ }
+
+ fn handle_normal_mode_key_event_yank(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(item) = app.items.items.get(idx) {
+ if let Some(upload_link) = &item.upload_link {
+ let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
+ let mut out = format!("{}{}", self.config.url, upload_link);
+ if let Some((_, _, msg)) =
+ get_message(&item.text, &self.config.members_tag)
+ {
+ out = format!("{} {}", msg, out);
}
+ ctx.set_contents(out).unwrap();
+ } else if let Some((_, _, msg)) =
+ get_message(&item.text, &self.config.members_tag)
+ {
+ let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
+ ctx.set_contents(msg).unwrap();
}
}
- KeyEvent { code: KeyCode::Char('D'), modifiers: KeyModifiers::SHIFT, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(item) = app.items.items.get(idx) {
- eprintln!("{:?} {:?}", item.text, item.upload_link);
+ }
+ }
+
+ fn handle_normal_mode_key_event_yank_link(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(item) = app.items.items.get(idx) {
+ if let Some(upload_link) = &item.upload_link {
+ let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
+ let out = format!("{}{}", self.config.url, upload_link);
+ ctx.set_contents(out).unwrap();
+ } else if let Some((_, _, msg)) =
+ get_message(&item.text, &self.config.members_tag)
+ {
+ let finder = LinkFinder::new();
+ let links: Vec<_> = finder.links(msg.as_str()).collect();
+ if let Some(link) = links.get(0) {
+ let mut ctx: ClipboardContext = ClipboardProvider::new().unwrap();
+ ctx.set_contents(link.as_str().to_owned()).unwrap();
}
}
}
- KeyEvent { code: KeyCode::Char('m'), modifiers: KeyModifiers::NONE, .. } => {
- let mut is_muted = self.is_muted.lock().unwrap();
- *is_muted = !*is_muted;
- }
- KeyEvent { code: KeyCode::Char('M'), modifiers: KeyModifiers::SHIFT, .. } => {
- self.show_sys = !self.show_sys;
- }
- KeyEvent { code: KeyCode::Char('G'), modifiers: KeyModifiers::SHIFT, .. } => {
- self.display_guest_view = !self.display_guest_view;
+ }
+ }
+
+ fn handle_normal_mode_key_event_debug(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(item) = app.items.items.get(idx) {
+ eprintln!("{:?}", item.text.text());
}
- KeyEvent { code: KeyCode::Char('H'), modifiers: KeyModifiers::SHIFT, .. } => {
- self.display_hidden_msgs = !self.display_hidden_msgs;
+ }
+ }
+
+ fn handle_normal_mode_key_event_debug2(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(item) = app.items.items.get(idx) {
+ eprintln!("{:?} {:?}", item.text, item.upload_link);
}
- KeyEvent { code: KeyCode::Char('i'), modifiers: KeyModifiers::NONE, .. } => {
+ }
+ }
+
+ fn handle_normal_mode_key_event_toggle_mute(&mut self) {
+ let mut is_muted = self.is_muted.lock().unwrap();
+ *is_muted = !*is_muted;
+ }
+
+ fn handle_normal_mode_key_event_toggle_sys(&mut self) {
+ self.show_sys = !self.show_sys;
+ }
+
+ fn handle_normal_mode_key_event_toggle_guest_view(&mut self) {
+ self.display_guest_view = !self.display_guest_view;
+ }
+
+ fn handle_normal_mode_key_event_toggle_hidden(&mut self) {
+ self.display_hidden_msgs = !self.display_hidden_msgs;
+ }
+
+ fn handle_normal_mode_key_event_input_mode(&mut self, app: &mut App) {
+ app.input_mode = InputMode::Editing;
+ app.items.unselect();
+ }
+
+ fn handle_normal_mode_key_event_logout(&mut self) -> std::result::Result<(), ExitSignal> {
+ self.logout().unwrap();
+ return Err(ExitSignal::Terminate);
+ }
+
+ fn handle_normal_mode_key_event_exit(&mut self) -> std::result::Result<(), ExitSignal> {
+ return Err(ExitSignal::Terminate);
+ }
+
+ fn handle_normal_mode_key_event_tag(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(username) = get_username(
+ &self.base_client.username,
+ &app.items.items.get(idx).unwrap().text,
+ &self.config.members_tag,
+ ) {
+ app.input = format!("@{} ", username);
+ app.input_idx = app.input.width();
app.input_mode = InputMode::Editing;
app.items.unselect();
}
- KeyEvent { code: KeyCode::Char('Q'), modifiers: KeyModifiers::SHIFT, .. } => {
- self.logout().unwrap();
- return Err(ExitSignal::Terminate);
- }
- KeyEvent { code: KeyCode::Char('q'), modifiers: KeyModifiers::NONE, .. } => {
- return Err(ExitSignal::Terminate);
- }
- KeyEvent { code: KeyCode::Char('t'), modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(username) = get_username(
- &self.base_client.username,
- &app.items.items.get(idx).unwrap().text,
- &self.config.members_tag,
- ) {
- app.input = format!("@{} ", username);
- app.input_idx = app.input.width();
- app.input_mode = InputMode::Editing;
- app.items.unselect();
- }
- }
- }
- KeyEvent { code: KeyCode::Char('p'), modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(username) = get_username(
- &self.base_client.username,
- &app.items.items.get(idx).unwrap().text,
- &self.config.members_tag,
- ) {
- app.input = format!("/pm {} ", username);
- app.input_idx = app.input.width();
- app.input_mode = InputMode::Editing;
- app.items.unselect();
- }
- }
- }
- KeyEvent { code: KeyCode::Char('k'), modifiers: KeyModifiers::CONTROL, .. } => {
- if let Some(idx) = app.items.state.selected() {
- if let Some(username) = get_username(
- &self.base_client.username,
- &app.items.items.get(idx).unwrap().text,
- &self.config.members_tag,
- ) {
- app.input = format!("/kick {} ", username);
- app.input_idx = app.input.width();
- app.input_mode = InputMode::Editing;
- app.items.unselect();
- }
- }
- }
- KeyEvent { code: KeyCode::Char('u'), modifiers: KeyModifiers::CONTROL, .. }
- | KeyEvent { code: KeyCode::PageUp, modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- app.items.state.select(idx.checked_sub(10).or(Some(0)));
- } else {
- app.items.next();
- }
- }
- KeyEvent { code: KeyCode::Char('d'), modifiers: KeyModifiers::CONTROL, .. }
- | KeyEvent { code: KeyCode::PageDown, modifiers: KeyModifiers::NONE, .. } => {
- if let Some(idx) = app.items.state.selected() {
- let wanted_idx = idx + 10;
- let max_idx = app.items.items.len() - 1;
- let new_idx = std::cmp::min(wanted_idx, max_idx);
- app.items.state.select(Some(new_idx));
- } else {
- app.items.next();
- }
- }
- KeyEvent { code: KeyCode::Esc, modifiers: KeyModifiers::NONE, .. } => {
+ }
+ }
+
+ fn handle_normal_mode_key_event_pm(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(username) = get_username(
+ &self.base_client.username,
+ &app.items.items.get(idx).unwrap().text,
+ &self.config.members_tag,
+ ) {
+ app.input = format!("/pm {} ", username);
+ app.input_idx = app.input.width();
+ app.input_mode = InputMode::Editing;
app.items.unselect();
}
- KeyEvent { code: KeyCode::Char('u'), modifiers: KeyModifiers::SHIFT, .. } => {
- app.items.state.select(Some(0));
+ }
+ }
+
+ fn handle_normal_mode_key_event_kick(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ if let Some(username) = get_username(
+ &self.base_client.username,
+ &app.items.items.get(idx).unwrap().text,
+ &self.config.members_tag,
+ ) {
+ app.input = format!("/kick {} ", username);
+ app.input_idx = app.input.width();
+ app.input_mode = InputMode::Editing;
+ app.items.unselect();
}
+ }
+ }
+
+ fn handle_normal_mode_key_event_page_up(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ app.items.state.select(idx.checked_sub(10).or(Some(0)));
+ } else {
+ app.items.next();
+ }
+ }
+
+ fn handle_normal_mode_key_event_page_down(&mut self, app: &mut App) {
+ if let Some(idx) = app.items.state.selected() {
+ let wanted_idx = idx + 10;
+ let max_idx = app.items.items.len() - 1;
+ let new_idx = std::cmp::min(wanted_idx, max_idx);
+ app.items.state.select(Some(new_idx));
+ } else {
+ app.items.next();
+ }
+ }
+
+ fn handle_normal_mode_key_event_esc(&mut self, app: &mut App) {
+ app.items.unselect();
+ }
+
+ fn handle_normal_mode_key_event_shift_u(&mut self, app: &mut App) {
+ app.items.state.select(Some(0));
+ }
+
+ fn handle_normal_mode_key_event(
+ &mut self,
+ app: &mut App,
+ key_event: KeyEvent,
+ messages: &Arc<Mutex<Vec<Message>>>,
+ ) -> std::result::Result<(), ExitSignal> {
+ match key_event {
+ KeyEvent { code: KeyCode::Char('/'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_slash(app),
+ KeyEvent { code: KeyCode::Char('j'), modifiers: KeyModifiers::NONE, .. } |
+ KeyEvent { code: KeyCode::Down, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_down(app),
+ KeyEvent { code: KeyCode::Char('k'), modifiers: KeyModifiers::NONE, .. } |
+ KeyEvent { code: KeyCode::Up, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_up(app),
+ KeyEvent { code: KeyCode::Enter, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_enter(app),
+ KeyEvent { code: KeyCode::Backspace, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_backspace(app, messages),
+ KeyEvent { code: KeyCode::Char('y'), modifiers: KeyModifiers::NONE, .. } |
+ KeyEvent { code: KeyCode::Char('c'), modifiers: KeyModifiers::CONTROL, .. } => self.handle_normal_mode_key_event_yank(app),
+ KeyEvent { code: KeyCode::Char('Y'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_yank_link(app),
+ KeyEvent { code: KeyCode::Char('d'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_debug(app),
+ KeyEvent { code: KeyCode::Char('D'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_debug2(app),
+ KeyEvent { code: KeyCode::Char('m'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_toggle_mute(),
+ KeyEvent { code: KeyCode::Char('M'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_toggle_sys(),
+ KeyEvent { code: KeyCode::Char('G'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_toggle_guest_view(),
+ KeyEvent { code: KeyCode::Char('H'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_toggle_hidden(),
+ KeyEvent { code: KeyCode::Char('i'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_input_mode(app),
+ KeyEvent { code: KeyCode::Char('Q'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_logout()?,
+ KeyEvent { code: KeyCode::Char('q'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_exit()?,
+ KeyEvent { code: KeyCode::Char('t'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_tag(app),
+ KeyEvent { code: KeyCode::Char('p'), modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_pm(app),
+ KeyEvent { code: KeyCode::Char('k'), modifiers: KeyModifiers::CONTROL, .. } => self.handle_normal_mode_key_event_kick(app),
+ KeyEvent { code: KeyCode::Char('u'), modifiers: KeyModifiers::CONTROL, .. } |
+ KeyEvent { code: KeyCode::PageUp, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_page_up(app),
+ KeyEvent { code: KeyCode::Char('d'), modifiers: KeyModifiers::CONTROL, .. } |
+ KeyEvent { code: KeyCode::PageDown, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_page_down(app),
+ KeyEvent { code: KeyCode::Esc, modifiers: KeyModifiers::NONE, .. } => self.handle_normal_mode_key_event_esc(app),
+ KeyEvent { code: KeyCode::Char('u'), modifiers: KeyModifiers::SHIFT, .. } => self.handle_normal_mode_key_event_shift_u(app),
_ => {}
}
Ok(())