diff --git a/README.md b/README.md index 9fa82d1..c5a0684 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,8 @@ stdin. ### Key bindings -- F1: toggle voice transmission +- F1: toggle deafen (mute + deaf) +- F4: toggle voice transmission - Ctrl+L: clear chat log - Tab: toggle focus between chat and user tree - Page Up: scroll chat up diff --git a/barnard.go b/barnard.go index af24b66..ccb6c4b 100644 --- a/barnard.go +++ b/barnard.go @@ -23,7 +23,8 @@ type Barnard struct { TreeWidth int LogFile *os.File - Stream *gumbleopenal.Stream + Stream *gumbleopenal.Stream + transmitting bool Ui *uiterm.Ui UiOutput uiterm.Textview diff --git a/ui.go b/ui.go index 20661f0..7248b43 100644 --- a/ui.go +++ b/ui.go @@ -44,18 +44,56 @@ func (b *Barnard) AddOutputMessage(sender *gumble.User, message string) { } } -func (b *Barnard) OnVoiceToggle(ui *uiterm.Ui, key uiterm.Key) { - if b.UiStatus.Text == " Tx " { +func (b *Barnard) updateStatus() { + if b.Client == nil || b.Client.Self == nil { + return + } + if b.Client.Self.SelfDeafened { + b.UiStatus.Text = " Deaf " + b.UiStatus.Fg = uiterm.ColorWhite | uiterm.AttrBold + b.UiStatus.Bg = uiterm.ColorBlue + } else if b.transmitting { + b.UiStatus.Text = " Tx " + b.UiStatus.Fg = uiterm.ColorWhite | uiterm.AttrBold + b.UiStatus.Bg = uiterm.ColorRed + } else { b.UiStatus.Text = " Idle " b.UiStatus.Fg = uiterm.ColorBlack b.UiStatus.Bg = uiterm.ColorWhite + } +} + +func (b *Barnard) OnDeafenToggle(ui *uiterm.Ui, key uiterm.Key) { + if b.Client == nil || b.Client.Self == nil { + return + } + deaf := !b.Client.Self.SelfDeafened + b.Client.Self.SetSelfDeafened(deaf) + if deaf && b.transmitting { + b.transmitting = false + b.Stream.StopSource() + } + b.debugf("deafen=%v", deaf) + b.updateStatus() + ui.Refresh() +} + +func (b *Barnard) OnVoiceToggle(ui *uiterm.Ui, key uiterm.Key) { + if b.Client == nil || b.Client.Self == nil { + return + } + if b.Client.Self.SelfDeafened { + return + } + if b.transmitting { + b.transmitting = false b.Stream.StopSource() } else { - b.UiStatus.Fg = uiterm.ColorWhite | uiterm.AttrBold - b.UiStatus.Bg = uiterm.ColorRed - b.UiStatus.Text = " Tx " + b.transmitting = true b.Stream.StartSource() } + b.debugf("transmit=%v", b.transmitting) + b.updateStatus() ui.Refresh() } @@ -150,7 +188,8 @@ func (b *Barnard) OnUiInitialize(ui *uiterm.Ui) { ui.Add(uiViewTree, &b.UiTree) b.Ui.AddKeyListener(b.OnFocusPress, uiterm.KeyTab) - b.Ui.AddKeyListener(b.OnVoiceToggle, uiterm.KeyF1) + b.Ui.AddKeyListener(b.OnDeafenToggle, uiterm.KeyF1) + b.Ui.AddKeyListener(b.OnVoiceToggle, uiterm.KeyF4) b.Ui.AddKeyListener(b.OnQuitPress, uiterm.KeyF10) b.Ui.AddKeyListener(b.OnClearPress, uiterm.KeyCtrlL) b.Ui.AddKeyListener(b.OnScrollOutputUp, uiterm.KeyPgup)