From 0df41fc0edac641c2927c518fa05c4380b27d984 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Mon, 13 Jan 2025 18:39:48 +0200 Subject: Implemented frequency syncing client-side, removed the history mechanism for frequency swapping, this will add delay when swapping frequencies but it prevents issues when the swapping packet gets received as part of the propagation --- internal/client/ui/core/state/state.go | 39 ++++++++++++++-------------------- 1 file changed, 16 insertions(+), 23 deletions(-) (limited to 'internal/client/ui/core/state') diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go index 9b8c053..d8d47b9 100644 --- a/internal/client/ui/core/state/state.go +++ b/internal/client/ui/core/state/state.go @@ -19,8 +19,6 @@ type FrequencyState struct { } type state struct { - UserID *snowflake.ID - // Key is either a frequency or receiver FrequencyState map[snowflake.ID]FrequencyState // key is frequency id LastFrequency map[snowflake.ID]snowflake.ID // key is network id @@ -33,7 +31,6 @@ type state struct { } var State state = state{ - UserID: nil, FrequencyState: map[snowflake.ID]FrequencyState{}, LastFrequency: map[snowflake.ID]snowflake.ID{}, Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{}, @@ -51,6 +48,8 @@ var Data UserData = UserData{ Networks: []snowflake.ID{}, } +var UserID *snowflake.ID = nil + func UpdateNetworks(info *packet.NetworksInfo) { networks := State.Networks @@ -94,29 +93,23 @@ func UpdateNetworks(info *packet.NetworksInfo) { func UpdateFrequencies(info *packet.FrequenciesInfo) { frequencies := State.Frequencies[info.Network] - for _, newFrequency := range info.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(info.RemovedFrequencies, frequency.ID) }) - slices.SortFunc(frequencies, func(a, b data.Frequency) int { - return int(a.Position - b.Position) - }) + for i, frequency := range frequencies { + frequency.Position = int64(i) + frequencies[i] = frequency + } + + for _, newFrequency := range info.Frequencies { + position := int(newFrequency.Position) + if len(frequencies) == position { + frequencies = append(frequencies, newFrequency) + } else if position < len(frequencies) { + frequencies[position] = newFrequency + } + } State.Frequencies[info.Network] = frequencies } @@ -154,7 +147,7 @@ func UpdateMembers(info *packet.MembersInfo) { for _, removedMember := range info.RemovedMembers { delete(State.Members[info.Network], removedMember) - if removedMember != *State.UserID { + if removedMember != *UserID { continue } delete(State.Networks, info.Network) -- cgit v1.3.1