Get project to compile again
This commit is contained in:
parent
f85f5c40b4
commit
10efaeb8d2
3 changed files with 94 additions and 94 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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<_>>();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue