CurrentView = 0
)
-func guiQuit(gui *gocui.Gui, v *gocui.View) error {
- Finish <- struct{}{}
- return gocui.ErrQuit
-}
-
-func mute(gui *gocui.Gui, v *gocui.View) error {
- muteToggle()
- return nil
-}
-
func tabHandle(gui *gocui.Gui, v *gocui.View) error {
sids := make([]int, 0, len(Streams)+1)
sids = append(sids, -1)
sids = append(sids, int(sid))
}
sort.Ints(sids)
- var stream *Stream
for _, sid := range sids {
- stream = Streams[byte(sid)]
+ stream := Streams[byte(sid)]
v, err = gui.SetView(stream.name, 0, prevY, maxX/2-1, prevY+2)
if err != nil {
if err != gocui.ErrUnknownView {
v.Title = ">" + stream.name + "<"
} else {
v.Title = stream.name
+ if err := GUI.SetKeybinding(
+ stream.name, gocui.KeyEnter, gocui.ModNone, func(*gocui.Gui, *gocui.View) error {
+ stream.silenced = !stream.silenced
+ return nil
+ },
+ ); err != nil {
+ return err
+ }
}
}
_, err = gui.SetView(stream.name+"-vol", maxX/2, prevY, maxX-1, prevY+2)
)
type Stream struct {
- name string
- ctr uint32
- actr uint32
- muted bool
- in chan []byte
- stats *Stats
+ name string
+ ctr uint32
+ actr uint32
+ muted bool
+ silenced bool
+ in chan []byte
+ stats *Stats
}
var (
if err := GUI.SetKeybinding("", gocui.KeyTab, gocui.ModNone, tabHandle); err != nil {
log.Fatal(err)
}
- if err := GUI.SetKeybinding("", gocui.KeyF1, gocui.ModNone, mute); err != nil {
+ if err := GUI.SetKeybinding("", gocui.KeyF1, gocui.ModNone,
+ func(gui *gocui.Gui, v *gocui.View) error {
+ muteToggle()
+ return nil
+ },
+ ); err != nil {
log.Fatal(err)
}
- if err := GUI.SetKeybinding("", gocui.KeyF10, gocui.ModNone, guiQuit); err != nil {
+ if err := GUI.SetKeybinding("", gocui.KeyF10, gocui.ModNone,
+ func(gui *gocui.Gui, v *gocui.View) error {
+ Finish <- struct{}{}
+ return gocui.ErrQuit
+ },
+ ); err != nil {
log.Fatal(err)
}
if !ok {
break
}
+ if stream.silenced {
+ continue
+ }
if _, err = io.Copy(player,
bytes.NewReader(pcmbuf)); err != nil {
log.Println("play:", err)
if s.name == *Name && Muted {
l += " | " + vors.CRed + "MUTE" + vors.CReset
} else {
- if s.muted {
- l += " | " + vors.CRed + "MUTE" + vors.CReset
+ if s.silenced {
+ l += " | " + vors.CMagenta + "SILENT" + vors.CReset
}
if s.stats.last.Add(vors.ScreenRefresh).After(now) {
l += " | " + vors.CGreen + "TALK" + vors.CReset
}
+ if s.muted {
+ l += " | " + vors.CRed + "MUTE" + vors.CReset
+ }
}
v, err = GUI.View(s.name)
if err == nil {
@item Rooms, optionally password protected. Peers are able to broadcast
text message to everyone in the room.
+@item Ability to silence specified peer in the room.
+
@item Fancy TUI client with mute-toggle ability by external utilities.
@end itemize
)
var (
- CGreen string
- CRed string
- CReset string
+ CGreen string
+ CRed string
+ CMagenta string
+ CReset string
)
func init() {
t := term.NewTerminal(&b, "")
CGreen = string(t.Escape.Green)
CRed = string(t.Escape.Red)
+ CMagenta = string(t.Escape.Magenta)
CReset = string(t.Escape.Reset)
}