Support domain in config file
This commit is contained in:
parent
c094f526a5
commit
5995d06cad
3 changed files with 41 additions and 36 deletions
|
|
@ -35,7 +35,13 @@ pub struct EuphRoom {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Document)]
|
#[derive(Debug, Default, Deserialize, Document)]
|
||||||
pub struct Euph {
|
pub struct EuphServer {
|
||||||
#[document(metavar = "room")]
|
#[document(metavar = "room")]
|
||||||
pub rooms: HashMap<String, EuphRoom>,
|
pub rooms: HashMap<String, EuphRoom>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Default, Deserialize, Document)]
|
||||||
|
pub struct Euph {
|
||||||
|
#[document(metavar = "domain")]
|
||||||
|
pub servers: HashMap<String, EuphServer>,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,12 @@ impl Config {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn euph_room(&self, name: &str) -> EuphRoom {
|
pub fn euph_room(&self, domain: &str, name: &str) -> EuphRoom {
|
||||||
self.euph.rooms.get(name).cloned().unwrap_or_default()
|
if let Some(server) = self.euph.servers.get(domain) {
|
||||||
|
if let Some(room) = server.rooms.get(name) {
|
||||||
|
return room.clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EuphRoom::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,15 +94,12 @@ impl Rooms {
|
||||||
};
|
};
|
||||||
|
|
||||||
if !config.offline {
|
if !config.offline {
|
||||||
for (name, config) in &config.euph.rooms {
|
for (domain, server) in &config.euph.servers {
|
||||||
if config.autojoin {
|
for (name, room) in &server.rooms {
|
||||||
result
|
if room.autojoin {
|
||||||
.connect_to_room(RoomIdentifier {
|
let id = RoomIdentifier::new(domain.clone(), name.clone());
|
||||||
// TODO Remove hardcoded domain
|
result.connect_to_room(id).await;
|
||||||
domain: "euphoria.leet.nu".to_string(),
|
}
|
||||||
name: name.clone(),
|
|
||||||
})
|
|
||||||
.await;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -133,7 +130,7 @@ impl Rooms {
|
||||||
EuphRoom::new(
|
EuphRoom::new(
|
||||||
self.config,
|
self.config,
|
||||||
server.config.clone(),
|
server.config.clone(),
|
||||||
self.config.euph_room(&room.name),
|
self.config.euph_room(&room.domain, &room.name),
|
||||||
self.vault.euph().room(room),
|
self.vault.euph().room(room),
|
||||||
self.ui_event_tx.clone(),
|
self.ui_event_tx.clone(),
|
||||||
)
|
)
|
||||||
|
|
@ -149,7 +146,7 @@ impl Rooms {
|
||||||
EuphRoom::new(
|
EuphRoom::new(
|
||||||
self.config,
|
self.config,
|
||||||
server.config.clone(),
|
server.config.clone(),
|
||||||
self.config.euph_room(&room.name),
|
self.config.euph_room(&room.domain, &room.name),
|
||||||
self.vault.euph().room(room),
|
self.vault.euph().room(room),
|
||||||
self.ui_event_tx.clone(),
|
self.ui_event_tx.clone(),
|
||||||
)
|
)
|
||||||
|
|
@ -189,14 +186,21 @@ impl Rooms {
|
||||||
/// - rooms that were deleted from the db.
|
/// - rooms that were deleted from the db.
|
||||||
async fn stabilize_rooms(&mut self) {
|
async fn stabilize_rooms(&mut self) {
|
||||||
// Collect all rooms from the db and config file
|
// Collect all rooms from the db and config file
|
||||||
let rooms = logging_unwrap!(self.vault.euph().rooms().await);
|
let rooms_from_db = logging_unwrap!(self.vault.euph().rooms().await);
|
||||||
let mut rooms_set = rooms
|
let rooms_from_config = self
|
||||||
|
.config
|
||||||
|
.euph
|
||||||
|
.servers
|
||||||
|
.iter()
|
||||||
|
.flat_map(|(domain, server)| {
|
||||||
|
server
|
||||||
|
.rooms
|
||||||
|
.keys()
|
||||||
|
.map(|name| RoomIdentifier::new(domain.clone(), name.clone()))
|
||||||
|
});
|
||||||
|
let mut rooms_set = rooms_from_db
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.chain(self.config.euph.rooms.keys().map(|name| RoomIdentifier {
|
.chain(rooms_from_config)
|
||||||
// TODO Remove hardcoded domain
|
|
||||||
domain: "euphoria.leet.nu".to_string(),
|
|
||||||
name: name.clone(),
|
|
||||||
}))
|
|
||||||
.collect::<HashSet<_>>();
|
.collect::<HashSet<_>>();
|
||||||
|
|
||||||
// Prevent room that is currently being shown from being removed. This
|
// Prevent room that is currently being shown from being removed. This
|
||||||
|
|
@ -510,27 +514,17 @@ impl Rooms {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if event.matches(&keys.rooms.action.connect_autojoin) {
|
if event.matches(&keys.rooms.action.connect_autojoin) {
|
||||||
for (name, options) in &self.config.euph.rooms {
|
for (domain, server) in &self.config.euph.servers {
|
||||||
if options.autojoin {
|
for name in server.rooms.keys() {
|
||||||
let room = RoomIdentifier {
|
let id = RoomIdentifier::new(domain.clone(), name.clone());
|
||||||
// TODO Remove hardcoded domain
|
self.connect_to_room(id).await;
|
||||||
domain: "euphoria.leet.nu".to_string(),
|
|
||||||
name: name.clone(),
|
|
||||||
};
|
|
||||||
self.connect_to_room(room).await;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if event.matches(&keys.rooms.action.disconnect_non_autojoin) {
|
if event.matches(&keys.rooms.action.disconnect_non_autojoin) {
|
||||||
for (id, room) in &mut self.euph_rooms {
|
for (id, room) in &mut self.euph_rooms {
|
||||||
let autojoin = self
|
let autojoin = self.config.euph_room(&id.domain, &id.name).autojoin;
|
||||||
.config
|
|
||||||
.euph
|
|
||||||
.rooms
|
|
||||||
.get(&id.name) // TODO Respect domain
|
|
||||||
.map(|r| r.autojoin)
|
|
||||||
.unwrap_or(false);
|
|
||||||
if !autojoin {
|
if !autojoin {
|
||||||
room.disconnect();
|
room.disconnect();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue