Files
settuings/internal/ui/bluetooth/update.go
T
Hadi 59b31e5ca3 init
Signed-off-by: Hadi <[email protected]>
2026-08-13 00:58:37 +02:00

71 lines
1.5 KiB
Go

package bluetooth
import (
"charm.land/bubbles/v2/key"
tea "charm.land/bubbletea/v2"
"github.com/anotherhadi/settuings/internal/keys"
)
func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case checkMsg:
wasUnavailable := m.checkErr != nil
m.checked = true
m.checkErr = msg.err
if msg.err == nil && wasUnavailable {
// recovered: resume fetching + the auto-refresh loop
return m, tea.Batch(fetchControllerCmd(), fetchDevicesCmd(), tickCmd())
}
return m, nil
case tickMsg:
if m.checkErr != nil {
return m, nil
}
return m, tea.Batch(fetchControllerCmd(), fetchDevicesCmd(), tickCmd())
case controllerMsg:
m.controller = msg.info
return m, nil
case deviceListMsg:
m.handleDeviceList(msg)
return m, nil
case deviceActionMsg:
return m, m.handleDeviceAction(msg)
case powerActionMsg:
return m, m.handlePowerAction(msg)
case scanDoneMsg:
return m, m.handleScanDone(msg)
case detailMsg:
m.handleDetail(msg)
return m, nil
case tea.MouseWheelMsg:
if m.detail.open {
return m, m.updateDetail(msg)
}
return m, nil
case tea.KeyPressMsg:
if m.checkErr != nil {
if key.Matches(msg, keys.Keys.Bluetooth.Refresh) {
return m, checkCmd()
}
return m, nil
}
if m.detail.open {
return m, m.updateDetail(msg)
}
if !m.IsEditing() && key.Matches(msg, keys.Keys.Global.Help) {
m.help.ShowAll = !m.help.ShowAll
return m, nil
}
return m, m.updateList(msg)
}
return m, nil
}