feat: relay_label in RoomParticipant + tagged remote participants
RoomParticipant.relay_label identifies which relay a participant is connected to. Local participants have None, federated participants get tagged with the peer relay's label when storing remote_participants. This enables clients to group participants by relay in the UI. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -686,6 +686,10 @@ pub struct RoomParticipant {
|
|||||||
pub fingerprint: String,
|
pub fingerprint: String,
|
||||||
/// Optional display name set by the client.
|
/// Optional display name set by the client.
|
||||||
pub alias: Option<String>,
|
pub alias: Option<String>,
|
||||||
|
/// Relay label — identifies which relay this participant is connected to.
|
||||||
|
/// None for local participants, Some("Relay B") for federated.
|
||||||
|
#[serde(default)]
|
||||||
|
pub relay_label: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reasons for ending a call.
|
/// Reasons for ending a call.
|
||||||
|
|||||||
@@ -539,7 +539,15 @@ async fn handle_signal(
|
|||||||
let total: usize = links.values().map(|l| l.active_rooms.len()).sum();
|
let total: usize = links.values().map(|l| l.active_rooms.len()).sum();
|
||||||
fm.metrics.federation_active_rooms.set(total as i64);
|
fm.metrics.federation_active_rooms.set(total as i64);
|
||||||
if let Some(link) = links.get_mut(peer_fp) {
|
if let Some(link) = links.get_mut(peer_fp) {
|
||||||
link.remote_participants.insert(room.clone(), participants.clone());
|
// Tag remote participants with their relay label
|
||||||
|
let tagged: Vec<_> = participants.iter().map(|p| {
|
||||||
|
let mut tagged = p.clone();
|
||||||
|
if tagged.relay_label.is_none() {
|
||||||
|
tagged.relay_label = Some(link.label.clone());
|
||||||
|
}
|
||||||
|
tagged
|
||||||
|
}).collect();
|
||||||
|
link.remote_participants.insert(room.clone(), tagged);
|
||||||
}
|
}
|
||||||
// Propagate to other peers
|
// Propagate to other peers
|
||||||
for (fp, link) in links.iter() {
|
for (fp, link) in links.iter() {
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ impl Room {
|
|||||||
.map(|p| wzp_proto::packet::RoomParticipant {
|
.map(|p| wzp_proto::packet::RoomParticipant {
|
||||||
fingerprint: p.fingerprint.clone().unwrap_or_default(),
|
fingerprint: p.fingerprint.clone().unwrap_or_default(),
|
||||||
alias: p.alias.clone(),
|
alias: p.alias.clone(),
|
||||||
|
relay_label: None, // local participant
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user