github.com/status-im/status-go@v1.1.0/protocol/peersyncing/peersyncing.go (about) 1 package peersyncing 2 3 import "github.com/status-im/status-go/eth-node/types" 4 5 type PeerSyncing struct { 6 persistence SyncMessagePersistence 7 config Config 8 } 9 10 func New(config Config) *PeerSyncing { 11 syncMessagePersistence := config.SyncMessagePersistence 12 if syncMessagePersistence == nil { 13 syncMessagePersistence = NewSyncMessageSQLitePersistence(config.Database) 14 } 15 16 return &PeerSyncing{ 17 config: config, 18 persistence: syncMessagePersistence, 19 } 20 } 21 22 func (p *PeerSyncing) Add(message SyncMessage) error { 23 return p.persistence.Add(message) 24 } 25 26 func (p *PeerSyncing) AvailableMessages() ([]SyncMessage, error) { 27 return p.persistence.All() 28 } 29 30 func (p *PeerSyncing) AvailableMessagesMapByChatIDs(groupIDs [][]byte, limit int) (map[string][][]byte, error) { 31 availableMessages, err := p.persistence.ByChatIDs(groupIDs, limit) 32 if err != nil { 33 return nil, err 34 } 35 availableMessagesMap := make(map[string][][]byte) 36 for _, m := range availableMessages { 37 chatID := types.Bytes2Hex(m.ChatID) 38 availableMessagesMap[chatID] = append(availableMessagesMap[chatID], m.ID) 39 } 40 return availableMessagesMap, err 41 } 42 43 func (p *PeerSyncing) MessagesByIDs(messageIDs [][]byte) ([]SyncMessage, error) { 44 return p.persistence.ByMessageIDs(messageIDs) 45 } 46 47 func (p *PeerSyncing) OnOffer(messages []SyncMessage) ([]SyncMessage, error) { 48 return p.persistence.Complement(messages) 49 }