diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-01-13 18:39:48 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-01-13 18:39:48 +0200 |
| commit | 0df41fc0edac641c2927c518fa05c4380b27d984 (patch) | |
| tree | 3c51fe03828f96d61b32e8837bde86f21bbf4fab /internal/client/ui/core/state | |
| parent | bad60b37d0fe3100f3898bfd6a860ea4aa87256f (diff) | |
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
Diffstat (limited to 'internal/client/ui/core/state')
| -rw-r--r-- | internal/client/ui/core/state/state.go | 39 |
1 files changed, 16 insertions, 23 deletions
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) |
