forked from cwtch.im/cwtch
Group V2 Logic
This commit is contained in:
parent
1e34eb67a7
commit
6739df68c3
|
@ -14,6 +14,9 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// CurrentGroupVersion is used to set the version of newly created groups and make sure group structs stored are correct and up to date
|
||||||
|
const CurrentGroupVersion = 2
|
||||||
|
|
||||||
// Group defines and encapsulates Cwtch's conception of group chat. Which are sessions
|
// Group defines and encapsulates Cwtch's conception of group chat. Which are sessions
|
||||||
// tied to a server under a given group key. Each group has a set of Messages.
|
// tied to a server under a given group key. Each group has a set of Messages.
|
||||||
type Group struct {
|
type Group struct {
|
||||||
|
@ -31,11 +34,13 @@ type Group struct {
|
||||||
LocalID string
|
LocalID string
|
||||||
State string `json:"-"`
|
State string `json:"-"`
|
||||||
unacknowledgedMessages []Message
|
unacknowledgedMessages []Message
|
||||||
|
Version int
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewGroup initializes a new group associated with a given CwtchServer
|
// NewGroup initializes a new group associated with a given CwtchServer
|
||||||
func NewGroup(server string) (*Group, error) {
|
func NewGroup(server string) (*Group, error) {
|
||||||
group := new(Group)
|
group := new(Group)
|
||||||
|
group.Version = CurrentGroupVersion
|
||||||
group.LocalID = GenerateRandomID()
|
group.LocalID = GenerateRandomID()
|
||||||
|
|
||||||
if tor.IsValidHostname(server) == false {
|
if tor.IsValidHostname(server) == false {
|
||||||
|
|
|
@ -247,6 +247,7 @@ func (ps *ProfileStoreV1) load() error {
|
||||||
}
|
}
|
||||||
cp := new(model.Profile)
|
cp := new(model.Profile)
|
||||||
err = json.Unmarshal(decrypted, &cp)
|
err = json.Unmarshal(decrypted, &cp)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
ps.profile = cp
|
ps.profile = cp
|
||||||
|
|
||||||
|
@ -275,12 +276,19 @@ func (ps *ProfileStoreV1) load() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for gid, group := range cp.Groups {
|
for gid, group := range cp.Groups {
|
||||||
|
if group.Version == 0 {
|
||||||
|
log.Infof("group %v is of unsupported version 0. dropping group...\n", group.GroupID)
|
||||||
|
delete(cp.Groups, gid)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
ss := NewStreamStore(ps.directory, group.LocalID, ps.key)
|
ss := NewStreamStore(ps.directory, group.LocalID, ps.key)
|
||||||
|
|
||||||
cp.Groups[gid].Timeline.SetMessages(ss.Read())
|
cp.Groups[gid].Timeline.SetMessages(ss.Read())
|
||||||
ps.streamStores[group.GroupID] = ss
|
ps.streamStores[group.GroupID] = ss
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ps.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue