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)