Get project to compile again

This commit is contained in:
Joscha 2022-03-04 00:16:39 +01:00
parent f85f5c40b4
commit 10efaeb8d2
3 changed files with 94 additions and 94 deletions

View file

@ -68,15 +68,15 @@ impl Present {
self.session = session.clone(); self.session = session.clone();
} }
fn join(&self, who: Session) { fn join(&mut self, who: Session) {
self.others.insert(who.id, who); self.others.insert(who.id, who);
} }
fn nick(&self, who: Session) { fn nick(&mut self, who: Session) {
self.others.insert(who.id, who); self.others.insert(who.id, who);
} }
fn part(&self, who: Session) { fn part(&mut self, who: Session) {
self.others.remove(&who.id); self.others.remove(&who.id);
} }
} }

View file

@ -2,33 +2,29 @@ mod input;
mod layout; mod layout;
mod overlays; mod overlays;
mod pane; mod pane;
mod room;
mod rooms; mod rooms;
mod styles; mod styles;
mod textline; mod textline;
use std::collections::hash_map::Entry;
use std::collections::HashMap; use std::collections::HashMap;
use std::io::Stdout; use std::io::Stdout;
use std::sync::Arc;
use crossterm::event::{Event, EventStream, KeyCode, KeyEvent, MouseEvent, MouseEventKind}; use crossterm::event::{Event, EventStream, KeyCode, KeyEvent, MouseEvent, MouseEventKind};
use futures::StreamExt; use futures::StreamExt;
use tokio::sync::mpsc::error::TryRecvError; use tokio::sync::mpsc::error::TryRecvError;
use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender};
use tokio::sync::Mutex;
use tui::backend::CrosstermBackend; use tui::backend::CrosstermBackend;
use tui::layout::{Constraint, Direction, Layout, Rect}; use tui::layout::{Constraint, Direction, Layout, Rect};
use tui::{Frame, Terminal}; use tui::{Frame, Terminal};
use crate::config::Config; use crate::config::Config;
use crate::room::Room; use crate::cove;
use crate::cove::room::CoveRoom;
use crate::ui::overlays::OverlayReaction; use crate::ui::overlays::OverlayReaction;
use self::input::EventHandler; use self::input::EventHandler;
use self::overlays::{Overlay, SwitchRoom, SwitchRoomState}; use self::overlays::{Overlay, SwitchRoom, SwitchRoomState};
use self::pane::PaneInfo; use self::pane::PaneInfo;
use self::room::RoomInfo;
use self::rooms::Rooms; use self::rooms::Rooms;
pub type Backend = CrosstermBackend<Stdout>; pub type Backend = CrosstermBackend<Stdout>;
@ -39,6 +35,12 @@ pub enum UiEvent {
Redraw, Redraw,
} }
impl From<cove::conn::Event> for UiEvent {
fn from(_: cove::conn::Event) -> Self {
Self::Redraw
}
}
enum EventHandleResult { enum EventHandleResult {
Continue, Continue,
Stop, Stop,
@ -47,12 +49,12 @@ enum EventHandleResult {
pub struct Ui { pub struct Ui {
config: &'static Config, config: &'static Config,
event_tx: UnboundedSender<UiEvent>, event_tx: UnboundedSender<UiEvent>,
rooms: HashMap<String, Arc<Mutex<Room>>>, cove_rooms: HashMap<String, CoveRoom>,
rooms_pane: PaneInfo, rooms_pane: PaneInfo,
users_pane: PaneInfo, users_pane: PaneInfo,
room: Option<RoomInfo>, // room: Option<RoomInfo>,
overlay: Option<Overlay>, overlay: Option<Overlay>,
last_area: Rect, last_area: Rect,
@ -63,12 +65,12 @@ impl Ui {
Self { Self {
config, config,
event_tx, event_tx,
rooms: HashMap::new(), cove_rooms: HashMap::new(),
rooms_pane: PaneInfo::default(), rooms_pane: PaneInfo::default(),
users_pane: PaneInfo::default(), users_pane: PaneInfo::default(),
room: None, // room: None,
overlay: None, overlay: None,
last_area: Rect::default(), last_area: Rect::default(),
@ -169,18 +171,18 @@ impl Ui {
self.overlay = Some(Overlay::SwitchRoom(SwitchRoomState::default())); self.overlay = Some(Overlay::SwitchRoom(SwitchRoomState::default()));
CONTINUE CONTINUE
} }
KeyCode::Char('J') => { // KeyCode::Char('J') => {
self.switch_to_next_room(); // self.switch_to_next_room();
CONTINUE // CONTINUE
} // }
KeyCode::Char('K') => { // KeyCode::Char('K') => {
self.switch_to_prev_room(); // self.switch_to_prev_room();
CONTINUE // CONTINUE
} // }
KeyCode::Char('D') => { // KeyCode::Char('D') => {
self.remove_current_room(); // self.remove_current_room();
CONTINUE // CONTINUE
} // }
_ => CONTINUE, _ => CONTINUE,
} }
} }
@ -193,7 +195,7 @@ impl Ui {
let name = name.trim(); let name = name.trim();
if !name.is_empty() { if !name.is_empty() {
self.overlay = None; self.overlay = None;
self.switch_to_room(name.to_string()).await; // self.switch_to_room(name.to_string()).await;
} }
} }
} }
@ -247,16 +249,16 @@ impl Ui {
let users_pane_area = areas[4]; let users_pane_area = areas[4];
// Main pane and users pane // Main pane and users pane
if let Some(room) = &mut self.room { // if let Some(room) = &mut self.room {
room.render_main(frame, main_pane_area).await; // room.render_main(frame, main_pane_area).await;
room.render_users(frame, users_pane_area).await; // room.render_users(frame, users_pane_area).await;
} // }
// Rooms pane // Rooms pane
let mut rooms = Rooms::new(&self.rooms); let mut rooms = Rooms::new(&self.cove_rooms);
if let Some(room) = &self.room { // if let Some(room) = &self.room {
rooms = rooms.select(room.name()); // rooms = rooms.select(room.name());
} // }
frame.render_widget(rooms, rooms_pane_area); frame.render_widget(rooms, rooms_pane_area);
// Pane borders and width // Pane borders and width
@ -279,69 +281,69 @@ impl Ui {
Ok(()) Ok(())
} }
async fn switch_to_room(&mut self, name: String) { // async fn switch_to_room(&mut self, name: String) {
let room = match self.rooms.entry(name.clone()) { // let room = match self.rooms.entry(name.clone()) {
Entry::Occupied(entry) => entry.get().clone(), // Entry::Occupied(entry) => entry.get().clone(),
Entry::Vacant(entry) => { // Entry::Vacant(entry) => {
let identity = self.config.cove_identity.clone(); // let identity = self.config.cove_identity.clone();
let room = Room::new(name.clone(), identity, None, self.config).await; // let room = Room::new(name.clone(), identity, None, self.config).await;
entry.insert(room.clone()); // entry.insert(room.clone());
room // room
} // }
}; // };
self.room = Some(RoomInfo::new(name, room)) // self.room = Some(RoomInfo::new(name, room))
} // }
fn get_room_index(&self) -> Option<(usize, &str)> { // fn get_room_index(&self) -> Option<(usize, &str)> {
let name = self.room.as_ref()?.name(); // let name = self.room.as_ref()?.name();
let mut rooms = self.rooms.keys().collect::<Vec<_>>(); // let mut rooms = self.rooms.keys().collect::<Vec<_>>();
if rooms.is_empty() { // if rooms.is_empty() {
return None; // return None;
} // }
rooms.sort(); // rooms.sort();
let index = rooms.iter().position(|n| n as &str == name)?; // let index = rooms.iter().position(|n| n as &str == name)?;
Some((index, name)) // Some((index, name))
} // }
fn set_room_index(&mut self, index: usize) { // fn set_room_index(&mut self, index: usize) {
let mut rooms = self.rooms.keys().collect::<Vec<_>>(); // let mut rooms = self.rooms.keys().collect::<Vec<_>>();
if rooms.is_empty() { // if rooms.is_empty() {
self.room = None; // self.room = None;
return; // return;
} // }
rooms.sort(); // rooms.sort();
let name = rooms[index % rooms.len()]; // let name = rooms[index % rooms.len()];
let room = self.rooms[name].clone(); // let room = self.rooms[name].clone();
self.room = Some(RoomInfo::new(name.clone(), room)) // self.room = Some(RoomInfo::new(name.clone(), room))
} // }
fn switch_to_next_room(&mut self) { // fn switch_to_next_room(&mut self) {
if let Some((index, _)) = self.get_room_index() { // if let Some((index, _)) = self.get_room_index() {
self.set_room_index(index + 1); // self.set_room_index(index + 1);
} // }
} // }
fn switch_to_prev_room(&mut self) { // fn switch_to_prev_room(&mut self) {
if let Some((index, _)) = self.get_room_index() { // if let Some((index, _)) = self.get_room_index() {
self.set_room_index(index + self.rooms.len() - 1); // self.set_room_index(index + self.rooms.len() - 1);
} // }
} // }
fn remove_current_room(&mut self) { // fn remove_current_room(&mut self) {
if let Some((index, name)) = self.get_room_index() { // if let Some((index, name)) = self.get_room_index() {
let name = name.to_string(); // let name = name.to_string();
self.rooms.remove(&name); // self.rooms.remove(&name);
let index = if self.rooms.is_empty() { // let index = if self.rooms.is_empty() {
0 // 0
} else { // } else {
index.min(self.rooms.len() - 1) // index.min(self.rooms.len() - 1)
}; // };
self.set_room_index(index); // self.set_room_index(index);
} // }
} // }
} }

View file

@ -1,14 +1,12 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::Mutex;
use tui::buffer::Buffer; use tui::buffer::Buffer;
use tui::layout::Rect; use tui::layout::Rect;
use tui::style::{Color, Modifier, Style};
use tui::text::{Span, Spans}; use tui::text::{Span, Spans};
use tui::widgets::{Paragraph, Widget}; use tui::widgets::{Paragraph, Widget};
use crate::room::Room; use crate::cove::room::CoveRoom;
use super::styles; use super::styles;
@ -23,8 +21,8 @@ pub struct Rooms {
} }
impl Rooms { impl Rooms {
pub fn new(rooms: &HashMap<String, Arc<Mutex<Room>>>) -> Self { pub fn new(cove_rooms: &HashMap<String, CoveRoom>) -> Self {
let mut rooms = rooms let mut rooms = cove_rooms
.iter() .iter()
.map(|(name, _room)| RoomInfo { name: name.clone() }) .map(|(name, _room)| RoomInfo { name: name.clone() })
.collect::<Vec<_>>(); .collect::<Vec<_>>();