Redesign default tree controls
This commit is contained in:
+30
-10
@@ -95,12 +95,12 @@ func (c *Config) LoadConfig() {
|
||||
jc = exportableConfig{}
|
||||
jc.Hotkeys = &Hotkeys{
|
||||
Talk: key(uiterm.KeyF1),
|
||||
VolumeDown: key(uiterm.KeyF5),
|
||||
VolumeUp: key(uiterm.KeyF6),
|
||||
VolumeReset: key(uiterm.KeyF8),
|
||||
VolumeDown: key(uiterm.KeyArrowLeft),
|
||||
VolumeUp: key(uiterm.KeyArrowRight),
|
||||
VolumeReset: key(uiterm.KeyBackspace),
|
||||
MuteToggle: key(uiterm.KeyF7), // Added mute toggle hotkey
|
||||
RecordToggle: key(uiterm.KeyCtrlR),
|
||||
Exit: key(uiterm.KeyF10),
|
||||
Exit: key(uiterm.KeyCtrlQ),
|
||||
ToggleTimestamps: key(uiterm.KeyF3),
|
||||
SwitchViews: key(uiterm.KeyTab),
|
||||
ClearOutput: key(uiterm.KeyCtrlL),
|
||||
@@ -108,7 +108,7 @@ func (c *Config) LoadConfig() {
|
||||
ScrollDown: key(uiterm.KeyPgdn),
|
||||
ScrollToTop: key(uiterm.KeyHome),
|
||||
ScrollToBottom: key(uiterm.KeyEnd),
|
||||
AdminMenu: key(uiterm.KeyF11),
|
||||
AdminMenu: key(uiterm.KeyF10),
|
||||
NoiseSuppressionToggle: key(uiterm.KeyF9),
|
||||
AGCToggle: key(uiterm.KeyF12),
|
||||
}
|
||||
@@ -182,12 +182,12 @@ func (c *Config) ensureHotkeys() {
|
||||
}
|
||||
defaults := Hotkeys{
|
||||
Talk: key(uiterm.KeyF1),
|
||||
VolumeDown: key(uiterm.KeyF5),
|
||||
VolumeUp: key(uiterm.KeyF6),
|
||||
VolumeReset: key(uiterm.KeyF8),
|
||||
VolumeDown: key(uiterm.KeyArrowLeft),
|
||||
VolumeUp: key(uiterm.KeyArrowRight),
|
||||
VolumeReset: key(uiterm.KeyBackspace),
|
||||
MuteToggle: key(uiterm.KeyF7),
|
||||
RecordToggle: key(uiterm.KeyCtrlR),
|
||||
Exit: key(uiterm.KeyF10),
|
||||
Exit: key(uiterm.KeyCtrlQ),
|
||||
ToggleTimestamps: key(uiterm.KeyF3),
|
||||
SwitchViews: key(uiterm.KeyTab),
|
||||
ClearOutput: key(uiterm.KeyCtrlL),
|
||||
@@ -195,7 +195,7 @@ func (c *Config) ensureHotkeys() {
|
||||
ScrollDown: key(uiterm.KeyPgdn),
|
||||
ScrollToTop: key(uiterm.KeyHome),
|
||||
ScrollToBottom: key(uiterm.KeyEnd),
|
||||
AdminMenu: key(uiterm.KeyF11),
|
||||
AdminMenu: key(uiterm.KeyF10),
|
||||
NoiseSuppressionToggle: key(uiterm.KeyF9),
|
||||
AGCToggle: key(uiterm.KeyF12),
|
||||
}
|
||||
@@ -309,6 +309,26 @@ func (c *Config) ToggleMute(u *gumble.User) error {
|
||||
return c.saveConfigLocked()
|
||||
}
|
||||
|
||||
// ResetUserAudio restores and saves the default incoming audio settings for
|
||||
// each user on the given server.
|
||||
func (c *Config) ResetUserAudio(address string, users []*gumble.User) error {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
for _, u := range users {
|
||||
if u == nil {
|
||||
continue
|
||||
}
|
||||
storedUser := c.findUser(address, u.Name)
|
||||
storedUser.Boost = 1
|
||||
storedUser.Volume = 1.0
|
||||
storedUser.LocallyMuted = false
|
||||
u.SetBoost(1)
|
||||
u.SetVolume(1.0)
|
||||
u.SetLocallyMuted(false)
|
||||
}
|
||||
return c.saveConfigLocked()
|
||||
}
|
||||
|
||||
func (c *Config) SetMicVolume(v float32) {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"git.stormux.org/storm/barnard/gumble/gumble"
|
||||
"git.stormux.org/storm/barnard/uiterm"
|
||||
)
|
||||
|
||||
@@ -51,8 +52,8 @@ func TestConfigBackfillsRecordingDefaults(t *testing.T) {
|
||||
if cfg.GetHotkeys().AdminMenu == nil {
|
||||
t.Fatal("expected admin menu hotkey to be backfilled")
|
||||
}
|
||||
if got := *cfg.GetHotkeys().AdminMenu; got != uiterm.KeyF11 {
|
||||
t.Fatalf("expected admin menu f11, got %s", got)
|
||||
if got := *cfg.GetHotkeys().AdminMenu; got != uiterm.KeyF10 {
|
||||
t.Fatalf("expected admin menu f10, got %s", got)
|
||||
}
|
||||
for name, got := range map[string]*uiterm.Key{
|
||||
"clear output": cfg.GetHotkeys().ClearOutput,
|
||||
@@ -74,6 +75,66 @@ func TestConfigBackfillsRecordingDefaults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewHotkeyDefaults(t *testing.T) {
|
||||
configPath := filepath.Join(t.TempDir(), "barnard.toml")
|
||||
cfg := NewConfig(&configPath)
|
||||
if err := cfg.SaveConfig(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
hotkeys := NewConfig(&configPath).GetHotkeys()
|
||||
tests := []struct {
|
||||
name string
|
||||
got *uiterm.Key
|
||||
want uiterm.Key
|
||||
}{
|
||||
{name: "volume down", got: hotkeys.VolumeDown, want: uiterm.KeyArrowLeft},
|
||||
{name: "volume up", got: hotkeys.VolumeUp, want: uiterm.KeyArrowRight},
|
||||
{name: "volume reset", got: hotkeys.VolumeReset, want: uiterm.KeyBackspace},
|
||||
{name: "actions menu", got: hotkeys.AdminMenu, want: uiterm.KeyF10},
|
||||
{name: "exit", got: hotkeys.Exit, want: uiterm.KeyCtrlQ},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
if tt.got == nil || *tt.got != tt.want {
|
||||
t.Errorf("%s default = %v, want %s", tt.name, tt.got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestExplicitLegacyHotkeysRemainConfigured(t *testing.T) {
|
||||
configPath := filepath.Join(t.TempDir(), "barnard.toml")
|
||||
data := []byte("[hotkeys]\nvolumedown = \"f5\"\nvolumeup = \"f6\"\nvolumereset = \"f8\"\nadminmenu = \"f11\"\nexit = \"f10\"\n")
|
||||
if err := os.WriteFile(configPath, data, 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
hotkeys := NewConfig(&configPath).GetHotkeys()
|
||||
if *hotkeys.VolumeDown != uiterm.KeyF5 || *hotkeys.VolumeUp != uiterm.KeyF6 ||
|
||||
*hotkeys.VolumeReset != uiterm.KeyF8 || *hotkeys.AdminMenu != uiterm.KeyF11 ||
|
||||
*hotkeys.Exit != uiterm.KeyF10 {
|
||||
t.Fatalf("explicit legacy hotkeys were replaced: %+v", hotkeys)
|
||||
}
|
||||
}
|
||||
|
||||
func TestResetUserAudioRestoresAndPersistsDefaults(t *testing.T) {
|
||||
configPath := filepath.Join(t.TempDir(), "barnard.toml")
|
||||
cfg := NewConfig(&configPath)
|
||||
user := &gumble.User{Name: "Username"}
|
||||
user.SetBoost(4)
|
||||
user.SetVolume(0.4)
|
||||
user.SetLocallyMuted(true)
|
||||
|
||||
if err := cfg.ResetUserAudio("example.test:64738", []*gumble.User{user}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if user.Boost() != 1 || user.Volume() != 1.0 || user.LocallyMuted() {
|
||||
t.Fatalf("runtime audio was not reset: boost=%d volume=%v muted=%v", user.Boost(), user.Volume(), user.LocallyMuted())
|
||||
}
|
||||
storedUser := cfg.findUser("example.test:64738", user.Name)
|
||||
if storedUser.Boost != 1 || storedUser.Volume != 1.0 || storedUser.LocallyMuted {
|
||||
t.Fatalf("saved audio was not reset: %+v", storedUser)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAGCDefaultsOnAndPersists(t *testing.T) {
|
||||
configPath := filepath.Join(t.TempDir(), "barnard.toml")
|
||||
if err := os.WriteFile(configPath, []byte("[hotkeys]\ntalk = \"f1\"\n"), 0600); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user