summaryrefslogtreecommitdiff
path: root/internal/client/ui/core
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-06 16:17:59 +0200
committerKyren223 <Kyren223@proton.me>2025-01-06 16:17:59 +0200
commit547593d3159d8772392e81b40082928094b35b8c (patch)
treec8c7a93309c1938d6de8b1fc3ccb8042d2210821 /internal/client/ui/core
parent6be63e6df626e390565e26439b65e81088375a84 (diff)
Fleshed out and fixed issues in both the server and client for how
networks and members work
Diffstat (limited to 'internal/client/ui/core')
-rw-r--r--internal/client/ui/core/chat/chat.go6
-rw-r--r--internal/client/ui/core/core.go48
-rw-r--r--internal/client/ui/core/networklist/networklist.go34
3 files changed, 83 insertions, 5 deletions
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