From b31771552199e40a9e0a74458573c6b9377bb720 Mon Sep 17 00:00:00 2001 From: the lemons Date: Mon, 14 Nov 2022 23:14:10 -0600 Subject: initial support for alternate domains --- src/euph/room.rs | 15 ++++++++++----- src/ui/rooms.rs | 2 +- src/vault/euph.rs | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/euph/room.rs b/src/euph/room.rs index 3d332fd..c4397ec 100644 --- a/src/euph/room.rs +++ b/src/euph/room.rs @@ -56,6 +56,7 @@ enum Event { #[derive(Debug)] struct State { name: String, + domain: String, username: Option, force_username: bool, password: Option, @@ -79,16 +80,17 @@ impl State { ) { let vault = self.vault.clone(); let name = self.name.clone(); + let domain = self.domain.clone(); let result = if ephemeral { select! { _ = canary => Ok(()), - _ = Self::reconnect(&vault, &name, &event_tx) => Ok(()), + _ = Self::reconnect(&vault, &name, &domain, &event_tx) => Ok(()), e = self.handle_events(&mut event_rx, &euph_room_event_tx) => e, } } else { select! { _ = canary => Ok(()), - _ = Self::reconnect(&vault, &name, &event_tx) => Ok(()), + _ = Self::reconnect(&vault, &name, &domain, &event_tx) => Ok(()), e = self.handle_events(&mut event_rx, &euph_room_event_tx) => e, _ = Self::regularly_request_logs(&event_tx) => Ok(()), } @@ -107,11 +109,12 @@ impl State { async fn reconnect( vault: &EuphRoomVault, name: &str, + domain: &str, event_tx: &mpsc::UnboundedSender, ) -> anyhow::Result<()> { loop { info!("e&{}: connecting", name); - let connected = if let Some((conn_tx, mut conn_rx)) = Self::connect(vault, name).await? + let connected = if let Some((conn_tx, mut conn_rx)) = Self::connect(vault, name, domain).await? { info!("e&{}: connected", name); event_tx.send(Event::Connected(conn_tx))?; @@ -164,13 +167,14 @@ impl State { async fn connect( vault: &EuphRoomVault, name: &str, + domain: &str, ) -> anyhow::Result> { // TODO Set user agent? let cookies = Self::get_cookies(vault.vault()).await; let cookies = HeaderValue::from_str(&cookies).expect("valid cookies"); - match euphoxide::connect("euphoria.io", name, true, Some(cookies), TIMEOUT).await { + match euphoxide::connect(domain, name, true, Some(cookies), TIMEOUT).await { Ok((tx, rx, set_cookies)) => { Self::update_cookies(vault.vault(), &set_cookies); Ok(Some((tx, rx))) @@ -465,7 +469,8 @@ impl Room { let ephemeral = vault.vault().vault().ephemeral(); let state = State { - name: vault.room().to_string(), + name: vault.local_room().to_string(), + domain: vault.domain().to_string(), username, force_username, password, diff --git a/src/ui/rooms.rs b/src/ui/rooms.rs index 3e4d9d0..cb210d7 100644 --- a/src/ui/rooms.rs +++ b/src/ui/rooms.rs @@ -328,7 +328,7 @@ impl Rooms { } fn room_char(c: char) -> bool { - c.is_ascii_alphanumeric() || c == '_' + c.is_ascii_alphanumeric() || c == '_' || c == ':' || c == '.' } fn list_showlist_key_bindings(bindings: &mut KeyBindingsList) { diff --git a/src/vault/euph.rs b/src/vault/euph.rs index 897a2fd..924f8d4 100644 --- a/src/vault/euph.rs +++ b/src/vault/euph.rs @@ -82,6 +82,20 @@ impl EuphRoomVault { pub fn room(&self) -> &str { &self.room } + + pub fn local_room(&self) -> &str { + match self.room.split_once(':') { + None => &self.room, + Some((room, _)) => room, + } + } + + pub fn domain(&self) -> &str { + match self.room.split_once(':') { + None => "euphoria.io", + Some((_, domain)) => domain, + } + } } #[async_trait] -- cgit v1.2.3