First attempt didn't work.
This commit is contained in:
@@ -161,7 +161,6 @@ func (b *Barnard) OnConnect(e *gumble.ConnectEvent) {
|
||||
b.MutedChannels = make(map[uint32]bool)
|
||||
b.MutedChannelsMutex.Unlock()
|
||||
b.userChannels = make(map[uint32]*gumble.Channel)
|
||||
b.userAudioStates = make(map[uint32]userAudioState)
|
||||
b.RecordingMutex.Lock()
|
||||
b.recordingAllowed = nil
|
||||
b.recordingStarting = false
|
||||
@@ -183,7 +182,6 @@ func (b *Barnard) OnConnect(e *gumble.ConnectEvent) {
|
||||
for _, u := range users {
|
||||
b.UserConfig.UpdateUser(u)
|
||||
b.rememberUserChannel(u)
|
||||
b.rememberUserAudioState(u)
|
||||
}
|
||||
|
||||
b.UpdateInputStatus(fmt.Sprintf("[%s]", e.Client.Self.Channel.Name))
|
||||
@@ -391,7 +389,6 @@ func (b *Barnard) OnUserChange(e *gumble.UserChangeEvent) {
|
||||
b.AddOutputLine(formatUserStats(e.User))
|
||||
}
|
||||
b.updateUserChannel(e)
|
||||
b.updateUserAudioState(e)
|
||||
b.postUI(func() {
|
||||
b.RebuildUserChannelTreePreservingSelection()
|
||||
b.Ui.Refresh()
|
||||
@@ -405,11 +402,6 @@ type userChangeNotification struct {
|
||||
line string
|
||||
}
|
||||
|
||||
type userAudioState struct {
|
||||
selfMuted bool
|
||||
selfDeafened bool
|
||||
}
|
||||
|
||||
func (b *Barnard) userChangeNotification(e *gumble.UserChangeEvent) (userChangeNotification, bool) {
|
||||
if e == nil || e.User == nil || b.Client == nil || b.Client.Self == nil || b.Client.Self.Channel == nil {
|
||||
return userChangeNotification{}, false
|
||||
@@ -441,7 +433,7 @@ func (b *Barnard) userChangeNotification(e *gumble.UserChangeEvent) (userChangeN
|
||||
}
|
||||
|
||||
func (b *Barnard) userAudioChangeNotification(e *gumble.UserChangeEvent) (userChangeNotification, bool) {
|
||||
if e == nil || e.User == nil || !e.Type.Has(gumble.UserChangeAudio) || b.Client == nil || b.Client.Self == nil || b.Client.Self.Channel == nil {
|
||||
if e == nil || e.User == nil || (e.SelfMute == nil && e.SelfDeaf == nil) || b.Client == nil || b.Client.Self == nil || b.Client.Self.Channel == nil {
|
||||
return userChangeNotification{}, false
|
||||
}
|
||||
// Barnard announces its own hotkey actions immediately. The protocol echo
|
||||
@@ -449,53 +441,29 @@ func (b *Barnard) userAudioChangeNotification(e *gumble.UserChangeEvent) (userCh
|
||||
if e.User.Session == b.Client.Self.Session {
|
||||
return userChangeNotification{}, false
|
||||
}
|
||||
previous, known := b.userAudioStates[e.User.Session]
|
||||
if !known || !sameChannel(e.User.Channel, b.Client.Self.Channel) {
|
||||
if !sameChannel(e.User.Channel, b.Client.Self.Channel) {
|
||||
return userChangeNotification{}, false
|
||||
}
|
||||
|
||||
muteEvent, muteVerb := "", ""
|
||||
if previous.selfMuted != e.User.SelfMuted {
|
||||
if e.User.SelfMuted {
|
||||
muteEvent, muteVerb = "mute", "muted"
|
||||
} else {
|
||||
muteEvent, muteVerb = "unmute", "unmuted"
|
||||
}
|
||||
event, state := "unmute", "unmuted"
|
||||
if e.User.SelfDeafened {
|
||||
event, state = "mutedeafen", "muted and deafened"
|
||||
} else if e.User.SelfMuted {
|
||||
event, state = "mute", "muted"
|
||||
}
|
||||
deafenEvent, deafenVerb := "", ""
|
||||
if previous.selfDeafened != e.User.SelfDeafened {
|
||||
if e.User.SelfDeafened {
|
||||
deafenEvent, deafenVerb = "deafen", "deafened"
|
||||
} else {
|
||||
deafenEvent, deafenVerb = "undeafen", "undeafened"
|
||||
}
|
||||
}
|
||||
|
||||
event := muteEvent + deafenEvent
|
||||
verbs := make([]string, 0, 2)
|
||||
if muteVerb != "" {
|
||||
verbs = append(verbs, muteVerb)
|
||||
}
|
||||
if deafenVerb != "" {
|
||||
verbs = append(verbs, deafenVerb)
|
||||
}
|
||||
if event == "" {
|
||||
return userChangeNotification{}, false
|
||||
}
|
||||
verb := strings.Join(verbs, " and ")
|
||||
return userChangeNotification{
|
||||
event: event,
|
||||
who: e.User.Name,
|
||||
what: e.User.Channel.Name,
|
||||
line: fmt.Sprintf("%s %s", e.User.Name, verb),
|
||||
line: fmt.Sprintf("%s is now %s", e.User.Name, state),
|
||||
}, true
|
||||
}
|
||||
|
||||
func (b *Barnard) restoreTransmissionAfterUndeafen(e *gumble.UserChangeEvent) {
|
||||
if e == nil || e.User == nil || !e.Type.Has(gumble.UserChangeAudio) || b.Client == nil || b.Client.Self == nil {
|
||||
if e == nil || e.User == nil || e.SelfDeaf == nil || b.Client == nil || b.Client.Self == nil {
|
||||
return
|
||||
}
|
||||
if e.User.Session != b.Client.Self.Session || e.User.SelfDeafened || !b.shouldTransmitOnUndeafen() {
|
||||
if e.User.Session != b.Client.Self.Session || *e.SelfDeaf || !b.shouldTransmitOnUndeafen() {
|
||||
return
|
||||
}
|
||||
b.setTransmitOnUndeafen(false)
|
||||
@@ -548,30 +516,6 @@ func (b *Barnard) updateUserChannel(e *gumble.UserChangeEvent) {
|
||||
b.rememberUserChannel(e.User)
|
||||
}
|
||||
|
||||
func (b *Barnard) rememberUserAudioState(user *gumble.User) {
|
||||
if user == nil {
|
||||
return
|
||||
}
|
||||
if b.userAudioStates == nil {
|
||||
b.userAudioStates = make(map[uint32]userAudioState)
|
||||
}
|
||||
b.userAudioStates[user.Session] = userAudioState{
|
||||
selfMuted: user.SelfMuted,
|
||||
selfDeafened: user.SelfDeafened,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Barnard) updateUserAudioState(e *gumble.UserChangeEvent) {
|
||||
if e == nil || e.User == nil {
|
||||
return
|
||||
}
|
||||
if e.Type.Has(gumble.UserChangeDisconnected) {
|
||||
delete(b.userAudioStates, e.User.Session)
|
||||
return
|
||||
}
|
||||
b.rememberUserAudioState(e.User)
|
||||
}
|
||||
|
||||
func (b *Barnard) OnChannelChange(e *gumble.ChannelChangeEvent) {
|
||||
b.UpdateInputStatus(fmt.Sprintf("[%s]", e.Channel.Name))
|
||||
if e.Type.Has(gumble.ChannelChangeDescription) {
|
||||
|
||||
Reference in New Issue
Block a user