Modify CanonicalImage function to return large or thumb image if available (#2300)
This commit is contained in:
parent
62b9d8062e
commit
4d3c04e41c
|
@ -613,6 +613,15 @@ func (db *Database) GetNotificationsEnabled() (bool, error) {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *Database) GetProfilePicturesVisibility() (int, error) {
|
||||||
|
var result int
|
||||||
|
err := db.db.QueryRow("SELECT profile_pictures_visibility FROM settings WHERE synthetic_id = 'id'").Scan(&result)
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
func (db *Database) CanUseMailservers() (bool, error) {
|
func (db *Database) CanUseMailservers() (bool, error) {
|
||||||
var result bool
|
var result bool
|
||||||
err := db.db.QueryRow("SELECT use_mailservers FROM settings WHERE synthetic_id = 'id'").Scan(&result)
|
err := db.db.QueryRow("SELECT use_mailservers FROM settings WHERE synthetic_id = 'id'").Scan(&result)
|
||||||
|
|
|
@ -6,10 +6,21 @@ import (
|
||||||
"github.com/status-im/status-go/eth-node/crypto"
|
"github.com/status-im/status-go/eth-node/crypto"
|
||||||
"github.com/status-im/status-go/eth-node/types"
|
"github.com/status-im/status-go/eth-node/types"
|
||||||
"github.com/status-im/status-go/images"
|
"github.com/status-im/status-go/images"
|
||||||
|
"github.com/status-im/status-go/multiaccounts/accounts"
|
||||||
"github.com/status-im/status-go/protocol/identity/alias"
|
"github.com/status-im/status-go/protocol/identity/alias"
|
||||||
"github.com/status-im/status-go/protocol/identity/identicon"
|
"github.com/status-im/status-go/protocol/identity/identicon"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ContactDeviceInfo is a struct containing information about a particular device owned by a contact
|
||||||
|
type ContactDeviceInfo struct {
|
||||||
|
// The installation id of the device
|
||||||
|
InstallationID string `json:"id"`
|
||||||
|
// Timestamp represents the last time we received this info
|
||||||
|
Timestamp int64 `json:"timestamp"`
|
||||||
|
// FCMToken is to be used for push notifications
|
||||||
|
FCMToken string `json:"fcmToken"`
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Contact) CanonicalName() string {
|
func (c *Contact) CanonicalName() string {
|
||||||
if c.LocalNickname != "" {
|
if c.LocalNickname != "" {
|
||||||
return c.LocalNickname
|
return c.LocalNickname
|
||||||
|
@ -22,7 +33,25 @@ func (c *Contact) CanonicalName() string {
|
||||||
return c.Alias
|
return c.Alias
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Contact) CanonicalImage() string {
|
func (c *Contact) CanonicalImage(profilePicturesVisibility accounts.ProfilePicturesVisibilityType) string {
|
||||||
|
if profilePicturesVisibility == accounts.ProfilePicturesVisibilityNone || (profilePicturesVisibility == accounts.ProfilePicturesVisibilityContactsOnly && !c.Added) {
|
||||||
|
return c.Identicon
|
||||||
|
}
|
||||||
|
|
||||||
|
if largeImage, ok := c.Images[images.LargeDimName]; ok {
|
||||||
|
imageBase64, err := largeImage.GetDataURI()
|
||||||
|
if err == nil {
|
||||||
|
return imageBase64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if thumbImage, ok := c.Images[images.SmallDimName]; ok {
|
||||||
|
imageBase64, err := thumbImage.GetDataURI()
|
||||||
|
if err == nil {
|
||||||
|
return imageBase64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return c.Identicon
|
return c.Identicon
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
gethcommon "github.com/ethereum/go-ethereum/common"
|
gethcommon "github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/status-im/status-go/multiaccounts/accounts"
|
||||||
"github.com/status-im/status-go/protocol/common"
|
"github.com/status-im/status-go/protocol/common"
|
||||||
"github.com/status-im/status-go/protocol/communities"
|
"github.com/status-im/status-go/protocol/communities"
|
||||||
localnotifications "github.com/status-im/status-go/services/local-notifications"
|
localnotifications "github.com/status-im/status-go/services/local-notifications"
|
||||||
|
@ -44,14 +45,14 @@ func (n NotificationBody) MarshalJSON() ([]byte, error) {
|
||||||
return json.Marshal(item)
|
return json.Marshal(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMessageNotification(id string, message *common.Message, chat *Chat, contact *Contact, contacts *contactMap) (*localnotifications.Notification, error) {
|
func NewMessageNotification(id string, message *common.Message, chat *Chat, contact *Contact, contacts *contactMap, profilePicturesVisibility int) (*localnotifications.Notification, error) {
|
||||||
body := &NotificationBody{
|
body := &NotificationBody{
|
||||||
Message: message,
|
Message: message,
|
||||||
Chat: chat,
|
Chat: chat,
|
||||||
Contact: contact,
|
Contact: contact,
|
||||||
}
|
}
|
||||||
|
|
||||||
return body.toMessageNotification(id, contacts)
|
return body.toMessageNotification(id, contacts, profilePicturesVisibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeletedMessageNotification(id string, chat *Chat) *localnotifications.Notification {
|
func DeletedMessageNotification(id string, chat *Chat) *localnotifications.Notification {
|
||||||
|
@ -74,16 +75,16 @@ func NewCommunityRequestToJoinNotification(id string, community *communities.Com
|
||||||
return body.toCommunityRequestToJoinNotification(id)
|
return body.toCommunityRequestToJoinNotification(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPrivateGroupInviteNotification(id string, chat *Chat, contact *Contact) *localnotifications.Notification {
|
func NewPrivateGroupInviteNotification(id string, chat *Chat, contact *Contact, profilePicturesVisibility int) *localnotifications.Notification {
|
||||||
body := &NotificationBody{
|
body := &NotificationBody{
|
||||||
Chat: chat,
|
Chat: chat,
|
||||||
Contact: contact,
|
Contact: contact,
|
||||||
}
|
}
|
||||||
|
|
||||||
return body.toPrivateGroupInviteNotification(id)
|
return body.toPrivateGroupInviteNotification(id, profilePicturesVisibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n NotificationBody) toMessageNotification(id string, contacts *contactMap) (*localnotifications.Notification, error) {
|
func (n NotificationBody) toMessageNotification(id string, contacts *contactMap, profilePicturesVisibility int) (*localnotifications.Notification, error) {
|
||||||
var title string
|
var title string
|
||||||
if n.Chat.PrivateGroupChat() || n.Chat.Public() || n.Chat.CommunityChat() {
|
if n.Chat.PrivateGroupChat() || n.Chat.Public() || n.Chat.CommunityChat() {
|
||||||
title = n.Chat.Name
|
title = n.Chat.Name
|
||||||
|
@ -123,7 +124,7 @@ func (n NotificationBody) toMessageNotification(id string, contacts *contactMap)
|
||||||
IsGroupConversation: true,
|
IsGroupConversation: true,
|
||||||
Author: localnotifications.NotificationAuthor{
|
Author: localnotifications.NotificationAuthor{
|
||||||
Name: n.Contact.CanonicalName(),
|
Name: n.Contact.CanonicalName(),
|
||||||
Icon: n.Contact.CanonicalImage(),
|
Icon: n.Contact.CanonicalImage(accounts.ProfilePicturesVisibilityType(profilePicturesVisibility)),
|
||||||
ID: n.Contact.ID,
|
ID: n.Contact.ID,
|
||||||
},
|
},
|
||||||
Timestamp: n.Message.WhisperTimestamp,
|
Timestamp: n.Message.WhisperTimestamp,
|
||||||
|
@ -132,7 +133,7 @@ func (n NotificationBody) toMessageNotification(id string, contacts *contactMap)
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n NotificationBody) toPrivateGroupInviteNotification(id string) *localnotifications.Notification {
|
func (n NotificationBody) toPrivateGroupInviteNotification(id string, profilePicturesVisibility int) *localnotifications.Notification {
|
||||||
return &localnotifications.Notification{
|
return &localnotifications.Notification{
|
||||||
ID: gethcommon.HexToHash(id),
|
ID: gethcommon.HexToHash(id),
|
||||||
Body: n,
|
Body: n,
|
||||||
|
@ -143,7 +144,7 @@ func (n NotificationBody) toPrivateGroupInviteNotification(id string) *localnoti
|
||||||
Deeplink: n.Chat.DeepLink(),
|
Deeplink: n.Chat.DeepLink(),
|
||||||
Author: localnotifications.NotificationAuthor{
|
Author: localnotifications.NotificationAuthor{
|
||||||
Name: n.Contact.CanonicalName(),
|
Name: n.Contact.CanonicalName(),
|
||||||
Icon: n.Contact.CanonicalImage(),
|
Icon: n.Contact.CanonicalImage(accounts.ProfilePicturesVisibilityType(profilePicturesVisibility)),
|
||||||
ID: n.Contact.ID,
|
ID: n.Contact.ID,
|
||||||
},
|
},
|
||||||
Image: "",
|
Image: "",
|
||||||
|
|
|
@ -2564,7 +2564,7 @@ func (m *Messenger) markDeliveredMessages(acks [][]byte) {
|
||||||
|
|
||||||
// addNewMessageNotification takes a common.Message and generates a new NotificationBody and appends it to the
|
// addNewMessageNotification takes a common.Message and generates a new NotificationBody and appends it to the
|
||||||
// []Response.Notifications if the message is m.New
|
// []Response.Notifications if the message is m.New
|
||||||
func (r *ReceivedMessageState) addNewMessageNotification(publicKey ecdsa.PublicKey, m *common.Message, responseTo *common.Message) error {
|
func (r *ReceivedMessageState) addNewMessageNotification(publicKey ecdsa.PublicKey, m *common.Message, responseTo *common.Message, profilePicturesVisibility int) error {
|
||||||
if !m.New {
|
if !m.New {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -2586,7 +2586,7 @@ func (r *ReceivedMessageState) addNewMessageNotification(publicKey ecdsa.PublicK
|
||||||
}
|
}
|
||||||
|
|
||||||
if showMessageNotification(publicKey, m, chat, responseTo) {
|
if showMessageNotification(publicKey, m, chat, responseTo) {
|
||||||
notification, err := NewMessageNotification(m.ID, m, chat, contact, r.AllContacts)
|
notification, err := NewMessageNotification(m.ID, m, chat, contact, r.AllContacts, profilePicturesVisibility)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -3275,13 +3275,19 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
profilePicturesVisibility, err := m.settings.GetProfilePicturesVisibility()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
for _, message := range messageState.Response.messages {
|
for _, message := range messageState.Response.messages {
|
||||||
if _, ok := newMessagesIds[message.ID]; ok {
|
if _, ok := newMessagesIds[message.ID]; ok {
|
||||||
message.New = true
|
message.New = true
|
||||||
|
|
||||||
if notificationsEnabled {
|
if notificationsEnabled {
|
||||||
// Create notification body to be eventually passed to `localnotifications.SendMessageNotifications()`
|
// Create notification body to be eventually passed to `localnotifications.SendMessageNotifications()`
|
||||||
if err = messageState.addNewMessageNotification(m.identity.PublicKey, message, messagesByID[message.ResponseTo]); err != nil {
|
if err = messageState.addNewMessageNotification(m.identity.PublicKey, message, messagesByID[message.ResponseTo], profilePicturesVisibility); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4202,8 +4208,14 @@ func (m *Messenger) ValidateTransactions(ctx context.Context, addresses []types.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
profilePicturesVisibility, err := m.settings.GetProfilePicturesVisibility()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if notificationsEnabled {
|
if notificationsEnabled {
|
||||||
notification, err := NewMessageNotification(message.ID, message, chat, contact, m.allContacts)
|
notification, err := NewMessageNotification(message.ID, message, chat, contact, m.allContacts, profilePicturesVisibility)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,8 +115,13 @@ func (m *Messenger) HandleMembershipUpdate(messageState *ReceivedMessageState, c
|
||||||
return errors.Wrap(err, "failed to get group creator")
|
return errors.Wrap(err, "failed to get group creator")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
profilePicturesVisibility, err := m.settings.GetProfilePicturesVisibility()
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "failed to get profilePicturesVisibility setting")
|
||||||
|
}
|
||||||
|
|
||||||
if chat.Active && messageState.CurrentMessageState.Contact.ID != ourKey {
|
if chat.Active && messageState.CurrentMessageState.Contact.ID != ourKey {
|
||||||
messageState.Response.AddNotification(NewPrivateGroupInviteNotification(chat.ID, chat, messageState.CurrentMessageState.Contact))
|
messageState.Response.AddNotification(NewPrivateGroupInviteNotification(chat.ID, chat, messageState.CurrentMessageState.Contact, profilePicturesVisibility))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
existingGroup, err := newProtocolGroupFromChat(chat)
|
existingGroup, err := newProtocolGroupFromChat(chat)
|
||||||
|
|
Loading…
Reference in New Issue