diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-05 18:11:14 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-05 18:11:14 +0200 |
| commit | 6be63e6df626e390565e26439b65e81088375a84 (patch) | |
| tree | 4418419c632d67e5d5bc4a2f90aba4347d6cd37d /internal | |
| parent | 73935243e3ffb7a2b825933673d36a0af7d66a87 (diff) | |
Refactored quite a bit and added the MembersInfo packet server-side
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/client/ui/core/core.go | 29 | ||||
| -rw-r--r-- | internal/client/ui/core/networkjoin/networkjoin.go | 2 | ||||
| -rw-r--r-- | internal/data/users_networks.sql.go | 8 | ||||
| -rw-r--r-- | internal/packet/packet.go | 8 | ||||
| -rw-r--r-- | internal/packet/types.go | 33 | ||||
| -rw-r--r-- | internal/server/api/api.go | 74 | ||||
| -rw-r--r-- | internal/server/api/helpers.go | 25 | ||||
| -rw-r--r-- | internal/server/server.go | 4 |
8 files changed, 94 insertions, 89 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) |
