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  }