summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthe lemons <citrons@mondecitronne.com>2022-11-14 23:14:10 -0600
committerthe lemons <citrons@mondecitronne.com>2022-11-14 23:14:10 -0600
commitb31771552199e40a9e0a74458573c6b9377bb720 (patch)
tree762dbd6c84a37aee6c0865292dd98477b01a7575
parent31129ece396b6c38e0449bc9c3acdb5cec144899 (diff)
initial support for alternate domainsalt-server
-rw-r--r--src/euph/room.rs15
-rw-r--r--src/ui/rooms.rs2
-rw-r--r--src/vault/euph.rs14
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<String>,
force_username: bool,
password: Option<String>,
@@ -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<Event>,
) -> 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<Option<(ConnTx, ConnRx)>> {
// 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]