summaryrefslogtreecommitdiff
path: root/internal/client/ui/core
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-21 18:08:32 +0200
committerKyren223 <Kyren223@proton.me>2024-12-21 18:08:32 +0200
commit3c35c3dbfab1ed6ee2e193f881fad4ed5754d0c0 (patch)
tree3bbd433f1c1832e5edf32afcd7617df1349171ad /internal/client/ui/core
parent90c54591cc3db27ef90893c8fe166c39279a4805 (diff)
Fixed message-remembering issues and implemented non persistent "last
frequency" per network
Diffstat (limited to 'internal/client/ui/core')
-rw-r--r--internal/client/ui/core/chat/chat.go91
-rw-r--r--internal/client/ui/core/core.go1
-rw-r--r--internal/client/ui/core/frequencylist/frequencylist.go42
-rw-r--r--internal/client/ui/core/networklist/networklist.go40
-rw-r--r--internal/client/ui/core/state/state.go4
5 files changed, 91 insertions, 87 deletions
diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go
index 12a39d0..6ae7cdd 100644
--- a/internal/client/ui/core/chat/chat.go
+++ b/internal/client/ui/core/chat/chat.go
@@ -53,9 +53,9 @@ type Model struct {
focus bool
locked bool
- networkIndex int // Note this might be invalid, rely on frequencyIndex
- receiverIndex *int
- frequencyIndex *int
+ networkIndex int
+ receiverIndex int
+ frequencyIndex int
index int
@@ -69,11 +69,14 @@ func New(width int) Model {
vi.PlaceholderStyle = lipgloss.NewStyle().Foreground(colors.Gray)
return Model{
- vi: vi,
- focus: false,
- locked: false,
- width: width,
- index: -1,
+ vi: vi,
+ focus: false,
+ locked: false,
+ networkIndex: -1,
+ receiverIndex: -1,
+ frequencyIndex: -1,
+ index: -1,
+ width: width,
}
}
@@ -155,9 +158,9 @@ func (m Model) View() string {
builder.Reset()
var btree *btree.BTreeG[data.Message]
- if m.frequencyIndex != nil {
+ if m.frequencyIndex != -1 && m.networkIndex != -1 {
network := state.State.Networks[m.networkIndex]
- frequencyId := network.Frequencies[*m.frequencyIndex].ID
+ frequencyId := network.Frequencies[m.frequencyIndex].ID
btree = state.State.Messages[frequencyId]
} else {
// TODO: implement support for receiver id
@@ -313,14 +316,14 @@ func (m *Model) sendMessage() tea.Cmd {
m.vi.Reset()
var receiverId *snowflake.ID = nil
- if m.receiverIndex != nil {
+ if m.receiverIndex != -1 {
// TODO: do nothing for now, until trusted friends are implemented
}
var frequencyId *snowflake.ID = nil
- if m.frequencyIndex != nil {
+ if m.frequencyIndex != -1 && m.networkIndex != -1 {
network := state.State.Networks[m.networkIndex]
- frequencyId = &network.Frequencies[*m.frequencyIndex].ID
+ frequencyId = &network.Frequencies[m.frequencyIndex].ID
}
return gateway.Send(&packet.SendMessage{
@@ -330,69 +333,59 @@ func (m *Model) sendMessage() tea.Cmd {
})
}
-// func (m *Model) SetNetworkIndex(networkIndex int) {
-// if m.networkIndex != networkIndex {
-// m.index = -1
-// }
-// m.networkIndex = networkIndex
-// }
-
func (m *Model) SetReceiver(receiverIndex int) {
- if m.receiverIndex != nil && *m.receiverIndex == receiverIndex {
+ if m.receiverIndex == receiverIndex {
return
}
m.ResetBeforeSwitch()
- m.receiverIndex = &receiverIndex
- m.frequencyIndex = nil
+ m.receiverIndex = receiverIndex
+ m.frequencyIndex = -1
+ m.networkIndex = -1
m.RestoreAfterSwitch()
}
func (m *Model) SetFrequency(networkIndex, frequencyIndex int) {
- if m.frequencyIndex != nil && *m.frequencyIndex == frequencyIndex {
+ if m.frequencyIndex == frequencyIndex && m.networkIndex == networkIndex {
return
}
m.ResetBeforeSwitch()
- m.receiverIndex = nil
- m.frequencyIndex = &frequencyIndex
+ m.receiverIndex = -1
+ m.frequencyIndex = frequencyIndex
m.networkIndex = networkIndex
m.RestoreAfterSwitch()
}
func (m *Model) ResetBeforeSwitch() {
- source := m.frequencyIndex
- if source == nil {
- source = m.receiverIndex
- }
- if source == nil {
- return
- }
-
- log.Println("Resetting", source)
- state.State.IncompleteMessages[snowflake.ID(*source)] = m.vi.String()
- m.vi.Reset()
m.index = -1
+ if m.frequencyIndex != -1 && m.networkIndex != -1 {
+ network := state.State.Networks[m.networkIndex]
+ frequencyId := network.Frequencies[m.frequencyIndex].ID
+ log.Println("Saving", frequencyId)
+ state.State.IncompleteMessages[frequencyId] = m.vi.String()
+ m.vi.Reset()
+ } else if m.receiverIndex != -1 {
+ // TODO: receiver
+ }
}
func (m *Model) RestoreAfterSwitch() {
- source := m.frequencyIndex
- if source == nil {
- source = m.receiverIndex
- }
- if source == nil {
- return
- }
-
- log.Println("Restoring", source)
msgs := state.State.IncompleteMessages
- if val, ok := msgs[snowflake.ID(*source)]; ok {
- m.vi.SetString(val)
+ if m.frequencyIndex != -1 && m.networkIndex != -1 {
+ network := state.State.Networks[m.networkIndex]
+ frequencyId := network.Frequencies[m.frequencyIndex].ID
+ log.Println("Restoring", frequencyId)
+ if val, ok := msgs[frequencyId]; ok {
+ m.vi.SetString(val)
+ }
+ } else if m.receiverIndex != -1 {
+ // TODO: receiver
}
}
func (m *Model) renderMessage(message data.Message, builder *strings.Builder, header bool) int {
lines := 0
- if header {
+ if header && m.networkIndex != -1 {
var member *data.GetNetworkMembersRow = nil
network := state.State.Networks[m.networkIndex]
for _, networkMember := range network.Members {
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go
index 11da7ef..f986351 100644
--- a/internal/client/ui/core/core.go
+++ b/internal/client/ui/core/core.go
@@ -313,6 +313,7 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
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())
diff --git a/internal/client/ui/core/frequencylist/frequencylist.go b/internal/client/ui/core/frequencylist/frequencylist.go
index c00b8cd..98eb975 100644
--- a/internal/client/ui/core/frequencylist/frequencylist.go
+++ b/internal/client/ui/core/frequencylist/frequencylist.go
@@ -35,8 +35,10 @@ type Model struct {
func New() Model {
return Model{
- focus: false,
- index: 0,
+ history: []func(m *Model){},
+ networkIndex: -1,
+ index: -1,
+ focus: false,
}
}
@@ -148,8 +150,38 @@ func (m Model) Swap(dir int) (Model, tea.Cmd) {
return m, cmd
}
-func (m *Model) SetNetworkIndex(index int) {
- m.networkIndex = index
+func (m *Model) SetNetworkIndex(networkIndex int) {
+ if m.networkIndex == networkIndex {
+ return
+ }
+
+ if 0 <= m.networkIndex && m.networkIndex < len(state.State.Networks) {
+ network := state.State.Networks[m.networkIndex]
+ if 0 <= m.index && m.index < len(network.Frequencies) {
+ frequencyId := network.Frequencies[m.index].ID
+ state.State.LastFrequency[network.ID] = frequencyId
+ }
+ }
+
+ if networkIndex == -1 {
+ m.networkIndex = -1
+ m.index = -1
+ return
+ }
+
+ m.networkIndex = networkIndex
+ m.index = 0
+
+ // Try restoring last ID
+ network := state.State.Networks[m.networkIndex]
+ if id, ok := state.State.LastFrequency[network.ID]; ok {
+ for i, frequency := range network.Frequencies {
+ if frequency.ID == id {
+ m.index = i
+ break
+ }
+ }
+ }
}
func (m Model) FrequenciesLength() int {
@@ -164,5 +196,5 @@ func (m Model) Network() *packet.FullNetwork {
}
func (m *Model) Index() int {
- return m.index
+ return m.index
}
diff --git a/internal/client/ui/core/networklist/networklist.go b/internal/client/ui/core/networklist/networklist.go
index 6548a1d..bdeff54 100644
--- a/internal/client/ui/core/networklist/networklist.go
+++ b/internal/client/ui/core/networklist/networklist.go
@@ -41,38 +41,14 @@ var (
*/
func IconStyle(icon string, fg, bg lipgloss.Color) lipgloss.Style {
- if true {
- bgStyle := lipgloss.NewStyle().Background(bg).Foreground(colors.Background)
- top := bgStyle.Render("🭠🭘 🭣🭕")
- middle := lipgloss.NewStyle().Width(6).Align(lipgloss.Center).
- Background(bg).Foreground(fg).Render(icon)
- bgStyle2 := lipgloss.NewStyle().Foreground(bg)
- bottom := bgStyle2.Render("🭥🭓██🭞🭚")
- combined := lipgloss.JoinVertical(lipgloss.Left, top, middle, bottom)
- return lipgloss.NewStyle().SetString(combined)
- }
- if true {
- bgStyle := lipgloss.NewStyle().Background(bg).Foreground(colors.Background)
- top := bgStyle.Render("🭠🭘 🭣🭕")
- middle := lipgloss.NewStyle().Width(6).Align(lipgloss.Center).
- Background(bg).Foreground(fg).Render(icon)
- bottom := bgStyle.Render("🭏🬽 🭈🭄")
- combined := lipgloss.JoinVertical(lipgloss.Left, top, middle, bottom)
- return lipgloss.NewStyle().SetString(combined)
- }
- if true {
- return partialIconStyle.Foreground(fg).SetString("\n" + icon)
- }
- if true {
- bgStyle := lipgloss.NewStyle().Foreground(bg)
- top := bgStyle.Render("🭊🭂██🭍🬿")
- middle := lipgloss.NewStyle().Width(6).Align(lipgloss.Center).
- Background(bg).Foreground(fg).Render(icon)
- bottom := bgStyle.Render("🭥🭓██🭞🭚")
- combined := lipgloss.JoinVertical(lipgloss.Left, top, middle, bottom)
- return lipgloss.NewStyle().SetString(combined)
- }
- return partialIconStyle.Foreground(fg).Background(bg).SetString("\n" + icon)
+ bgStyle := lipgloss.NewStyle().Background(bg).Foreground(colors.Background)
+ top := bgStyle.Render("🭠🭘 🭣🭕")
+ middle := lipgloss.NewStyle().Width(6).Align(lipgloss.Center).
+ Background(bg).Foreground(fg).Render(icon)
+ bgStyle2 := lipgloss.NewStyle().Foreground(bg)
+ bottom := bgStyle2.Render("🭥🭓██🭞🭚")
+ combined := lipgloss.JoinVertical(lipgloss.Left, top, middle, bottom)
+ return lipgloss.NewStyle().SetString(combined)
}
type Model struct {
diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go
index 285658f..762cf2f 100644
--- a/internal/client/ui/core/state/state.go
+++ b/internal/client/ui/core/state/state.go
@@ -10,13 +10,15 @@ import (
type state struct {
// Key is either a frequency or receiver
IncompleteMessages map[snowflake.ID]string
+ LastFrequency map[snowflake.ID]snowflake.ID // key is network
Messages map[snowflake.ID]*btree.BTreeG[data.Message]
Networks []packet.FullNetwork
}
var State state = state{
+ IncompleteMessages: map[snowflake.ID]string{},
+ LastFrequency: map[snowflake.ID]snowflake.ID{},
Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{},
Networks: []packet.FullNetwork{},
- IncompleteMessages: map[snowflake.ID]string{},
}