status-go/protocol/messenger_config.go

169 lines
4.3 KiB
Go
Raw Normal View History

2020-07-03 10:08:47 +00:00
package protocol
import (
"database/sql"
2020-07-22 07:41:40 +00:00
"go.uber.org/zap"
2020-11-24 23:16:19 +00:00
"github.com/status-im/status-go/multiaccounts"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/communities"
2020-07-03 10:08:47 +00:00
"github.com/status-im/status-go/protocol/protobuf"
2020-07-22 07:41:40 +00:00
"github.com/status-im/status-go/protocol/pushnotificationclient"
"github.com/status-im/status-go/protocol/pushnotificationserver"
2020-07-03 10:08:47 +00:00
"github.com/status-im/status-go/protocol/transport"
"github.com/status-im/status-go/services/mailservers"
2020-07-03 10:08:47 +00:00
)
2021-02-23 15:47:45 +00:00
type MessageDeliveredHandler func(string, string)
type MessengerSignalsHandler interface {
MessageDelivered(chatID string, messageID string)
CommunityInfoFound(community *communities.Community)
2021-03-25 15:15:22 +00:00
MessengerResponse(response *MessengerResponse)
}
2020-07-03 10:08:47 +00:00
type config struct {
// This needs to be exposed until we move here mailserver logic
// as otherwise the client is not notified of a new filter and
// won't be pulling messages from mailservers until it reloads the chats/filters
2021-01-11 10:32:51 +00:00
onContactENSVerified func(*MessengerResponse)
2020-07-03 10:08:47 +00:00
// systemMessagesTranslations holds translations for system-messages
2021-03-29 15:41:30 +00:00
systemMessagesTranslations *systemMessageTranslationsMap
2020-07-03 10:08:47 +00:00
// Config for the envelopes monitor
envelopesMonitorConfig *transport.EnvelopesMonitorConfig
featureFlags common.FeatureFlags
2020-07-03 10:08:47 +00:00
// A path to a database or a database instance is required.
// The database instance has a higher priority.
dbConfig dbConfig
db *sql.DB
multiAccount *multiaccounts.Database
mailserversDatabase *mailservers.Database
account *multiaccounts.Account
2020-07-03 10:08:47 +00:00
2021-01-11 10:32:51 +00:00
verifyTransactionClient EthClient
verifyENSURL string
verifyENSContractAddress string
2020-07-03 10:08:47 +00:00
2020-07-22 07:41:40 +00:00
pushNotificationServerConfig *pushnotificationserver.Config
pushNotificationClientConfig *pushnotificationclient.Config
2020-07-03 10:08:47 +00:00
logger *zap.Logger
2021-02-23 15:47:45 +00:00
messengerSignalsHandler MessengerSignalsHandler
2020-07-03 10:08:47 +00:00
}
type Option func(*config) error
// WithSystemMessagesTranslations is required for Group Chats which are currently disabled.
// nolint: unused
func WithSystemMessagesTranslations(t map[protobuf.MembershipUpdateEvent_EventType]string) Option {
return func(c *config) error {
2021-03-29 15:41:30 +00:00
c.systemMessagesTranslations.Init(t)
2020-07-03 10:08:47 +00:00
return nil
}
}
func WithCustomLogger(logger *zap.Logger) Option {
return func(c *config) error {
c.logger = logger
return nil
}
}
func WithDatabaseConfig(dbPath, dbKey string) Option {
return func(c *config) error {
c.dbConfig = dbConfig{dbPath: dbPath, dbKey: dbKey}
return nil
}
}
func WithVerifyTransactionClient(client EthClient) Option {
return func(c *config) error {
c.verifyTransactionClient = client
return nil
}
}
func WithDatabase(db *sql.DB) Option {
return func(c *config) error {
c.db = db
return nil
}
}
func WithMultiAccounts(ma *multiaccounts.Database) Option {
return func(c *config) error {
c.multiAccount = ma
return nil
}
}
func WithMailserversDatabase(ma *mailservers.Database) Option {
return func(c *config) error {
c.mailserversDatabase = ma
return nil
}
}
2020-12-09 14:03:43 +00:00
func WithAccount(acc *multiaccounts.Account) Option {
return func(c *config) error {
c.account = acc
return nil
}
}
2020-07-22 07:41:40 +00:00
func WithPushNotificationServerConfig(pushNotificationServerConfig *pushnotificationserver.Config) Option {
2020-07-03 10:08:47 +00:00
return func(c *config) error {
c.pushNotificationServerConfig = pushNotificationServerConfig
return nil
}
}
2020-07-22 07:41:40 +00:00
func WithPushNotificationClientConfig(pushNotificationClientConfig *pushnotificationclient.Config) Option {
2020-07-15 12:25:01 +00:00
return func(c *config) error {
c.pushNotificationClientConfig = pushNotificationClientConfig
return nil
}
}
2020-07-03 10:08:47 +00:00
func WithDatasync() func(c *config) error {
return func(c *config) error {
c.featureFlags.Datasync = true
2020-07-03 10:08:47 +00:00
return nil
}
}
func WithPushNotifications() func(c *config) error {
return func(c *config) error {
c.featureFlags.PushNotifications = true
return nil
}
}
2020-07-03 10:08:47 +00:00
func WithEnvelopesMonitorConfig(emc *transport.EnvelopesMonitorConfig) Option {
return func(c *config) error {
c.envelopesMonitorConfig = emc
return nil
}
}
2021-02-23 15:47:45 +00:00
func WithSignalsHandler(h MessengerSignalsHandler) Option {
2021-02-23 15:47:45 +00:00
return func(c *config) error {
c.messengerSignalsHandler = h
2021-02-23 15:47:45 +00:00
return nil
}
}
2021-01-11 10:32:51 +00:00
func WithENSVerificationConfig(onENSVerified func(*MessengerResponse), url, address string) Option {
return func(c *config) error {
c.onContactENSVerified = onENSVerified
c.verifyENSURL = url
c.verifyENSContractAddress = address
return nil
}
}