diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index 04ba61a2b..5898a4b2e 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -266,6 +266,27 @@ func (p *ParticipantImpl) GetBufferFactory() *buffer.Factory { return p.params.Config.BufferFactory } +// SetName attaches name to the participant +func (p *ParticipantImpl) SetName(name string) { + p.lock.Lock() + changed := p.grants.Name != name + p.grants.Name = name + onParticipantUpdate := p.onParticipantUpdate + onClaimsChanged := p.onClaimsChanged + p.lock.Unlock() + + if !changed { + return + } + + if onParticipantUpdate != nil { + onParticipantUpdate(p) + } + if onClaimsChanged != nil { + onClaimsChanged(p) + } +} + // SetMetadata attaches metadata to the participant func (p *ParticipantImpl) SetMetadata(metadata string) { p.lock.Lock() @@ -351,7 +372,7 @@ func (p *ParticipantImpl) ToProto() *livekit.ParticipantInfo { info := &livekit.ParticipantInfo{ Sid: string(p.params.SID), Identity: string(p.params.Identity), - Name: string(p.params.Name), + Name: p.grants.Name, State: p.State(), JoinedAt: p.ConnectedAt().Unix(), Version: p.version.Inc(), diff --git a/pkg/rtc/types/interfaces.go b/pkg/rtc/types/interfaces.go index 6efa176f2..1c614a2a9 100644 --- a/pkg/rtc/types/interfaces.go +++ b/pkg/rtc/types/interfaces.go @@ -176,6 +176,7 @@ type Participant interface { ToProto() *livekit.ParticipantInfo + SetName(name string) SetMetadata(metadata string) GetPublishedTrack(sid livekit.TrackID) MediaTrack diff --git a/pkg/rtc/types/typesfakes/fake_local_participant.go b/pkg/rtc/types/typesfakes/fake_local_participant.go index 557931f97..b4ecf7911 100644 --- a/pkg/rtc/types/typesfakes/fake_local_participant.go +++ b/pkg/rtc/types/typesfakes/fake_local_participant.go @@ -612,6 +612,11 @@ type FakeLocalParticipant struct { setICEConfigArgsForCall []struct { arg1 types.IceConfig } + SetNameStub func(string) + setNameMutex sync.RWMutex + setNameArgsForCall []struct { + arg1 string + } SetMetadataStub func(string) setMetadataMutex sync.RWMutex setMetadataArgsForCall []struct { @@ -4006,6 +4011,38 @@ func (fake *FakeLocalParticipant) SetICEConfigArgsForCall(i int) types.IceConfig return argsForCall.arg1 } +func (fake *FakeLocalParticipant) SetName(arg1 string) { + fake.setNameMutex.Lock() + fake.setNameArgsForCall = append(fake.setNameArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.SetNameStub + fake.recordInvocation("SetName", []interface{}{arg1}) + fake.setNameMutex.Unlock() + if stub != nil { + fake.SetNameStub(arg1) + } +} + +func (fake *FakeLocalParticipant) SetNameCallCount() int { + fake.setNameMutex.RLock() + defer fake.setNameMutex.RUnlock() + return len(fake.setNameArgsForCall) +} + +func (fake *FakeLocalParticipant) SetNameCalls(stub func(string)) { + fake.setNameMutex.Lock() + defer fake.setNameMutex.Unlock() + fake.SetNameStub = stub +} + +func (fake *FakeLocalParticipant) SetNameArgsForCall(i int) string { + fake.setNameMutex.RLock() + defer fake.setNameMutex.RUnlock() + argsForCall := fake.setNameArgsForCall[i] + return argsForCall.arg1 +} + func (fake *FakeLocalParticipant) SetMetadata(arg1 string) { fake.setMetadataMutex.Lock() fake.setMetadataArgsForCall = append(fake.setMetadataArgsForCall, struct { diff --git a/pkg/rtc/types/typesfakes/fake_participant.go b/pkg/rtc/types/typesfakes/fake_participant.go index fc700d799..52dc94b11 100644 --- a/pkg/rtc/types/typesfakes/fake_participant.go +++ b/pkg/rtc/types/typesfakes/fake_participant.go @@ -120,6 +120,11 @@ type FakeParticipant struct { arg2 livekit.TrackID arg3 bool } + SetNameStub func(string) + setNameMutex sync.RWMutex + setNameArgsForCall []struct { + arg1 string + } SetMetadataStub func(string) setMetadataMutex sync.RWMutex setMetadataArgsForCall []struct { @@ -754,6 +759,38 @@ func (fake *FakeParticipant) RemoveSubscriberArgsForCall(i int) (types.LocalPart return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3 } +func (fake *FakeParticipant) SetName(arg1 string) { + fake.setNameMutex.Lock() + fake.setNameArgsForCall = append(fake.setNameArgsForCall, struct { + arg1 string + }{arg1}) + stub := fake.SetNameStub + fake.recordInvocation("SetName", []interface{}{arg1}) + fake.setNameMutex.Unlock() + if stub != nil { + fake.SetNameStub(arg1) + } +} + +func (fake *FakeParticipant) SetNameCallCount() int { + fake.setNameMutex.RLock() + defer fake.setNameMutex.RUnlock() + return len(fake.setNameArgsForCall) +} + +func (fake *FakeParticipant) SetNameCalls(stub func(string)) { + fake.setNameMutex.Lock() + defer fake.setNameMutex.Unlock() + fake.SetNameStub = stub +} + +func (fake *FakeParticipant) SetNameArgsForCall(i int) string { + fake.setNameMutex.RLock() + defer fake.setNameMutex.RUnlock() + argsForCall := fake.setNameArgsForCall[i] + return argsForCall.arg1 +} + func (fake *FakeParticipant) SetMetadata(arg1 string) { fake.setMetadataMutex.Lock() fake.setMetadataArgsForCall = append(fake.setMetadataArgsForCall, struct { diff --git a/pkg/service/roommanager.go b/pkg/service/roommanager.go index 82de99c73..a949fe1ca 100644 --- a/pkg/service/roommanager.go +++ b/pkg/service/roommanager.go @@ -559,6 +559,9 @@ func (r *RoomManager) handleRTCMessage(ctx context.Context, roomName livekit.Roo } pLogger.Debugw("updating participant", "metadata", rm.UpdateParticipant.Metadata, "permission", rm.UpdateParticipant.Permission) + if rm.UpdateParticipant.Name != "" { + participant.SetName(rm.UpdateParticipant.Name) + } if rm.UpdateParticipant.Metadata != "" { participant.SetMetadata(rm.UpdateParticipant.Metadata) }