diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go index 6ae7cdd..acc4da8 100644 --- a/internal/client/ui/core/chat/chat.go +++ b/internal/client/ui/core/chat/chat.go @@ -344,15 +344,15 @@ func (m *Model) SetReceiver(receiverIndex int) { m.RestoreAfterSwitch() } -func (m *Model) SetFrequency(networkIndex, frequencyIndex int) { +func (m *Model) SetFrequency(networkIndex, frequencyIndex int) tea.Cmd { if m.frequencyIndex == frequencyIndex && m.networkIndex == networkIndex { - return + return nil } m.ResetBeforeSwitch() m.receiverIndex = -1 m.frequencyIndex = frequencyIndex m.networkIndex = networkIndex - m.RestoreAfterSwitch() + return m.RestoreAfterSwitch() } func (m *Model) ResetBeforeSwitch() { @@ -368,7 +368,7 @@ func (m *Model) ResetBeforeSwitch() { } } -func (m *Model) RestoreAfterSwitch() { +func (m *Model) RestoreAfterSwitch() tea.Cmd { msgs := state.State.IncompleteMessages if m.frequencyIndex != -1 && m.networkIndex != -1 { network := state.State.Networks[m.networkIndex] @@ -377,9 +377,15 @@ func (m *Model) RestoreAfterSwitch() { if val, ok := msgs[frequencyId]; ok { m.vi.SetString(val) } + return gateway.Send(&packet.RequestMessages{ + ReceiverID: nil, + FrequencyID: &frequencyId, + }) } else if m.receiverIndex != -1 { // TODO: receiver } + + return nil } func (m *Model) renderMessage(message data.Message, builder *strings.Builder, header bool) int { diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index f986351..b1ed7e3 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -308,19 +308,22 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { return nil } + var cmds []tea.Cmd var cmd tea.Cmd - switch m.focus { - case FocusNetworkList: - m.networkList, cmd = m.networkList.Update(msg) - m.frequencyList.SetNetworkIndex(m.networkList.Index()) - m.chat.SetFrequency(m.networkList.Index(), m.frequencyList.Index()) - case FocusFrequencyList: - m.frequencyList, cmd = m.frequencyList.Update(msg) - m.chat.SetFrequency(m.networkList.Index(), m.frequencyList.Index()) - case FocusChat: - m.chat, cmd = m.chat.Update(msg) - } - return cmd + + m.networkList, cmd = m.networkList.Update(msg) + cmds = append(cmds, cmd) + + m.frequencyList.SetNetworkIndex(m.networkList.Index()) + m.frequencyList, cmd = m.frequencyList.Update(msg) + cmds = append(cmds, cmd) + + cmd = m.chat.SetFrequency(m.networkList.Index(), m.frequencyList.Index()) + cmds = append(cmds, cmd) + m.chat, cmd = m.chat.Update(msg) + cmds = append(cmds, cmd) + + return tea.Batch(cmds...) } func (m *Model) updateLoadScreenContent() { diff --git a/internal/client/ui/core/frequencylist/frequencylist.go b/internal/client/ui/core/frequencylist/frequencylist.go index 98eb975..bc4ef05 100644 --- a/internal/client/ui/core/frequencylist/frequencylist.go +++ b/internal/client/ui/core/frequencylist/frequencylist.go @@ -96,6 +96,10 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } case tea.KeyMsg: + if !m.focus { + return m, nil + } + key := msg.String() switch key { case "K": diff --git a/internal/client/ui/core/networklist/networklist.go b/internal/client/ui/core/networklist/networklist.go index bdeff54..c510e79 100644 --- a/internal/client/ui/core/networklist/networklist.go +++ b/internal/client/ui/core/networklist/networklist.go @@ -120,6 +120,10 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } case tea.KeyMsg: + if !m.focus { + return m, nil + } + key := msg.String() switch key { case "K":