Add standards-aware recording
This commit is contained in:
+17
-16
@@ -1,23 +1,24 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"git.stormux.org/storm/barnard/uiterm"
|
||||
"git.stormux.org/storm/barnard/uiterm"
|
||||
)
|
||||
|
||||
type Hotkeys struct {
|
||||
Talk *uiterm.Key
|
||||
VolumeDown *uiterm.Key
|
||||
VolumeUp *uiterm.Key
|
||||
VolumeReset *uiterm.Key
|
||||
MuteToggle *uiterm.Key
|
||||
Exit *uiterm.Key
|
||||
ToggleTimestamps *uiterm.Key
|
||||
SwitchViews *uiterm.Key
|
||||
ClearOutput *uiterm.Key
|
||||
ScrollUp *uiterm.Key
|
||||
ScrollDown *uiterm.Key
|
||||
ScrollToTop *uiterm.Key
|
||||
ScrollToBottom *uiterm.Key
|
||||
NoiseSuppressionToggle *uiterm.Key
|
||||
CycleVoiceEffect *uiterm.Key
|
||||
Talk *uiterm.Key
|
||||
VolumeDown *uiterm.Key
|
||||
VolumeUp *uiterm.Key
|
||||
VolumeReset *uiterm.Key
|
||||
MuteToggle *uiterm.Key
|
||||
RecordToggle *uiterm.Key
|
||||
Exit *uiterm.Key
|
||||
ToggleTimestamps *uiterm.Key
|
||||
SwitchViews *uiterm.Key
|
||||
ClearOutput *uiterm.Key
|
||||
ScrollUp *uiterm.Key
|
||||
ScrollDown *uiterm.Key
|
||||
ScrollToTop *uiterm.Key
|
||||
ScrollToBottom *uiterm.Key
|
||||
NoiseSuppressionToggle *uiterm.Key
|
||||
CycleVoiceEffect *uiterm.Key
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ type exportableConfig struct {
|
||||
NoiseSuppressionThreshold *float32
|
||||
VoiceEffect *int
|
||||
Certificate *string
|
||||
RecordingFormat *string
|
||||
RecordingDirectory *string
|
||||
}
|
||||
|
||||
type server struct {
|
||||
@@ -75,6 +77,7 @@ func (c *Config) LoadConfig() {
|
||||
VolumeUp: key(uiterm.KeyF6),
|
||||
VolumeReset: key(uiterm.KeyF8),
|
||||
MuteToggle: key(uiterm.KeyF7), // Added mute toggle hotkey
|
||||
RecordToggle: key(uiterm.KeyCtrlR),
|
||||
Exit: key(uiterm.KeyF10),
|
||||
ToggleTimestamps: key(uiterm.KeyF3),
|
||||
SwitchViews: key(uiterm.KeyTab),
|
||||
@@ -95,6 +98,7 @@ func (c *Config) LoadConfig() {
|
||||
}
|
||||
}
|
||||
c.config = &jc
|
||||
c.ensureHotkeys()
|
||||
if c.config.MicVolume == nil {
|
||||
micvol := float32(1.0)
|
||||
jc.MicVolume = &micvol
|
||||
@@ -139,6 +143,75 @@ func (c *Config) LoadConfig() {
|
||||
cert := string("")
|
||||
jc.Certificate = &cert
|
||||
}
|
||||
if c.config.RecordingFormat == nil {
|
||||
format := string("flac")
|
||||
jc.RecordingFormat = &format
|
||||
}
|
||||
if c.config.RecordingDirectory == nil {
|
||||
dir := string("~/Audio")
|
||||
jc.RecordingDirectory = &dir
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Config) ensureHotkeys() {
|
||||
if c.config.Hotkeys == nil {
|
||||
c.config.Hotkeys = &Hotkeys{}
|
||||
}
|
||||
defaults := Hotkeys{
|
||||
Talk: key(uiterm.KeyF1),
|
||||
VolumeDown: key(uiterm.KeyF5),
|
||||
VolumeUp: key(uiterm.KeyF6),
|
||||
VolumeReset: key(uiterm.KeyF8),
|
||||
MuteToggle: key(uiterm.KeyF7),
|
||||
RecordToggle: key(uiterm.KeyCtrlR),
|
||||
Exit: key(uiterm.KeyF10),
|
||||
ToggleTimestamps: key(uiterm.KeyF3),
|
||||
SwitchViews: key(uiterm.KeyTab),
|
||||
ScrollUp: key(uiterm.KeyPgup),
|
||||
ScrollDown: key(uiterm.KeyPgdn),
|
||||
NoiseSuppressionToggle: key(uiterm.KeyF9),
|
||||
CycleVoiceEffect: key(uiterm.KeyF12),
|
||||
}
|
||||
hotkeys := c.config.Hotkeys
|
||||
if hotkeys.Talk == nil {
|
||||
hotkeys.Talk = defaults.Talk
|
||||
}
|
||||
if hotkeys.VolumeDown == nil {
|
||||
hotkeys.VolumeDown = defaults.VolumeDown
|
||||
}
|
||||
if hotkeys.VolumeUp == nil {
|
||||
hotkeys.VolumeUp = defaults.VolumeUp
|
||||
}
|
||||
if hotkeys.VolumeReset == nil {
|
||||
hotkeys.VolumeReset = defaults.VolumeReset
|
||||
}
|
||||
if hotkeys.MuteToggle == nil {
|
||||
hotkeys.MuteToggle = defaults.MuteToggle
|
||||
}
|
||||
if hotkeys.RecordToggle == nil {
|
||||
hotkeys.RecordToggle = defaults.RecordToggle
|
||||
}
|
||||
if hotkeys.Exit == nil {
|
||||
hotkeys.Exit = defaults.Exit
|
||||
}
|
||||
if hotkeys.ToggleTimestamps == nil {
|
||||
hotkeys.ToggleTimestamps = defaults.ToggleTimestamps
|
||||
}
|
||||
if hotkeys.SwitchViews == nil {
|
||||
hotkeys.SwitchViews = defaults.SwitchViews
|
||||
}
|
||||
if hotkeys.ScrollUp == nil {
|
||||
hotkeys.ScrollUp = defaults.ScrollUp
|
||||
}
|
||||
if hotkeys.ScrollDown == nil {
|
||||
hotkeys.ScrollDown = defaults.ScrollDown
|
||||
}
|
||||
if hotkeys.NoiseSuppressionToggle == nil {
|
||||
hotkeys.NoiseSuppressionToggle = defaults.NoiseSuppressionToggle
|
||||
}
|
||||
if hotkeys.CycleVoiceEffect == nil {
|
||||
hotkeys.CycleVoiceEffect = defaults.CycleVoiceEffect
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Config) findServer(address string) *server {
|
||||
@@ -284,6 +357,20 @@ func (c *Config) SetVoiceEffect(effect int) {
|
||||
c.SaveConfig()
|
||||
}
|
||||
|
||||
func (c *Config) GetRecordingFormat() string {
|
||||
if c.config.RecordingFormat == nil {
|
||||
return "flac"
|
||||
}
|
||||
return strings.ToLower(strings.TrimSpace(*c.config.RecordingFormat))
|
||||
}
|
||||
|
||||
func (c *Config) GetRecordingDirectory() string {
|
||||
if c.config.RecordingDirectory == nil {
|
||||
return resolvePath("~/Audio")
|
||||
}
|
||||
return resolvePath(*c.config.RecordingDirectory)
|
||||
}
|
||||
|
||||
func (c *Config) UpdateUser(u *gumble.User) {
|
||||
var j *eUser
|
||||
var uc *gumble.Client
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"git.stormux.org/storm/barnard/uiterm"
|
||||
)
|
||||
|
||||
func TestConfigBackfillsRecordingDefaults(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
configPath := filepath.Join(dir, "barnard.toml")
|
||||
if err := os.WriteFile(configPath, []byte("[hotkeys]\ntalk = \"f1\"\n"), 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cfg := NewConfig(&configPath)
|
||||
|
||||
if got := cfg.GetRecordingFormat(); got != "flac" {
|
||||
t.Fatalf("expected default recording format flac, got %q", got)
|
||||
}
|
||||
if got := cfg.GetRecordingDirectory(); got != filepath.Join(os.Getenv("HOME"), "Audio") {
|
||||
t.Fatalf("expected default recording directory ~/Audio, got %q", got)
|
||||
}
|
||||
if cfg.GetHotkeys().RecordToggle == nil {
|
||||
t.Fatal("expected record toggle hotkey to be backfilled")
|
||||
}
|
||||
if got := *cfg.GetHotkeys().RecordToggle; got != uiterm.KeyCtrlR {
|
||||
t.Fatalf("expected record toggle ctrl_r, got %s", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user