diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-06 16:17:59 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-06 16:17:59 +0200 |
| commit | 547593d3159d8772392e81b40082928094b35b8c (patch) | |
| tree | c8c7a93309c1938d6de8b1fc3ccb8042d2210821 /internal/server/api/api.go | |
| parent | 6be63e6df626e390565e26439b65e81088375a84 (diff) | |
Fleshed out and fixed issues in both the server and client for how
networks and members work
Diffstat (limited to 'internal/server/api/api.go')
| -rw-r--r-- | internal/server/api/api.go | 74 |
1 files changed, 66 insertions, 8 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index aedc86b..dee49aa 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -201,6 +201,12 @@ func GetNetworksInfo(ctx context.Context, sess *session.Session) (packet.Payload for _, userNetwork := range networks { network := userNetwork.Network + + // User was in this network but is no longer there (left/kicked/banned) + if userNetwork.Position == nil { + continue + } + position := int(*userNetwork.Position) frequencies, err := qtx.GetNetworkFrequencies(ctx, network.ID) if err != nil { @@ -446,7 +452,7 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe return &ErrInternalError } - return &packet.MembersInfo{ + NetworkPropagate(ctx, sess, request.Network, &packet.MembersInfo{ RemovedMembers: nil, Members: []data.GetNetworkMembersRow{{ User: user, @@ -455,17 +461,40 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe IsMuted: newMember.IsMuted, }}, Network: request.Network, + }) + + frequencies, err := queries.GetNetworkFrequencies(ctx, network.ID) + if err != nil { + log.Println("database error 4:", err) + return &ErrInternalError + } + + members, err := queries.GetNetworkMembers(ctx, network.ID) + if err != nil { + log.Println("database error 5:", err) + return &ErrInternalError + } + + return &packet.NetworksInfo{ + Networks: []packet.FullNetwork{{ + Network: network, + Frequencies: frequencies, + Members: members, + Position: int(*newMember.Position), + }}, + RemovedNetworks: nil, + Set: false, } } if err != nil { - log.Println("database error 4:", err) + log.Println("database error 6:", err) return &ErrInternalError } isSessAdmin, err := IsNetworkAdmin(ctx, queries, sess.ID(), request.Network) if err != nil { - log.Println("database error 5:", err) + log.Println("database error 7:", err) return &ErrInternalError } @@ -516,25 +545,25 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe BanReason: banReason, }) if err != nil { - log.Println("database error 6:", err) + log.Println("database error 8:", err) return &ErrInternalError } if !newMember.IsMember { - return &packet.MembersInfo{ + return NetworkPropagate(ctx, sess, request.Network, &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) + log.Println("database error 9:", err) return &ErrInternalError } - return &packet.MembersInfo{ + payload := NetworkPropagate(ctx, sess, request.Network, &packet.MembersInfo{ RemovedMembers: nil, Members: []data.GetNetworkMembersRow{{ User: user, @@ -543,5 +572,34 @@ func SetMember(ctx context.Context, sess *session.Session, request *packet.SetMe IsMuted: newMember.IsMuted, }}, Network: request.Network, + }) + + // Joined + if !member.IsMember && newMember.IsMember { + frequencies, err := queries.GetNetworkFrequencies(ctx, network.ID) + if err != nil { + log.Println("database error 10:", err) + return &ErrInternalError + } + + members, err := queries.GetNetworkMembers(ctx, network.ID) + if err != nil { + log.Println("database error 11:", err) + return &ErrInternalError + } + + return &packet.NetworksInfo{ + Networks: []packet.FullNetwork{{ + Network: network, + Frequencies: frequencies, + Members: members, + Position: int(*newMember.Position), + }}, + RemovedNetworks: nil, + Set: false, + } } + + // Normal case, was already in the server + return payload } |
