summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/state
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-13 18:39:48 +0200
committerKyren223 <Kyren223@proton.me>2025-01-13 18:39:48 +0200
commit0df41fc0edac641c2927c518fa05c4380b27d984 (patch)
tree3c51fe03828f96d61b32e8837bde86f21bbf4fab /internal/client/ui/core/state
parentbad60b37d0fe3100f3898bfd6a860ea4aa87256f (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.go39
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)