M cmd/tallyard/main.go => cmd/tallyard/main.go +8 -20
@@ 53,12 53,7 @@ func main() {
panic(err)
}
- if data.Elections == nil {
- data.Elections = election.NewElectionsMap()
- }
- data.Elections.Save = func() {
- data.Save()
- }
+ elections := election.NewElectionsMap()
syncer := client.Syncer.(*mautrix.DefaultSyncer)
syncer.OnEvent(client.Store.(*mautrix.InMemoryStore).UpdateState)
@@ 68,8 63,7 @@ func main() {
log.Debug("redacted")
return
}
- election.OnCreateElectionMessage(evt, data.Elections)
- data.Save()
+ election.OnCreateElectionMessage(evt, elections)
})
syncer.OnEventType(election.JoinElectionMessage, func(source mautrix.EventSource, evt *event.Event) {
DebugCB(source, evt)
@@ 77,8 71,7 @@ func main() {
log.Debug("redacted")
return
}
- election.OnJoinElectionMessage(client, evt, data.Elections)
- data.Save()
+ election.OnJoinElectionMessage(client, evt, elections)
})
syncer.OnEventType(election.StartElectionMessage, func(source mautrix.EventSource, evt *event.Event) {
DebugCB(source, evt)
@@ 86,8 79,7 @@ func main() {
log.Debug("redacted")
return
}
- election.OnStartElectionMessage(client, evt, data.Elections)
- data.Save()
+ election.OnStartElectionMessage(client, evt, elections)
})
syncer.OnEventType(election.EvalMessage, func(source mautrix.EventSource, evt *event.Event) {
DebugCB(source, evt)
@@ 95,8 87,7 @@ func main() {
log.Debug("redacted")
return
}
- election.OnEvalMessage(client, evt, data.Elections)
- data.Save()
+ election.OnEvalMessage(client, evt, elections)
})
syncer.OnEventType(election.SumMessage, func(source mautrix.EventSource, evt *event.Event) {
DebugCB(source, evt)
@@ 104,8 95,7 @@ func main() {
log.Debug("redacted")
return
}
- election.OnSumMessage(client, evt, data.Elections)
- data.Save()
+ election.OnSumMessage(client, evt, elections)
})
syncer.OnEventType(election.ResultMessage, func(source mautrix.EventSource, evt *event.Event) {
DebugCB(source, evt)
@@ 113,8 103,7 @@ func main() {
log.Debug("redacted")
return
}
- election.OnResultMessage(client, evt, data.Elections)
- data.Save()
+ election.OnResultMessage(client, evt, elections)
})
go func() {
@@ 129,11 118,10 @@ func main() {
}
}()
- el := ui.TUI(client, data.Elections)
+ el := ui.TUI(client, elections)
el.Lock()
el.LocalVoter.Poly = math.NewRandomPoly(uint(len(*el.FinalVoters)-1), 1024, *el.LocalVoter.Ballot)
- el.Save()
el.Unlock()
// TODO we may not have all voters' info
M election/election.go => election/election.go +11 -24
@@ 1,7 1,6 @@
package election
import (
- "encoding/json"
"sync"
"maunium.net/go/mautrix/event"
@@ 11,22 10,21 @@ import (
type Election struct {
sync.RWMutex
- Candidates []Candidate `json:"candidates"`
- CreateEventId id.EventID `json:"create_event_id"`
- CreationTimestamp int64 `json:"creation_timestamp"`
- Creator id.UserID `json:"creator"`
- FinalVoters *[]id.EventID `json:"final_voters,omitempty"`
- Joins map[id.EventID]*Voter `json:"joins"`
- LocalVoter *LocalVoter `json:"local_voter,omitempty"`
- RoomID id.RoomID `json:"room_id"`
- Save func() `json:"-"`
- StartEvt *event.Event `json:"start_evt,omitempty"`
- Title string `json:"title"`
+ Candidates []Candidate `json:"candidates"`
+ CreateEventId id.EventID `json:"create_event_id"`
+ CreationTimestamp int64 `json:"creation_timestamp"`
+ Creator id.UserID `json:"creator"`
+ FinalVoters *[]id.EventID `json:"final_voters,omitempty"`
+ Joins map[id.EventID]*Voter `json:"joins"`
+ LocalVoter *LocalVoter `json:"local_voter,omitempty"`
+ RoomID id.RoomID `json:"room_id"`
+ StartEvt *event.Event `json:"start_evt,omitempty"`
+ Title string `json:"title"`
}
func NewElection(candidates []Candidate, createEventId id.EventID,
creationTimestamp int64, creator id.UserID, roomID id.RoomID,
- title string, save func()) *Election {
+ title string) *Election {
return &Election{
Candidates: candidates,
CreateEventId: createEventId,
@@ 34,17 32,6 @@ func NewElection(candidates []Candidate, createEventId id.EventID,
Creator: creator,
Joins: make(map[id.EventID]*Voter),
RoomID: roomID,
- Save: save,
Title: title,
}
}
-
-func (el *Election) UnmarshalJSON(b []byte) error {
- err := json.Unmarshal(b, &el)
- if err != nil {
- return err
- }
- // ensure these are the same pointer
- el.Joins[el.LocalVoter.JoinEvt.ID] = el.LocalVoter.Voter
- return nil
-}
M election/map.go => election/map.go +6 -2
@@ 13,7 13,6 @@ type ElectionsMap struct{
M map[id.EventID]*Election
L []*Election // sorted list of elections by CreationTimestamp (newest to oldest)
Joins map[id.EventID]*Voter
- Save func()
}
func NewElectionsMap() *ElectionsMap {
@@ 64,6 63,12 @@ func (em *ElectionsMap) GetI(i int) (*Election) {
return em.L[i]
}
+func (em *ElectionsMap) Set(createEventID id.EventID, el *Election) {
+ em.Lock()
+ defer em.Unlock()
+ em.set(createEventID, el)
+}
+
func (em *ElectionsMap) SetIfNotExists(createEventID id.EventID, el *Election) {
em.Lock()
defer em.Unlock()
@@ 72,7 77,6 @@ func (em *ElectionsMap) SetIfNotExists(createEventID id.EventID, el *Election) {
return
}
em.set(createEventID, el)
- em.Save()
}
func (em *ElectionsMap) set(createEventID id.EventID, el *Election) {
M election/msg.go => election/msg.go +1 -1
@@ 95,7 95,7 @@ func OnCreateElectionMessage(evt *event.Event, elections *ElectionsMap) {
return
}
elections.SetIfNotExists(evt.ID, NewElection(content.Candidates, evt.ID,
- evt.Timestamp, evt.Sender, evt.RoomID, content.Title, elections.Save))
+ evt.Timestamp, evt.Sender, evt.RoomID, content.Title))
}
func getElection(client *mautrix.Client, roomID id.RoomID, createEventId id.EventID, elections *ElectionsMap) *Election {
M election/voter.go => election/voter.go +0 -4
@@ 109,7 109,6 @@ func (el *Election) JoinElection(client *mautrix.Client) error {
PrivKey: *privKey,
}
el.Joins[resp.EventID] = el.LocalVoter.Voter
- el.Save()
return nil
}
@@ 152,7 151,6 @@ func (el *Election) StartElection(client *mautrix.Client) error {
// OnStartElectionMessage(client, startEvt, elections)
el.StartEvt = startEvt
el.FinalVoters = &voters
- el.Save()
return nil
}
@@ 205,7 203,6 @@ func (el *Election) SendEvals(client *mautrix.Client) error {
el.LocalVoter.Eval = nil
return err
}
- el.Save()
return nil
}
@@ 231,7 228,6 @@ func (el *Election) SendSum(client *mautrix.Client) error {
return err
}
el.LocalVoter.Sum = sum
- el.Save()
return nil
}
M matrix/data.go => matrix/data.go +0 -2
@@ 10,13 10,11 @@ import (
"github.com/kyoh86/xdg"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/id"
- "tallyard.xyz/election"
)
type Data struct {
AccessToken string `json:"access_token"`
DeviceID id.DeviceID `json:"device_id"`
- Elections *election.ElectionsMap `json:"elections,omitempty"`
Homeserver string `json:"homeserver"`
UserID id.UserID `json:"user_id"`
Username string `json:"username"`