summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-05 18:11:14 +0200
committerKyren223 <Kyren223@proton.me>2025-01-05 18:11:14 +0200
commit6be63e6df626e390565e26439b65e81088375a84 (patch)
tree4418419c632d67e5d5bc4a2f90aba4347d6cd37d
parent73935243e3ffb7a2b825933673d36a0af7d66a87 (diff)
Refactored quite a bit and added the MembersInfo packet server-side
-rw-r--r--internal/client/ui/core/core.go29
-rw-r--r--internal/client/ui/core/networkjoin/networkjoin.go2
-rw-r--r--internal/data/users_networks.sql.go8
-rw-r--r--internal/packet/packet.go8
-rw-r--r--internal/packet/types.go33
-rw-r--r--internal/server/api/api.go74
-rw-r--r--internal/server/api/helpers.go25
-rw-r--r--internal/server/server.go4
-rw-r--r--query/users_networks.sql2
-rw-r--r--test_ed25519a7
10 files changed, 102 insertions, 90 deletions
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go
index ef31c27..69bffec 100644
--- a/internal/client/ui/core/core.go
+++ b/internal/client/ui/core/core.go
@@ -203,7 +203,7 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
}
networks = slices.DeleteFunc(networks, func(network packet.FullNetwork) bool {
- return slices.Contains(msg.RemoveNetworks, network.ID)
+ return slices.Contains(msg.RemovedNetworks, network.ID)
})
slices.SortFunc(networks, func(a, b packet.FullNetwork) int {
return a.Position - b.Position
@@ -219,24 +219,19 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd {
network = &state.State.Networks[i]
}
}
-
- if msg.Set {
- network.Frequencies = msg.Frequencies
- } else {
- frequencies := network.Frequencies
- frequencies = append(frequencies, msg.Frequencies...)
- frequencies = slices.DeleteFunc(frequencies, func(frequency data.Frequency) bool {
- return slices.Contains(msg.RemoveFrequencies, frequency.ID)
- })
- slices.SortFunc(frequencies, func(a, b data.Frequency) int {
- return int(a.Position - b.Position)
- })
- log.Println(frequencies)
- network.Frequencies = frequencies
- }
+ frequencies := network.Frequencies
+ frequencies = append(frequencies, msg.Frequencies...)
+ frequencies = slices.DeleteFunc(frequencies, func(frequency data.Frequency) bool {
+ return slices.Contains(msg.RemovedFrequencies, frequency.ID)
+ })
+ slices.SortFunc(frequencies, func(a, b data.Frequency) int {
+ return int(a.Position - b.Position)
+ })
+ log.Println(frequencies)
+ network.Frequencies = frequencies
case *packet.MessagesInfo:
- for _, id := range msg.RemoveMessages {
+ for _, id := range msg.RemovedMessages {
for _, btree := range state.State.Messages {
btree.Delete(data.Message{ID: id})
}
diff --git a/internal/client/ui/core/networkjoin/networkjoin.go b/internal/client/ui/core/networkjoin/networkjoin.go
index 8f8200b..347d69d 100644
--- a/internal/client/ui/core/networkjoin/networkjoin.go
+++ b/internal/client/ui/core/networkjoin/networkjoin.go
@@ -165,7 +165,7 @@ func (m *Model) Select() tea.Cmd {
assert.NoError(err, "input is already validated to be valid")
yes := true
- request := packet.SetNetworkUser{
+ request := packet.SetMember{
Member: &yes,
Admin: nil,
Muted: nil,
diff --git a/internal/data/users_networks.sql.go b/internal/data/users_networks.sql.go
index 4b5ab45..8191fa2 100644
--- a/internal/data/users_networks.sql.go
+++ b/internal/data/users_networks.sql.go
@@ -206,7 +206,7 @@ func (q *Queries) GetUserNetworks(ctx context.Context, userID snowflake.ID) ([]G
return items, nil
}
-const setNetworkUser = `-- name: SetNetworkUser :one
+const setMember = `-- name: SetMember :one
INSERT INTO users_networks (
user_id, network_id,
is_member, is_admin, is_muted,
@@ -228,7 +228,7 @@ WHERE user_id = EXCLUDED.user_id AND network_id = EXCLUDED.network_id
RETURNING user_id, network_id, joined_at, is_member, is_admin, is_muted, is_banned, ban_reason, position
`
-type SetNetworkUserParams struct {
+type SetMemberParams struct {
UserID snowflake.ID
NetworkID snowflake.ID
IsMember bool
@@ -238,8 +238,8 @@ type SetNetworkUserParams struct {
BanReason *string
}
-func (q *Queries) SetNetworkUser(ctx context.Context, arg SetNetworkUserParams) (UserNetwork, error) {
- row := q.db.QueryRowContext(ctx, setNetworkUser,
+func (q *Queries) SetMember(ctx context.Context, arg SetMemberParams) (UserNetwork, error) {
+ row := q.db.QueryRowContext(ctx, setMember,
arg.UserID,
arg.NetworkID,
arg.IsMember,
diff --git a/internal/packet/packet.go b/internal/packet/packet.go
index 8d06100..ffd852b 100644
--- a/internal/packet/packet.go
+++ b/internal/packet/packet.go
@@ -57,9 +57,11 @@ const (
PacketTransferNetwork
PacketDeleteNetwork
PacketSwapUserNetworks
- PacketSetNetworkUser
PacketNetworksInfo
+ PacketSetMember
+ PacketMembersInfo
+
PacketCreateFrequency
PacketUpdateFrequency
PacketDeleteFrequency
@@ -197,8 +199,8 @@ func (p Packet) DecodedPayload() (Payload, error) {
payload = &DeleteNetwork{}
case PacketSwapUserNetworks:
payload = &SwapUserNetworks{}
- case PacketSetNetworkUser:
- payload = &SetNetworkUser{}
+ case PacketSetMember:
+ payload = &SetMember{}
case PacketNetworksInfo:
payload = &NetworksInfo{}
diff --git a/internal/packet/types.go b/internal/packet/types.go
index a336624..b107243 100644
--- a/internal/packet/types.go
+++ b/internal/packet/types.go
@@ -61,7 +61,7 @@ func (m *SwapUserNetworks) Type() PacketType {
return PacketSwapUserNetworks
}
-type SetNetworkUser struct {
+type SetMember struct {
Member *bool
Admin *bool
Muted *bool
@@ -71,8 +71,8 @@ type SetNetworkUser struct {
User snowflake.ID
}
-func (m *SetNetworkUser) Type() PacketType {
- return PacketSetNetworkUser
+func (m *SetMember) Type() PacketType {
+ return PacketSetMember
}
type FullNetwork struct {
@@ -83,9 +83,9 @@ type FullNetwork struct {
}
type NetworksInfo struct {
- Networks []FullNetwork
- RemoveNetworks []snowflake.ID
- Set bool
+ Networks []FullNetwork
+ RemovedNetworks []snowflake.ID
+ Set bool
}
func (m *NetworksInfo) Type() PacketType {
@@ -133,10 +133,9 @@ func (m *SwapFrequencies) Type() PacketType {
}
type FrequenciesInfo struct {
- RemoveFrequencies []snowflake.ID
- Frequencies []data.Frequency
- Network snowflake.ID
- Set bool
+ RemovedFrequencies []snowflake.ID
+ Frequencies []data.Frequency
+ Network snowflake.ID
}
func (m *FrequenciesInfo) Type() PacketType {
@@ -180,10 +179,20 @@ func (m *RequestMessages) Type() PacketType {
}
type MessagesInfo struct {
- Messages []data.Message
- RemoveMessages []snowflake.ID
+ Messages []data.Message
+ RemovedMessages []snowflake.ID
}
func (m *MessagesInfo) Type() PacketType {
return PacketMessagesInfo
}
+
+type MembersInfo struct {
+ RemovedMembers []snowflake.ID
+ Members []data.GetNetworkMembersRow
+ Network snowflake.ID
+}
+
+func (m *MembersInfo) Type() PacketType {
+ return PacketMessagesInfo
+}
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 0445114..aedc86b 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -138,7 +138,7 @@ func CreateNetwork(ctx context.Context, sess *session.Session, request *packet.C
return &ErrInternalError
}
- networkUser, err := qtx.SetNetworkUser(ctx, data.SetNetworkUserParams{
+ networkUser, err := qtx.SetMember(ctx, data.SetMemberParams{
UserID: network.OwnerID,
NetworkID: network.ID,
IsMember: true,
@@ -176,9 +176,9 @@ func CreateNetwork(ctx context.Context, sess *session.Session, request *packet.C
Position: int(*networkUser.Position),
}
return &packet.NetworksInfo{
- Networks: []packet.FullNetwork{fullNetwork},
- Set: false,
- RemoveNetworks: nil,
+ Networks: []packet.FullNetwork{fullNetwork},
+ Set: false,
+ RemovedNetworks: nil,
}
}
@@ -226,9 +226,9 @@ func GetNetworksInfo(ctx context.Context, sess *session.Session) (packet.Payload
}
return &packet.NetworksInfo{
- Networks: fullNetworks,
- RemoveNetworks: nil,
- Set: true,
+ Networks: fullNetworks,
+ RemovedNetworks: nil,
+ Set: true,
}, nil
}
@@ -293,10 +293,9 @@ func CreateFrequency(ctx context.Context, sess *session.Session, request *packet
}
return &packet.FrequenciesInfo{
- RemoveFrequencies: nil,
- Frequencies: []data.Frequency{frequency},
- Network: request.Network,
- Set: false,
+ RemovedFrequencies: nil,
+ Frequencies: []data.Frequency{frequency},
+ Network: request.Network,
}
}
@@ -375,10 +374,9 @@ func DeleteFrequency(ctx context.Context, sess *session.Session, request *packet
}
return &packet.FrequenciesInfo{
- RemoveFrequencies: []snowflake.ID{frequency.ID},
- Frequencies: nil,
- Network: frequency.NetworkID,
- Set: false,
+ RemovedFrequencies: []snowflake.ID{frequency.ID},
+ Frequencies: nil,
+ Network: frequency.NetworkID,
}
}
@@ -406,13 +404,13 @@ func DeleteNetwork(ctx context.Context, sess *session.Session, request *packet.D
}
return &packet.NetworksInfo{
- Networks: nil,
- RemoveNetworks: []snowflake.ID{request.Network},
- Set: false,
+ Networks: nil,
+ RemovedNetworks: []snowflake.ID{request.Network},
+ Set: false,
}
}
-func SetNetworkUser(ctx context.Context, sess *session.Session, request *packet.SetNetworkUser) packet.Payload {
+func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMember) packet.Payload {
queries := data.New(db)
network, err := queries.GetNetworkById(ctx, request.Network)
@@ -428,7 +426,7 @@ func SetNetworkUser(ctx context.Context, sess *session.Session, request *packet.
wantsToJoin := request.Member != nil && *request.Member && request.User == sess.ID()
if err == sql.ErrNoRows && network.IsPublic && wantsToJoin {
- _, err = queries.SetNetworkUser(ctx, data.SetNetworkUserParams{
+ newMember, err := queries.SetMember(ctx, data.SetMemberParams{
UserID: request.User,
NetworkID: request.Network,
IsMember: true,
@@ -442,13 +440,22 @@ func SetNetworkUser(ctx context.Context, sess *session.Session, request *packet.
return &ErrInternalError
}
- payload, err := GetSingleNetworkInfo(ctx, queries, network)
+ user, err := queries.GetUserById(ctx, newMember.UserID)
if err != nil {
log.Println("database error 3:", err)
return &ErrInternalError
}
- return payload
+ return &packet.MembersInfo{
+ RemovedMembers: nil,
+ Members: []data.GetNetworkMembersRow{{
+ User: user,
+ JoinedAt: newMember.JoinedAt,
+ IsAdmin: newMember.IsAdmin,
+ IsMuted: newMember.IsMuted,
+ }},
+ Network: request.Network,
+ }
}
if err != nil {
@@ -499,7 +506,7 @@ func SetNetworkUser(ctx context.Context, sess *session.Session, request *packet.
}
}
- _, err = queries.SetNetworkUser(ctx, data.SetNetworkUserParams{
+ newMember, err := queries.SetMember(ctx, data.SetMemberParams{
UserID: request.User,
NetworkID: request.Network,
IsMember: isMember,
@@ -513,11 +520,28 @@ func SetNetworkUser(ctx context.Context, sess *session.Session, request *packet.
return &ErrInternalError
}
- payload, err := GetSingleNetworkInfo(ctx, queries, network)
+ if !newMember.IsMember {
+ return &packet.MembersInfo{
+ RemovedMembers: []snowflake.ID{newMember.UserID},
+ Members: nil,
+ Network: request.Network,
+ }
+ }
+
+ user, err := queries.GetUserById(ctx, newMember.UserID)
if err != nil {
log.Println("database error 7:", err)
return &ErrInternalError
}
- return payload
+ return &packet.MembersInfo{
+ RemovedMembers: nil,
+ Members: []data.GetNetworkMembersRow{{
+ User: user,
+ JoinedAt: newMember.JoinedAt,
+ IsAdmin: newMember.IsAdmin,
+ IsMuted: newMember.IsMuted,
+ }},
+ Network: request.Network,
+ }
}
diff --git a/internal/server/api/helpers.go b/internal/server/api/helpers.go
index d5b2d8c..f82bf6e 100644
--- a/internal/server/api/helpers.go
+++ b/internal/server/api/helpers.go
@@ -5,7 +5,6 @@ import (
"strings"
"github.com/kyren223/eko/internal/data"
- "github.com/kyren223/eko/internal/packet"
"github.com/kyren223/eko/pkg/snowflake"
)
@@ -42,27 +41,3 @@ func IsNetworkAdmin(ctx context.Context, queries *data.Queries, userId, networkI
return isAdmin, nil
}
-func GetSingleNetworkInfo(ctx context.Context, queries *data.Queries, network data.Network) (packet.Payload, error) {
- frequencies, err := queries.GetNetworkFrequencies(ctx, network.ID)
- if err != nil {
- return nil, err
- }
-
- members, err := queries.GetNetworkMembers(ctx, network.ID)
- if err != nil {
- return nil, err
- }
-
- fullNetwork := packet.FullNetwork{
- Network: network,
- Frequencies: frequencies,
- Members: members,
- Position: -1,
- }
-
- return &packet.NetworksInfo{
- Networks: []packet.FullNetwork{fullNetwork},
- RemoveNetworks: nil,
- Set: false,
- }, nil
-}
diff --git a/internal/server/server.go b/internal/server/server.go
index 1efdea2..2b1003f 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -319,8 +319,8 @@ func processRequest(ctx context.Context, sess *session.Session, request packet.P
response = timeout(500*time.Millisecond, api.DeleteNetwork, ctx, sess, request)
case *packet.SwapUserNetworks:
response = timeout(5*time.Millisecond, api.SwapUserNetworks, ctx, sess, request)
- case *packet.SetNetworkUser:
- response = timeout(50*time.Millisecond, api.SetNetworkUser, ctx, sess, request)
+ case *packet.SetMember:
+ response = timeout(50*time.Millisecond, api.SetMember, ctx, sess, request)
case *packet.CreateFrequency:
response = timeout(5*time.Millisecond, api.CreateFrequency, ctx, sess, request)
diff --git a/query/users_networks.sql b/query/users_networks.sql
index 592c9e5..79cfd41 100644
--- a/query/users_networks.sql
+++ b/query/users_networks.sql
@@ -31,7 +31,7 @@ ORDER BY users_networks.position;
SELECT * FROM users_networks
WHERE user_id = ? AND network_id = ?;
--- name: SetNetworkUser :one
+-- name: SetMember :one
INSERT INTO users_networks (
user_id, network_id,
is_member, is_admin, is_muted,
diff --git a/test_ed25519a b/test_ed25519a
new file mode 100644
index 0000000..3fdc798
--- /dev/null
+++ b/test_ed25519a
@@ -0,0 +1,7 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtz
+c2gtZWQyNTUxOQAAACC4FkomwRHHxqvggftmHaXj5lgBwpN4iAKOB/baLN4AlwAA
+AIhzirfuc4q37gAAAAtzc2gtZWQyNTUxOQAAACC4FkomwRHHxqvggftmHaXj5lgB
+wpN4iAKOB/baLN4AlwAAAEC+uCaV6k0BrNFhEI9SDeIYtmzbKnVqXU1O3N6vKtYu
+ZbgWSibBEcfGq+CB+2YdpePmWAHCk3iIAo4H9tos3gCXAAAAAllvAQID
+-----END OPENSSH PRIVATE KEY-----