Remove participants from live-kit rooms when they leave zed rooms
This commit is contained in:
parent
c9225bb87c
commit
cce00526b9
4 changed files with 71 additions and 29 deletions
|
@ -4,7 +4,7 @@ use collections::{btree_map, BTreeMap, BTreeSet, HashMap, HashSet};
|
|||
use nanoid::nanoid;
|
||||
use rpc::{proto, ConnectionId};
|
||||
use serde::Serialize;
|
||||
use std::{mem, path::PathBuf, str, time::Duration};
|
||||
use std::{borrow::Cow, mem, path::PathBuf, str, time::Duration};
|
||||
use time::OffsetDateTime;
|
||||
use tracing::instrument;
|
||||
use util::post_inc;
|
||||
|
@ -85,12 +85,12 @@ pub struct Channel {
|
|||
pub type ReplicaId = u16;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct RemovedConnectionState {
|
||||
pub struct RemovedConnectionState<'a> {
|
||||
pub user_id: UserId,
|
||||
pub hosted_projects: Vec<Project>,
|
||||
pub guest_projects: Vec<LeftProject>,
|
||||
pub contact_ids: HashSet<UserId>,
|
||||
pub room_id: Option<RoomId>,
|
||||
pub room: Option<Cow<'a, proto::Room>>,
|
||||
pub canceled_call_connection_ids: Vec<ConnectionId>,
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ pub struct LeftProject {
|
|||
}
|
||||
|
||||
pub struct LeftRoom<'a> {
|
||||
pub room: Option<&'a proto::Room>,
|
||||
pub room: Cow<'a, proto::Room>,
|
||||
pub unshared_projects: Vec<Project>,
|
||||
pub left_projects: Vec<LeftProject>,
|
||||
pub canceled_call_connection_ids: Vec<ConnectionId>,
|
||||
|
@ -218,7 +218,7 @@ impl Store {
|
|||
let left_room = self.leave_room(room_id, connection_id)?;
|
||||
result.hosted_projects = left_room.unshared_projects;
|
||||
result.guest_projects = left_room.left_projects;
|
||||
result.room_id = Some(room_id);
|
||||
result.room = Some(Cow::Owned(left_room.room.into_owned()));
|
||||
result.canceled_call_connection_ids = left_room.canceled_call_connection_ids;
|
||||
}
|
||||
|
||||
|
@ -495,12 +495,14 @@ impl Store {
|
|||
}
|
||||
});
|
||||
|
||||
if room.participants.is_empty() && room.pending_participant_user_ids.is_empty() {
|
||||
self.rooms.remove(&room_id);
|
||||
}
|
||||
let room = if room.participants.is_empty() && room.pending_participant_user_ids.is_empty() {
|
||||
Cow::Owned(self.rooms.remove(&room_id).unwrap())
|
||||
} else {
|
||||
Cow::Borrowed(self.rooms.get(&room_id).unwrap())
|
||||
};
|
||||
|
||||
Ok(LeftRoom {
|
||||
room: self.rooms.get(&room_id),
|
||||
room,
|
||||
unshared_projects,
|
||||
left_projects,
|
||||
canceled_call_connection_ids,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue