From 547593d3159d8772392e81b40082928094b35b8c Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Mon, 6 Jan 2025 16:17:59 +0200 Subject: Fleshed out and fixed issues in both the server and client for how networks and members work --- internal/client/ui/core/chat/chat.go | 6 ++- internal/client/ui/core/core.go | 48 +++++++++++++++++++++- internal/client/ui/core/networklist/networklist.go | 34 ++++++++++++++- 3 files changed, 83 insertions(+), 5 deletions(-) (limited to 'internal/client/ui/core') diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go index c94db31..11cb751 100644 --- a/internal/client/ui/core/chat/chat.go +++ b/internal/client/ui/core/chat/chat.go @@ -255,8 +255,10 @@ func (m *Model) SetFrequency(networkIndex, frequencyIndex int) tea.Cmd { } func (m *Model) ResetBeforeSwitch() { - if m.frequencyIndex != -1 && m.networkIndex != -1 { - network := state.State.Networks[m.networkIndex] + networks := state.State.Networks + networkInBounds := 0 <= m.networkIndex && m.networkIndex < len(networks) + if m.frequencyIndex != -1 && networkInBounds { + network := networks[m.networkIndex] frequencyId := network.Frequencies[m.frequencyIndex].ID log.Println("Saving", frequencyId) state.State.FrequencyState[frequencyId] = state.Frequency{ diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index 69bffec..50abbe6 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -212,6 +212,35 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { state.State.Networks = networks } + case *packet.MembersInfo: + var network *packet.FullNetwork + for i, fullNetwork := range state.State.Networks { + if fullNetwork.ID == msg.Network { + network = &state.State.Networks[i] + } + } + + members := network.Members + for _, updatedMember := range msg.Members { + add := true + for i, existingMember := range members { + if existingMember.User.ID == updatedMember.User.ID { + add = false + members[i] = updatedMember + break + } + } + if add { + members = append(members, updatedMember) + } + } + + members = slices.DeleteFunc(members, func(member data.GetNetworkMembersRow) bool { + return slices.Contains(msg.RemovedMembers, member.User.ID) + }) + log.Println(members) + network.Members = members + case *packet.FrequenciesInfo: var network *packet.FullNetwork for i, fullNetwork := range state.State.Networks { @@ -219,8 +248,25 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { network = &state.State.Networks[i] } } + frequencies := network.Frequencies - frequencies = append(frequencies, msg.Frequencies...) + for _, newFrequency := range msg.Frequencies { + add := true + for i, existingFrequency := range frequencies { + if existingFrequency.ID == newFrequency.ID { + add = false + if newFrequency.Position == -1 { + newFrequency.Position = existingFrequency.Position + } + frequencies[i] = newFrequency + break + } + } + if add { + frequencies = append(frequencies, newFrequency) + } + } + frequencies = slices.DeleteFunc(frequencies, func(frequency data.Frequency) bool { return slices.Contains(msg.RemovedFrequencies, frequency.ID) }) diff --git a/internal/client/ui/core/networklist/networklist.go b/internal/client/ui/core/networklist/networklist.go index c510e79..3ff73f4 100644 --- a/internal/client/ui/core/networklist/networklist.go +++ b/internal/client/ui/core/networklist/networklist.go @@ -1,6 +1,7 @@ package networklist import ( + "slices" "strings" tea "github.com/charmbracelet/bubbletea" @@ -51,6 +52,8 @@ func IconStyle(icon string, fg, bg lipgloss.Color) lipgloss.Style { return lipgloss.NewStyle().SetString(combined) } +const TrustedIndex = -1 + type Model struct { history []func(m *Model) index int @@ -60,7 +63,7 @@ type Model struct { func New() Model { return Model{ focus: false, - index: -1, + index: TrustedIndex, } } @@ -71,7 +74,7 @@ func (m Model) Init() tea.Cmd { func (m Model) View() string { var builder strings.Builder builder.WriteString("\n") - if m.index == -1 { + if m.index == TrustedIndex { builder.WriteString(trustedUsersButtonSelected) } else { builder.WriteString(trustedUsersButton) @@ -138,6 +141,33 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { m.index = max(-1, m.index-1) case "j": m.index = min(len(state.State.Networks)-1, m.index+1) + + case "Q": + if state.State.UserID == nil || m.index == TrustedIndex { + return m, nil + } + + networks := state.State.Networks + network := networks[m.index] + + // Remove network from the list so it's not visible + state.State.Networks = slices.Delete(networks, m.index, m.index+1) + + // Set back to trusted bcz that's always valid + // Where if u were on the network u just left + // it'd be an issue (or if u left all networks) + m.index = TrustedIndex + + no := false + return m, gateway.Send(&packet.SetMember{ + Member: &no, + Admin: nil, + Muted: nil, + Banned: nil, + BanReason: nil, + Network: network.ID, + User: *state.State.UserID, + }) } } return m, nil -- cgit v1.3.1