Feat/sync activity center notification (#3535)

fix flaky test: TestRetrieveBlockedContact

resolve conflict when rebase origin/develop

Feat/sync activity center notification (#3581)

* feat: sync activity center notification

* add test

* fix lint issue

* fix failed test

* addressed feedback from sale

* fix failed test

* addressed feedback from ilmotta

go generate ./protocol/migrations/sqlite/...

feat: add updated_at for syncing activity center notification
This commit is contained in:
frank 2023-06-10 10:00:17 +08:00 committed by GitHub
parent e53c2c0a6d
commit b6d4e75cf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 1838 additions and 606 deletions

View File

@ -1 +1 @@
0.157.0
0.157.1

View File

@ -66,6 +66,9 @@ type ActivityCenterNotification struct {
Deleted bool `json:"deleted"`
Accepted bool `json:"accepted"`
ContactVerificationStatus verification.RequestStatus `json:"contactVerificationStatus"`
//Used for synchronization. Each update should increment the UpdatedAt.
//The value should represent the time when the update occurred.
UpdatedAt uint64 `json:"updatedAt"`
}
type ActivityCenterNotificationsRequest struct {
@ -88,7 +91,8 @@ type ActivityCenterPaginationResponse struct {
type ActivityCenterCountResponse = map[ActivityCenterType]uint64
type ActivityCenterState struct {
HasSeen bool `json:"hasSeen"`
HasSeen bool `json:"hasSeen"`
UpdatedAt uint64 `json:"updatedAt"`
}
func (n *ActivityCenterNotification) Valid() error {

View File

@ -11,18 +11,21 @@ import (
"github.com/status-im/status-go/protocol/common"
)
func (db sqlitePersistence) DeleteActivityCenterNotification(id []byte) error {
_, err := db.db.Exec(`DELETE FROM activity_center_notifications WHERE id = ?`, id)
const allFieldsForTableActivityCenterNotification = `id, timestamp, notification_type, chat_id, read, dismissed, accepted, message, author,
reply_message, community_id, membership_status, contact_verification_status, deleted, updated_at`
func (db sqlitePersistence) DeleteActivityCenterNotificationByID(id []byte, updatedAt uint64) error {
_, err := db.db.Exec(`UPDATE activity_center_notifications SET deleted = 1, updated_at = ? WHERE id = ? AND NOT deleted`, updatedAt, id)
return err
}
func (db sqlitePersistence) DeleteActivityCenterNotificationForMessage(chatID string, messageID string) error {
func (db sqlitePersistence) DeleteActivityCenterNotificationForMessage(chatID string, messageID string, updatedAt uint64) ([]*ActivityCenterNotification, error) {
var tx *sql.Tx
var err error
tx, err = db.db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
return err
return nil, err
}
defer func() {
if err == nil {
@ -40,48 +43,58 @@ func (db sqlitePersistence) DeleteActivityCenterNotificationForMessage(chatID st
_, notifications, err := db.buildActivityCenterQuery(tx, params)
if err != nil {
return err
return nil, err
}
var ids []types.HexBytes
var matchNotifications []*ActivityCenterNotification
withNotification := func(a *ActivityCenterNotification) {
a.Read = true
a.Dismissed = true
a.Deleted = true
a.UpdatedAt = updatedAt
ids = append(ids, a.ID)
matchNotifications = append(matchNotifications, a)
}
for _, notification := range notifications {
if notification.LastMessage != nil && notification.LastMessage.ID == messageID {
ids = append(ids, notification.ID)
withNotification(notification)
}
if notification.Message != nil && notification.Message.ID == messageID {
ids = append(ids, notification.ID)
withNotification(notification)
}
}
if len(ids) > 0 {
idsArgs := make([]interface{}, 0, len(ids))
args := make([]interface{}, 0, len(ids)+1)
args = append(args, updatedAt)
for _, id := range ids {
idsArgs = append(idsArgs, id)
args = append(args, id)
}
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
query := "UPDATE activity_center_notifications SET read = 1, dismissed = 1, deleted = 1 WHERE id IN (" + inVector + ")" // nolint: gosec
_, err = tx.Exec(query, idsArgs...)
return err
query := "UPDATE activity_center_notifications SET read = 1, dismissed = 1, deleted = 1, updated_at = ? WHERE id IN (" + inVector + ")" // nolint: gosec
_, err = tx.Exec(query, args...)
return matchNotifications, err
}
return nil
return matchNotifications, nil
}
func (db sqlitePersistence) SaveActivityCenterNotification(notification *ActivityCenterNotification) error {
func (db sqlitePersistence) SaveActivityCenterNotification(notification *ActivityCenterNotification, updateState bool) (int64, error) {
var tx *sql.Tx
var err error
err = notification.Valid()
if err != nil {
return err
return 0, err
}
tx, err = db.db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
return err
return 0, err
}
defer func() {
if err == nil {
@ -92,21 +105,12 @@ func (db sqlitePersistence) SaveActivityCenterNotification(notification *Activit
_ = tx.Rollback()
}()
if notification.Type == ActivityCenterNotificationTypeNewOneToOne ||
notification.Type == ActivityCenterNotificationTypeNewPrivateGroupChat {
// Delete other notifications, so it pops us again if it was not dismissed
_, err = tx.Exec(`DELETE FROM activity_center_notifications WHERE id = ? AND (dismissed OR accepted)`, notification.ID)
if err != nil {
return err
}
}
// encode message
var encodedMessage []byte
if notification.Message != nil {
encodedMessage, err = json.Marshal(notification.Message)
if err != nil {
return err
return 0, err
}
}
@ -115,11 +119,11 @@ func (db sqlitePersistence) SaveActivityCenterNotification(notification *Activit
if notification.ReplyMessage != nil {
encodedReplyMessage, err = json.Marshal(notification.ReplyMessage)
if err != nil {
return err
return 0, err
}
}
_, err = tx.Exec(`
result, err := tx.Exec(`
INSERT OR REPLACE
INTO activity_center_notifications (
id,
@ -135,9 +139,10 @@ func (db sqlitePersistence) SaveActivityCenterNotification(notification *Activit
read,
accepted,
dismissed,
deleted
deleted,
updated_at
)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)
SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,? WHERE NOT EXISTS (SELECT 1 FROM activity_center_notifications WHERE id = ? AND updated_at >= ?)
`,
notification.ID,
notification.Timestamp,
@ -153,14 +158,90 @@ func (db sqlitePersistence) SaveActivityCenterNotification(notification *Activit
notification.Accepted,
notification.Dismissed,
notification.Deleted,
notification.UpdatedAt,
notification.ID,
notification.UpdatedAt,
)
// When we have inserted or updated unread notification - mark whole activity_center_settings as unseen
if err == nil && !notification.Read {
_, err = tx.Exec(`UPDATE activity_center_states SET has_seen = 0`)
if err != nil {
return 0, err
}
n, err := result.RowsAffected()
if err != nil {
return n, err
}
return err
// When we have inserted or updated unread notification - mark whole activity_center_settings as unseen
if updateState && n > 0 && !notification.Read {
_, err = tx.Exec(`UPDATE activity_center_states SET has_seen = 0, updated_at = ?`, notification.UpdatedAt)
}
return n, nil
}
func (db sqlitePersistence) parseRowFromTableActivityCenterNotification(rows *sql.Rows, withNotification func(notification *ActivityCenterNotification)) ([]*ActivityCenterNotification, error) {
var notifications []*ActivityCenterNotification
defer rows.Close()
for rows.Next() {
var chatID sql.NullString
var communityID sql.NullString
var messageBytes []byte
var replyMessageBytes []byte
var author sql.NullString
notification := &ActivityCenterNotification{}
err := rows.Scan(
&notification.ID,
&notification.Timestamp,
&notification.Type,
&chatID,
&notification.Read,
&notification.Dismissed,
&notification.Accepted,
&messageBytes,
&author,
&replyMessageBytes,
&communityID,
&notification.MembershipStatus,
&notification.ContactVerificationStatus,
&notification.Deleted,
&notification.UpdatedAt,
)
if err != nil {
return nil, err
}
if chatID.Valid {
notification.ChatID = chatID.String
}
if communityID.Valid {
notification.CommunityID = communityID.String
}
if author.Valid {
notification.Author = author.String
}
if len(messageBytes) > 0 {
err = json.Unmarshal(messageBytes, &notification.Message)
if err != nil {
return nil, err
}
}
if len(replyMessageBytes) > 0 {
err = json.Unmarshal(replyMessageBytes, &notification.ReplyMessage)
if err != nil {
return nil, err
}
}
if withNotification != nil {
withNotification(notification)
}
notifications = append(notifications, notification)
}
return notifications, nil
}
func (db sqlitePersistence) unmarshalActivityCenterNotificationRow(row *sql.Row) (*ActivityCenterNotification, error) {
@ -188,7 +269,8 @@ func (db sqlitePersistence) unmarshalActivityCenterNotificationRow(row *sql.Row)
&replyMessageBytes,
&notification.ContactVerificationStatus,
&name,
&author)
&author,
&notification.UpdatedAt)
if err != nil {
return nil, err
@ -268,7 +350,8 @@ func (db sqlitePersistence) unmarshalActivityCenterNotificationRows(rows *sql.Ro
&notification.ContactVerificationStatus,
&name,
&author,
&latestCursor)
&latestCursor,
&notification.UpdatedAt)
if err != nil {
return "", nil, err
}
@ -419,7 +502,8 @@ func (db sqlitePersistence) buildActivityCenterQuery(tx *sql.Tx, params activity
a.contact_verification_status,
c.name,
a.author,
substr('0000000000000000000000000000000000000000000000000000000000000000' || a.timestamp, -64, 64) || hex(a.id) as cursor
substr('0000000000000000000000000000000000000000000000000000000000000000' || a.timestamp, -64, 64) || hex(a.id) as cursor,
a.updated_at
FROM activity_center_notifications a
LEFT JOIN chats c
ON
@ -436,6 +520,7 @@ func (db sqlitePersistence) buildActivityCenterQuery(tx *sql.Tx, params activity
if err != nil {
return "", nil, err
}
defer rows.Close()
return db.unmarshalActivityCenterNotificationRows(rows)
}
@ -474,14 +559,14 @@ func (db sqlitePersistence) runActivityCenterIDQuery(query string) ([][]byte, er
}
func (db sqlitePersistence) GetNotReadActivityCenterNotificationIds() ([][]byte, error) {
return db.runActivityCenterIDQuery("SELECT a.id FROM activity_center_notifications a WHERE NOT a.read")
return db.runActivityCenterIDQuery("SELECT a.id FROM activity_center_notifications a WHERE NOT a.read AND NOT a.deleted")
}
func (db sqlitePersistence) GetToProcessActivityCenterNotificationIds() ([][]byte, error) {
return db.runActivityCenterIDQuery(`
SELECT a.id
FROM activity_center_notifications a
WHERE NOT a.deleted AND NOT a.dismissed AND NOT a.accepted
WHERE NOT a.dismissed AND NOT a.accepted AND NOT a.deleted
`)
}
@ -515,7 +600,7 @@ func (db sqlitePersistence) GetActivityCenterNotificationsByID(ids []types.HexBy
}
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
rows, err := db.db.Query("SELECT a.id, a.read, a.accepted, a.dismissed FROM activity_center_notifications a WHERE a.id IN ("+inVector+")", idsArgs...) // nolint: gosec
rows, err := db.db.Query("SELECT a.id, a.read, a.accepted, a.dismissed FROM activity_center_notifications a WHERE a.id IN ("+inVector+") AND NOT a.deleted", idsArgs...) // nolint: gosec
if err != nil {
return nil, err
@ -540,6 +625,7 @@ func (db sqlitePersistence) GetActivityCenterNotificationsByID(ids []types.HexBy
return notifications, nil
}
// GetActivityCenterNotificationByID returns a notification by its ID even it's deleted logically
func (db sqlitePersistence) GetActivityCenterNotificationByID(id types.HexBytes) (*ActivityCenterNotification, error) {
row := db.db.QueryRow(`
SELECT
@ -558,7 +644,8 @@ func (db sqlitePersistence) GetActivityCenterNotificationByID(id types.HexBytes)
a.reply_message,
a.contact_verification_status,
c.name,
a.author
a.author,
a.updated_at
FROM activity_center_notifications a
LEFT JOIN chats c
ON
@ -606,97 +693,168 @@ func (db sqlitePersistence) activityCenterNotifications(params activityCenterQue
return latestCursor, notifications, nil
}
func (db sqlitePersistence) DismissAllActivityCenterNotifications() error {
_, err := db.db.Exec(`UPDATE activity_center_notifications SET read = 1, dismissed = 1 WHERE NOT dismissed AND NOT accepted`)
func (db sqlitePersistence) DismissAllActivityCenterNotifications(updatedAt uint64) error {
_, err := db.db.Exec(`UPDATE activity_center_notifications SET read = 1, dismissed = 1, updated_at = ? WHERE NOT dismissed AND NOT accepted AND NOT deleted`, updatedAt)
return err
}
func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromUser(userPublicKey string) error {
_, err := db.db.Exec(`
func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromUser(userPublicKey string, updatedAt uint64) ([]*ActivityCenterNotification, error) {
query := fmt.Sprintf(`SELECT %s FROM activity_center_notifications WHERE
author = ? AND
NOT deleted AND
NOT dismissed AND
NOT accepted`, allFieldsForTableActivityCenterNotification)
rows, err := db.db.Query(query, userPublicKey)
if err != nil {
return nil, err
}
var notifications []*ActivityCenterNotification
notifications, err = db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Read = true
notification.Dismissed = true
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
_, err = db.db.Exec(`
UPDATE activity_center_notifications
SET read = 1, dismissed = 1
SET read = 1, dismissed = 1, updated_at = ?
WHERE author = ?
AND NOT deleted
AND NOT dismissed
AND NOT accepted
`,
userPublicKey)
return err
updatedAt, userPublicKey)
return notifications, err
}
func (db sqlitePersistence) DeleteActivityCenterNotifications(ids []types.HexBytes) error {
func (db sqlitePersistence) DeleteActivityCenterNotifications(ids []types.HexBytes, updatedAt uint64) ([]*ActivityCenterNotification, error) {
if len(ids) == 0 {
return nil, nil
}
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
args := make([]interface{}, 0, len(ids)+1)
args = append(args, updatedAt)
for _, id := range ids {
args = append(args, id)
}
// nolint: gosec
query := fmt.Sprintf(`SELECT %s FROM activity_center_notifications WHERE id IN (%s) AND NOT deleted`,
allFieldsForTableActivityCenterNotification,
inVector)
rows, err := db.db.Query(query, args[1:]...)
if err != nil {
return nil, err
}
notifications, err := db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Deleted = true
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
update := "UPDATE activity_center_notifications SET deleted = 1, updated_at = ? WHERE id IN (" + inVector + ") AND NOT deleted"
_, err = db.db.Exec(update, args...)
return notifications, err
}
func (db sqlitePersistence) DismissActivityCenterNotifications(ids []types.HexBytes, updatedAt uint64) error {
if len(ids) == 0 {
return nil
}
idsArgs := make([]interface{}, 0, len(ids))
args := make([]interface{}, 0, len(ids)+1)
args = append(args, updatedAt)
for _, id := range ids {
idsArgs = append(idsArgs, id)
args = append(args, id)
}
args = append(args, updatedAt)
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
query := "UPDATE activity_center_notifications SET deleted = 1 WHERE id IN (" + inVector + ")"
_, err := db.db.Exec(query, idsArgs...)
query := "UPDATE activity_center_notifications SET read = 1, dismissed = 1, updated_at = ? WHERE id IN (" + inVector + ") AND not deleted AND updated_at < ?" // nolint: gosec
_, err := db.db.Exec(query, args...)
return err
}
func (db sqlitePersistence) DismissActivityCenterNotifications(ids []types.HexBytes) error {
if len(ids) == 0 {
return nil
}
idsArgs := make([]interface{}, 0, len(ids))
for _, id := range ids {
idsArgs = append(idsArgs, id)
}
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
query := "UPDATE activity_center_notifications SET read = 1, dismissed = 1 WHERE id IN (" + inVector + ")" // nolint: gosec
_, err := db.db.Exec(query, idsArgs...)
return err
}
func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromCommunity(communityID string) error {
func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromCommunity(communityID string, updatedAt uint64) ([]*ActivityCenterNotification, error) {
chatIDs, err := db.AllChatIDsByCommunity(communityID)
if err != nil {
return err
return nil, err
}
chatIDsCount := len(chatIDs)
if chatIDsCount == 0 {
return nil
return nil, nil
}
chatIDsArgs := make([]interface{}, 0, chatIDsCount)
args := make([]interface{}, 0, chatIDsCount+1)
args = append(args, updatedAt)
for _, chatID := range chatIDs {
chatIDsArgs = append(chatIDsArgs, chatID)
args = append(args, chatID)
}
inVector := strings.Repeat("?, ", chatIDsCount-1) + "?"
query := "UPDATE activity_center_notifications SET read = 1, dismissed = 1 WHERE chat_id IN (" + inVector + ")" // nolint: gosec
_, err = db.db.Exec(query, chatIDsArgs...)
return err
// nolint: gosec
query := fmt.Sprintf(`SELECT %s FROM activity_center_notifications WHERE chat_id IN (%s) AND NOT deleted`, allFieldsForTableActivityCenterNotification, inVector)
rows, err := db.db.Query(query, args[1:]...)
if err != nil {
return nil, err
}
notifications, err := db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Read = true
notification.Dismissed = true
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
query = "UPDATE activity_center_notifications SET read = 1, dismissed = 1, updated_at = ? WHERE chat_id IN (" + inVector + ") AND NOT deleted" // nolint: gosec
_, err = db.db.Exec(query, args...)
return notifications, err
}
func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromChatID(chatID string) error {
func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromChatID(chatID string, updatedAt uint64) ([]*ActivityCenterNotification, error) {
query := fmt.Sprintf(`SELECT %s FROM activity_center_notifications
WHERE chat_id = ?
AND NOT deleted
AND NOT accepted
AND notification_type != ?`, allFieldsForTableActivityCenterNotification)
rows, err := db.db.Query(query, chatID, ActivityCenterNotificationTypeContactRequest)
if err != nil {
return nil, err
}
notifications, err := db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Read = true
notification.Dismissed = true
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
// We exclude notifications related to contacts, since those we don't want to
// be cleared.
query := `
query = `
UPDATE activity_center_notifications
SET read = 1, dismissed = 1
WHERE NOT deleted
SET read = 1, dismissed = 1, updated_at = ?
WHERE chat_id = ?
AND NOT deleted
AND NOT accepted
AND chat_id = ?
AND notification_type != ?
`
_, err := db.db.Exec(query, chatID, ActivityCenterNotificationTypeContactRequest)
return err
_, err = db.db.Exec(query, updatedAt, chatID, ActivityCenterNotificationTypeContactRequest)
return notifications, err
}
func (db sqlitePersistence) AcceptAllActivityCenterNotifications() ([]*ActivityCenterNotification, error) {
func (db sqlitePersistence) AcceptAllActivityCenterNotifications(updatedAt uint64) ([]*ActivityCenterNotification, error) {
var tx *sql.Tx
var err error
@ -714,15 +872,15 @@ func (db sqlitePersistence) AcceptAllActivityCenterNotifications() ([]*ActivityC
}()
_, notifications, err := db.buildActivityCenterQuery(tx, activityCenterQueryParams{})
_, err = tx.Exec(`UPDATE activity_center_notifications SET read = 1, accepted = 1 WHERE NOT accepted AND NOT dismissed`)
if err != nil {
return nil, err
}
return notifications, nil
_, err = tx.Exec(`UPDATE activity_center_notifications SET read = 1, accepted = 1, updated_at = ? WHERE NOT dismissed AND NOT accepted AND NOT deleted`, updatedAt)
return notifications, err
}
func (db sqlitePersistence) AcceptActivityCenterNotifications(ids []types.HexBytes) ([]*ActivityCenterNotification, error) {
func (db sqlitePersistence) AcceptActivityCenterNotifications(ids []types.HexBytes, updatedAt uint64) ([]*ActivityCenterNotification, error) {
var tx *sql.Tx
var err error
@ -740,28 +898,38 @@ func (db sqlitePersistence) AcceptActivityCenterNotifications(ids []types.HexByt
_ = tx.Rollback()
}()
args := make([]interface{}, 0, len(ids)+1)
args = append(args, updatedAt)
for _, id := range ids {
args = append(args, id)
}
args = append(args, updatedAt)
params := activityCenterQueryParams{
ids: ids,
}
_, notifications, err := db.buildActivityCenterQuery(tx, params)
if err != nil {
return nil, err
}
idsArgs := make([]interface{}, 0, len(ids))
for _, id := range ids {
idsArgs = append(idsArgs, id)
var updateNotifications []*ActivityCenterNotification
for _, n := range notifications {
if n.UpdatedAt >= updatedAt {
continue
}
n.Read = true
n.Accepted = true
n.UpdatedAt = updatedAt
updateNotifications = append(updateNotifications, n)
}
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
query := "UPDATE activity_center_notifications SET read = 1, accepted = 1 WHERE id IN (" + inVector + ")" // nolint: gosec
_, err = tx.Exec(query, idsArgs...)
return notifications, err
query := "UPDATE activity_center_notifications SET read = 1, accepted = 1, updated_at = ? WHERE id IN (" + inVector + ") AND NOT deleted AND updated_at < ?" // nolint: gosec
_, err = tx.Exec(query, args...)
return updateNotifications, err
}
func (db sqlitePersistence) AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey string) ([]*ActivityCenterNotification, error) {
func (db sqlitePersistence) AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey string, updatedAt uint64) ([]*ActivityCenterNotification, error) {
var tx *sql.Tx
var err error
@ -778,27 +946,35 @@ func (db sqlitePersistence) AcceptActivityCenterNotificationsForInvitesFromUser(
_ = tx.Rollback()
}()
params := activityCenterQueryParams{
author: userPublicKey,
activityCenterTypes: []ActivityCenterType{ActivityCenterNotificationTypeNewPrivateGroupChat},
query := fmt.Sprintf(`SELECT %s FROM activity_center_notifications
WHERE author = ?
AND NOT deleted
AND NOT dismissed
AND NOT accepted
AND notification_type = ?`, allFieldsForTableActivityCenterNotification)
rows, err := tx.Query(query, userPublicKey, ActivityCenterNotificationTypeNewPrivateGroupChat)
if err != nil {
return nil, err
}
_, notifications, err := db.buildActivityCenterQuery(tx, params)
notifications, err := db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Read = true
notification.Accepted = true
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
_, err = tx.Exec(`
UPDATE activity_center_notifications
SET read = 1, accepted = 1
WHERE NOT accepted
AND NOT dismissed
SET read = 1, accepted = 1, updated_at = ?
WHERE author = ?
AND NOT deleted
AND author = ?
AND NOT dismissed
AND NOT accepted
AND notification_type = ?
`,
userPublicKey, ActivityCenterNotificationTypeNewPrivateGroupChat)
updatedAt, userPublicKey, ActivityCenterNotificationTypeNewPrivateGroupChat)
if err != nil {
return nil, err
@ -807,36 +983,53 @@ func (db sqlitePersistence) AcceptActivityCenterNotificationsForInvitesFromUser(
return notifications, nil
}
func (db sqlitePersistence) MarkAllActivityCenterNotificationsRead() error {
_, err := db.db.Exec(`UPDATE activity_center_notifications SET read = 1 WHERE NOT read`)
func (db sqlitePersistence) MarkAllActivityCenterNotificationsRead(updatedAt uint64) error {
_, err := db.db.Exec(`UPDATE activity_center_notifications SET read = 1, updated_at = ? WHERE NOT read AND NOT deleted`, updatedAt)
return err
}
func (db sqlitePersistence) MarkActivityCenterNotificationsRead(ids []types.HexBytes) error {
func (db sqlitePersistence) MarkActivityCenterNotificationsRead(ids []types.HexBytes, updatedAt uint64) error {
idsArgs := make([]interface{}, 0, len(ids))
args := make([]interface{}, 0, len(ids)+1)
args = append(args, updatedAt)
for _, id := range ids {
idsArgs = append(idsArgs, id)
args = append(args, id)
}
args = append(args, updatedAt)
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
query := "UPDATE activity_center_notifications SET read = 1 WHERE id IN (" + inVector + ")" // nolint: gosec
_, err := db.db.Exec(query, idsArgs...)
query := "UPDATE activity_center_notifications SET read = 1, updated_at = ? WHERE id IN (" + inVector + ") AND NOT deleted AND updated_at < ?" // nolint: gosec
_, err := db.db.Exec(query, args...)
return err
}
func (db sqlitePersistence) MarkActivityCenterNotificationsUnread(ids []types.HexBytes) error {
func (db sqlitePersistence) MarkActivityCenterNotificationsUnread(ids []types.HexBytes, updatedAt uint64) ([]*ActivityCenterNotification, error) {
idsArgs := make([]interface{}, 0, len(ids))
args := make([]interface{}, 0, len(ids)+1)
args = append(args, updatedAt)
for _, id := range ids {
idsArgs = append(idsArgs, id)
args = append(args, id)
}
inVector := strings.Repeat("?, ", len(ids)-1) + "?"
query := "UPDATE activity_center_notifications SET read = 0 WHERE id IN (" + inVector + ")" // nolint: gosec
_, err := db.db.Exec(query, idsArgs...)
return err
// nolint: gosec
query := fmt.Sprintf("SELECT %s FROM activity_center_notifications WHERE id IN (%s) AND NOT deleted", allFieldsForTableActivityCenterNotification, inVector)
rows, err := db.db.Query(query, args[1:]...)
if err != nil {
return nil, err
}
notifications, err := db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Read = false
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
query = "UPDATE activity_center_notifications SET read = 0, updated_at = ? WHERE id IN (" + inVector + ") AND NOT deleted" // nolint: gosec
_, err = db.db.Exec(query, args...)
return notifications, err
}
func (db sqlitePersistence) ActivityCenterNotifications(cursor string, limit uint64, activityTypes []ActivityCenterType, readType ActivityCenterQueryParamsRead, accepted bool) (string, []*ActivityCenterNotification, error) {
@ -880,18 +1073,19 @@ func (db sqlitePersistence) ActiveContactRequestNotification(contactID string) (
a.reply_message,
a.contact_verification_status,
c.name,
a.author
a.author,
a.updated_at
FROM activity_center_notifications a
LEFT JOIN chats c ON c.id = a.chat_id
WHERE NOT a.deleted
WHERE a.author = ?
AND NOT a.deleted
AND NOT a.dismissed
AND NOT a.accepted
AND a.notification_type = ?
AND a.author = ?
ORDER BY a.timestamp DESC
LIMIT 1
`
row := db.db.QueryRow(query, ActivityCenterNotificationTypeContactRequest, contactID)
row := db.db.QueryRow(query, contactID, ActivityCenterNotificationTypeContactRequest)
notification, err := db.unmarshalActivityCenterNotificationRow(row)
if err == sql.ErrNoRows {
return nil, nil
@ -899,36 +1093,55 @@ func (db sqlitePersistence) ActiveContactRequestNotification(contactID string) (
return notification, err
}
func (db sqlitePersistence) HardDeleteChatContactRequestActivityCenterNotifications(chatID string) error {
_, err := db.db.Exec(`
DELETE FROM activity_center_notifications
func (db sqlitePersistence) DeleteChatContactRequestActivityCenterNotifications(chatID string, updatedAt uint64) ([]*ActivityCenterNotification, error) {
query := fmt.Sprintf(`SELECT %s FROM activity_center_notifications WHERE chat_id = ? AND NOT deleted AND notification_type = ?`, allFieldsForTableActivityCenterNotification)
rows, err := db.db.Query(query, chatID, ActivityCenterNotificationTypeContactRequest)
if err != nil {
return nil, err
}
notifications, err := db.parseRowFromTableActivityCenterNotification(rows, func(notification *ActivityCenterNotification) {
notification.Deleted = true
notification.UpdatedAt = updatedAt
})
if err != nil {
return nil, err
}
_, err = db.db.Exec(`
UPDATE activity_center_notifications SET deleted = 1, updated_at = ?
WHERE
chat_id = ?
AND NOT deleted
AND notification_type = ?
`, chatID, ActivityCenterNotificationTypeContactRequest)
return err
`, updatedAt, chatID, ActivityCenterNotificationTypeContactRequest)
return notifications, err
}
func (db sqlitePersistence) HasUnseenActivityCenterNotifications() (bool, error) {
row := db.db.QueryRow(`SELECT has_seen FROM activity_center_states`)
func (db sqlitePersistence) HasUnseenActivityCenterNotifications() (bool, uint64, error) {
row := db.db.QueryRow(`SELECT has_seen, updated_at FROM activity_center_states`)
hasSeen := true
err := row.Scan(&hasSeen)
return !hasSeen, err
updatedAt := uint64(0)
err := row.Scan(&hasSeen, &updatedAt)
return !hasSeen, updatedAt, err
}
func (db sqlitePersistence) MarkAsSeenActivityCenterNotifications() error {
_, err := db.db.Exec(`UPDATE activity_center_states SET has_seen = 1`)
return err
func (db sqlitePersistence) UpdateActivityCenterNotificationState(state *ActivityCenterState) (int64, error) {
result, err := db.db.Exec(`UPDATE activity_center_states SET has_seen = ?, updated_at = ? WHERE updated_at < ?`, state.HasSeen, state.UpdatedAt, state.UpdatedAt)
if err != nil {
return 0, err
}
return result.RowsAffected()
}
func (db sqlitePersistence) GetActivityCenterState() (*ActivityCenterState, error) {
unseen, err := db.HasUnseenActivityCenterNotifications()
unseen, updatedAt, err := db.HasUnseenActivityCenterNotifications()
if err != nil {
return nil, err
}
state := &ActivityCenterState{
HasSeen: !unseen,
HasSeen: !unseen,
UpdatedAt: updatedAt,
}
return state, nil
}

View File

@ -3,6 +3,7 @@ package protocol
import (
"strconv"
"testing"
"time"
"github.com/stretchr/testify/require"
@ -10,15 +11,24 @@ import (
"github.com/status-im/status-go/protocol/common"
)
func currentMilliseconds() uint64 {
c := time.Now().UnixMilli()
return uint64(c)
}
func createNotifications(t *testing.T, p *sqlitePersistence, notifications []*ActivityCenterNotification) []*ActivityCenterNotification {
now := currentMilliseconds()
for index, notif := range notifications {
if notif.Timestamp == 0 {
notif.Timestamp = 1
notif.Timestamp = now
}
if len(notif.ID) == 0 {
notif.ID = types.HexBytes(strconv.Itoa(index))
}
err := p.SaveActivityCenterNotification(notif)
if notif.UpdatedAt == 0 {
notif.UpdatedAt = now
}
_, err := p.SaveActivityCenterNotification(notif, true)
require.NoError(t, err, notif.ID)
}
@ -26,7 +36,7 @@ func createNotifications(t *testing.T, p *sqlitePersistence, notifications []*Ac
var createdNotifications []*ActivityCenterNotification
for _, notif := range notifications {
n, err := p.GetActivityCenterNotificationByID(notif.ID)
require.NoError(t, err, n.ID)
require.NoError(t, err, notif.ID)
createdNotifications = append(createdNotifications, n)
}
@ -55,7 +65,7 @@ func TestDeleteActivityCenterNotificationsWhenEmpty(t *testing.T) {
count, _ = p.ActivityCenterNotificationsCount([]ActivityCenterType{}, ActivityCenterQueryParamsReadUnread, false)
require.Equal(t, uint64(1), count)
err = p.DeleteActivityCenterNotifications([]types.HexBytes{})
_, err = p.DeleteActivityCenterNotifications([]types.HexBytes{}, currentMilliseconds())
require.NoError(t, err)
count, _ = p.ActivityCenterNotificationsCount([]ActivityCenterType{}, ActivityCenterQueryParamsReadUnread, false)
@ -84,7 +94,7 @@ func TestDeleteActivityCenterNotificationsWithMultipleIds(t *testing.T) {
count, _ = p.ActivityCenterNotificationsCount([]ActivityCenterType{}, ActivityCenterQueryParamsReadUnread, false)
require.Equal(t, uint64(3), count)
err = p.DeleteActivityCenterNotifications([]types.HexBytes{notifications[1].ID, notifications[2].ID})
_, err = p.DeleteActivityCenterNotifications([]types.HexBytes{notifications[1].ID, notifications[2].ID}, currentMilliseconds())
require.NoError(t, err)
count, _ = p.ActivityCenterNotificationsCount([]ActivityCenterType{}, ActivityCenterQueryParamsReadUnread, false)
@ -158,7 +168,7 @@ func TestDeleteActivityCenterNotificationsForMessage(t *testing.T) {
})
// Test: soft delete only the notifications that have Message.ID == messages[0].ID.
err = p.DeleteActivityCenterNotificationForMessage(chat.ID, messages[0].ID)
_, err = p.DeleteActivityCenterNotificationForMessage(chat.ID, messages[0].ID, currentMilliseconds())
require.NoError(t, err)
notif, err := p.GetActivityCenterNotificationByID(nID1)
@ -178,7 +188,7 @@ func TestDeleteActivityCenterNotificationsForMessage(t *testing.T) {
// Test: soft delete the notifications that have Message.ID == messages[1].ID
// or LastMessage.ID == chat.LastMessage.
err = p.DeleteActivityCenterNotificationForMessage(chat.ID, messages[1].ID)
_, err = p.DeleteActivityCenterNotificationForMessage(chat.ID, messages[1].ID, currentMilliseconds())
require.NoError(t, err)
for _, id := range []types.HexBytes{nID2, nID3} {
@ -196,7 +206,7 @@ func TestDeleteActivityCenterNotificationsForMessage(t *testing.T) {
require.False(t, notif.Read)
// Test: don't do anything if passed a chat and message without notifications.
err = p.DeleteActivityCenterNotificationForMessage(chat2.ID, messages[2].ID)
_, err = p.DeleteActivityCenterNotificationForMessage(chat2.ID, messages[2].ID, currentMilliseconds())
require.NoError(t, err)
}
@ -239,7 +249,7 @@ func TestAcceptActivityCenterNotificationsForInvitesFromUser(t *testing.T) {
var notif *ActivityCenterNotification
for _, notif = range notifications {
err = p.SaveActivityCenterNotification(notif)
_, err = p.SaveActivityCenterNotification(notif, true)
require.NoError(t, err, notif.ID)
}
@ -250,7 +260,7 @@ func TestAcceptActivityCenterNotificationsForInvitesFromUser(t *testing.T) {
require.False(t, notifications[0].Accepted)
require.False(t, notifications[0].Read)
notifications, err = p.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey)
notifications, err = p.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey, 1)
require.NoError(t, err)
require.Len(t, notifications, 1)
require.Equal(t, nID2, notifications[0].ID)
@ -268,9 +278,9 @@ func TestAcceptActivityCenterNotificationsForInvitesFromUser(t *testing.T) {
Author: userPublicKey,
Deleted: true,
}
err = p.SaveActivityCenterNotification(notif)
_, err = p.SaveActivityCenterNotification(notif, true)
require.NoError(t, err)
_, err = p.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey)
_, err = p.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey, currentMilliseconds())
require.NoError(t, err)
notif, err = p.GetActivityCenterNotificationByID(notif.ID)
require.NoError(t, err)
@ -286,9 +296,9 @@ func TestAcceptActivityCenterNotificationsForInvitesFromUser(t *testing.T) {
Author: userPublicKey,
Dismissed: true,
}
err = p.SaveActivityCenterNotification(notif)
_, err = p.SaveActivityCenterNotification(notif, true)
require.NoError(t, err)
_, err = p.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey)
_, err = p.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey, currentMilliseconds())
require.NoError(t, err)
notif, err = p.GetActivityCenterNotificationByID(notif.ID)
require.NoError(t, err)
@ -371,7 +381,7 @@ func TestHasPendingNotificationsForChat(t *testing.T) {
Type: ActivityCenterNotificationTypeCommunityRequest,
Timestamp: 1,
}
err = p.SaveActivityCenterNotification(notif)
_, err = p.SaveActivityCenterNotification(notif, true)
require.NoError(t, err)
result, err = p.HasPendingNotificationsForChat(chat.ID)
@ -412,7 +422,7 @@ func TestDismissAllActivityCenterNotificationsFromUser(t *testing.T) {
},
})
err = p.DismissAllActivityCenterNotificationsFromUser(publicKey)
_, err = p.DismissAllActivityCenterNotificationsFromUser(publicKey, 1)
require.NoError(t, err)
// Ignores already soft deleted.
@ -492,7 +502,7 @@ func TestDismissAllActivityCenterNotificationsFromChatID(t *testing.T) {
},
})
err = p.DismissAllActivityCenterNotificationsFromChatID(chatID)
_, err = p.DismissAllActivityCenterNotificationsFromChatID(chatID, currentMilliseconds())
require.NoError(t, err)
// Ignores already soft deleted.
@ -615,17 +625,19 @@ func TestActiveContactRequestNotification(t *testing.T) {
// one according to the notification's timestamp.
expectedID := types.HexBytes("667")
t1 := currentMilliseconds()
t2 := currentMilliseconds()
createNotifications(t, p, []*ActivityCenterNotification{
{
ID: expectedID,
Timestamp: 3,
Timestamp: t2 + 1,
ChatID: chat.ID,
Author: contactID,
Type: ActivityCenterNotificationTypeContactRequest,
},
{
ID: types.HexBytes("666"),
Timestamp: 2,
Timestamp: t1,
ChatID: chat.ID,
Author: contactID,
Type: ActivityCenterNotificationTypeContactRequest,
@ -705,7 +717,7 @@ func TestActivityCenterPersistence(t *testing.T) {
ChatID: chat.ID,
Timestamp: 1,
}
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
cursor, notifications, err := p.ActivityCenterNotifications("", 2, []ActivityCenterType{}, ActivityCenterQueryParamsReadAll, false)
@ -722,7 +734,7 @@ func TestActivityCenterPersistence(t *testing.T) {
Type: ActivityCenterNotificationTypeNewOneToOne,
Timestamp: 2,
}
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
cursor, notifications, err = p.ActivityCenterNotifications("", 1, []ActivityCenterType{}, ActivityCenterQueryParamsReadAll, false)
@ -745,20 +757,24 @@ func TestActivityCenterPersistence(t *testing.T) {
require.NoError(t, err)
require.Equal(t, uint64(2), count)
var updatedAt uint64 = 1
// Mark first one as read
require.NoError(t, p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID1}))
require.NoError(t, p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID1}, updatedAt))
count, err = p.ActivityCenterNotificationsCount([]ActivityCenterType{}, ActivityCenterQueryParamsReadUnread, false)
require.NoError(t, err)
require.Equal(t, uint64(1), count)
// Mark first one as unread
require.NoError(t, p.MarkActivityCenterNotificationsUnread([]types.HexBytes{nID1}))
updatedAt++
_, err = p.MarkActivityCenterNotificationsUnread([]types.HexBytes{nID1}, updatedAt)
require.NoError(t, err)
count, err = p.ActivityCenterNotificationsCount([]ActivityCenterType{}, ActivityCenterQueryParamsReadUnread, false)
require.NoError(t, err)
require.Equal(t, uint64(2), count)
// Mark all read
require.NoError(t, p.MarkAllActivityCenterNotificationsRead())
updatedAt++
require.NoError(t, p.MarkAllActivityCenterNotificationsRead(updatedAt))
_, notifications, err = p.ActivityCenterNotifications(cursor, 2, []ActivityCenterType{}, ActivityCenterQueryParamsReadAll, false)
require.NoError(t, err)
require.Len(t, notifications, 2)
@ -772,8 +788,8 @@ func TestActivityCenterPersistence(t *testing.T) {
require.Equal(t, uint64(0), count)
// Mark first one as accepted
notifications, err = p.AcceptActivityCenterNotifications([]types.HexBytes{nID1})
updatedAt++
notifications, err = p.AcceptActivityCenterNotifications([]types.HexBytes{nID1}, updatedAt)
require.NoError(t, err)
require.Len(t, notifications, 1)
_, notifications, err = p.ActivityCenterNotifications("", 2, []ActivityCenterType{}, ActivityCenterQueryParamsReadAll, false)
@ -782,7 +798,8 @@ func TestActivityCenterPersistence(t *testing.T) {
require.Len(t, notifications, 1)
// Mark last one as dismissed
require.NoError(t, p.DismissActivityCenterNotifications([]types.HexBytes{nID2}))
updatedAt++
require.NoError(t, p.DismissActivityCenterNotifications([]types.HexBytes{nID2}, updatedAt))
_, notifications, err = p.ActivityCenterNotifications("", 2, []ActivityCenterType{}, ActivityCenterQueryParamsReadAll, false)
require.NoError(t, err)
@ -795,11 +812,12 @@ func TestActivityCenterPersistence(t *testing.T) {
Type: ActivityCenterNotificationTypeNewOneToOne,
Timestamp: 3,
}
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
// Mark all as accepted
notifications, err = p.AcceptAllActivityCenterNotifications()
updatedAt++
notifications, err = p.AcceptAllActivityCenterNotifications(updatedAt)
require.NoError(t, err)
require.Len(t, notifications, 2)
@ -814,11 +832,12 @@ func TestActivityCenterPersistence(t *testing.T) {
Type: ActivityCenterNotificationTypeNewOneToOne,
Timestamp: 4,
}
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
// Mark all as dismissed
require.NoError(t, p.DismissAllActivityCenterNotifications())
updatedAt++
require.NoError(t, p.DismissAllActivityCenterNotifications(updatedAt))
_, notifications, err = p.ActivityCenterNotifications("", 2, []ActivityCenterType{}, ActivityCenterQueryParamsReadAll, false)
require.NoError(t, err)
@ -881,14 +900,14 @@ func TestActivityCenterReadUnreadPagination(t *testing.T) {
}
for _, notification := range allNotifications {
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
}
// Mark the notification as read
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID2})
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID2}, currentMilliseconds())
require.NoError(t, err)
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID4})
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID4}, currentMilliseconds())
require.NoError(t, err)
// Fetch UNREAD notifications, first page.
@ -997,7 +1016,7 @@ func TestActivityCenterReadUnreadFilterByTypes(t *testing.T) {
}
for _, notification := range allNotifications {
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
}
@ -1053,7 +1072,7 @@ func TestActivityCenterReadUnreadFilterByTypes(t *testing.T) {
// Mark all notifications as read.
for _, notification := range allNotifications {
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{notification.ID})
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{notification.ID}, currentMilliseconds())
require.NoError(t, err)
}
@ -1103,7 +1122,7 @@ func TestActivityCenterReadUnread(t *testing.T) {
Timestamp: 1,
}
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
notification = &ActivityCenterNotification{
@ -1113,11 +1132,11 @@ func TestActivityCenterReadUnread(t *testing.T) {
Timestamp: 1,
}
err = p.SaveActivityCenterNotification(notification)
_, err = p.SaveActivityCenterNotification(notification, true)
require.NoError(t, err)
// Mark the notification as read
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID2})
err = p.MarkActivityCenterNotificationsRead([]types.HexBytes{nID2}, currentMilliseconds())
require.NoError(t, err)
cursor, notifications, err := p.ActivityCenterNotifications(

View File

@ -3119,6 +3119,7 @@ func (r *ReceivedMessageState) updateExistingActivityCenterNotification(publicKe
notification.Message = message
notification.ReplyMessage = responseTo
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(r.Response, notification)
if err != nil {
@ -3152,12 +3153,10 @@ func (r *ReceivedMessageState) addNewActivityCenterNotification(publicKey ecdsa.
ChatID: chat.ID,
CommunityID: chat.CommunityID,
Author: message.From,
UpdatedAt: m.getCurrentTimeInMillis(),
}
err := m.addActivityCenterNotification(r.Response, notification)
if err != nil {
return err
}
return m.addActivityCenterNotification(r.Response, notification)
}
return nil
@ -3792,6 +3791,40 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
continue
}
case protobuf.SyncActivityCenterNotifications:
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
logger.Warn("not coming from us, ignoring")
continue
}
a := msg.ParsedMessage.Interface().(protobuf.SyncActivityCenterNotifications)
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, senderID, filter.Topic, filter.ChatID, msg.Type, a)
logger.Debug("Handling SyncActivityCenterNotification", zap.Any("message", a))
err = m.handleSyncActivityCenterNotifications(messageState, &a)
if err != nil {
logger.Warn("failed to handle SyncActivityCenterNotification", zap.Error(err))
allMessagesProcessed = false
continue
}
case protobuf.SyncActivityCenterNotificationState:
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
logger.Warn("not coming from us, ignoring")
continue
}
a := msg.ParsedMessage.Interface().(protobuf.SyncActivityCenterNotificationState)
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, senderID, filter.Topic, filter.ChatID, msg.Type, a)
logger.Debug("Handling SyncActivityCenterNotificationState", zap.Any("message", a))
err = m.handleSyncActivityCenterNotificationState(messageState, &a)
if err != nil {
logger.Warn("failed to handle SyncActivityCenterNotificationState", zap.Error(err))
allMessagesProcessed = false
continue
}
case protobuf.SyncSetting:
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
logger.Warn("not coming from us, ignoring")
@ -4328,12 +4361,14 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
}
// Activity Center notification
now := m.getCurrentTimeInMillis()
notification := &ActivityCenterNotification{
ID: types.FromHex(uuid.New().String()),
Type: ActivityCenterNotificationTypeCommunityKicked,
Timestamp: m.getTimesource().GetCurrentTime(),
Timestamp: now,
CommunityID: changes.Community.IDString(),
Read: false,
UpdatedAt: now,
}
err = m.addActivityCenterNotification(response, notification)
@ -4767,10 +4802,15 @@ func (m *Messenger) markAllRead(chatID string, clock uint64, shouldBeSynced bool
}
func (m *Messenger) MarkAllRead(chatID string) error {
err := m.persistence.DismissAllActivityCenterNotificationsFromChatID(chatID)
notifications, err := m.persistence.DismissAllActivityCenterNotificationsFromChatID(chatID, m.getCurrentTimeInMillis())
if err != nil {
return err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("MarkAllRead, failed to sync activity center notifications", zap.Error(err))
return err
}
clock, _ := m.latestIncomingMessageClock(chatID)
@ -4786,7 +4826,7 @@ func (m *Messenger) MarkAllRead(chatID string) error {
}
func (m *Messenger) MarkAllReadInCommunity(communityID string) ([]string, error) {
err := m.persistence.DismissAllActivityCenterNotificationsFromCommunity(communityID)
notifications, err := m.persistence.DismissAllActivityCenterNotificationsFromCommunity(communityID, m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
@ -4812,6 +4852,14 @@ func (m *Messenger) MarkAllReadInCommunity(communityID string) ([]string, error)
err = errors.New(fmt.Sprintf("chat with chatID %s not found", chatID))
}
}
if err != nil {
return chatIDs, err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("MarkAllReadInCommunity, error syncing activity center notifications", zap.Error(err))
}
return chatIDs, err
}
@ -5680,6 +5728,10 @@ func (m *Messenger) getTimesource() common.TimeSource {
return m.transport
}
func (m *Messenger) getCurrentTimeInMillis() uint64 {
return m.getTimesource().GetCurrentTime()
}
// AddPushNotificationsServer adds a push notification server
func (m *Messenger) AddPushNotificationsServer(ctx context.Context, publicKey *ecdsa.PublicKey, serverType pushnotificationclient.ServerType) error {
if m.pushNotificationClient == nil {

View File

@ -2,6 +2,9 @@ package protocol
import (
"context"
"encoding/json"
"github.com/status-im/status-go/protocol/verification"
"github.com/golang/protobuf/proto"
"github.com/pkg/errors"
@ -60,16 +63,67 @@ func (m *Messenger) ActivityCenterNotificationsCount(request ActivityCenterCount
}
func (m *Messenger) HasUnseenActivityCenterNotifications() (bool, error) {
return m.persistence.HasUnseenActivityCenterNotifications()
seen, _, err := m.persistence.HasUnseenActivityCenterNotifications()
return seen, err
}
func (m *Messenger) GetActivityCenterState() (*ActivityCenterState, error) {
return m.persistence.GetActivityCenterState()
}
func (m *Messenger) syncActivityCenterNotificationState(state *ActivityCenterState) error {
if state == nil {
return nil
}
syncStateMessage := &protobuf.SyncActivityCenterNotificationState{
UpdatedAt: state.UpdatedAt,
HasSeen: state.HasSeen,
}
encodedMessage, err := proto.Marshal(syncStateMessage)
if err != nil {
return err
}
return m.sendToPairedDevices(context.TODO(), common.RawMessage{
Payload: encodedMessage,
MessageType: protobuf.ApplicationMetadataMessage_SYNC_ACTIVITY_CENTER_NOTIFICATION_STATE,
ResendAutomatically: true,
})
}
func (m *Messenger) syncActivityCenterNotifications(notifications []*ActivityCenterNotification) (err error) {
if notifications == nil {
return nil
}
var s []*protobuf.SyncActivityCenterNotification
for _, n := range notifications {
var p *protobuf.SyncActivityCenterNotification
p, err = convertActivityCenterNotificationToProtobuf(*n)
if err != nil {
return
}
s = append(s, p)
}
var encodedMessage []byte
encodedMessage, err = proto.Marshal(&protobuf.SyncActivityCenterNotifications{
ActivityCenterNotifications: s,
})
if err != nil {
return
}
return m.sendToPairedDevices(context.TODO(), common.RawMessage{
Payload: encodedMessage,
MessageType: protobuf.ApplicationMetadataMessage_SYNC_ACTIVITY_CENTER_NOTIFICATION,
ResendAutomatically: true,
})
}
func (m *Messenger) MarkAsSeenActivityCenterNotifications() (*MessengerResponse, error) {
response := &MessengerResponse{}
err := m.persistence.MarkAsSeenActivityCenterNotifications()
s := &ActivityCenterState{
UpdatedAt: m.getCurrentTimeInMillis(),
HasSeen: true,
}
n, err := m.persistence.UpdateActivityCenterNotificationState(s)
if err != nil {
return nil, err
}
@ -80,22 +134,26 @@ func (m *Messenger) MarkAsSeenActivityCenterNotifications() (*MessengerResponse,
}
response.SetActivityCenterState(state)
if n > 0 {
return response, m.syncActivityCenterNotificationState(state)
}
return response, nil
}
func (m *Messenger) MarkAllActivityCenterNotificationsRead(ctx context.Context) (*MessengerResponse, error) {
response := &MessengerResponse{}
updateAt := m.getCurrentTimeInMillis()
if m.hasPairedDevices() {
ids, err := m.persistence.GetNotReadActivityCenterNotificationIds()
if err != nil {
return nil, err
}
_, err = m.MarkActivityCenterNotificationsRead(ctx, toHexBytes(ids), true)
_, err = m.MarkActivityCenterNotificationsRead(ctx, toHexBytes(ids), updateAt, true)
return nil, err
}
err := m.persistence.MarkAllActivityCenterNotificationsRead()
err := m.persistence.MarkAllActivityCenterNotificationsRead(updateAt)
if err != nil {
return nil, err
}
@ -109,9 +167,12 @@ func (m *Messenger) MarkAllActivityCenterNotificationsRead(ctx context.Context)
return response, nil
}
func (m *Messenger) MarkActivityCenterNotificationsRead(ctx context.Context, ids []types.HexBytes, sync bool) (*MessengerResponse, error) {
func (m *Messenger) MarkActivityCenterNotificationsRead(ctx context.Context, ids []types.HexBytes, updatedAt uint64, sync bool) (*MessengerResponse, error) {
response := &MessengerResponse{}
err := m.persistence.MarkActivityCenterNotificationsRead(ids)
if updatedAt == 0 {
updatedAt = m.getCurrentTimeInMillis()
}
err := m.persistence.MarkActivityCenterNotificationsRead(ids, updatedAt)
if err != nil {
return nil, err
}
@ -125,7 +186,7 @@ func (m *Messenger) MarkActivityCenterNotificationsRead(ctx context.Context, ids
}
syncMessage := &protobuf.SyncActivityCenterRead{
Clock: m.getTimesource().GetCurrentTime(),
Clock: updatedAt,
Ids: fromHexBytes(ids),
}
@ -154,10 +215,15 @@ func (m *Messenger) MarkActivityCenterNotificationsRead(ctx context.Context, ids
func (m *Messenger) MarkActivityCenterNotificationsUnread(ids []types.HexBytes) (*MessengerResponse, error) {
response := &MessengerResponse{}
err := m.persistence.MarkActivityCenterNotificationsUnread(ids)
notifications, err := m.persistence.MarkActivityCenterNotificationsUnread(ids, m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("MarkActivityCenterNotificationsUnread, failed to sync activity center notifications", zap.Error(err))
return nil, err
}
state, err := m.persistence.GetActivityCenterState()
if err != nil {
@ -212,13 +278,11 @@ func (m *Messenger) processAcceptedActivityCenterNotifications(ctx context.Conte
for i := range notifications {
ids[i] = notifications[i].ID
notifications[i].Accepted = true
notifications[i].Read = true
}
if sync {
syncMessage := &protobuf.SyncActivityCenterAccepted{
Clock: m.getTimesource().GetCurrentTime(),
Clock: m.getCurrentTimeInMillis(),
Ids: ids,
}
@ -241,13 +305,16 @@ func (m *Messenger) processAcceptedActivityCenterNotifications(ctx context.Conte
return m.processActivityCenterNotifications(notifications, !sync)
}
func (m *Messenger) AcceptActivityCenterNotifications(ctx context.Context, ids []types.HexBytes, sync bool) (*MessengerResponse, error) {
func (m *Messenger) AcceptActivityCenterNotifications(ctx context.Context, ids []types.HexBytes, updatedAt uint64, sync bool) (*MessengerResponse, error) {
if len(ids) == 0 {
return nil, errors.New("notifications ids are not provided")
}
notifications, err := m.persistence.AcceptActivityCenterNotifications(ids)
if updatedAt == 0 {
updatedAt = m.getCurrentTimeInMillis()
}
notifications, err := m.persistence.AcceptActivityCenterNotifications(ids, updatedAt)
if err != nil {
return nil, err
}
@ -255,8 +322,11 @@ func (m *Messenger) AcceptActivityCenterNotifications(ctx context.Context, ids [
return m.processAcceptedActivityCenterNotifications(ctx, notifications, sync)
}
func (m *Messenger) DismissActivityCenterNotifications(ctx context.Context, ids []types.HexBytes, sync bool) (*MessengerResponse, error) {
err := m.persistence.DismissActivityCenterNotifications(ids)
func (m *Messenger) DismissActivityCenterNotifications(ctx context.Context, ids []types.HexBytes, updatedAt uint64, sync bool) (*MessengerResponse, error) {
if updatedAt == 0 {
updatedAt = m.getCurrentTimeInMillis()
}
err := m.persistence.DismissActivityCenterNotifications(ids, updatedAt)
if err != nil {
return nil, err
}
@ -271,7 +341,7 @@ func (m *Messenger) DismissActivityCenterNotifications(ctx context.Context, ids
}
syncMessage := &protobuf.SyncActivityCenterDismissed{
Clock: m.getTimesource().GetCurrentTime(),
Clock: updatedAt,
Ids: fromHexBytes(ids),
}
@ -290,7 +360,15 @@ func (m *Messenger) DismissActivityCenterNotifications(ctx context.Context, ids
}
func (m *Messenger) DeleteActivityCenterNotifications(ctx context.Context, ids []types.HexBytes, sync bool) error {
return m.persistence.DeleteActivityCenterNotifications(ids)
notifications, err := m.persistence.DeleteActivityCenterNotifications(ids, m.getCurrentTimeInMillis())
if err != nil {
return err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("DeleteActivityCenterNotifications, failed to sync activity center notifications", zap.Error(err))
}
return err
}
func (m *Messenger) ActivityCenterNotification(id types.HexBytes) (*ActivityCenterNotification, error) {
@ -298,7 +376,7 @@ func (m *Messenger) ActivityCenterNotification(id types.HexBytes) (*ActivityCent
}
func (m *Messenger) handleActivityCenterRead(state *ReceivedMessageState, message protobuf.SyncActivityCenterRead) error {
resp, err := m.MarkActivityCenterNotificationsRead(context.TODO(), toHexBytes(message.Ids), false)
resp, err := m.MarkActivityCenterNotificationsRead(context.TODO(), toHexBytes(message.Ids), message.Clock, false)
if err != nil {
return err
@ -308,7 +386,7 @@ func (m *Messenger) handleActivityCenterRead(state *ReceivedMessageState, messag
}
func (m *Messenger) handleActivityCenterAccepted(state *ReceivedMessageState, message protobuf.SyncActivityCenterAccepted) error {
resp, err := m.AcceptActivityCenterNotifications(context.TODO(), toHexBytes(message.Ids), false)
resp, err := m.AcceptActivityCenterNotifications(context.TODO(), toHexBytes(message.Ids), message.Clock, false)
if err != nil {
return err
@ -318,7 +396,7 @@ func (m *Messenger) handleActivityCenterAccepted(state *ReceivedMessageState, me
}
func (m *Messenger) handleActivityCenterDismissed(state *ReceivedMessageState, message protobuf.SyncActivityCenterDismissed) error {
resp, err := m.DismissActivityCenterNotifications(context.TODO(), toHexBytes(message.Ids), false)
resp, err := m.DismissActivityCenterNotifications(context.TODO(), toHexBytes(message.Ids), message.Clock, false)
if err != nil {
return err
@ -326,3 +404,118 @@ func (m *Messenger) handleActivityCenterDismissed(state *ReceivedMessageState, m
return state.Response.Merge(resp)
}
func (m *Messenger) handleSyncActivityCenterNotificationState(state *ReceivedMessageState, a *protobuf.SyncActivityCenterNotificationState) error {
s := &ActivityCenterState{
HasSeen: a.HasSeen,
UpdatedAt: a.UpdatedAt,
}
n, err := m.persistence.UpdateActivityCenterNotificationState(s)
if err != nil {
return err
}
if n > 0 {
state.Response.SetActivityCenterState(s)
}
return nil
}
func (m *Messenger) handleSyncActivityCenterNotifications(state *ReceivedMessageState, a *protobuf.SyncActivityCenterNotifications) error {
var notifications []*ActivityCenterNotification
for _, n := range a.ActivityCenterNotifications {
notification, err := convertActivityCenterNotificationFromProtobuf(n)
if err != nil {
return err
}
affectedNum, err := m.persistence.SaveActivityCenterNotification(notification, false)
if err != nil {
return err
}
if affectedNum > 0 {
notifications = append(notifications, notification)
}
}
response, err := m.processActivityCenterNotifications(notifications, true)
if err != nil {
return err
}
return state.Response.Merge(response)
}
func convertActivityCenterNotificationToProtobuf(n ActivityCenterNotification) (syncActivityCenterNotification *protobuf.SyncActivityCenterNotification, err error) {
var (
message []byte
replyMessage []byte
)
if n.Message != nil {
message, err = json.Marshal(n.Message)
if err != nil {
return
}
}
if n.ReplyMessage != nil {
replyMessage, err = json.Marshal(n.ReplyMessage)
if err != nil {
return
}
}
syncActivityCenterNotification = &protobuf.SyncActivityCenterNotification{
Id: n.ID,
Timestamp: n.Timestamp,
NotificationType: protobuf.SyncActivityCenterNotification_NotificationType(n.Type),
ChatId: n.ChatID,
Read: n.Read,
Dismissed: n.Dismissed,
Accepted: n.Accepted,
Message: message,
Author: n.Author,
ReplyMessage: replyMessage,
CommunityId: n.CommunityID,
MembershipStatus: protobuf.SyncActivityCenterNotification_MembershipStatus(n.MembershipStatus),
ContactVerificationStatus: protobuf.SyncActivityCenterNotification_ContactVerificationStatus(n.ContactVerificationStatus),
Deleted: n.Deleted,
UpdatedAt: n.UpdatedAt,
}
return
}
func convertActivityCenterNotificationFromProtobuf(proto *protobuf.SyncActivityCenterNotification) (*ActivityCenterNotification, error) {
if proto == nil {
return nil, errors.New("convertActivityCenterNotificationFromProtobuf, proto is nil")
}
a := &ActivityCenterNotification{
ID: proto.Id,
ChatID: proto.ChatId,
CommunityID: proto.CommunityId,
MembershipStatus: ActivityCenterMembershipStatus(proto.MembershipStatus),
Author: proto.Author,
Type: ActivityCenterType(proto.NotificationType),
Timestamp: proto.Timestamp,
Read: proto.Read,
Accepted: proto.Accepted,
Dismissed: proto.Dismissed,
Deleted: proto.Deleted,
ContactVerificationStatus: verification.RequestStatus(proto.ContactVerificationStatus),
UpdatedAt: proto.UpdatedAt,
}
if len(proto.Message) > 0 {
message := &common.Message{}
err := json.Unmarshal(proto.Message, &message)
if err != nil {
return nil, err
}
a.Message = message
}
if len(proto.ReplyMessage) > 0 {
replyMessage := &common.Message{}
err := json.Unmarshal(proto.ReplyMessage, &replyMessage)
if err != nil {
return nil, err
}
a.ReplyMessage = replyMessage
}
return a, nil
}

View File

@ -689,6 +689,7 @@ func (m *Messenger) RequestToJoinCommunity(request *requests.RequestToJoinCommun
MembershipStatus: ActivityCenterMembershipStatusPending,
Read: true,
Deleted: false,
UpdatedAt: m.getCurrentTimeInMillis(),
}
err = m.addActivityCenterNotification(response, notification)
@ -830,7 +831,8 @@ func (m *Messenger) CancelRequestToJoinCommunity(request *requests.CancelRequest
}
if notification != nil {
err = m.persistence.DeleteActivityCenterNotification(types.FromHex(requestToJoin.ID.String()))
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.persistence.DeleteActivityCenterNotificationByID(types.FromHex(requestToJoin.ID.String()), notification.UpdatedAt)
if err != nil {
m.logger.Error("failed to delete notification from Activity Center", zap.Error(err))
return nil, err
@ -838,6 +840,11 @@ func (m *Messenger) CancelRequestToJoinCommunity(request *requests.CancelRequest
// set notification as deleted, so that the client will remove the activity center notification from UI
notification.Deleted = true
err = m.syncActivityCenterNotifications([]*ActivityCenterNotification{notification})
if err != nil {
m.logger.Error("CancelRequestToJoinCommunity, failed to sync activity center notifications", zap.Error(err))
return nil, err
}
response.AddActivityCenterNotification(notification)
}
@ -921,6 +928,7 @@ func (m *Messenger) AcceptRequestToJoinCommunity(request *requests.AcceptRequest
notification.MembershipStatus = ActivityCenterMembershipStatusAccepted
notification.Read = true
notification.Accepted = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -954,6 +962,7 @@ func (m *Messenger) DeclineRequestToJoinCommunity(request *requests.DeclineReque
notification.MembershipStatus = ActivityCenterMembershipStatusDeclined
notification.Read = true
notification.Dismissed = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -966,7 +975,7 @@ func (m *Messenger) DeclineRequestToJoinCommunity(request *requests.DeclineReque
}
func (m *Messenger) LeaveCommunity(communityID types.HexBytes) (*MessengerResponse, error) {
err := m.persistence.DismissAllActivityCenterNotificationsFromCommunity(communityID.String())
notifications, err := m.persistence.DismissAllActivityCenterNotificationsFromCommunity(communityID.String(), m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
@ -1018,6 +1027,12 @@ func (m *Messenger) LeaveCommunity(communityID types.HexBytes) (*MessengerRespon
}
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("LeaveCommunity, failed to sync activity center notifications", zap.Error(err))
return nil, err
}
return mr, nil
}
@ -1094,12 +1109,18 @@ func (m *Messenger) CheckAndDeletePendingRequestToJoinCommunity(sendResponse boo
if notification != nil {
// Delete activity centre notification for community admin
if notification.Type == ActivityCenterNotificationTypeCommunityMembershipRequest {
err = m.persistence.DeleteActivityCenterNotification(types.FromHex(requestToJoin.ID.String()))
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.persistence.DeleteActivityCenterNotificationByID(types.FromHex(requestToJoin.ID.String()), notification.UpdatedAt)
if err != nil {
m.logger.Error("failed to delete notification from activity center", zap.Error(err))
return nil, err
}
notification.Deleted = true
err = m.syncActivityCenterNotifications([]*ActivityCenterNotification{notification})
if err != nil {
m.logger.Error("CheckAndDeletePendingRequestToJoinCommunity, failed to sync activity center notifications", zap.Error(err))
return nil, err
}
response.AddActivityCenterNotification(notification)
}
// Update activity centre notification for requester
@ -1107,6 +1128,7 @@ func (m *Messenger) CheckAndDeletePendingRequestToJoinCommunity(sendResponse boo
notification.MembershipStatus = ActivityCenterMembershipStatusIdle
notification.Read = false
notification.Deleted = false
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
m.logger.Error("failed to update notification in activity center", zap.Error(err))

View File

@ -246,6 +246,7 @@ func (m *Messenger) CancelVerificationRequest(ctx context.Context, id string) (*
message := notification.Message
message.ContactVerificationState = common.ContactVerificationStateCanceled
notification.Read = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -356,6 +357,7 @@ func (m *Messenger) AcceptContactVerificationRequest(ctx context.Context, id str
notification.ReplyMessage = replyMessage
notification.Read = true
notification.Accepted = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(resp, notification)
if err != nil {
@ -452,6 +454,7 @@ func (m *Messenger) VerifiedTrusted(ctx context.Context, request *requests.Verif
notification.Message.ContactVerificationState = common.ContactVerificationStateTrusted
notification.Read = true
notification.Accepted = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -558,6 +561,7 @@ func (m *Messenger) VerifiedUntrustworthy(ctx context.Context, request *requests
notification.Message.ContactVerificationState = common.ContactVerificationStateUntrustworthy
notification.Read = true
notification.Accepted = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -666,6 +670,7 @@ func (m *Messenger) DeclineContactVerificationRequest(ctx context.Context, id st
notification.ContactVerificationStatus = verification.RequestStatusDECLINED
notification.Read = true
notification.Dismissed = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
message := notification.Message
message.ContactVerificationState = common.ContactVerificationStateDeclined
@ -1043,6 +1048,7 @@ func (m *Messenger) createOrUpdateOutgoingContactVerificationNotification(contac
Read: vr.RequestStatus != verification.RequestStatusACCEPTED, // Mark as Unread Accepted notification because we are waiting for the asnwer
Accepted: vr.RequestStatus == verification.RequestStatusTRUSTED || vr.RequestStatus == verification.RequestStatusUNTRUSTWORTHY,
Dismissed: vr.RequestStatus == verification.RequestStatusDECLINED,
UpdatedAt: m.getCurrentTimeInMillis(),
}
return m.addActivityCenterNotification(response, notification)
@ -1062,6 +1068,7 @@ func (m *Messenger) createOrUpdateIncomingContactVerificationNotification(contac
Read: vr.RequestStatus != verification.RequestStatusPENDING, // Unread only for pending incomming
Accepted: vr.RequestStatus == verification.RequestStatusACCEPTED || vr.RequestStatus == verification.RequestStatusTRUSTED || vr.RequestStatus == verification.RequestStatusUNTRUSTWORTHY,
Dismissed: vr.RequestStatus == verification.RequestStatusDECLINED,
UpdatedAt: m.getCurrentTimeInMillis(),
}
return m.addActivityCenterNotification(messageState.Response, notification)

View File

@ -210,6 +210,7 @@ func (m *Messenger) declineContactRequest(requestID string, syncing bool) (*Mess
notification.Message = contactRequest
notification.Read = true
notification.Dismissed = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -320,6 +321,7 @@ func (m *Messenger) updateAcceptedContactRequest(response *MessengerResponse, co
notification.Message = contactRequest
notification.Read = true
notification.Accepted = true
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(response, notification)
if err != nil {
@ -591,6 +593,7 @@ func (m *Messenger) generateOutgoingContactRequestNotification(contact *Contact,
contactRequest.ContactRequestState == common.ContactRequestStatePending,
Accepted: contactRequest.ContactRequestState == common.ContactRequestStateAccepted,
Dismissed: contactRequest.ContactRequestState == common.ContactRequestStateDismissed,
UpdatedAt: m.getCurrentTimeInMillis(),
}
}
@ -860,11 +863,17 @@ func (m *Messenger) blockContact(response *MessengerResponse, contactID string,
}
// We remove anything that's related to this contact request
err = m.persistence.HardDeleteChatContactRequestActivityCenterNotifications(contact.ID)
notifications, err := m.persistence.DeleteChatContactRequestActivityCenterNotifications(contact.ID, m.getCurrentTimeInMillis())
if err != nil {
return nil, nil, err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("BlockContact, error syncing activity center notifications", zap.Error(err))
return nil, nil, err
}
return contact, chats, nil
}
@ -883,11 +892,17 @@ func (m *Messenger) BlockContact(contactID string) (*MessengerResponse, error) {
return nil, err
}
err = m.persistence.DismissAllActivityCenterNotificationsFromUser(contactID)
notifications, err := m.persistence.DismissAllActivityCenterNotificationsFromUser(contactID, m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("BlockContact, error syncing activity center notifications", zap.Error(err))
return nil, err
}
return response, nil
}
@ -907,11 +922,17 @@ func (m *Messenger) BlockContactDesktop(contactID string) (*MessengerResponse, e
return nil, err
}
err = m.persistence.DismissAllActivityCenterNotificationsFromUser(contactID)
notifications, err := m.persistence.DismissAllActivityCenterNotificationsFromUser(contactID, m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("BlockContactDesktop, error syncing activity center notifications", zap.Error(err))
return nil, err
}
return response, nil
}

View File

@ -747,10 +747,15 @@ func (m *Messenger) leaveGroupChat(ctx context.Context, response *MessengerRespo
}
func (m *Messenger) LeaveGroupChat(ctx context.Context, chatID string, remove bool) (*MessengerResponse, error) {
err := m.persistence.DismissAllActivityCenterNotificationsFromChatID(chatID)
notifications, err := m.persistence.DismissAllActivityCenterNotificationsFromChatID(chatID, m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("LeaveGroupChat, Failed to sync activity center notifications", zap.Error(err))
return nil, err
}
var response MessengerResponse
return m.leaveGroupChat(ctx, &response, chatID, remove, true)
@ -778,7 +783,7 @@ func (m *Messenger) DeclineAllPendingGroupInvitesFromUser(response *MessengerRes
}
// Decline group invites from activity center notifications
notifications, err := m.persistence.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey)
notifications, err := m.persistence.AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey, m.getCurrentTimeInMillis())
if err != nil {
return nil, err
}
@ -789,5 +794,12 @@ func (m *Messenger) DeclineAllPendingGroupInvitesFromUser(response *MessengerRes
return nil, err
}
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("DeclineAllPendingGroupInvitesFromUser, Failed to sync activity center notifications", zap.Error(err))
return nil, err
}
return response, nil
}

View File

@ -262,6 +262,7 @@ func (m *Messenger) createMessageNotification(chat *Chat, messageState *Received
Timestamp: messageState.CurrentMessageState.WhisperTimestamp,
ChatID: chat.ID,
CommunityID: chat.CommunityID,
UpdatedAt: m.getCurrentTimeInMillis(),
}
err := m.addActivityCenterNotification(messageState.Response, notification)
@ -313,12 +314,19 @@ func (m *Messenger) createIncomingContactRequestNotification(contact *Contact, m
notification.Read = true
notification.Accepted = true
notification.Dismissed = false
err = m.persistence.SaveActivityCenterNotification(notification)
notification.UpdatedAt = m.getCurrentTimeInMillis()
_, err = m.persistence.SaveActivityCenterNotification(notification, true)
if err != nil {
return err
}
messageState.Response.AddMessage(contactRequest)
messageState.Response.AddActivityCenterNotification(notification)
err = m.syncActivityCenterNotifications([]*ActivityCenterNotification{notification})
if err != nil {
m.logger.Error("createIncomingContactRequestNotification, failed to sync activity center notifications", zap.Error(err))
return err
}
}
return nil
}
@ -338,6 +346,7 @@ func (m *Messenger) createIncomingContactRequestNotification(contact *Contact, m
Read: contactRequest.ContactRequestState == common.ContactRequestStateAccepted || contactRequest.ContactRequestState == common.ContactRequestStateDismissed,
Accepted: contactRequest.ContactRequestState == common.ContactRequestStateAccepted,
Dismissed: contactRequest.ContactRequestState == common.ContactRequestStateDismissed,
UpdatedAt: m.getCurrentTimeInMillis(),
}
return m.addActivityCenterNotification(messageState.Response, notification)
@ -1014,6 +1023,7 @@ func (m *Messenger) handleRetractContactRequest(response *MessengerResponse, con
Timestamp: m.getTimesource().GetCurrentTime(),
ChatID: contact.ID,
Read: false,
UpdatedAt: m.getCurrentTimeInMillis(),
}
err = m.addActivityCenterNotification(response, notification)
@ -1362,7 +1372,8 @@ func (m *Messenger) HandleCommunityCancelRequestToJoin(state *ReceivedMessageSta
}
if notification != nil {
err = m.persistence.DeleteActivityCenterNotification(types.FromHex(requestToJoin.ID.String()))
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.persistence.DeleteActivityCenterNotificationByID(types.FromHex(requestToJoin.ID.String()), notification.UpdatedAt)
if err != nil {
m.logger.Error("failed to delete notification from Activity Center", zap.Error(err))
return err
@ -1371,6 +1382,11 @@ func (m *Messenger) HandleCommunityCancelRequestToJoin(state *ReceivedMessageSta
// sending signal to client to remove the activity center notification from UI
response := &MessengerResponse{}
notification.Deleted = true
err = m.syncActivityCenterNotifications([]*ActivityCenterNotification{notification})
if err != nil {
m.logger.Error("HandleCommunityCancelRequestToJoin, failed to sync activity center notifications", zap.Error(err))
return err
}
response.AddActivityCenterNotification(notification)
signal.SendNewMessages(response)
@ -1452,6 +1468,7 @@ func (m *Messenger) HandleCommunityRequestToJoin(state *ReceivedMessageState, si
CommunityID: community.IDString(),
MembershipStatus: ActivityCenterMembershipStatusPending,
Deleted: false,
UpdatedAt: m.getCurrentTimeInMillis(),
}
err = m.addActivityCenterNotification(state.Response, notification)
@ -1472,6 +1489,7 @@ func (m *Messenger) HandleCommunityRequestToJoin(state *ReceivedMessageState, si
} else {
notification.MembershipStatus = ActivityCenterMembershipStatusDeclined
}
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(state.Response, notification)
if err != nil {
m.logger.Error("failed to save notification", zap.Error(err))
@ -1557,6 +1575,7 @@ func (m *Messenger) HandleCommunityRequestToJoinResponse(state *ReceivedMessageS
} else {
notification.MembershipStatus = ActivityCenterMembershipStatusDeclined
}
notification.UpdatedAt = m.getCurrentTimeInMillis()
err = m.addActivityCenterNotification(state.Response, notification)
if err != nil {
m.logger.Warn("failed to update notification", zap.Error(err))
@ -1747,7 +1766,7 @@ func (m *Messenger) HandleDeleteMessage(state *ReceivedMessageState, deleteMessa
}
m.logger.Debug("deleting activity center notification for message", zap.String("chatID", chat.ID), zap.String("messageID", messageToDelete.ID))
err = m.persistence.DeleteActivityCenterNotificationForMessage(chat.ID, messageToDelete.ID)
notifications, err := m.persistence.DeleteActivityCenterNotificationForMessage(chat.ID, messageToDelete.ID, m.getCurrentTimeInMillis())
if err != nil {
m.logger.Warn("failed to delete notifications for deleted message", zap.Error(err))
@ -1769,6 +1788,12 @@ func (m *Messenger) HandleDeleteMessage(state *ReceivedMessageState, deleteMessa
}
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("HandleDeleteMessage, failed to sync activity center notifications", zap.Error(err))
return err
}
state.Response.AddRemovedMessage(&RemovedMessage{MessageID: messageToDelete.ID, ChatID: chat.ID, DeletedBy: deleteMessage.DeleteMessage.DeletedBy})
state.Response.AddNotification(DeletedMessageNotification(messageToDelete.ID, chat))
state.Response.AddActivityCenterNotification(&ActivityCenterNotification{
@ -1853,7 +1878,7 @@ func (m *Messenger) HandleDeleteForMeMessage(state *ReceivedMessageState, delete
m.logger.Debug("deleting activity center notification for message", zap.String("chatID", chat.ID), zap.String("messageID", messageToDelete.ID))
err = m.persistence.DeleteActivityCenterNotificationForMessage(chat.ID, messageToDelete.ID)
notifications, err := m.persistence.DeleteActivityCenterNotificationForMessage(chat.ID, messageToDelete.ID, m.getCurrentTimeInMillis())
if err != nil {
m.logger.Warn("failed to delete notifications for deleted message", zap.Error(err))
return err
@ -1867,6 +1892,12 @@ func (m *Messenger) HandleDeleteForMeMessage(state *ReceivedMessageState, delete
}
}
err = m.syncActivityCenterNotifications(notifications)
if err != nil {
m.logger.Error("HandleDeleteForMeMessage, failed to sync activity center notifications", zap.Error(err))
return err
}
state.Response.AddMessage(messageToDelete)
}
state.Response.AddChat(chat)
@ -2161,20 +2192,29 @@ func (m *Messenger) HandleImportedChatMessage(state *ReceivedMessageState) error
}
func (m *Messenger) addActivityCenterNotification(response *MessengerResponse, notification *ActivityCenterNotification) error {
err := m.persistence.SaveActivityCenterNotification(notification)
_, err := m.persistence.SaveActivityCenterNotification(notification, true)
if err != nil {
m.logger.Error("failed to save notification", zap.Error(err))
return err
}
err = m.syncActivityCenterNotifications([]*ActivityCenterNotification{notification})
if err != nil {
m.logger.Error("addActivityCenterNotification, failed to sync activity center notifications", zap.Error(err))
return err
}
state, err := m.persistence.GetActivityCenterState()
if err != nil {
m.logger.Error("failed to obtain activity center state", zap.Error(err))
return err
}
response.AddActivityCenterNotification(notification)
response.SetActivityCenterState(state)
if !notification.Read {
return m.syncActivityCenterNotificationState(state)
}
return nil
}

View File

@ -0,0 +1,153 @@
package protocol
import (
"context"
"crypto/ecdsa"
"errors"
"testing"
"github.com/stretchr/testify/require"
gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/protocol/encryption/multidevice"
"github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/waku"
"github.com/stretchr/testify/suite"
"go.uber.org/zap"
"github.com/status-im/status-go/eth-node/types"
)
func TestMessengerSyncActivityCenterNotificationSuite(t *testing.T) {
suite.Run(t, new(MessengerSyncActivityCenterNotificationSuite))
}
type MessengerSyncActivityCenterNotificationSuite struct {
suite.Suite
m *Messenger // main instance of Messenger
theirMessenger *Messenger
privateKey *ecdsa.PrivateKey // private key for the main instance of Messenger
// If one wants to send messages between different instances of Messenger,
// a single Waku service should be shared.
shh types.Waku
logger *zap.Logger
}
func (s *MessengerSyncActivityCenterNotificationSuite) SetupTest() {
s.logger = tt.MustCreateTestLogger()
config := waku.DefaultConfig
config.MinimumAcceptedPoW = 0
shh := waku.New(&config, s.logger)
s.shh = gethbridge.NewGethWakuWrapper(shh)
s.Require().NoError(shh.Start())
s.m = s.newMessenger()
s.privateKey = s.m.identity
// We start the messenger in order to receive installations
_, err := s.m.Start()
s.Require().NoError(err)
// pair
s.theirMessenger, err = newMessengerWithKey(s.shh, s.privateKey, s.logger, nil)
s.Require().NoError(err)
err = s.theirMessenger.SetInstallationMetadata(s.theirMessenger.installationID, &multidevice.InstallationMetadata{
Name: "their-name",
DeviceType: "their-device-type",
})
s.Require().NoError(err)
_, err = s.theirMessenger.SendPairInstallation(context.Background(), nil)
s.Require().NoError(err)
// Wait for the message to reach its destination
_, err = WaitOnMessengerResponse(
s.m,
func(r *MessengerResponse) bool { return len(r.Installations) > 0 },
"installation not received",
)
s.Require().NoError(err)
err = s.m.EnableInstallation(s.theirMessenger.installationID)
s.Require().NoError(err)
}
func (s *MessengerSyncActivityCenterNotificationSuite) TearDownTest() {
s.Require().NoError(s.m.Shutdown())
s.Require().NoError(s.theirMessenger.Shutdown())
}
func (s *MessengerSyncActivityCenterNotificationSuite) newMessenger() *Messenger {
privateKey, err := crypto.GenerateKey()
s.Require().NoError(err)
messenger, err := newMessengerWithKey(s.shh, privateKey, s.logger, nil)
s.Require().NoError(err)
return messenger
}
func (s *MessengerSyncActivityCenterNotificationSuite) TestSyncActivityCenterNotification() {
// add notification
now := currentMilliseconds()
notificationID := types.HexBytes("123")
expectedNotification := &ActivityCenterNotification{
ID: notificationID,
Author: "author",
Type: ActivityCenterNotificationTypeContactRequest,
Timestamp: now,
UpdatedAt: now,
}
err := s.m.addActivityCenterNotification(&MessengerResponse{}, expectedNotification)
s.Require().NoError(err)
// Wait for the message to reach its destination
err = tt.RetryWithBackOff(func() error {
response, err := s.theirMessenger.RetrieveAll()
if err != nil {
return err
}
if len(response.ActivityCenterNotifications()) == 1 {
require.Equal(s.T(), expectedNotification, response.ActivityCenterNotifications()[0])
return nil
}
return errors.New("not received notifications")
})
s.Require().NoError(err)
notification, err := s.theirMessenger.ActivityCenterNotification(notificationID)
s.Require().NoError(err)
s.Require().Equal(expectedNotification, notification)
// check state
s1, err := s.m.GetActivityCenterState()
s.Require().NoError(err)
s.Require().NotNil(s1)
s.Require().False(s1.HasSeen)
s2, err := s.theirMessenger.GetActivityCenterState()
s.Require().NoError(err)
s.Require().NotNil(s2)
s.Require().False(s2.HasSeen)
s.Require().Equal(s1.UpdatedAt, s2.UpdatedAt)
// mark as seen
_, err = s.m.MarkAsSeenActivityCenterNotifications()
s.Require().NoError(err)
err = tt.RetryWithBackOff(func() error {
response, err := s.theirMessenger.RetrieveAll()
if err != nil {
return err
}
if response.ActivityCenterState() != nil {
require.True(s.T(), response.ActivityCenterState().HasSeen)
return nil
}
return errors.New("not received notification state")
})
s.Require().NoError(err)
s3, err := s.theirMessenger.GetActivityCenterState()
s.Require().NoError(err)
s.Require().NotNil(s3)
s.Require().True(s3.HasSeen)
}

View File

@ -628,7 +628,14 @@ func (s *MessengerSuite) TestRetrieveBlockedContact() {
response, err := receiver.RetrieveAll()
s.Require().NoError(err)
if require {
s.Require().Len(response.Messages(), 1)
containTextMsg := false
for _, msg := range response.Messages() {
if msg.ContentType == protobuf.ChatMessage_TEXT_PLAIN && msg.Text == "text-input-message" {
containTextMsg = true
break
}
}
s.Require().True(containTextMsg)
} else {
s.Require().Len(response.Messages(), 0)
}

View File

@ -90,6 +90,7 @@
// 1683725607_mark_discord_messages_as_seen.up.sql (108B)
// 1684174617_add_url_previews_to_user_messages.up.sql (58B)
// 1684175608_add_token_balances.up.sql (467B)
// 1684979808_sync_activity_center_notifications.up.sql (169B)
// README.md (554B)
// doc.go (850B)
@ -175,7 +176,7 @@ func _000001_initDownDbSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}}
return a, nil
}
@ -195,7 +196,7 @@ func _000001_initUpDbSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}}
return a, nil
}
@ -215,7 +216,7 @@ func _000002_add_last_ens_clock_valueUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}}
return a, nil
}
@ -235,7 +236,7 @@ func _1586358095_add_replaceUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}}
return a, nil
}
@ -255,7 +256,7 @@ func _1588665364_add_image_dataUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}}
return a, nil
}
@ -275,7 +276,7 @@ func _1589365189_add_pow_targetUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}}
return a, nil
}
@ -295,7 +296,7 @@ func _1591277220_add_index_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}}
return a, nil
}
@ -315,7 +316,7 @@ func _1593087212_add_mute_chat_and_raw_message_fieldsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}}
return a, nil
}
@ -335,7 +336,7 @@ func _1595862781_add_audio_dataUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}}
return a, nil
}
@ -355,7 +356,7 @@ func _1595865249_create_emoji_reactions_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}}
return a, nil
}
@ -375,7 +376,7 @@ func _1596805115_create_group_chat_invitations_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}}
return a, nil
}
@ -395,7 +396,7 @@ func _1597322655_add_invitation_admin_chat_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}}
return a, nil
}
@ -415,7 +416,7 @@ func _1597757544_add_nicknameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}}
return a, nil
}
@ -435,7 +436,7 @@ func _1598955122_add_mentionsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}}
return a, nil
}
@ -455,7 +456,7 @@ func _1599641390_add_emoji_reactions_indexUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}}
return a, nil
}
@ -475,7 +476,7 @@ func _1599720851_add_seen_index_remove_long_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}}
return a, nil
}
@ -495,7 +496,7 @@ func _1603198582_add_profile_chat_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}}
return a, nil
}
@ -515,7 +516,7 @@ func _1603816533_add_linksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}}
return a, nil
}
@ -535,7 +536,7 @@ func _1603888149_create_chat_identity_last_published_tableUpSql() (*asset, error
return nil, err
}
info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1608652331, 0)}
info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}}
return a, nil
}
@ -555,7 +556,7 @@ func _1605075346_add_communitiesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1610388501, 0)}
info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}}
return a, nil
}
@ -575,7 +576,7 @@ func _1610117927_add_message_cacheUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1611563400, 0)}
info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}}
return a, nil
}
@ -595,7 +596,7 @@ func _1610959908_add_dont_wrap_to_raw_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1611825589, 0)}
info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}}
return a, nil
}
@ -615,7 +616,7 @@ func _1610960912_add_send_on_personal_topicUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1611825589, 0)}
info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}}
return a, nil
}
@ -635,7 +636,7 @@ func _1612870480_add_datasync_idUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1614251236, 0)}
info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}}
return a, nil
}
@ -655,7 +656,7 @@ func _1614152139_add_communities_request_to_joinUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1614608661, 0)}
info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}}
return a, nil
}
@ -675,7 +676,7 @@ func _1615374373_add_confirmationsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1615904318, 0)}
info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}}
return a, nil
}
@ -695,7 +696,7 @@ func _1617694931_add_notification_centerUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1618824585, 0)}
info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}}
return a, nil
}
@ -715,7 +716,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1621413223, 0)}
info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}}
return a, nil
}
@ -735,7 +736,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1621413223, 0)}
info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}}
return a, nil
}
@ -755,7 +756,7 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1621576592, 0)}
info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}}
return a, nil
}
@ -775,7 +776,7 @@ func _1621933219_add_mentionedUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1623420243, 0)}
info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}}
return a, nil
}
@ -795,7 +796,7 @@ func _1622010048_add_unviewed_mentions_countUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1623420243, 0)}
info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}}
return a, nil
}
@ -815,7 +816,7 @@ func _1622061278_add_message_activity_center_notification_fieldUpSql() (*asset,
return nil, err
}
info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1623420243, 0)}
info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}}
return a, nil
}
@ -835,7 +836,7 @@ func _1622464518_set_synced_to_fromUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1623420243, 0)}
info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}}
return a, nil
}
@ -855,7 +856,7 @@ func _1622464519_add_chat_descriptionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1623420243, 0)}
info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}}
return a, nil
}
@ -875,7 +876,7 @@ func _1622622253_add_pinned_by_to_pin_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1623420243, 0)}
info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}}
return a, nil
}
@ -895,7 +896,7 @@ func _1623938329_add_author_activity_center_notification_fieldUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1624017080, 0)}
info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}}
return a, nil
}
@ -915,7 +916,7 @@ func _1623938330_add_edit_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1628358694, 0)}
info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}}
return a, nil
}
@ -935,7 +936,7 @@ func _1624978434_add_muted_communityUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1628358694, 0)}
info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}}
return a, nil
}
@ -955,7 +956,7 @@ func _1625018910_add_repply_message_activity_center_notification_fieldUpSql() (*
return nil, err
}
info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1628358694, 0)}
info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}}
return a, nil
}
@ -975,7 +976,7 @@ func _1625762506_add_deleted_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1628358701, 0)}
info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}}
return a, nil
}
@ -995,7 +996,7 @@ func _1627388946_add_communities_synced_atUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1628358701, 0)}
info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}}
return a, nil
}
@ -1015,7 +1016,7 @@ func _1628280060_createUsermessagesIndexSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1628783235, 0)}
info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}}
return a, nil
}
@ -1035,7 +1036,7 @@ func _1632303896_modify_contacts_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1633515512, 0)}
info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}}
return a, nil
}
@ -1055,7 +1056,7 @@ func _1633349838_add_emoji_column_in_chatsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1633515512, 0)}
info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}}
return a, nil
}
@ -1075,7 +1076,7 @@ func _1634831235_add_highlight_column_in_chatsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1635162188, 0)}
info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}}
return a, nil
}
@ -1095,7 +1096,7 @@ func _1634896007_add_last_updated_locally_and_removedUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1637051072, 0)}
info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}}
return a, nil
}
@ -1115,7 +1116,7 @@ func _1635840039_add_clock_read_at_column_in_chatsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1636362489, 0)}
info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}}
return a, nil
}
@ -1135,7 +1136,7 @@ func _1637852321_add_received_invitation_admin_column_in_chatsUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1638003948, 0)}
info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1645666387, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}}
return a, nil
}
@ -1155,7 +1156,7 @@ func _1645034601_display_nameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1669629376, 0)}
info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}}
return a, nil
}
@ -1175,7 +1176,7 @@ func _1645034602_add_mutual_contact_requestUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}}
return a, nil
}
@ -1195,7 +1196,7 @@ func _1650373957_add_contact_request_stateUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}}
return a, nil
}
@ -1215,7 +1216,7 @@ func _1656958989_contact_verificationUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x3f, 0x28, 0x38, 0x33, 0xdb, 0xe9, 0x4d, 0xc0, 0x54, 0x8c, 0x2a, 0x73, 0xc4, 0xdd, 0x5c, 0xc5, 0x1a, 0x93, 0x4b, 0x6, 0x13, 0xbe, 0x42, 0xd2, 0x7f, 0xd4, 0xc, 0xc5, 0x4e, 0x6d, 0xce}}
return a, nil
}
@ -1235,7 +1236,7 @@ func _1658236268_add_discord_message_authors_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0xb7, 0xdb, 0x79, 0x1, 0x15, 0xe7, 0x76, 0x5d, 0x22, 0x54, 0x82, 0x9a, 0xbe, 0x24, 0xc1, 0x82, 0xcf, 0x67, 0x91, 0x53, 0xcc, 0xac, 0x74, 0x18, 0x61, 0x69, 0x68, 0x19, 0xca, 0x2b, 0xa8}}
return a, nil
}
@ -1255,7 +1256,7 @@ func _1659619997_add_discord_messages_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}}
return a, nil
}
@ -1275,7 +1276,7 @@ func _1660226788_create_chat_identity_social_linksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x76, 0x40, 0xe9, 0x85, 0xc4, 0x38, 0xf8, 0xe5, 0x5d, 0xe8, 0x13, 0x46, 0x1b, 0xc, 0x1, 0xe9, 0x2f, 0x74, 0xd1, 0x79, 0x59, 0xa4, 0xdb, 0x4a, 0x4a, 0xf4, 0x98, 0x58, 0x3c, 0x57, 0xd3}}
return a, nil
}
@ -1295,7 +1296,7 @@ func _1660226789_add_walletconnectsessions_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x5c, 0x72, 0x2, 0xed, 0x36, 0x19, 0x91, 0x4d, 0x1a, 0xc1, 0xab, 0x84, 0xfa, 0x41, 0xb1, 0x46, 0xa5, 0xdb, 0x3f, 0x76, 0x47, 0xd3, 0x75, 0x3c, 0x6a, 0x8e, 0x78, 0xe6, 0x41, 0xdc, 0x7f}}
return a, nil
}
@ -1315,7 +1316,7 @@ func _1661242854_add_communities_requests_to_leaveUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x2e, 0x7d, 0x14, 0xef, 0x6e, 0x95, 0x4b, 0x6, 0x70, 0x2e, 0xd1, 0xf6, 0x59, 0xf9, 0xe, 0x56, 0xa, 0x9c, 0x80, 0x18, 0xca, 0xb9, 0x49, 0x19, 0xf, 0x89, 0x94, 0x36, 0x6d, 0x93, 0x9a}}
return a, nil
}
@ -1335,7 +1336,7 @@ func _1662044232_add_chat_imageUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x74, 0xdf, 0x50, 0x79, 0x73, 0x9e, 0xd0, 0xff, 0xa4, 0xd3, 0x87, 0xc3, 0x48, 0x31, 0x6c, 0xdf, 0xa6, 0x20, 0x85, 0xe6, 0x4e, 0x19, 0x9d, 0xef, 0xcc, 0x84, 0x2b, 0x5d, 0x44, 0x34, 0x6}}
return a, nil
}
@ -1355,7 +1356,7 @@ func _1662106895_add_chat_first_message_timestampUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8b, 0x55, 0x74, 0xfa, 0xf5, 0x51, 0x85, 0x19, 0xfd, 0xfb, 0x6, 0x79, 0x4d, 0x1d, 0xd, 0x3, 0x46, 0x66, 0x34, 0x1e, 0xce, 0x91, 0x21, 0x29, 0xf6, 0x71, 0xe7, 0x31, 0x39, 0x8f, 0x9d, 0x5}}
return a, nil
}
@ -1375,7 +1376,7 @@ func _1662723928_add_discord_author_image_fieldsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0x5b, 0x48, 0x57, 0x98, 0x55, 0x9a, 0xf1, 0x75, 0xf7, 0xb5, 0x41, 0x5e, 0x96, 0xc5, 0xce, 0xfc, 0x30, 0x5c, 0x15, 0x35, 0x9e, 0x4e, 0x4a, 0x3b, 0x38, 0x42, 0xc4, 0x27, 0x3c, 0x87, 0xbf}}
return a, nil
}
@ -1395,7 +1396,7 @@ func _1664195977_add_deleted_for_mesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7d, 0x9d, 0x13, 0x9, 0xaa, 0x44, 0x14, 0x93, 0xe2, 0xf5, 0x53, 0xb7, 0x79, 0xa8, 0x18, 0xf0, 0x6c, 0xa4, 0x9c, 0x73, 0xc1, 0xaa, 0xc5, 0x2e, 0xc5, 0x41, 0xd7, 0x24, 0xb0, 0xd7, 0xb8, 0xdf}}
return a, nil
}
@ -1415,7 +1416,7 @@ func _1664367420_add_discord_attachments_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xe1, 0xb6, 0x4f, 0x6f, 0x92, 0x0, 0xb4, 0xf, 0x55, 0x12, 0x1c, 0x98, 0x6d, 0xbc, 0x1e, 0xfd, 0xae, 0x1c, 0xce, 0xd1, 0x3d, 0x2, 0x21, 0x2e, 0xc0, 0x13, 0xa, 0xb2, 0xec, 0x81, 0x13}}
return a, nil
}
@ -1435,7 +1436,7 @@ func _1665079662_add_spectated_column_in_communitiesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0x5d, 0xfe, 0xe2, 0xbe, 0xdf, 0xba, 0x45, 0xe9, 0xfc, 0xa7, 0x5f, 0xda, 0x19, 0xdb, 0x40, 0x96, 0x59, 0x78, 0xa, 0xd7, 0x4a, 0xca, 0x1a, 0x93, 0xfb, 0xae, 0x6d, 0x74, 0x7, 0x36, 0xdd}}
return a, nil
}
@ -1455,7 +1456,7 @@ func _1665479047_add_community_id_in_notificationsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0x8f, 0x8b, 0x1c, 0xaa, 0x6a, 0x56, 0xd6, 0xa5, 0x88, 0x57, 0x13, 0x8f, 0xea, 0xb9, 0x23, 0x82, 0x50, 0xb7, 0x65, 0x1f, 0xab, 0xfa, 0x23, 0x6f, 0x0, 0x7, 0xb6, 0x6e, 0xb5, 0x85, 0x44}}
return a, nil
}
@ -1475,7 +1476,7 @@ func _1665484435_add_encrypted_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0x5c, 0x1e, 0x1c, 0x7f, 0xae, 0x5f, 0xeb, 0x3c, 0x6c, 0xcd, 0xc2, 0x99, 0x48, 0x5c, 0x83, 0xa0, 0xa2, 0x97, 0x5, 0x39, 0x82, 0x71, 0x90, 0x47, 0x21, 0x84, 0x29, 0x19, 0xa4, 0x7a, 0x90}}
return a, nil
}
@ -1495,7 +1496,7 @@ func _1665560200_add_contact_verification_individualUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc5, 0xbb, 0x61, 0xfd, 0xbf, 0x33, 0x1d, 0x4e, 0x5f, 0xbd, 0x86, 0x42, 0xb0, 0x6c, 0xf7, 0x39, 0x19, 0x6e, 0x72, 0x35, 0xfd, 0x1b, 0xd6, 0xbd, 0xf6, 0x81, 0x21, 0xc4, 0xaa, 0x6, 0x62, 0x40}}
return a, nil
}
@ -1515,7 +1516,7 @@ func _1670921937_add_album_idUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xae, 0x83, 0x58, 0xb7, 0x77, 0x5, 0xca, 0xe3, 0xda, 0x32, 0x8f, 0x7b, 0xa4, 0x2f, 0x4c, 0xaf, 0x5f, 0xfa, 0x94, 0x36, 0xe4, 0xf9, 0x7, 0xc6, 0xd6, 0xb7, 0x90, 0xf3, 0xe5, 0xb5, 0x3}}
return a, nil
}
@ -1535,7 +1536,7 @@ func _1673373000_add_repliedUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x1c, 0xae, 0xf2, 0xf, 0xb4, 0xc2, 0xba, 0x3c, 0xfe, 0x7b, 0xb0, 0xf, 0xf, 0xd5, 0xbc, 0xe2, 0xa7, 0xad, 0x50, 0xd9, 0x5a, 0xe8, 0x96, 0x22, 0x65, 0x89, 0xcf, 0x4a, 0x9a, 0x1b, 0x94}}
return a, nil
}
@ -1555,7 +1556,7 @@ func _1673428910_add_image_width_heightUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1675323803, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x74, 0xda, 0x93, 0x2a, 0x9b, 0x6b, 0xb7, 0x96, 0xcd, 0xac, 0xf, 0xaf, 0x54, 0x89, 0x9e, 0x91, 0x5b, 0xd0, 0x4a, 0xa, 0x8d, 0x9e, 0x80, 0x66, 0x26, 0x9e, 0xb5, 0xa9, 0x8, 0xec, 0x2d, 0x6c}}
return a, nil
}
@ -1575,7 +1576,7 @@ func _1674210659_add_contact_request_local_clockUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1675323904, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x72, 0x39, 0xfe, 0x72, 0x98, 0xfc, 0x91, 0x20, 0x10, 0xe8, 0xf5, 0xac, 0x79, 0xa8, 0x1c, 0xca, 0x7b, 0x35, 0xa, 0xc1, 0x56, 0x49, 0x9a, 0xfc, 0xbd, 0x64, 0x9d, 0xdf, 0xd2, 0x60, 0x70}}
return a, nil
}
@ -1595,7 +1596,7 @@ func _1675212323_add_deleted_byUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1675323904, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x37, 0x29, 0x2f, 0xd, 0x5a, 0xb6, 0xdb, 0xa7, 0x8, 0x86, 0xfc, 0x7a, 0x70, 0xd8, 0x4d, 0xe6, 0xf0, 0x57, 0xe7, 0xd1, 0x95, 0xd5, 0x4, 0x40, 0x2f, 0x7a, 0x5, 0x4f, 0xc2, 0x97, 0xbc}}
return a, nil
}
@ -1615,7 +1616,7 @@ func _1675247084_add_activity_center_statesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1677122376, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xba, 0x90, 0x7d, 0x55, 0xc7, 0x40, 0x29, 0x26, 0x97, 0x45, 0x5c, 0xdf, 0xba, 0x61, 0xb, 0xfc, 0x3d, 0x7a, 0x6c, 0x42, 0xe4, 0x95, 0x78, 0xb0, 0xc5, 0x1f, 0x73, 0xe9, 0x33, 0x51, 0xc8, 0x81}}
return a, nil
}
@ -1635,7 +1636,7 @@ func _1675272329_fix_protocol_migrationUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1675323904, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xe0, 0x11, 0x4c, 0x66, 0x55, 0x72, 0xd3, 0xe6, 0x98, 0xa4, 0xe7, 0x44, 0xf9, 0x3b, 0x3a, 0x3f, 0xd9, 0x91, 0x1e, 0x4f, 0xfc, 0x56, 0x63, 0xe5, 0xa4, 0x83, 0xfc, 0x7c, 0xcf, 0x18, 0x99}}
return a, nil
}
@ -1655,7 +1656,7 @@ func _1676998418_fix_activity_center_migrationUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1677468108, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8a, 0xdc, 0x64, 0xb1, 0x47, 0x67, 0xda, 0x2c, 0x26, 0x29, 0x6b, 0x6f, 0xb, 0xfa, 0x45, 0xf3, 0xad, 0x8b, 0x1a, 0x5f, 0x1c, 0xed, 0xd7, 0xea, 0x54, 0xf5, 0x3f, 0xb8, 0xf6, 0xf9, 0x44, 0x53}}
return a, nil
}
@ -1675,7 +1676,7 @@ func _1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql(
return nil, err
}
info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1677468108, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x38, 0x3a, 0x95, 0xaf, 0x81, 0xb0, 0x85, 0x8d, 0x73, 0xda, 0x7b, 0x2a, 0x35, 0xa6, 0xaa, 0xcc, 0x4c, 0x35, 0xa3, 0xa8, 0xbd, 0xd1, 0x37, 0xe8, 0x5d, 0x83, 0xa4, 0x33, 0x1f, 0x10, 0xe4, 0xe6}}
return a, nil
}
@ -1695,7 +1696,7 @@ func _1677486338_add_community_tokens_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1677564198, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0x7b, 0x3d, 0x7e, 0x79, 0xc4, 0x3a, 0xf1, 0xda, 0x4b, 0xc6, 0xd1, 0xd, 0xfb, 0xb2, 0xb9, 0x7f, 0x81, 0x29, 0xab, 0xd8, 0x1, 0x20, 0xd7, 0xe1, 0xaf, 0x3e, 0x67, 0x1b, 0xdb, 0xf9, 0xd5}}
return a, nil
}
@ -1715,7 +1716,7 @@ func _1678292329_add_collapsed_categoriesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1679051421, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x63, 0x86, 0xd5, 0x7, 0xe2, 0x25, 0x15, 0x1b, 0xfe, 0xf3, 0xe, 0x50, 0x48, 0x11, 0x3c, 0x7c, 0xc6, 0xe5, 0xab, 0x8d, 0x1f, 0xe8, 0x3c, 0xcb, 0xf0, 0x8d, 0xa7, 0x49, 0x4c, 0x16, 0x4f}}
return a, nil
}
@ -1735,7 +1736,7 @@ func _1678800760_add_index_to_raw_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1679302848, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9d, 0xd9, 0x8d, 0x22, 0x46, 0xae, 0x7b, 0x53, 0x3e, 0x51, 0x39, 0xad, 0xad, 0x38, 0x50, 0x6, 0xfa, 0xb9, 0xc4, 0x9f, 0x8d, 0xd2, 0x67, 0x0, 0xef, 0x58, 0x13, 0xab, 0x6a, 0x67, 0xf3, 0x7e}}
return a, nil
}
@ -1755,7 +1756,7 @@ func _1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql(
return nil, err
}
info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1679652393, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x82, 0x1, 0xb4, 0xb2, 0x94, 0x25, 0xd5, 0x2e, 0x45, 0xc3, 0xb1, 0x2c, 0xeb, 0x1a, 0x52, 0xe0, 0x4b, 0x9b, 0x46, 0xf4, 0xc, 0xac, 0x1, 0x1e, 0x90, 0xbc, 0x64, 0x38, 0x10, 0xf1, 0xaf, 0xac}}
return a, nil
}
@ -1775,7 +1776,7 @@ func _1679326850_add_community_token_ownersUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1680000580, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xe6, 0x25, 0x67, 0xd1, 0xd6, 0x54, 0x88, 0xb1, 0x80, 0x1e, 0x2d, 0x9c, 0xfa, 0x1c, 0xc7, 0x63, 0x6e, 0xf9, 0x66, 0xb1, 0x68, 0xc6, 0xf8, 0x51, 0xb6, 0xd5, 0x4e, 0x93, 0x39, 0x5e, 0xc0}}
return a, nil
}
@ -1795,7 +1796,7 @@ func _1680011500_add_album_images_countUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1680260624, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0x55, 0x99, 0x31, 0xcc, 0x80, 0x78, 0xc3, 0x51, 0x13, 0x63, 0x6f, 0x1a, 0xfd, 0x53, 0xd2, 0xf4, 0x13, 0x4b, 0xb2, 0x4f, 0x99, 0xb8, 0x7b, 0x7, 0x99, 0xb6, 0xab, 0x88, 0x2e, 0x7, 0x8}}
return a, nil
}
@ -1815,7 +1816,7 @@ func _1680114896_add_index_on_album_idUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1680260624, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x7e, 0xd5, 0xcd, 0x2d, 0xab, 0xd4, 0x32, 0x26, 0x50, 0x3a, 0x5b, 0x8e, 0x1c, 0xcc, 0x35, 0xf8, 0xa1, 0x2a, 0xc1, 0x23, 0xf6, 0x90, 0xfe, 0x84, 0x3, 0xde, 0x5a, 0xee, 0xc6, 0xfc, 0x2a}}
return a, nil
}
@ -1835,7 +1836,7 @@ func _1681655289_add_mute_tillUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1681955252, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xbe, 0xce, 0xb8, 0xe1, 0x30, 0xe7, 0xa7, 0xe0, 0x7d, 0x97, 0xf4, 0x26, 0xb8, 0x57, 0x1d, 0x2a, 0xed, 0x18, 0xf2, 0xa, 0xe3, 0x77, 0x29, 0x18, 0x55, 0x9, 0x74, 0x2c, 0x24, 0x5a, 0x19}}
return a, nil
}
@ -1855,7 +1856,7 @@ func _1681934966_add_index_response_toUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1682560340, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3b, 0xed, 0xa6, 0x7e, 0x51, 0xf2, 0xa1, 0x3c, 0x78, 0x9a, 0xa7, 0x7a, 0x51, 0x25, 0x7d, 0xdd, 0x4b, 0xf3, 0x45, 0xeb, 0x3f, 0xad, 0x23, 0x3e, 0xac, 0x16, 0x28, 0x62, 0x7, 0x8c, 0xe0, 0xa0}}
return a, nil
}
@ -1875,7 +1876,7 @@ func _1682528339_add_index_user_messages_unseenUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1683172161, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x35, 0xfa, 0x98, 0xdd, 0x74, 0x5e, 0x21, 0x1f, 0xf2, 0x56, 0x17, 0x96, 0xfe, 0xbb, 0x44, 0x4c, 0xa1, 0xd8, 0x9f, 0x2e, 0x6, 0x2f, 0xd8, 0x23, 0xec, 0x94, 0x8c, 0x53, 0xf3, 0xf0, 0x40, 0xe7}}
return a, nil
}
@ -1895,7 +1896,7 @@ func _1683707289_recreate_deleted_for_mesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1683811675, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5b, 0x9d, 0xd6, 0x45, 0x41, 0x29, 0x44, 0xf6, 0x14, 0x38, 0xeb, 0xdf, 0x6b, 0x5d, 0x9c, 0x45, 0x4b, 0xc3, 0xa8, 0xbd, 0x38, 0x14, 0xd9, 0x73, 0xf1, 0x51, 0xbb, 0x9f, 0x14, 0x36, 0xf2, 0x11}}
return a, nil
}
@ -1915,7 +1916,7 @@ func _1683725607_mark_discord_messages_as_seenUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1683810836, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x2a, 0xc3, 0x43, 0xea, 0x5e, 0x3, 0x2e, 0xce, 0x79, 0xea, 0xa5, 0x67, 0x61, 0x8c, 0xe4, 0xb9, 0xb7, 0x4d, 0xd5, 0xd5, 0xb0, 0x35, 0xc8, 0x2b, 0xa0, 0x3f, 0xd8, 0xde, 0xea, 0x4e, 0x16}}
return a, nil
}
@ -1935,7 +1936,7 @@ func _1684174617_add_url_previews_to_user_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1684505071, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0xb0, 0x72, 0xe3, 0xe4, 0xa9, 0x63, 0x82, 0xea, 0x52, 0x70, 0xb6, 0xa0, 0x73, 0x55, 0x7a, 0x78, 0xa8, 0xd2, 0xb0, 0xf4, 0x78, 0x8a, 0xd, 0x5a, 0xa2, 0x9d, 0x92, 0xdc, 0xce, 0x1c, 0x71}}
return a, nil
}
@ -1955,11 +1956,31 @@ func _1684175608_add_token_balancesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1684838089, 0)}
info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1684755650, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x4e, 0xe0, 0x48, 0x34, 0x1, 0x4d, 0x88, 0x11, 0x54, 0x20, 0x52, 0x5c, 0x57, 0x14, 0xa9, 0xa9, 0x36, 0xa4, 0x28, 0x59, 0x48, 0xa8, 0xa, 0x76, 0xec, 0x37, 0xee, 0x9e, 0xd2, 0x20, 0xaa}}
return a, nil
}
var __1684979808_sync_activity_center_notificationsUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xcc\xc1\x09\x02\x31\x10\x05\xd0\xbb\x55\xfc\x12\xbc\x7b\x8a\x26\x82\x30\x66\x41\x26\xe7\x30\x64\x23\xcc\x25\x2b\xe6\x2b\xd8\xbd\x1d\x08\x36\xf0\x82\x68\xba\x41\xc3\x51\x12\xac\xd1\xdf\xce\x4f\x6d\x7d\xb0\x3f\xeb\xa4\xb1\x4f\x84\x18\x71\x5a\xa4\x5c\x33\x5e\x8f\xd5\xd8\xd7\x6a\xc4\x25\x2b\xf2\xa2\xc8\x45\x04\x31\x9d\x43\x11\xc5\xfe\xb0\xfb\x05\x8e\x8d\x7e\xf7\x66\xf4\x6d\xfc\xeb\x7e\x03\x00\x00\xff\xff\x09\xb8\x1a\x7c\xa9\x00\x00\x00")
func _1684979808_sync_activity_center_notificationsUpSqlBytes() ([]byte, error) {
return bindataRead(
__1684979808_sync_activity_center_notificationsUpSql,
"1684979808_sync_activity_center_notifications.up.sql",
)
}
func _1684979808_sync_activity_center_notificationsUpSql() (*asset, error) {
bytes, err := _1684979808_sync_activity_center_notificationsUpSqlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1686047555, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0xf5, 0xf7, 0x94, 0xa9, 0xa1, 0x60, 0x26, 0x9d, 0xca, 0x31, 0xf, 0x14, 0xd, 0x70, 0xf8, 0xab, 0x40, 0x29, 0x73, 0x61, 0xbd, 0x1b, 0xb6, 0xc4, 0x31, 0x77, 0x9e, 0x32, 0xa8, 0xce, 0x6d}}
return a, nil
}
var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00")
func readmeMdBytes() ([]byte, error) {
@ -1975,7 +1996,7 @@ func readmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1610388501, 0)}
info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}}
return a, nil
}
@ -1995,7 +2016,7 @@ func docGo() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1607354881, 0)}
info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1645429416, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}}
return a, nil
}
@ -2271,6 +2292,8 @@ var _bindata = map[string]func() (*asset, error){
"1684175608_add_token_balances.up.sql": _1684175608_add_token_balancesUpSql,
"1684979808_sync_activity_center_notifications.up.sql": _1684979808_sync_activity_center_notificationsUpSql,
"README.md": readmeMd,
"doc.go": docGo,
@ -2407,8 +2430,9 @@ var _bintree = &bintree{nil, map[string]*bintree{
"1683725607_mark_discord_messages_as_seen.up.sql": &bintree{_1683725607_mark_discord_messages_as_seenUpSql, map[string]*bintree{}},
"1684174617_add_url_previews_to_user_messages.up.sql": &bintree{_1684174617_add_url_previews_to_user_messagesUpSql, map[string]*bintree{}},
"1684175608_add_token_balances.up.sql": &bintree{_1684175608_add_token_balancesUpSql, map[string]*bintree{}},
"README.md": &bintree{readmeMd, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},
"1684979808_sync_activity_center_notifications.up.sql": &bintree{_1684979808_sync_activity_center_notificationsUpSql, map[string]*bintree{}},
"README.md": &bintree{readmeMd, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},
}}
// RestoreAsset restores an asset under the given directory.

View File

@ -0,0 +1,2 @@
ALTER TABLE activity_center_states ADD COLUMN updated_at INT NOT NULL DEFAULT 0;
ALTER TABLE activity_center_notifications ADD COLUMN updated_at INT NOT NULL DEFAULT 0;

View File

@ -1,19 +1,19 @@
package protocol
func (p *sqlitePersistence) UpsertCollapsedCommunityCategory(category CollapsedCommunityCategory) error {
func (db *sqlitePersistence) UpsertCollapsedCommunityCategory(category CollapsedCommunityCategory) error {
var err error
if category.Collapsed {
_, err = p.db.Exec("INSERT INTO collapsed_community_categories(community_id, category_id) VALUES(?,?)", category.CommunityID, category.CategoryID)
_, err = db.db.Exec("INSERT INTO collapsed_community_categories(community_id, category_id) VALUES(?,?)", category.CommunityID, category.CategoryID)
} else {
_, err = p.db.Exec("DELETE FROM collapsed_community_categories WHERE community_id = ? AND category_id = ?", category.CommunityID, category.CategoryID)
_, err = db.db.Exec("DELETE FROM collapsed_community_categories WHERE community_id = ? AND category_id = ?", category.CommunityID, category.CategoryID)
}
return err
}
func (p *sqlitePersistence) CollapsedCommunityCategories() ([]CollapsedCommunityCategory, error) {
func (db *sqlitePersistence) CollapsedCommunityCategories() ([]CollapsedCommunityCategory, error) {
var categories []CollapsedCommunityCategory
rows, err := p.db.Query(`
rows, err := db.db.Query(`
SELECT
community_id,
category_id

View File

@ -89,6 +89,8 @@ const (
ApplicationMetadataMessage_SYNC_SOCIAL_LINKS ApplicationMetadataMessage_Type = 64
ApplicationMetadataMessage_SYNC_ENS_USERNAME_DETAIL ApplicationMetadataMessage_Type = 65
ApplicationMetadataMessage_SYNC_FULL_KEYPAIR ApplicationMetadataMessage_Type = 66
ApplicationMetadataMessage_SYNC_ACTIVITY_CENTER_NOTIFICATION ApplicationMetadataMessage_Type = 67
ApplicationMetadataMessage_SYNC_ACTIVITY_CENTER_NOTIFICATION_STATE ApplicationMetadataMessage_Type = 68
)
var ApplicationMetadataMessage_Type_name = map[int32]string{
@ -158,6 +160,8 @@ var ApplicationMetadataMessage_Type_name = map[int32]string{
64: "SYNC_SOCIAL_LINKS",
65: "SYNC_ENS_USERNAME_DETAIL",
66: "SYNC_FULL_KEYPAIR",
67: "SYNC_ACTIVITY_CENTER_NOTIFICATION",
68: "SYNC_ACTIVITY_CENTER_NOTIFICATION_STATE",
}
var ApplicationMetadataMessage_Type_value = map[string]int32{
@ -227,6 +231,8 @@ var ApplicationMetadataMessage_Type_value = map[string]int32{
"SYNC_SOCIAL_LINKS": 64,
"SYNC_ENS_USERNAME_DETAIL": 65,
"SYNC_FULL_KEYPAIR": 66,
"SYNC_ACTIVITY_CENTER_NOTIFICATION": 67,
"SYNC_ACTIVITY_CENTER_NOTIFICATION_STATE": 68,
}
func (x ApplicationMetadataMessage_Type) String() string {
@ -305,65 +311,66 @@ func init() {
}
var fileDescriptor_ad09a6406fcf24c7 = []byte{
// 959 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6b, 0x73, 0x53, 0x37,
0x13, 0x7e, 0x03, 0x79, 0x13, 0x50, 0x6e, 0x8a, 0xc8, 0xc5, 0xb9, 0x1b, 0x43, 0x43, 0x80, 0xd6,
0xb4, 0xd0, 0x76, 0xda, 0x52, 0xda, 0xca, 0xd2, 0xc6, 0x16, 0x3e, 0x47, 0x3a, 0x48, 0x3a, 0xee,
0xb8, 0x5f, 0x34, 0xa6, 0xb8, 0x4c, 0x66, 0x80, 0x78, 0x88, 0xf9, 0x90, 0x7f, 0xd8, 0x5f, 0xd1,
0xdf, 0xd2, 0xd1, 0xb9, 0xe8, 0x38, 0x89, 0x53, 0x3e, 0x25, 0xde, 0x7d, 0x76, 0x57, 0xfb, 0xec,
0xb3, 0x7b, 0x50, 0x63, 0x30, 0x1a, 0xbd, 0x3b, 0xf9, 0x73, 0x30, 0x3e, 0x39, 0xfd, 0xe0, 0xde,
0x0f, 0xc7, 0x83, 0x37, 0x83, 0xf1, 0xc0, 0xbd, 0x1f, 0x9e, 0x9d, 0x0d, 0xde, 0x0e, 0x9b, 0xa3,
0x8f, 0xa7, 0xe3, 0x53, 0x72, 0x2b, 0xfb, 0xf3, 0xfa, 0xd3, 0x5f, 0x8d, 0x7f, 0x56, 0xd0, 0x36,
0xad, 0x02, 0xe2, 0x02, 0x1f, 0xe7, 0x70, 0xb2, 0x8b, 0x6e, 0x9f, 0x9d, 0xbc, 0xfd, 0x30, 0x18,
0x7f, 0xfa, 0x38, 0xac, 0xcd, 0xd4, 0x67, 0x8e, 0x16, 0x75, 0x65, 0x20, 0x35, 0x34, 0x3f, 0x1a,
0x9c, 0xbf, 0x3b, 0x1d, 0xbc, 0xa9, 0xdd, 0xc8, 0x7c, 0xe5, 0x4f, 0xf2, 0x02, 0xcd, 0x8e, 0xcf,
0x47, 0xc3, 0xda, 0xcd, 0xfa, 0xcc, 0xd1, 0xf2, 0xd3, 0x87, 0xcd, 0xb2, 0x5e, 0xf3, 0xfa, 0x5a,
0x4d, 0x7b, 0x3e, 0x1a, 0xea, 0x2c, 0xac, 0xf1, 0xf7, 0x32, 0x9a, 0xf5, 0x3f, 0xc9, 0x02, 0x9a,
0x4f, 0x65, 0x57, 0xaa, 0xdf, 0x25, 0xfe, 0x1f, 0xc1, 0x68, 0x91, 0x75, 0xa8, 0x75, 0x31, 0x18,
0x43, 0xdb, 0x80, 0x67, 0x08, 0x41, 0xcb, 0x4c, 0x49, 0x4b, 0x99, 0x75, 0x69, 0xc2, 0xa9, 0x05,
0x7c, 0x83, 0xec, 0xa1, 0xad, 0x18, 0xe2, 0x16, 0x68, 0xd3, 0x11, 0x49, 0x61, 0x0e, 0x21, 0x37,
0xc9, 0x3a, 0x5a, 0x4d, 0xa8, 0xd0, 0x4e, 0x48, 0x63, 0x69, 0x14, 0x51, 0x2b, 0x94, 0xc4, 0xb3,
0xde, 0x6c, 0xfa, 0x92, 0x5d, 0x34, 0xff, 0x9f, 0xdc, 0x43, 0x07, 0x1a, 0x5e, 0xa5, 0x60, 0xac,
0xa3, 0x9c, 0x6b, 0x30, 0xc6, 0x1d, 0x2b, 0xed, 0xac, 0xa6, 0xd2, 0x50, 0x96, 0x81, 0xe6, 0xc8,
0x23, 0x74, 0x48, 0x19, 0x83, 0xc4, 0xba, 0xcf, 0x61, 0xe7, 0xc9, 0x63, 0xf4, 0x80, 0x03, 0x8b,
0x84, 0x84, 0xcf, 0x82, 0x6f, 0x91, 0x4d, 0x74, 0xa7, 0x04, 0x4d, 0x3a, 0x6e, 0x93, 0x35, 0x84,
0x0d, 0x48, 0x7e, 0xc1, 0x8a, 0xc8, 0x01, 0xda, 0xb9, 0x9c, 0x7b, 0x12, 0xb0, 0xe0, 0xa9, 0xb9,
0xd2, 0xa4, 0x2b, 0x08, 0xc4, 0x8b, 0xd3, 0xdd, 0x94, 0x31, 0x95, 0x4a, 0x8b, 0x97, 0xc8, 0x5d,
0xb4, 0x77, 0xd5, 0x9d, 0xa4, 0xad, 0x48, 0x30, 0xe7, 0xe7, 0x82, 0x97, 0xc9, 0x3e, 0xda, 0x2e,
0xe7, 0xc1, 0x14, 0x07, 0x47, 0x79, 0x0f, 0xb4, 0x15, 0x06, 0x62, 0x90, 0x16, 0xaf, 0x90, 0x06,
0xda, 0x4f, 0x52, 0xd3, 0x71, 0x52, 0x59, 0x71, 0x2c, 0x58, 0x9e, 0x42, 0x43, 0x5b, 0x18, 0xab,
0x73, 0xca, 0xb1, 0x67, 0xe8, 0xbf, 0x31, 0x4e, 0x83, 0x49, 0x94, 0x34, 0x80, 0x57, 0xc9, 0x0e,
0xda, 0xbc, 0x0a, 0x7e, 0x95, 0x82, 0xee, 0x63, 0x42, 0xee, 0xa3, 0xfa, 0x35, 0xce, 0x2a, 0xc5,
0x1d, 0xdf, 0xf5, 0xb4, 0x7a, 0x19, 0x7f, 0x78, 0xcd, 0xb7, 0x34, 0xcd, 0x5d, 0x84, 0xaf, 0x7b,
0x09, 0x42, 0xac, 0x5e, 0x0a, 0xa7, 0xa1, 0xe0, 0x79, 0x83, 0x6c, 0xa1, 0xf5, 0xb6, 0x56, 0x69,
0x92, 0xd1, 0xe2, 0x84, 0xec, 0x09, 0x9b, 0x77, 0xb7, 0x49, 0x56, 0xd1, 0x52, 0x6e, 0xe4, 0x20,
0xad, 0xb0, 0x7d, 0x5c, 0xf3, 0x68, 0xa6, 0xe2, 0x38, 0x95, 0xc2, 0xf6, 0x1d, 0x07, 0xc3, 0xb4,
0x48, 0x32, 0xf4, 0x16, 0xa9, 0xa1, 0xb5, 0xca, 0x35, 0x91, 0x67, 0xdb, 0xbf, 0xba, 0xf2, 0x84,
0x69, 0x2b, 0xf7, 0x52, 0x09, 0x89, 0x77, 0xc8, 0x0a, 0x5a, 0x48, 0x84, 0x0c, 0xb2, 0xdf, 0xf5,
0xbb, 0x03, 0x5c, 0x54, 0xbb, 0xb3, 0xe7, 0x5f, 0x62, 0x2c, 0xb5, 0xa9, 0x29, 0x57, 0x67, 0xdf,
0xf7, 0xc2, 0x21, 0x82, 0x89, 0x7d, 0x39, 0xf0, 0xa2, 0x9a, 0xa6, 0x99, 0xa2, 0x34, 0xae, 0x93,
0x6d, 0xb4, 0x41, 0xa5, 0x92, 0xfd, 0x58, 0xa5, 0xc6, 0xc5, 0x60, 0xb5, 0x60, 0xae, 0x45, 0x2d,
0xeb, 0xe0, 0xbb, 0x61, 0xab, 0xb2, 0x96, 0x35, 0xc4, 0xaa, 0x07, 0x1c, 0x37, 0xfc, 0xd4, 0x2a,
0x73, 0x51, 0xca, 0x78, 0x02, 0x39, 0xbe, 0x47, 0x10, 0x9a, 0x6b, 0x51, 0xd6, 0x4d, 0x13, 0x7c,
0x3f, 0x28, 0xd2, 0x33, 0xdb, 0xf3, 0x9d, 0x32, 0x90, 0x16, 0x74, 0x0e, 0xfd, 0x22, 0x28, 0xf2,
0xb2, 0x3b, 0xdf, 0x46, 0xe0, 0xf8, 0xd0, 0x2b, 0x6e, 0x2a, 0x84, 0x0b, 0x13, 0x0b, 0x63, 0x80,
0xe3, 0x07, 0x19, 0x13, 0x1e, 0xd3, 0x52, 0xaa, 0x1b, 0x53, 0xdd, 0xc5, 0x47, 0x64, 0x03, 0x91,
0xfc, 0x85, 0x11, 0x50, 0xed, 0x3a, 0xc2, 0x58, 0xa5, 0xfb, 0xf8, 0xa1, 0xa7, 0x31, 0xb3, 0x1b,
0xb0, 0x56, 0xc8, 0x36, 0x7e, 0x44, 0xea, 0x68, 0xb7, 0x1a, 0x04, 0xd5, 0xac, 0x23, 0x7a, 0xe0,
0x62, 0xda, 0x96, 0x60, 0x23, 0x21, 0xbb, 0xf8, 0xb1, 0x1f, 0x62, 0x16, 0x93, 0x68, 0x75, 0x2c,
0x22, 0x70, 0x89, 0x60, 0x36, 0xd5, 0x80, 0xbf, 0x0c, 0xd9, 0xca, 0x1d, 0xfb, 0x2a, 0x23, 0x33,
0x3f, 0x25, 0xe5, 0x1e, 0x95, 0x4a, 0x6c, 0x7a, 0xd6, 0x34, 0x58, 0x9d, 0x2f, 0xd7, 0x45, 0xe7,
0x13, 0x72, 0x88, 0x1a, 0xd7, 0xea, 0xa1, 0x92, 0xeb, 0xd7, 0x15, 0xf5, 0x01, 0x5c, 0xb4, 0x62,
0xf0, 0x37, 0xbe, 0x97, 0x32, 0xb4, 0xac, 0xd0, 0x03, 0x1d, 0x64, 0x8f, 0x9f, 0x7a, 0x35, 0x5c,
0x7a, 0xdf, 0x05, 0xc0, 0x33, 0x9f, 0xa2, 0xbc, 0x41, 0x53, 0x11, 0xdf, 0x06, 0x4d, 0x58, 0x9d,
0x1a, 0x0b, 0xdc, 0xa5, 0x06, 0x34, 0xfe, 0x2e, 0x8c, 0x7a, 0x12, 0x1d, 0xfa, 0xfb, 0x3e, 0x8c,
0xfa, 0x52, 0xe7, 0x8e, 0x03, 0x13, 0xc6, 0x27, 0xfe, 0x21, 0x3f, 0x3e, 0x53, 0x28, 0x88, 0x80,
0xf6, 0x00, 0xff, 0xe8, 0xfd, 0x59, 0x8a, 0x42, 0xe2, 0xfe, 0xdc, 0xc6, 0x95, 0xd2, 0x7f, 0x0a,
0x33, 0x37, 0xb4, 0x07, 0xbc, 0xbc, 0xca, 0xf8, 0xb9, 0x3f, 0x23, 0x55, 0x5e, 0x46, 0x25, 0x83,
0xe8, 0xca, 0xc6, 0xfd, 0xec, 0x99, 0x29, 0x7c, 0x53, 0xfb, 0x7e, 0x11, 0x86, 0xdd, 0x85, 0xbe,
0xff, 0x00, 0xe1, 0x5f, 0xfc, 0x79, 0x2f, 0x2d, 0x8c, 0x6a, 0xee, 0x8a, 0xfb, 0xf1, 0x6b, 0xa0,
0xc8, 0x28, 0x26, 0x68, 0xe4, 0xbc, 0x8e, 0x0c, 0xfe, 0x8d, 0xec, 0xa2, 0x5a, 0x66, 0x06, 0x69,
0x32, 0xd6, 0x24, 0x8d, 0xc1, 0x71, 0xb0, 0x54, 0x44, 0x98, 0x86, 0xa0, 0xe3, 0x34, 0x8a, 0x42,
0x91, 0x56, 0x6b, 0xe9, 0x8f, 0x85, 0xe6, 0x93, 0xe7, 0xe5, 0xf7, 0xf7, 0xf5, 0x5c, 0xf6, 0xdf,
0xb3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xbf, 0xf4, 0x92, 0x26, 0x08, 0x00, 0x00,
// 976 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6d, 0x73, 0x13, 0x37,
0x10, 0x6e, 0x20, 0x4d, 0x40, 0x79, 0x53, 0x44, 0x5e, 0x9c, 0x77, 0xc7, 0x40, 0x08, 0xd0, 0x9a,
0x16, 0xda, 0x4e, 0x5b, 0x4a, 0x5b, 0x59, 0xda, 0xd8, 0xc2, 0x77, 0xd2, 0x21, 0xe9, 0xdc, 0x71,
0xbf, 0x68, 0x4c, 0x71, 0x99, 0xcc, 0x00, 0xf1, 0x10, 0xe7, 0x43, 0xfe, 0x4b, 0x7f, 0x45, 0x7f,
0x61, 0x47, 0xf7, 0xea, 0x24, 0x97, 0xe6, 0x53, 0xe2, 0xdd, 0x67, 0x77, 0xb5, 0xcf, 0x3e, 0xbb,
0x87, 0x1a, 0x83, 0xd1, 0xe8, 0xc3, 0xf1, 0x5f, 0x83, 0xf1, 0xf1, 0xc9, 0x27, 0xf7, 0x71, 0x38,
0x1e, 0xbc, 0x1b, 0x8c, 0x07, 0xee, 0xe3, 0xf0, 0xf4, 0x74, 0xf0, 0x7e, 0xd8, 0x1c, 0x7d, 0x3e,
0x19, 0x9f, 0x90, 0x3b, 0xc9, 0x9f, 0xb7, 0x67, 0x7f, 0x37, 0xfe, 0xc5, 0x68, 0x93, 0x96, 0x01,
0x61, 0x86, 0x0f, 0x53, 0x38, 0xd9, 0x46, 0x77, 0x4f, 0x8f, 0xdf, 0x7f, 0x1a, 0x8c, 0xcf, 0x3e,
0x0f, 0x6b, 0x53, 0xf5, 0xa9, 0xc3, 0x79, 0x5d, 0x1a, 0x48, 0x0d, 0xcd, 0x8e, 0x06, 0xe7, 0x1f,
0x4e, 0x06, 0xef, 0x6a, 0xb7, 0x12, 0x5f, 0xfe, 0x93, 0xbc, 0x42, 0xd3, 0xe3, 0xf3, 0xd1, 0xb0,
0x76, 0xbb, 0x3e, 0x75, 0xb8, 0xf8, 0xfc, 0x71, 0x33, 0xaf, 0xd7, 0xbc, 0xbe, 0x56, 0xd3, 0x9e,
0x8f, 0x86, 0x3a, 0x09, 0x6b, 0xfc, 0xb3, 0x84, 0xa6, 0xfd, 0x4f, 0x32, 0x87, 0x66, 0x63, 0xd9,
0x95, 0xea, 0x0f, 0x89, 0xbf, 0x20, 0x18, 0xcd, 0xb3, 0x0e, 0xb5, 0x2e, 0x04, 0x63, 0x68, 0x1b,
0xf0, 0x14, 0x21, 0x68, 0x91, 0x29, 0x69, 0x29, 0xb3, 0x2e, 0x8e, 0x38, 0xb5, 0x80, 0x6f, 0x91,
0x1d, 0xb4, 0x11, 0x42, 0xd8, 0x02, 0x6d, 0x3a, 0x22, 0xca, 0xcc, 0x45, 0xc8, 0x6d, 0xb2, 0x8a,
0x96, 0x23, 0x2a, 0xb4, 0x13, 0xd2, 0x58, 0x1a, 0x04, 0xd4, 0x0a, 0x25, 0xf1, 0xb4, 0x37, 0x9b,
0xbe, 0x64, 0x17, 0xcd, 0x5f, 0x92, 0xfb, 0x68, 0x4f, 0xc3, 0x9b, 0x18, 0x8c, 0x75, 0x94, 0x73,
0x0d, 0xc6, 0xb8, 0x23, 0xa5, 0x9d, 0xd5, 0x54, 0x1a, 0xca, 0x12, 0xd0, 0x0c, 0x79, 0x82, 0x0e,
0x28, 0x63, 0x10, 0x59, 0x77, 0x13, 0x76, 0x96, 0x3c, 0x45, 0x8f, 0x38, 0xb0, 0x40, 0x48, 0xb8,
0x11, 0x7c, 0x87, 0xac, 0xa3, 0x7b, 0x39, 0x68, 0xd2, 0x71, 0x97, 0xac, 0x20, 0x6c, 0x40, 0xf2,
0x0b, 0x56, 0x44, 0xf6, 0xd0, 0xd6, 0xe5, 0xdc, 0x93, 0x80, 0x39, 0x4f, 0xcd, 0x95, 0x26, 0x5d,
0x46, 0x20, 0x9e, 0xaf, 0x76, 0x53, 0xc6, 0x54, 0x2c, 0x2d, 0x5e, 0x20, 0xfb, 0x68, 0xe7, 0xaa,
0x3b, 0x8a, 0x5b, 0x81, 0x60, 0xce, 0xcf, 0x05, 0x2f, 0x92, 0x5d, 0xb4, 0x99, 0xcf, 0x83, 0x29,
0x0e, 0x8e, 0xf2, 0x1e, 0x68, 0x2b, 0x0c, 0x84, 0x20, 0x2d, 0x5e, 0x22, 0x0d, 0xb4, 0x1b, 0xc5,
0xa6, 0xe3, 0xa4, 0xb2, 0xe2, 0x48, 0xb0, 0x34, 0x85, 0x86, 0xb6, 0x30, 0x56, 0xa7, 0x94, 0x63,
0xcf, 0xd0, 0xff, 0x63, 0x9c, 0x06, 0x13, 0x29, 0x69, 0x00, 0x2f, 0x93, 0x2d, 0xb4, 0x7e, 0x15,
0xfc, 0x26, 0x06, 0xdd, 0xc7, 0x84, 0x3c, 0x40, 0xf5, 0x6b, 0x9c, 0x65, 0x8a, 0x7b, 0xbe, 0xeb,
0xaa, 0x7a, 0x09, 0x7f, 0x78, 0xc5, 0xb7, 0x54, 0xe5, 0xce, 0xc2, 0x57, 0xbd, 0x04, 0x21, 0x54,
0xaf, 0x85, 0xd3, 0x90, 0xf1, 0xbc, 0x46, 0x36, 0xd0, 0x6a, 0x5b, 0xab, 0x38, 0x4a, 0x68, 0x71,
0x42, 0xf6, 0x84, 0x4d, 0xbb, 0x5b, 0x27, 0xcb, 0x68, 0x21, 0x35, 0x72, 0x90, 0x56, 0xd8, 0x3e,
0xae, 0x79, 0x34, 0x53, 0x61, 0x18, 0x4b, 0x61, 0xfb, 0x8e, 0x83, 0x61, 0x5a, 0x44, 0x09, 0x7a,
0x83, 0xd4, 0xd0, 0x4a, 0xe9, 0x9a, 0xc8, 0xb3, 0xe9, 0x5f, 0x5d, 0x7a, 0x8a, 0x69, 0x2b, 0xf7,
0x5a, 0x09, 0x89, 0xb7, 0xc8, 0x12, 0x9a, 0x8b, 0x84, 0x2c, 0x64, 0xbf, 0xed, 0x77, 0x07, 0xb8,
0x28, 0x77, 0x67, 0xc7, 0xbf, 0xc4, 0x58, 0x6a, 0x63, 0x93, 0xaf, 0xce, 0xae, 0xef, 0x85, 0x43,
0x00, 0x13, 0xfb, 0xb2, 0xe7, 0x45, 0x55, 0xa5, 0x99, 0xac, 0x34, 0xae, 0x93, 0x4d, 0xb4, 0x46,
0xa5, 0x92, 0xfd, 0x50, 0xc5, 0xc6, 0x85, 0x60, 0xb5, 0x60, 0xae, 0x45, 0x2d, 0xeb, 0xe0, 0xfd,
0x62, 0xab, 0x92, 0x96, 0x35, 0x84, 0xaa, 0x07, 0x1c, 0x37, 0xfc, 0xd4, 0x4a, 0x73, 0x56, 0xca,
0x78, 0x02, 0x39, 0xbe, 0x4f, 0x10, 0x9a, 0x69, 0x51, 0xd6, 0x8d, 0x23, 0xfc, 0xa0, 0x50, 0xa4,
0x67, 0xb6, 0xe7, 0x3b, 0x65, 0x20, 0x2d, 0xe8, 0x14, 0xfa, 0xb0, 0x50, 0xe4, 0x65, 0x77, 0xba,
0x8d, 0xc0, 0xf1, 0x81, 0x57, 0x5c, 0x25, 0x84, 0x0b, 0x13, 0x0a, 0x63, 0x80, 0xe3, 0x47, 0x09,
0x13, 0x1e, 0xd3, 0x52, 0xaa, 0x1b, 0x52, 0xdd, 0xc5, 0x87, 0x64, 0x0d, 0x91, 0xf4, 0x85, 0x01,
0x50, 0xed, 0x3a, 0xc2, 0x58, 0xa5, 0xfb, 0xf8, 0xb1, 0xa7, 0x31, 0xb1, 0x1b, 0xb0, 0x56, 0xc8,
0x36, 0x7e, 0x42, 0xea, 0x68, 0xbb, 0x1c, 0x04, 0xd5, 0xac, 0x23, 0x7a, 0xe0, 0x42, 0xda, 0x96,
0x60, 0x03, 0x21, 0xbb, 0xf8, 0xa9, 0x1f, 0x62, 0x12, 0x13, 0x69, 0x75, 0x24, 0x02, 0x70, 0x91,
0x60, 0x36, 0xd6, 0x80, 0xbf, 0x2a, 0xb2, 0xe5, 0x3b, 0xf6, 0x75, 0x42, 0x66, 0x7a, 0x4a, 0xf2,
0x3d, 0xca, 0x95, 0xd8, 0xf4, 0xac, 0x69, 0xb0, 0x3a, 0x5d, 0xae, 0x8b, 0xce, 0x67, 0xe4, 0x00,
0x35, 0xae, 0xd5, 0x43, 0x29, 0xd7, 0x6f, 0x4a, 0xea, 0x0b, 0x70, 0xd6, 0x8a, 0xc1, 0xdf, 0xfa,
0x5e, 0xf2, 0xd0, 0xbc, 0x42, 0x0f, 0x74, 0x21, 0x7b, 0xfc, 0xdc, 0xab, 0xe1, 0xd2, 0xfb, 0x2e,
0x00, 0x5e, 0xf8, 0x14, 0xf9, 0x0d, 0xaa, 0x44, 0x7c, 0x57, 0x68, 0xc2, 0xea, 0xd8, 0x58, 0xe0,
0x2e, 0x36, 0xa0, 0xf1, 0xf7, 0xc5, 0xa8, 0x27, 0xd1, 0x45, 0x7f, 0x3f, 0x14, 0xa3, 0xbe, 0xd4,
0xb9, 0xe3, 0xc0, 0x84, 0xf1, 0x89, 0x7f, 0x4c, 0x8f, 0x4f, 0x05, 0x05, 0x01, 0xd0, 0x1e, 0xe0,
0x9f, 0xbc, 0x3f, 0x49, 0x91, 0x49, 0xdc, 0x9f, 0xdb, 0xb0, 0x54, 0xfa, 0xcf, 0xc5, 0xcc, 0x0d,
0xed, 0x01, 0xcf, 0xaf, 0x32, 0x7e, 0xe9, 0xcf, 0x48, 0x99, 0x97, 0x51, 0xc9, 0x20, 0xb8, 0xb2,
0x71, 0xbf, 0x78, 0x66, 0x32, 0x5f, 0x65, 0xdf, 0xaf, 0x8a, 0x61, 0x77, 0xa1, 0xef, 0x3f, 0x40,
0xf8, 0x57, 0x7f, 0xde, 0x73, 0x0b, 0xa3, 0x9a, 0xbb, 0xec, 0x7e, 0xfc, 0x56, 0x50, 0x64, 0x14,
0x13, 0x34, 0x70, 0x5e, 0x47, 0x06, 0xff, 0x4e, 0xb6, 0x51, 0x2d, 0x31, 0x83, 0x34, 0x09, 0x6b,
0x92, 0x86, 0xe0, 0x38, 0x58, 0x2a, 0x02, 0x4c, 0x8b, 0xa0, 0xa3, 0x38, 0x08, 0x8a, 0x22, 0x2d,
0xf2, 0x10, 0xed, 0x57, 0x2e, 0xc0, 0xe4, 0x3d, 0xc3, 0xcc, 0x5f, 0xdd, 0x1b, 0x61, 0xce, 0xdf,
0x0b, 0xc0, 0xbc, 0xb5, 0xf0, 0xe7, 0x5c, 0xf3, 0xd9, 0xcb, 0xfc, 0x9b, 0xfe, 0x76, 0x26, 0xf9,
0xef, 0xc5, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x53, 0x02, 0xd0, 0x7a, 0x08, 0x00, 0x00,
}

View File

@ -79,5 +79,7 @@ message ApplicationMetadataMessage {
SYNC_SOCIAL_LINKS = 64;
SYNC_ENS_USERNAME_DETAIL = 65;
SYNC_FULL_KEYPAIR = 66;
SYNC_ACTIVITY_CENTER_NOTIFICATION = 67;
SYNC_ACTIVITY_CENTER_NOTIFICATION_STATE = 68;
}
}

View File

@ -20,6 +20,129 @@ var _ = math.Inf
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type SyncActivityCenterNotification_NotificationType int32
const (
SyncActivityCenterNotification_NoType SyncActivityCenterNotification_NotificationType = 0
SyncActivityCenterNotification_NewOneToOne SyncActivityCenterNotification_NotificationType = 1
SyncActivityCenterNotification_NewPrivateGroupChat SyncActivityCenterNotification_NotificationType = 2
SyncActivityCenterNotification_Mention SyncActivityCenterNotification_NotificationType = 3
SyncActivityCenterNotification_Reply SyncActivityCenterNotification_NotificationType = 4
SyncActivityCenterNotification_ContactRequest SyncActivityCenterNotification_NotificationType = 5
SyncActivityCenterNotification_CommunityInvitation SyncActivityCenterNotification_NotificationType = 6
SyncActivityCenterNotification_CommunityRequest SyncActivityCenterNotification_NotificationType = 7
SyncActivityCenterNotification_CommunityMembershipRequest SyncActivityCenterNotification_NotificationType = 8
SyncActivityCenterNotification_CommunityKicked SyncActivityCenterNotification_NotificationType = 9
SyncActivityCenterNotification_ContactVerification SyncActivityCenterNotification_NotificationType = 10
)
var SyncActivityCenterNotification_NotificationType_name = map[int32]string{
0: "NoType",
1: "NewOneToOne",
2: "NewPrivateGroupChat",
3: "Mention",
4: "Reply",
5: "ContactRequest",
6: "CommunityInvitation",
7: "CommunityRequest",
8: "CommunityMembershipRequest",
9: "CommunityKicked",
10: "ContactVerification",
}
var SyncActivityCenterNotification_NotificationType_value = map[string]int32{
"NoType": 0,
"NewOneToOne": 1,
"NewPrivateGroupChat": 2,
"Mention": 3,
"Reply": 4,
"ContactRequest": 5,
"CommunityInvitation": 6,
"CommunityRequest": 7,
"CommunityMembershipRequest": 8,
"CommunityKicked": 9,
"ContactVerification": 10,
}
func (x SyncActivityCenterNotification_NotificationType) String() string {
return proto.EnumName(SyncActivityCenterNotification_NotificationType_name, int32(x))
}
func (SyncActivityCenterNotification_NotificationType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20, 0}
}
type SyncActivityCenterNotification_MembershipStatus int32
const (
SyncActivityCenterNotification_MembershipStatusIdle SyncActivityCenterNotification_MembershipStatus = 0
SyncActivityCenterNotification_MembershipStatusPending SyncActivityCenterNotification_MembershipStatus = 1
SyncActivityCenterNotification_MembershipStatusAccepted SyncActivityCenterNotification_MembershipStatus = 2
SyncActivityCenterNotification_MembershipStatusDeclined SyncActivityCenterNotification_MembershipStatus = 3
)
var SyncActivityCenterNotification_MembershipStatus_name = map[int32]string{
0: "MembershipStatusIdle",
1: "MembershipStatusPending",
2: "MembershipStatusAccepted",
3: "MembershipStatusDeclined",
}
var SyncActivityCenterNotification_MembershipStatus_value = map[string]int32{
"MembershipStatusIdle": 0,
"MembershipStatusPending": 1,
"MembershipStatusAccepted": 2,
"MembershipStatusDeclined": 3,
}
func (x SyncActivityCenterNotification_MembershipStatus) String() string {
return proto.EnumName(SyncActivityCenterNotification_MembershipStatus_name, int32(x))
}
func (SyncActivityCenterNotification_MembershipStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20, 1}
}
type SyncActivityCenterNotification_ContactVerificationStatus int32
const (
SyncActivityCenterNotification_Unknown SyncActivityCenterNotification_ContactVerificationStatus = 0
SyncActivityCenterNotification_Pending SyncActivityCenterNotification_ContactVerificationStatus = 1
SyncActivityCenterNotification_Accepted SyncActivityCenterNotification_ContactVerificationStatus = 2
SyncActivityCenterNotification_Declined SyncActivityCenterNotification_ContactVerificationStatus = 3
SyncActivityCenterNotification_Cancelled SyncActivityCenterNotification_ContactVerificationStatus = 4
SyncActivityCenterNotification_Trusted SyncActivityCenterNotification_ContactVerificationStatus = 5
SyncActivityCenterNotification_UnTrustWorthy SyncActivityCenterNotification_ContactVerificationStatus = 6
)
var SyncActivityCenterNotification_ContactVerificationStatus_name = map[int32]string{
0: "Unknown",
1: "Pending",
2: "Accepted",
3: "Declined",
4: "Cancelled",
5: "Trusted",
6: "UnTrustWorthy",
}
var SyncActivityCenterNotification_ContactVerificationStatus_value = map[string]int32{
"Unknown": 0,
"Pending": 1,
"Accepted": 2,
"Declined": 3,
"Cancelled": 4,
"Trusted": 5,
"UnTrustWorthy": 6,
}
func (x SyncActivityCenterNotification_ContactVerificationStatus) String() string {
return proto.EnumName(SyncActivityCenterNotification_ContactVerificationStatus_name, int32(x))
}
func (SyncActivityCenterNotification_ContactVerificationStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20, 2}
}
type SyncTrustedUser_TrustStatus int32
const (
@ -45,7 +168,7 @@ func (x SyncTrustedUser_TrustStatus) String() string {
}
func (SyncTrustedUser_TrustStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{28, 0}
return fileDescriptor_d61ab7221f0b5518, []int{31, 0}
}
type SyncVerificationRequest_VerificationStatus int32
@ -79,7 +202,7 @@ func (x SyncVerificationRequest_VerificationStatus) String() string {
}
func (SyncVerificationRequest_VerificationStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{29, 0}
return fileDescriptor_d61ab7221f0b5518, []int{32, 0}
}
type SyncContactRequestDecision_DecisionStatus int32
@ -104,7 +227,7 @@ func (x SyncContactRequestDecision_DecisionStatus) String() string {
}
func (SyncContactRequestDecision_DecisionStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{30, 0}
return fileDescriptor_d61ab7221f0b5518, []int{33, 0}
}
type SyncKeycardAction_Action int32
@ -147,7 +270,7 @@ func (x SyncKeycardAction_Action) String() string {
}
func (SyncKeycardAction_Action) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{35, 0}
return fileDescriptor_d61ab7221f0b5518, []int{38, 0}
}
// `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of
@ -1717,6 +1840,243 @@ func (m *SyncActivityCenterDismissed) GetIds() [][]byte {
return nil
}
type SyncActivityCenterNotificationState struct {
UpdatedAt uint64 `protobuf:"varint,1,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
HasSeen bool `protobuf:"varint,2,opt,name=has_seen,json=hasSeen,proto3" json:"has_seen,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SyncActivityCenterNotificationState) Reset() { *m = SyncActivityCenterNotificationState{} }
func (m *SyncActivityCenterNotificationState) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterNotificationState) ProtoMessage() {}
func (*SyncActivityCenterNotificationState) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{18}
}
func (m *SyncActivityCenterNotificationState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SyncActivityCenterNotificationState.Unmarshal(m, b)
}
func (m *SyncActivityCenterNotificationState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SyncActivityCenterNotificationState.Marshal(b, m, deterministic)
}
func (m *SyncActivityCenterNotificationState) XXX_Merge(src proto.Message) {
xxx_messageInfo_SyncActivityCenterNotificationState.Merge(m, src)
}
func (m *SyncActivityCenterNotificationState) XXX_Size() int {
return xxx_messageInfo_SyncActivityCenterNotificationState.Size(m)
}
func (m *SyncActivityCenterNotificationState) XXX_DiscardUnknown() {
xxx_messageInfo_SyncActivityCenterNotificationState.DiscardUnknown(m)
}
var xxx_messageInfo_SyncActivityCenterNotificationState proto.InternalMessageInfo
func (m *SyncActivityCenterNotificationState) GetUpdatedAt() uint64 {
if m != nil {
return m.UpdatedAt
}
return 0
}
func (m *SyncActivityCenterNotificationState) GetHasSeen() bool {
if m != nil {
return m.HasSeen
}
return false
}
type SyncActivityCenterNotifications struct {
ActivityCenterNotifications []*SyncActivityCenterNotification `protobuf:"bytes,1,rep,name=activity_center_notifications,json=activityCenterNotifications,proto3" json:"activity_center_notifications,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SyncActivityCenterNotifications) Reset() { *m = SyncActivityCenterNotifications{} }
func (m *SyncActivityCenterNotifications) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterNotifications) ProtoMessage() {}
func (*SyncActivityCenterNotifications) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{19}
}
func (m *SyncActivityCenterNotifications) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SyncActivityCenterNotifications.Unmarshal(m, b)
}
func (m *SyncActivityCenterNotifications) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SyncActivityCenterNotifications.Marshal(b, m, deterministic)
}
func (m *SyncActivityCenterNotifications) XXX_Merge(src proto.Message) {
xxx_messageInfo_SyncActivityCenterNotifications.Merge(m, src)
}
func (m *SyncActivityCenterNotifications) XXX_Size() int {
return xxx_messageInfo_SyncActivityCenterNotifications.Size(m)
}
func (m *SyncActivityCenterNotifications) XXX_DiscardUnknown() {
xxx_messageInfo_SyncActivityCenterNotifications.DiscardUnknown(m)
}
var xxx_messageInfo_SyncActivityCenterNotifications proto.InternalMessageInfo
func (m *SyncActivityCenterNotifications) GetActivityCenterNotifications() []*SyncActivityCenterNotification {
if m != nil {
return m.ActivityCenterNotifications
}
return nil
}
type SyncActivityCenterNotification struct {
Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
NotificationType SyncActivityCenterNotification_NotificationType `protobuf:"varint,3,opt,name=notification_type,json=notificationType,proto3,enum=protobuf.SyncActivityCenterNotification_NotificationType" json:"notification_type,omitempty"`
ChatId string `protobuf:"bytes,4,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
Read bool `protobuf:"varint,5,opt,name=read,proto3" json:"read,omitempty"`
Dismissed bool `protobuf:"varint,6,opt,name=dismissed,proto3" json:"dismissed,omitempty"`
Accepted bool `protobuf:"varint,7,opt,name=accepted,proto3" json:"accepted,omitempty"`
Message []byte `protobuf:"bytes,8,opt,name=message,proto3" json:"message,omitempty"`
Author string `protobuf:"bytes,9,opt,name=author,proto3" json:"author,omitempty"`
ReplyMessage []byte `protobuf:"bytes,10,opt,name=reply_message,json=replyMessage,proto3" json:"reply_message,omitempty"`
CommunityId string `protobuf:"bytes,11,opt,name=community_id,json=communityId,proto3" json:"community_id,omitempty"`
MembershipStatus SyncActivityCenterNotification_MembershipStatus `protobuf:"varint,12,opt,name=membership_status,json=membershipStatus,proto3,enum=protobuf.SyncActivityCenterNotification_MembershipStatus" json:"membership_status,omitempty"`
ContactVerificationStatus SyncActivityCenterNotification_ContactVerificationStatus `protobuf:"varint,13,opt,name=contact_verification_status,json=contactVerificationStatus,proto3,enum=protobuf.SyncActivityCenterNotification_ContactVerificationStatus" json:"contact_verification_status,omitempty"`
Deleted bool `protobuf:"varint,14,opt,name=deleted,proto3" json:"deleted,omitempty"`
UpdatedAt uint64 `protobuf:"varint,15,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SyncActivityCenterNotification) Reset() { *m = SyncActivityCenterNotification{} }
func (m *SyncActivityCenterNotification) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterNotification) ProtoMessage() {}
func (*SyncActivityCenterNotification) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20}
}
func (m *SyncActivityCenterNotification) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SyncActivityCenterNotification.Unmarshal(m, b)
}
func (m *SyncActivityCenterNotification) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SyncActivityCenterNotification.Marshal(b, m, deterministic)
}
func (m *SyncActivityCenterNotification) XXX_Merge(src proto.Message) {
xxx_messageInfo_SyncActivityCenterNotification.Merge(m, src)
}
func (m *SyncActivityCenterNotification) XXX_Size() int {
return xxx_messageInfo_SyncActivityCenterNotification.Size(m)
}
func (m *SyncActivityCenterNotification) XXX_DiscardUnknown() {
xxx_messageInfo_SyncActivityCenterNotification.DiscardUnknown(m)
}
var xxx_messageInfo_SyncActivityCenterNotification proto.InternalMessageInfo
func (m *SyncActivityCenterNotification) GetId() []byte {
if m != nil {
return m.Id
}
return nil
}
func (m *SyncActivityCenterNotification) GetTimestamp() uint64 {
if m != nil {
return m.Timestamp
}
return 0
}
func (m *SyncActivityCenterNotification) GetNotificationType() SyncActivityCenterNotification_NotificationType {
if m != nil {
return m.NotificationType
}
return SyncActivityCenterNotification_NoType
}
func (m *SyncActivityCenterNotification) GetChatId() string {
if m != nil {
return m.ChatId
}
return ""
}
func (m *SyncActivityCenterNotification) GetRead() bool {
if m != nil {
return m.Read
}
return false
}
func (m *SyncActivityCenterNotification) GetDismissed() bool {
if m != nil {
return m.Dismissed
}
return false
}
func (m *SyncActivityCenterNotification) GetAccepted() bool {
if m != nil {
return m.Accepted
}
return false
}
func (m *SyncActivityCenterNotification) GetMessage() []byte {
if m != nil {
return m.Message
}
return nil
}
func (m *SyncActivityCenterNotification) GetAuthor() string {
if m != nil {
return m.Author
}
return ""
}
func (m *SyncActivityCenterNotification) GetReplyMessage() []byte {
if m != nil {
return m.ReplyMessage
}
return nil
}
func (m *SyncActivityCenterNotification) GetCommunityId() string {
if m != nil {
return m.CommunityId
}
return ""
}
func (m *SyncActivityCenterNotification) GetMembershipStatus() SyncActivityCenterNotification_MembershipStatus {
if m != nil {
return m.MembershipStatus
}
return SyncActivityCenterNotification_MembershipStatusIdle
}
func (m *SyncActivityCenterNotification) GetContactVerificationStatus() SyncActivityCenterNotification_ContactVerificationStatus {
if m != nil {
return m.ContactVerificationStatus
}
return SyncActivityCenterNotification_Unknown
}
func (m *SyncActivityCenterNotification) GetDeleted() bool {
if m != nil {
return m.Deleted
}
return false
}
func (m *SyncActivityCenterNotification) GetUpdatedAt() uint64 {
if m != nil {
return m.UpdatedAt
}
return 0
}
type SyncBookmark struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
@ -1733,7 +2093,7 @@ func (m *SyncBookmark) Reset() { *m = SyncBookmark{} }
func (m *SyncBookmark) String() string { return proto.CompactTextString(m) }
func (*SyncBookmark) ProtoMessage() {}
func (*SyncBookmark) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{18}
return fileDescriptor_d61ab7221f0b5518, []int{21}
}
func (m *SyncBookmark) XXX_Unmarshal(b []byte) error {
@ -1810,7 +2170,7 @@ func (m *SyncEnsUsernameDetail) Reset() { *m = SyncEnsUsernameDetail{} }
func (m *SyncEnsUsernameDetail) String() string { return proto.CompactTextString(m) }
func (*SyncEnsUsernameDetail) ProtoMessage() {}
func (*SyncEnsUsernameDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{19}
return fileDescriptor_d61ab7221f0b5518, []int{22}
}
func (m *SyncEnsUsernameDetail) XXX_Unmarshal(b []byte) error {
@ -1871,7 +2231,7 @@ func (m *SyncClearHistory) Reset() { *m = SyncClearHistory{} }
func (m *SyncClearHistory) String() string { return proto.CompactTextString(m) }
func (*SyncClearHistory) ProtoMessage() {}
func (*SyncClearHistory) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20}
return fileDescriptor_d61ab7221f0b5518, []int{23}
}
func (m *SyncClearHistory) XXX_Unmarshal(b []byte) error {
@ -1923,7 +2283,7 @@ func (m *SyncProfilePicture) Reset() { *m = SyncProfilePicture{} }
func (m *SyncProfilePicture) String() string { return proto.CompactTextString(m) }
func (*SyncProfilePicture) ProtoMessage() {}
func (*SyncProfilePicture) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{21}
return fileDescriptor_d61ab7221f0b5518, []int{24}
}
func (m *SyncProfilePicture) XXX_Unmarshal(b []byte) error {
@ -2005,7 +2365,7 @@ func (m *SyncProfilePictures) Reset() { *m = SyncProfilePictures{} }
func (m *SyncProfilePictures) String() string { return proto.CompactTextString(m) }
func (*SyncProfilePictures) ProtoMessage() {}
func (*SyncProfilePictures) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{22}
return fileDescriptor_d61ab7221f0b5518, []int{25}
}
func (m *SyncProfilePictures) XXX_Unmarshal(b []byte) error {
@ -2062,7 +2422,7 @@ func (m *SyncAccount) Reset() { *m = SyncAccount{} }
func (m *SyncAccount) String() string { return proto.CompactTextString(m) }
func (*SyncAccount) ProtoMessage() {}
func (*SyncAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{23}
return fileDescriptor_d61ab7221f0b5518, []int{26}
}
func (m *SyncAccount) XXX_Unmarshal(b []byte) error {
@ -2185,7 +2545,7 @@ func (m *SyncKeypair) Reset() { *m = SyncKeypair{} }
func (m *SyncKeypair) String() string { return proto.CompactTextString(m) }
func (*SyncKeypair) ProtoMessage() {}
func (*SyncKeypair) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{24}
return fileDescriptor_d61ab7221f0b5518, []int{27}
}
func (m *SyncKeypair) XXX_Unmarshal(b []byte) error {
@ -2274,7 +2634,7 @@ func (m *SyncKeypairFull) Reset() { *m = SyncKeypairFull{} }
func (m *SyncKeypairFull) String() string { return proto.CompactTextString(m) }
func (*SyncKeypairFull) ProtoMessage() {}
func (*SyncKeypairFull) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{25}
return fileDescriptor_d61ab7221f0b5518, []int{28}
}
func (m *SyncKeypairFull) XXX_Unmarshal(b []byte) error {
@ -2327,7 +2687,7 @@ func (m *SyncSavedAddress) Reset() { *m = SyncSavedAddress{} }
func (m *SyncSavedAddress) String() string { return proto.CompactTextString(m) }
func (*SyncSavedAddress) ProtoMessage() {}
func (*SyncSavedAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{26}
return fileDescriptor_d61ab7221f0b5518, []int{29}
}
func (m *SyncSavedAddress) XXX_Unmarshal(b []byte) error {
@ -2417,7 +2777,7 @@ func (m *SyncCommunitySettings) Reset() { *m = SyncCommunitySettings{} }
func (m *SyncCommunitySettings) String() string { return proto.CompactTextString(m) }
func (*SyncCommunitySettings) ProtoMessage() {}
func (*SyncCommunitySettings) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{27}
return fileDescriptor_d61ab7221f0b5518, []int{30}
}
func (m *SyncCommunitySettings) XXX_Unmarshal(b []byte) error {
@ -2472,7 +2832,7 @@ func (m *SyncTrustedUser) Reset() { *m = SyncTrustedUser{} }
func (m *SyncTrustedUser) String() string { return proto.CompactTextString(m) }
func (*SyncTrustedUser) ProtoMessage() {}
func (*SyncTrustedUser) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{28}
return fileDescriptor_d61ab7221f0b5518, []int{31}
}
func (m *SyncTrustedUser) XXX_Unmarshal(b []byte) error {
@ -2533,7 +2893,7 @@ func (m *SyncVerificationRequest) Reset() { *m = SyncVerificationRequest
func (m *SyncVerificationRequest) String() string { return proto.CompactTextString(m) }
func (*SyncVerificationRequest) ProtoMessage() {}
func (*SyncVerificationRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{29}
return fileDescriptor_d61ab7221f0b5518, []int{32}
}
func (m *SyncVerificationRequest) XXX_Unmarshal(b []byte) error {
@ -2630,7 +2990,7 @@ func (m *SyncContactRequestDecision) Reset() { *m = SyncContactRequestDe
func (m *SyncContactRequestDecision) String() string { return proto.CompactTextString(m) }
func (*SyncContactRequestDecision) ProtoMessage() {}
func (*SyncContactRequestDecision) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{30}
return fileDescriptor_d61ab7221f0b5518, []int{33}
}
func (m *SyncContactRequestDecision) XXX_Unmarshal(b []byte) error {
@ -2689,7 +3049,7 @@ func (m *BackedUpProfile) Reset() { *m = BackedUpProfile{} }
func (m *BackedUpProfile) String() string { return proto.CompactTextString(m) }
func (*BackedUpProfile) ProtoMessage() {}
func (*BackedUpProfile) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{31}
return fileDescriptor_d61ab7221f0b5518, []int{34}
}
func (m *BackedUpProfile) XXX_Unmarshal(b []byte) error {
@ -2764,7 +3124,7 @@ func (m *RawMessage) Reset() { *m = RawMessage{} }
func (m *RawMessage) String() string { return proto.CompactTextString(m) }
func (*RawMessage) ProtoMessage() {}
func (*RawMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{32}
return fileDescriptor_d61ab7221f0b5518, []int{35}
}
func (m *RawMessage) XXX_Unmarshal(b []byte) error {
@ -2813,7 +3173,7 @@ func (m *SyncRawMessage) Reset() { *m = SyncRawMessage{} }
func (m *SyncRawMessage) String() string { return proto.CompactTextString(m) }
func (*SyncRawMessage) ProtoMessage() {}
func (*SyncRawMessage) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{33}
return fileDescriptor_d61ab7221f0b5518, []int{36}
}
func (m *SyncRawMessage) XXX_Unmarshal(b []byte) error {
@ -2871,7 +3231,7 @@ func (m *SyncKeycard) Reset() { *m = SyncKeycard{} }
func (m *SyncKeycard) String() string { return proto.CompactTextString(m) }
func (*SyncKeycard) ProtoMessage() {}
func (*SyncKeycard) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{34}
return fileDescriptor_d61ab7221f0b5518, []int{37}
}
func (m *SyncKeycard) XXX_Unmarshal(b []byte) error {
@ -2947,7 +3307,7 @@ func (m *SyncKeycardAction) Reset() { *m = SyncKeycardAction{} }
func (m *SyncKeycardAction) String() string { return proto.CompactTextString(m) }
func (*SyncKeycardAction) ProtoMessage() {}
func (*SyncKeycardAction) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{35}
return fileDescriptor_d61ab7221f0b5518, []int{38}
}
func (m *SyncKeycardAction) XXX_Unmarshal(b []byte) error {
@ -3001,7 +3361,7 @@ func (m *SyncSocialLinks) Reset() { *m = SyncSocialLinks{} }
func (m *SyncSocialLinks) String() string { return proto.CompactTextString(m) }
func (*SyncSocialLinks) ProtoMessage() {}
func (*SyncSocialLinks) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{36}
return fileDescriptor_d61ab7221f0b5518, []int{39}
}
func (m *SyncSocialLinks) XXX_Unmarshal(b []byte) error {
@ -3037,6 +3397,9 @@ func (m *SyncSocialLinks) GetClock() uint64 {
}
func init() {
proto.RegisterEnum("protobuf.SyncActivityCenterNotification_NotificationType", SyncActivityCenterNotification_NotificationType_name, SyncActivityCenterNotification_NotificationType_value)
proto.RegisterEnum("protobuf.SyncActivityCenterNotification_MembershipStatus", SyncActivityCenterNotification_MembershipStatus_name, SyncActivityCenterNotification_MembershipStatus_value)
proto.RegisterEnum("protobuf.SyncActivityCenterNotification_ContactVerificationStatus", SyncActivityCenterNotification_ContactVerificationStatus_name, SyncActivityCenterNotification_ContactVerificationStatus_value)
proto.RegisterEnum("protobuf.SyncTrustedUser_TrustStatus", SyncTrustedUser_TrustStatus_name, SyncTrustedUser_TrustStatus_value)
proto.RegisterEnum("protobuf.SyncVerificationRequest_VerificationStatus", SyncVerificationRequest_VerificationStatus_name, SyncVerificationRequest_VerificationStatus_value)
proto.RegisterEnum("protobuf.SyncContactRequestDecision_DecisionStatus", SyncContactRequestDecision_DecisionStatus_name, SyncContactRequestDecision_DecisionStatus_value)
@ -3063,6 +3426,9 @@ func init() {
proto.RegisterType((*SyncActivityCenterRead)(nil), "protobuf.SyncActivityCenterRead")
proto.RegisterType((*SyncActivityCenterAccepted)(nil), "protobuf.SyncActivityCenterAccepted")
proto.RegisterType((*SyncActivityCenterDismissed)(nil), "protobuf.SyncActivityCenterDismissed")
proto.RegisterType((*SyncActivityCenterNotificationState)(nil), "protobuf.SyncActivityCenterNotificationState")
proto.RegisterType((*SyncActivityCenterNotifications)(nil), "protobuf.SyncActivityCenterNotifications")
proto.RegisterType((*SyncActivityCenterNotification)(nil), "protobuf.SyncActivityCenterNotification")
proto.RegisterType((*SyncBookmark)(nil), "protobuf.SyncBookmark")
proto.RegisterType((*SyncEnsUsernameDetail)(nil), "protobuf.SyncEnsUsernameDetail")
proto.RegisterType((*SyncClearHistory)(nil), "protobuf.SyncClearHistory")
@ -3089,197 +3455,226 @@ func init() {
}
var fileDescriptor_d61ab7221f0b5518 = []byte{
// 3057 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x39, 0x4d, 0x73, 0x1b, 0xc7,
0xb1, 0xc6, 0x07, 0xf1, 0xd1, 0x00, 0x41, 0x68, 0x44, 0x4b, 0x10, 0x25, 0x97, 0xa4, 0xb5, 0x5d,
0xd6, 0x7b, 0xe5, 0x47, 0xbd, 0x27, 0xbf, 0xc4, 0x8e, 0x24, 0x97, 0x03, 0x01, 0xb0, 0x45, 0x51,
0x02, 0x99, 0x21, 0x21, 0xc7, 0xa9, 0x54, 0x6d, 0x46, 0xbb, 0x23, 0x62, 0xcd, 0xc5, 0x2e, 0xb2,
0x33, 0xa0, 0x02, 0x1f, 0x52, 0x95, 0xfc, 0x82, 0x54, 0x2e, 0xf1, 0xd1, 0xe7, 0x54, 0x4e, 0xa9,
0xca, 0x21, 0xb7, 0x9c, 0x52, 0xb9, 0xe7, 0x98, 0xfc, 0x82, 0x54, 0x7e, 0x40, 0x8e, 0xa9, 0xe9,
0x99, 0xfd, 0xc2, 0x87, 0x42, 0x56, 0x4e, 0x39, 0x61, 0xbb, 0xa7, 0xbb, 0xb7, 0xb7, 0xbf, 0x7b,
0x00, 0x9b, 0x53, 0xe6, 0x45, 0x5e, 0x70, 0xb2, 0x3b, 0x8d, 0x42, 0x19, 0x92, 0x1a, 0xfe, 0xbc,
0x98, 0xbd, 0xdc, 0xb9, 0xec, 0x8c, 0x99, 0xb4, 0x3d, 0x97, 0x07, 0xd2, 0x93, 0x73, 0x7d, 0xbc,
0x73, 0x59, 0xcc, 0x03, 0xc7, 0x16, 0x5c, 0x4a, 0x2f, 0x38, 0x11, 0x06, 0x69, 0xb1, 0xe9, 0xd4,
0xf7, 0x1c, 0x26, 0xbd, 0x30, 0xb0, 0x27, 0x5c, 0x32, 0x97, 0x49, 0x66, 0x4f, 0xb8, 0x10, 0xec,
0x84, 0x6b, 0x1a, 0x8b, 0xc1, 0xf5, 0x4f, 0xb9, 0x74, 0xc6, 0x5e, 0x70, 0xf2, 0x88, 0x39, 0xa7,
0xdc, 0x1d, 0x4d, 0xfb, 0x4c, 0xb2, 0x3e, 0x97, 0xcc, 0xf3, 0x05, 0xb9, 0x09, 0x0d, 0x64, 0x0a,
0x66, 0x93, 0x17, 0x3c, 0xea, 0x14, 0x6e, 0x15, 0xee, 0x6c, 0x52, 0x50, 0xa8, 0x21, 0x62, 0xc8,
0x6d, 0x68, 0xca, 0x50, 0x32, 0x3f, 0xa6, 0x28, 0x22, 0x45, 0x03, 0x71, 0x9a, 0xc4, 0xfa, 0x45,
0x15, 0x2a, 0x4a, 0xf6, 0x6c, 0x4a, 0xb6, 0x61, 0xc3, 0xf1, 0x43, 0xe7, 0x14, 0x05, 0x95, 0xa9,
0x06, 0x48, 0x0b, 0x8a, 0x9e, 0x8b, 0x9c, 0x75, 0x5a, 0xf4, 0x5c, 0xf2, 0x09, 0xd4, 0x9c, 0x30,
0x90, 0xcc, 0x91, 0xa2, 0x53, 0xba, 0x55, 0xba, 0xd3, 0xb8, 0xf7, 0xf6, 0x6e, 0xfc, 0xf9, 0xbb,
0x47, 0xf3, 0xc0, 0xd9, 0x0b, 0x84, 0x64, 0xbe, 0x8f, 0x1f, 0xd6, 0xd3, 0x94, 0xcf, 0xef, 0xd1,
0x84, 0x89, 0x7c, 0x07, 0x1a, 0x4e, 0x38, 0x99, 0xcc, 0x02, 0x4f, 0x7a, 0x5c, 0x74, 0xca, 0x28,
0xe3, 0x6a, 0x5e, 0x46, 0xcf, 0x10, 0xcc, 0x69, 0x96, 0x96, 0x1c, 0xc0, 0x56, 0x2c, 0xc6, 0xd8,
0xa0, 0xb3, 0x71, 0xab, 0x70, 0xa7, 0x71, 0xef, 0xdd, 0x94, 0xfd, 0x35, 0x06, 0xa3, 0x8b, 0xdc,
0x64, 0x04, 0x24, 0x23, 0x3f, 0x96, 0x59, 0xb9, 0x88, 0xcc, 0x15, 0x02, 0xc8, 0x07, 0x50, 0x9d,
0x46, 0xe1, 0x4b, 0xcf, 0xe7, 0x9d, 0x2a, 0xca, 0xba, 0x96, 0xca, 0x8a, 0x65, 0x1c, 0x6a, 0x02,
0x1a, 0x53, 0x92, 0x67, 0xd0, 0x32, 0x8f, 0xb1, 0x1e, 0xb5, 0x8b, 0xe8, 0xb1, 0xc0, 0x4c, 0xee,
0x42, 0xd5, 0x44, 0x5c, 0xa7, 0x8e, 0x72, 0xde, 0xcc, 0x9b, 0xf8, 0x48, 0x1f, 0xd2, 0x98, 0x4a,
0x19, 0x37, 0x0e, 0xd1, 0x58, 0x01, 0xb8, 0x90, 0x71, 0x17, 0xb8, 0xc9, 0x03, 0x68, 0xbc, 0x9c,
0xf9, 0xfe, 0x3e, 0x9f, 0xab, 0x6c, 0xe9, 0x34, 0x16, 0x2d, 0xa1, 0xb4, 0x30, 0x87, 0x9f, 0xce,
0x7c, 0x9f, 0x66, 0xa9, 0x95, 0x67, 0x32, 0x60, 0xac, 0x50, 0xf3, 0x42, 0x9e, 0x59, 0x16, 0x40,
0xba, 0xd0, 0x7e, 0xc5, 0xa4, 0x33, 0x3e, 0x08, 0xfc, 0x79, 0xd7, 0x71, 0xc2, 0x59, 0x20, 0x3b,
0x9b, 0xab, 0xcc, 0x63, 0x0e, 0xe9, 0x12, 0x39, 0xb1, 0xe1, 0xea, 0x22, 0x2e, 0x56, 0xaf, 0x75,
0x11, 0xf5, 0xd6, 0x49, 0xb1, 0xfe, 0x5e, 0x86, 0xe6, 0xb3, 0x99, 0x2f, 0xbd, 0xf8, 0x8d, 0x04,
0xca, 0x01, 0x9b, 0x70, 0xcc, 0xcb, 0x3a, 0xc5, 0x67, 0x72, 0x03, 0xea, 0xd2, 0x9b, 0x70, 0x21,
0xd9, 0x64, 0x8a, 0xd9, 0x59, 0xa2, 0x29, 0x42, 0x9d, 0xea, 0x1a, 0xe4, 0x84, 0x41, 0xa7, 0x84,
0x6c, 0x29, 0x82, 0x7c, 0x02, 0xe0, 0x84, 0x7e, 0x18, 0xd9, 0x63, 0x26, 0xc6, 0x26, 0x01, 0x6f,
0xa5, 0x4a, 0x67, 0xdf, 0xbd, 0xdb, 0x53, 0x84, 0x8f, 0x99, 0x18, 0xd3, 0xba, 0x13, 0x3f, 0x92,
0x6b, 0xaa, 0x06, 0x28, 0x01, 0x9e, 0x8b, 0x09, 0x58, 0xa2, 0x55, 0x84, 0xf7, 0x5c, 0xf2, 0x1e,
0x6c, 0x9d, 0xf2, 0xb9, 0xc3, 0x22, 0xd7, 0x36, 0x35, 0x12, 0xd3, 0xa9, 0x4e, 0x5b, 0x06, 0x7d,
0xa8, 0xb1, 0xe4, 0x2a, 0x54, 0x4f, 0xf9, 0xdc, 0x9e, 0x79, 0x2e, 0xe6, 0x48, 0x9d, 0x56, 0x4e,
0xf9, 0x7c, 0xe4, 0xb9, 0xe4, 0x21, 0x54, 0xbc, 0x09, 0x3b, 0xe1, 0x2a, 0xfe, 0x95, 0x66, 0xef,
0xac, 0xd1, 0x6c, 0xcf, 0x14, 0xd9, 0x3d, 0x45, 0x4c, 0x0d, 0x0f, 0xb9, 0x0b, 0x97, 0x9d, 0x99,
0x90, 0xe1, 0xc4, 0xfb, 0x4a, 0x97, 0x56, 0x54, 0x0c, 0x53, 0xa0, 0x4e, 0x49, 0xee, 0x08, 0x3f,
0x6d, 0xe7, 0x36, 0xd4, 0x93, 0x6f, 0x54, 0x25, 0xd0, 0x0b, 0x5c, 0xfe, 0x93, 0x4e, 0xe1, 0x56,
0xe9, 0x4e, 0x89, 0x6a, 0x60, 0xe7, 0x2f, 0x05, 0xd8, 0xcc, 0xbd, 0x2d, 0xab, 0x7c, 0x21, 0xa7,
0x7c, 0xec, 0xaa, 0x62, 0xc6, 0x55, 0x1d, 0xa8, 0x4e, 0xd9, 0xdc, 0x0f, 0x99, 0x8b, 0xae, 0x68,
0xd2, 0x18, 0x54, 0xaf, 0x7b, 0xe5, 0xb9, 0x52, 0xf9, 0x40, 0x19, 0x51, 0x03, 0xe4, 0x0a, 0x54,
0xc6, 0xdc, 0x3b, 0x19, 0x4b, 0x63, 0x5b, 0x03, 0x91, 0x1d, 0xa8, 0xa9, 0x04, 0x17, 0xde, 0x57,
0x1c, 0x6d, 0x5a, 0xa2, 0x09, 0x4c, 0xde, 0x86, 0xcd, 0x08, 0x9f, 0x6c, 0xc9, 0xa2, 0x13, 0x2e,
0xd1, 0xa6, 0x25, 0xda, 0xd4, 0xc8, 0x63, 0xc4, 0xa5, 0x05, 0xbe, 0x96, 0x29, 0xf0, 0xd6, 0x9f,
0x0b, 0x70, 0xf9, 0x69, 0xe8, 0x30, 0xdf, 0x78, 0xe6, 0xd0, 0x28, 0xf7, 0x2d, 0x28, 0x9f, 0xf2,
0xb9, 0x40, 0x53, 0x34, 0xee, 0xdd, 0x4e, 0xbd, 0xb0, 0x82, 0x78, 0x77, 0x9f, 0xcf, 0x29, 0x92,
0x93, 0xfb, 0xd0, 0x9c, 0x28, 0x37, 0x31, 0x93, 0x5d, 0x45, 0xcc, 0x89, 0x2b, 0xab, 0x9d, 0x48,
0x73, 0xb4, 0xea, 0x0b, 0xa7, 0x4c, 0x88, 0x57, 0x61, 0xe4, 0x9a, 0xa8, 0x4d, 0xe0, 0x9d, 0xff,
0x81, 0xd2, 0x3e, 0x9f, 0xaf, 0xcc, 0x05, 0x02, 0x65, 0xd5, 0xf4, 0xf0, 0x55, 0x4d, 0x8a, 0xcf,
0xd6, 0xef, 0x0b, 0xf0, 0x66, 0x4e, 0x51, 0xce, 0xa3, 0xc7, 0xdc, 0xf7, 0x43, 0x15, 0xa1, 0x26,
0x32, 0xed, 0x33, 0x1e, 0x09, 0x2f, 0x0c, 0x50, 0xd8, 0x06, 0x6d, 0x19, 0xf4, 0x73, 0x8d, 0x55,
0x4e, 0x9e, 0x72, 0x8e, 0x41, 0xae, 0x25, 0x57, 0x14, 0xb8, 0xe7, 0x62, 0xdf, 0xe5, 0x67, 0x9e,
0xc3, 0x6d, 0x54, 0x45, 0x6b, 0x0a, 0x1a, 0x35, 0x54, 0x0a, 0xa5, 0x04, 0x72, 0x3e, 0xe5, 0xe8,
0xdd, 0x84, 0xe0, 0x78, 0x3e, 0xc5, 0xec, 0x15, 0xde, 0x49, 0xc0, 0xe4, 0x2c, 0xe2, 0xe8, 0xe5,
0x26, 0x4d, 0x11, 0xd6, 0x37, 0x05, 0x68, 0x2b, 0xb5, 0xb3, 0x9d, 0x74, 0x4d, 0x77, 0x7e, 0x0f,
0xb6, 0xbc, 0x0c, 0x95, 0x9d, 0xb4, 0xea, 0x56, 0x16, 0x9d, 0xd3, 0x19, 0x55, 0x2a, 0x2d, 0xa9,
0x14, 0x1b, 0xb6, 0x9c, 0x8f, 0xdc, 0xd8, 0x44, 0x1b, 0x38, 0x3a, 0xc4, 0xa0, 0xf5, 0xb7, 0x02,
0x5c, 0x5d, 0xd3, 0xec, 0xcf, 0x39, 0x47, 0xbc, 0x0d, 0x9b, 0xa6, 0x63, 0xd9, 0x98, 0xba, 0x46,
0xa5, 0xa6, 0x41, 0xea, 0x3c, 0xbb, 0x06, 0x35, 0x1e, 0x08, 0x3b, 0xa3, 0x58, 0x95, 0x07, 0x02,
0x6d, 0x7c, 0x1b, 0x9a, 0x3e, 0x13, 0xd2, 0x9e, 0x4d, 0x5d, 0x26, 0xb9, 0xae, 0x43, 0x65, 0xda,
0x50, 0xb8, 0x91, 0x46, 0xa9, 0x6f, 0x16, 0x73, 0x21, 0xf9, 0xc4, 0x96, 0xec, 0x44, 0xb5, 0xf5,
0x92, 0xfa, 0x66, 0x8d, 0x3a, 0x66, 0x27, 0x82, 0xbc, 0x0b, 0x2d, 0x5f, 0xc5, 0x88, 0x1d, 0x78,
0xce, 0x29, 0xbe, 0x44, 0x97, 0xa2, 0x4d, 0xc4, 0x0e, 0x0d, 0xd2, 0xfa, 0x59, 0x05, 0xae, 0xad,
0x9d, 0x6c, 0xc8, 0xff, 0xc2, 0x76, 0x56, 0x11, 0x1b, 0x79, 0xfd, 0xb9, 0xf9, 0x7a, 0x92, 0x51,
0xe8, 0xa9, 0x3e, 0xf9, 0x0f, 0x36, 0x85, 0xf2, 0x2d, 0x73, 0x5d, 0xee, 0x62, 0x41, 0xad, 0x51,
0x0d, 0xa8, 0x38, 0x79, 0xa1, 0x9c, 0xcc, 0x5d, 0x1c, 0x19, 0x6a, 0x34, 0x06, 0x15, 0xfd, 0x64,
0xa6, 0x74, 0x6a, 0x68, 0x7a, 0x04, 0x14, 0x7d, 0xc4, 0x27, 0xe1, 0x19, 0x77, 0xb1, 0xa3, 0xd7,
0x68, 0x0c, 0x92, 0x5b, 0xd0, 0x1c, 0x33, 0x61, 0xa3, 0x58, 0x7b, 0x26, 0xb0, 0x37, 0xd7, 0x28,
0x8c, 0x99, 0xe8, 0x2a, 0xd4, 0x08, 0x0b, 0xfc, 0x19, 0x8f, 0xbc, 0x97, 0xf1, 0xe8, 0x2c, 0x24,
0x93, 0x33, 0xdd, 0x7a, 0x4b, 0x94, 0x64, 0x8f, 0x8e, 0xf0, 0x04, 0x87, 0xe0, 0x68, 0x26, 0x64,
0x4c, 0xb9, 0x85, 0x94, 0x0d, 0xc4, 0x19, 0x92, 0x8f, 0xe1, 0xba, 0x99, 0x0c, 0xed, 0x88, 0xff,
0x78, 0xc6, 0x85, 0xd4, 0x5e, 0x44, 0x16, 0xde, 0x69, 0x23, 0x47, 0xc7, 0x90, 0x50, 0x4d, 0x81,
0xce, 0x54, 0xfc, 0x7c, 0x3d, 0xbb, 0x4e, 0x83, 0x4b, 0x6b, 0xd9, 0x7b, 0x98, 0x19, 0x9f, 0xc0,
0x8d, 0x45, 0x76, 0x65, 0x0e, 0xc9, 0xcd, 0xeb, 0x09, 0xf2, 0x5f, 0xcb, 0xf3, 0x53, 0xa4, 0xd0,
0xef, 0x5f, 0x2f, 0x40, 0x2b, 0x70, 0x79, 0xbd, 0x00, 0xad, 0xc1, 0x6d, 0x68, 0xba, 0x9e, 0x98,
0xfa, 0x6c, 0xae, 0xe3, 0x6b, 0x1b, 0x5d, 0xdf, 0x30, 0x38, 0x15, 0x63, 0xd6, 0xab, 0xe5, 0x7c,
0x8f, 0xc7, 0x93, 0xd5, 0xf9, 0xbe, 0x14, 0xd4, 0xc5, 0x15, 0x41, 0xbd, 0x18, 0xb9, 0xa5, 0xa5,
0xc8, 0xb5, 0x1e, 0xc1, 0xce, 0xe2, 0x8b, 0x0f, 0x67, 0x2f, 0x7c, 0xcf, 0xe9, 0x8d, 0xd9, 0x39,
0x6b, 0x8d, 0xf5, 0xbb, 0x12, 0x6c, 0xe6, 0xd6, 0x8a, 0x7f, 0xc9, 0xd7, 0xc4, 0xc4, 0xbc, 0x09,
0x8d, 0x69, 0xe4, 0x9d, 0x31, 0xc9, 0xed, 0x53, 0x3e, 0x37, 0xdd, 0x1b, 0x0c, 0x4a, 0x75, 0xa3,
0x5b, 0xaa, 0xaa, 0x0a, 0x27, 0xf2, 0xa6, 0x4a, 0x2f, 0xcc, 0xcb, 0x26, 0xcd, 0xa2, 0x54, 0x33,
0xff, 0x32, 0xf4, 0x02, 0x93, 0x95, 0x35, 0x6a, 0x20, 0xd5, 0xea, 0x74, 0xac, 0x72, 0x17, 0x9b,
0x79, 0x8d, 0x26, 0x70, 0x9a, 0x34, 0xd5, 0x6c, 0xd2, 0x1c, 0x40, 0xdb, 0x78, 0x57, 0xd8, 0x32,
0xb4, 0x95, 0x1c, 0x33, 0x21, 0xbd, 0xbb, 0x6e, 0x79, 0x32, 0xe4, 0xc7, 0xe1, 0x93, 0xd0, 0x0b,
0x68, 0x2b, 0xca, 0xc1, 0xe4, 0x01, 0xd4, 0xe2, 0x91, 0xdd, 0xac, 0x08, 0x37, 0xd7, 0x08, 0x32,
0xbb, 0x82, 0xa0, 0x09, 0x83, 0xea, 0x60, 0x3c, 0x70, 0xa2, 0xf9, 0x54, 0x26, 0x49, 0x9f, 0x22,
0xb0, 0xbf, 0x4d, 0xb9, 0x23, 0x59, 0x9a, 0xfa, 0x29, 0x42, 0x35, 0x2d, 0x43, 0xaa, 0x12, 0x18,
0x87, 0x8c, 0x26, 0x5a, 0xae, 0x95, 0xa2, 0xf7, 0xf9, 0x5c, 0x58, 0x3f, 0x2f, 0xc1, 0xf5, 0xd7,
0x7c, 0x91, 0xf1, 0x57, 0x21, 0xf1, 0xd7, 0x5b, 0x00, 0x53, 0x8c, 0x0d, 0x74, 0x97, 0xf6, 0x7f,
0x5d, 0x63, 0x94, 0xb7, 0x12, 0xa7, 0x97, 0xb2, 0x4e, 0x7f, 0x4d, 0x61, 0xbd, 0x0a, 0x55, 0xb3,
0xcf, 0xa3, 0xf7, 0xea, 0xb4, 0xa2, 0xc0, 0x3d, 0x57, 0xc5, 0x6d, 0xbc, 0xf6, 0xcd, 0xd5, 0x69,
0x45, 0x3b, 0x3e, 0xc1, 0xed, 0xa1, 0x13, 0x75, 0xfa, 0x56, 0xf5, 0xcb, 0x10, 0x20, 0xa7, 0x40,
0x22, 0x7e, 0xc6, 0x99, 0xcf, 0x5d, 0x55, 0xe4, 0x22, 0x2e, 0x44, 0x32, 0xe8, 0x3e, 0x3c, 0x97,
0x1b, 0x77, 0xa9, 0xe1, 0xef, 0xc6, 0xec, 0x83, 0x40, 0x46, 0x73, 0x7a, 0x29, 0x5a, 0xc4, 0xef,
0xf4, 0xe1, 0xca, 0x6a, 0x62, 0xd2, 0x86, 0x92, 0xb2, 0x90, 0x1e, 0xa2, 0xd4, 0xa3, 0x52, 0xf7,
0x8c, 0xf9, 0x33, 0x6e, 0xa2, 0x5f, 0x03, 0xf7, 0x8b, 0x1f, 0x15, 0xac, 0x5f, 0x16, 0xa1, 0xbd,
0x98, 0x81, 0xe4, 0xe3, 0xcc, 0x2d, 0xc0, 0xd2, 0x80, 0xb8, 0xa6, 0x57, 0x66, 0xee, 0x00, 0x3e,
0x83, 0xa6, 0x71, 0x94, 0x32, 0xa8, 0xe8, 0x14, 0x17, 0x27, 0xfd, 0xf5, 0x29, 0x4f, 0x1b, 0xd3,
0xe4, 0x59, 0xed, 0x98, 0xd5, 0x78, 0xd0, 0x2c, 0x61, 0x08, 0xbf, 0x46, 0x8d, 0x78, 0xe6, 0x8c,
0x39, 0xfe, 0x8d, 0x9b, 0x08, 0xeb, 0x43, 0xd8, 0xc2, 0x53, 0xa5, 0x90, 0x69, 0x5d, 0xe7, 0x2b,
0x45, 0x0f, 0x61, 0x3b, 0x66, 0x7c, 0xa6, 0xef, 0x7a, 0x04, 0xe5, 0xec, 0xbc, 0xdc, 0xdf, 0x85,
0x2b, 0x7a, 0x39, 0x95, 0xde, 0x99, 0x27, 0xe7, 0x3d, 0x1e, 0x48, 0x1e, 0xbd, 0x86, 0xbf, 0x0d,
0x25, 0xcf, 0xd5, 0xe6, 0x6d, 0x52, 0xf5, 0x68, 0xf5, 0x75, 0x39, 0xcd, 0x4b, 0xe8, 0x3a, 0x0e,
0xc7, 0xbc, 0x3d, 0xaf, 0x94, 0x81, 0xce, 0xcb, 0xbc, 0x94, 0xbe, 0x27, 0x26, 0x9e, 0x10, 0x17,
0x10, 0xf3, 0x4d, 0x01, 0x9a, 0x4a, 0xce, 0xa3, 0x30, 0x3c, 0x9d, 0xb0, 0xe8, 0x74, 0x3d, 0xe3,
0x2c, 0xf2, 0x8d, 0x19, 0xd4, 0x63, 0x32, 0xac, 0x96, 0x32, 0xc3, 0xea, 0x75, 0xa8, 0x63, 0xa3,
0xb1, 0x15, 0xad, 0x4e, 0xe4, 0x1a, 0x22, 0x46, 0x91, 0x9f, 0x9d, 0x38, 0x36, 0xf2, 0x13, 0xc7,
0x5b, 0x00, 0x2e, 0xf7, 0xb9, 0x9a, 0xdc, 0x98, 0xc4, 0x44, 0x2e, 0xd3, 0xba, 0xc1, 0x74, 0xa5,
0xf5, 0x53, 0x78, 0x53, 0x69, 0x38, 0x08, 0xc4, 0x48, 0xf0, 0x48, 0xbd, 0x48, 0xaf, 0xe9, 0x6b,
0x54, 0xdd, 0x81, 0xda, 0xcc, 0xd0, 0x19, 0x7d, 0x13, 0x18, 0xb7, 0xe6, 0x31, 0xf3, 0x70, 0x48,
0xd7, 0x15, 0xa8, 0x8a, 0xf0, 0x5e, 0x6e, 0x20, 0x2a, 0xe7, 0xd4, 0xb3, 0x9e, 0xe8, 0xe4, 0xeb,
0xf9, 0x9c, 0x45, 0x8f, 0x3d, 0x21, 0xc3, 0x68, 0x9e, 0x2d, 0x4b, 0x85, 0x5c, 0x59, 0x7a, 0x0b,
0xc0, 0x51, 0x84, 0xfa, 0x5b, 0x8a, 0xfa, 0x5b, 0x0c, 0xa6, 0x2b, 0xad, 0x3f, 0x15, 0x80, 0x28,
0x61, 0xe6, 0xea, 0xe9, 0xd0, 0x73, 0xd4, 0xba, 0xb1, 0x72, 0xa5, 0xca, 0xec, 0xac, 0xc5, 0x35,
0x3b, 0x6b, 0x09, 0x37, 0x82, 0xa5, 0x9d, 0xb5, 0x8c, 0xe8, 0x78, 0x67, 0xbd, 0x0e, 0x75, 0x1c,
0x01, 0x70, 0x69, 0xd5, 0x3b, 0x04, 0x2e, 0xad, 0x47, 0x2b, 0x97, 0xd6, 0x0a, 0x12, 0xac, 0x59,
0x5a, 0xab, 0xd9, 0xa5, 0x75, 0x0c, 0x97, 0x97, 0xbf, 0x44, 0xac, 0xdf, 0xcb, 0x3f, 0x82, 0xda,
0xd4, 0x10, 0x99, 0x62, 0x73, 0x23, 0x9f, 0xe7, 0x79, 0x49, 0x34, 0xa1, 0xb6, 0x7e, 0x53, 0x84,
0x46, 0xe6, 0x42, 0x68, 0x8d, 0xdf, 0x3b, 0x50, 0x35, 0xe5, 0x3c, 0xb6, 0x97, 0x01, 0xb3, 0x2a,
0x95, 0x72, 0x2a, 0xe5, 0x9b, 0x95, 0x1e, 0x1d, 0x32, 0xcd, 0x8a, 0x40, 0x79, 0xca, 0xe4, 0xd8,
0x34, 0x1e, 0x7c, 0x4e, 0x3c, 0x55, 0xc9, 0x78, 0x2a, 0x7b, 0x17, 0xa3, 0x47, 0xf6, 0xe4, 0x2e,
0x66, 0x1b, 0x36, 0xf8, 0x24, 0xfc, 0xd2, 0xc3, 0x7d, 0xbf, 0x4e, 0x35, 0xa0, 0x5c, 0xf5, 0x8a,
0xf9, 0x3e, 0x97, 0x66, 0x86, 0x37, 0x90, 0x12, 0xae, 0xc2, 0xc8, 0x34, 0x73, 0x7c, 0x46, 0xb7,
0x7a, 0xae, 0xcb, 0x03, 0xd3, 0xc4, 0x0d, 0xb4, 0x7e, 0x80, 0xb7, 0xbe, 0x36, 0xe6, 0x8a, 0xef,
0xf1, 0x56, 0x9b, 0x2b, 0x63, 0x94, 0xe2, 0xca, 0xfb, 0x93, 0x52, 0x7e, 0xbd, 0xcf, 0xac, 0xd1,
0xf8, 0x8c, 0x13, 0x2b, 0x8f, 0xbc, 0x33, 0xee, 0xda, 0x2f, 0xa3, 0x70, 0x62, 0xac, 0xd4, 0x30,
0xb8, 0x4f, 0xa3, 0x70, 0x42, 0x1e, 0xc0, 0x8e, 0x9e, 0x2d, 0x05, 0x77, 0x6d, 0x3c, 0x30, 0x2b,
0x32, 0x5e, 0xf0, 0xe8, 0x44, 0xbf, 0x8a, 0x93, 0xa6, 0xe0, 0x6e, 0x3f, 0x39, 0xdf, 0x53, 0xc7,
0x7a, 0x5f, 0x0a, 0x9c, 0x58, 0xbc, 0x36, 0x2c, 0x68, 0x14, 0x4a, 0xff, 0x3f, 0xa8, 0x99, 0x36,
0x12, 0xb7, 0xef, 0x35, 0x17, 0x88, 0x09, 0x99, 0x35, 0xd3, 0x3d, 0x23, 0x73, 0xe5, 0x49, 0xee,
0xa2, 0x1d, 0xf0, 0x7a, 0xb4, 0xb0, 0xea, 0x16, 0xd2, 0xd0, 0xd2, 0x98, 0x4a, 0xbd, 0xd6, 0xdc,
0xa3, 0xc5, 0x71, 0xbc, 0xcc, 0xa1, 0x4e, 0x69, 0x42, 0x66, 0xfd, 0xa3, 0xa0, 0x4b, 0xc8, 0x11,
0x3b, 0x4b, 0xe6, 0x80, 0x6c, 0xbc, 0x16, 0xf2, 0xf1, 0xba, 0xea, 0x06, 0xeb, 0x06, 0xd4, 0x5f,
0xb2, 0xb3, 0x70, 0x16, 0x79, 0x52, 0xbb, 0xa6, 0x46, 0x53, 0xc4, 0x6b, 0x6a, 0xeb, 0x6d, 0x68,
0xea, 0xc9, 0xde, 0xce, 0xa6, 0x70, 0x43, 0xe3, 0xf4, 0xea, 0xf1, 0xdf, 0x70, 0x49, 0x17, 0x45,
0x31, 0x0e, 0x23, 0x89, 0x53, 0x98, 0x30, 0xf1, 0xba, 0x85, 0x07, 0x47, 0x0a, 0xaf, 0xa6, 0x31,
0xa1, 0xfa, 0x00, 0x0f, 0x84, 0xb9, 0xcb, 0x53, 0x8f, 0x2a, 0x8e, 0x3c, 0x61, 0x4b, 0x2e, 0xe2,
0xb0, 0xad, 0x78, 0xe2, 0x98, 0x0b, 0xf9, 0xa4, 0x5c, 0x2b, 0xb7, 0x37, 0xac, 0x5f, 0x15, 0x74,
0xf5, 0x5e, 0x1a, 0x64, 0xd7, 0x84, 0xe5, 0xe2, 0x58, 0xa7, 0x6d, 0x90, 0x1b, 0xeb, 0x06, 0x70,
0x73, 0xac, 0xcb, 0xb0, 0xcd, 0x22, 0x67, 0xec, 0x9d, 0x71, 0x5b, 0xcc, 0xa6, 0x53, 0xa5, 0x3b,
0x0f, 0xd8, 0x0b, 0xdf, 0x2c, 0x31, 0x35, 0x7a, 0xc3, 0x90, 0x75, 0x35, 0xd5, 0x91, 0x26, 0x1a,
0x68, 0x1a, 0xeb, 0xb7, 0x05, 0x1d, 0x0c, 0xc7, 0x6a, 0x0b, 0x55, 0x7b, 0x2d, 0x8f, 0xce, 0x79,
0x6f, 0xf2, 0x31, 0x54, 0xcc, 0x22, 0xab, 0xde, 0xd3, 0x5a, 0x1c, 0xfe, 0x33, 0x02, 0x77, 0x8f,
0xd3, 0x15, 0x97, 0x1a, 0x26, 0xeb, 0x3e, 0x34, 0x32, 0x68, 0xd2, 0x80, 0xea, 0x68, 0xb8, 0x3f,
0x3c, 0xf8, 0x7c, 0xd8, 0x7e, 0x43, 0x01, 0xc7, 0x74, 0x74, 0x74, 0x3c, 0xe8, 0xb7, 0x0b, 0xe4,
0x12, 0x6c, 0x8e, 0x86, 0x08, 0x7e, 0x7e, 0x40, 0x8f, 0x1f, 0x7f, 0xd1, 0x2e, 0x5a, 0xdf, 0x94,
0xf4, 0x12, 0xf8, 0x3c, 0xb3, 0x64, 0x9b, 0xe1, 0x74, 0x8d, 0xf2, 0x04, 0xca, 0x98, 0x3f, 0x26,
0x98, 0xd4, 0xb3, 0xfa, 0x20, 0x19, 0x9a, 0x04, 0x2f, 0xca, 0x50, 0x05, 0x97, 0x33, 0x56, 0x25,
0x28, 0x38, 0x89, 0x73, 0x3c, 0x45, 0x28, 0x97, 0x98, 0xb5, 0x45, 0x37, 0x35, 0x73, 0xb7, 0x91,
0xe0, 0xba, 0x78, 0x6b, 0x18, 0x71, 0x31, 0x0d, 0x03, 0x11, 0x57, 0xc6, 0x04, 0x56, 0x45, 0x36,
0xe2, 0x53, 0xdf, 0xd3, 0xcc, 0x3a, 0xfe, 0xea, 0x06, 0xd3, 0x95, 0x84, 0xaf, 0xbe, 0x4c, 0xa8,
0xa1, 0x65, 0xff, 0x3f, 0x6f, 0xd9, 0x15, 0x5f, 0xbd, 0xfb, 0x7c, 0xe9, 0xba, 0x61, 0xe5, 0x15,
0x84, 0xf6, 0x61, 0x3d, 0x19, 0xe3, 0xbe, 0x0f, 0x64, 0x99, 0x73, 0xc9, 0x17, 0x87, 0x83, 0x61,
0x7f, 0x6f, 0xf8, 0x59, 0xbb, 0x40, 0x9a, 0x50, 0xeb, 0xf6, 0x7a, 0x83, 0x43, 0xe5, 0x99, 0xa2,
0x82, 0xfa, 0x83, 0xde, 0xd3, 0xbd, 0xe1, 0xa0, 0xdf, 0x2e, 0x29, 0xa8, 0xd7, 0x1d, 0xf6, 0x06,
0x4f, 0x07, 0xfd, 0x76, 0xd9, 0xfa, 0x6b, 0x41, 0xcf, 0x77, 0xbd, 0xdc, 0xae, 0xdf, 0xe7, 0x8e,
0x27, 0xd6, 0x5f, 0x22, 0xde, 0x80, 0xba, 0xb1, 0xe7, 0x5e, 0x1c, 0x69, 0x29, 0x82, 0xfc, 0x10,
0xb6, 0x5c, 0xc3, 0x6f, 0xe7, 0x22, 0xef, 0x83, 0xc5, 0x49, 0x79, 0xd5, 0x2b, 0x77, 0xe3, 0x07,
0x63, 0x9e, 0x96, 0x9b, 0x83, 0xad, 0xf7, 0xa1, 0x95, 0xa7, 0xc8, 0x7d, 0xec, 0x1b, 0xb9, 0x8f,
0x2d, 0x58, 0x7f, 0x2c, 0xc2, 0xd6, 0xc2, 0x1f, 0x68, 0xeb, 0x7b, 0xfe, 0xe2, 0xad, 0x46, 0x71,
0xe9, 0x56, 0x83, 0xbc, 0x0f, 0x24, 0x4b, 0x62, 0x67, 0xd7, 0xc3, 0x76, 0x86, 0x50, 0xd7, 0xaa,
0xec, 0x10, 0x51, 0xbe, 0xc8, 0x10, 0x41, 0x1e, 0x42, 0x53, 0x84, 0x8e, 0xc7, 0x7c, 0xdb, 0xf7,
0x82, 0xd3, 0xf8, 0x5f, 0xcb, 0x85, 0xff, 0xc2, 0x8e, 0x90, 0xe2, 0xa9, 0x22, 0xa0, 0x0d, 0x91,
0x02, 0xe4, 0x7b, 0xb0, 0xad, 0x36, 0xd4, 0x78, 0x90, 0xb4, 0xdd, 0xe4, 0x7f, 0xca, 0xd2, 0xf2,
0xd2, 0xbe, 0x34, 0xa9, 0x52, 0xc2, 0x17, 0x51, 0xc2, 0x12, 0x00, 0x94, 0xbd, 0x32, 0x1b, 0x48,
0x76, 0xda, 0x2b, 0xe4, 0xa7, 0xbd, 0x7d, 0x68, 0x98, 0xbf, 0xa4, 0x8f, 0x55, 0x0b, 0x2e, 0xa2,
0xe3, 0xff, 0x2b, 0x7d, 0x63, 0x37, 0xfd, 0x13, 0xfb, 0x99, 0xf9, 0x0f, 0xdb, 0x08, 0xdd, 0x55,
0x0c, 0x34, 0xcb, 0x6d, 0xfd, 0xba, 0x00, 0x2d, 0xa5, 0x62, 0xe6, 0xcd, 0xdf, 0x86, 0x46, 0x94,
0x40, 0xf1, 0x2a, 0xb9, 0x9d, 0xca, 0x4f, 0x49, 0x69, 0x96, 0x90, 0xdc, 0x83, 0x6d, 0x31, 0x7b,
0x61, 0x7a, 0xac, 0x78, 0x22, 0xc2, 0xe0, 0xd1, 0x5c, 0xf2, 0x78, 0xf8, 0x5a, 0x79, 0x46, 0xde,
0x87, 0x4b, 0xf1, 0xf5, 0x45, 0xca, 0xa0, 0xef, 0x74, 0x96, 0x0f, 0xac, 0xaf, 0x0b, 0xc9, 0x20,
0xa3, 0xfa, 0x28, 0x2e, 0x21, 0x49, 0x88, 0xa9, 0xc7, 0x95, 0x9d, 0xf2, 0x0a, 0x54, 0xcc, 0x45,
0xa8, 0xee, 0x02, 0x06, 0xca, 0x06, 0x69, 0x39, 0x17, 0xa4, 0x37, 0xa0, 0x9e, 0xde, 0x03, 0x6c,
0xe0, 0x6a, 0x94, 0x22, 0xd2, 0x7c, 0xad, 0x64, 0x87, 0xdf, 0x3f, 0x14, 0xe1, 0x52, 0x46, 0x35,
0xb5, 0x85, 0x85, 0x01, 0xb9, 0x0f, 0x15, 0x86, 0x4f, 0xa8, 0x63, 0xeb, 0x9e, 0xb5, 0x72, 0x30,
0xd0, 0xc4, 0xbb, 0xfa, 0x87, 0x1a, 0x0e, 0xf2, 0x0e, 0x6c, 0x86, 0xbe, 0x6b, 0x48, 0x46, 0x49,
0xbf, 0xc9, 0x23, 0xcd, 0xb4, 0xa2, 0x20, 0xb3, 0x6c, 0xaf, 0x99, 0x3d, 0x62, 0x2a, 0xd5, 0x7f,
0x2b, 0x46, 0xbb, 0x4b, 0xb0, 0xb9, 0x3f, 0xf8, 0xa2, 0xd7, 0xa5, 0x7d, 0xbb, 0xdb, 0xef, 0x63,
0x6a, 0x13, 0x68, 0x75, 0x7b, 0xbd, 0x83, 0xd1, 0xf0, 0xf8, 0xc8, 0xe0, 0x0a, 0xe4, 0x32, 0x6c,
0xc5, 0x64, 0xfd, 0xc1, 0xd3, 0x81, 0x2e, 0x78, 0xdb, 0xd0, 0x4e, 0x08, 0xe9, 0xe0, 0xd9, 0xc1,
0x73, 0x2c, 0x7c, 0x00, 0x95, 0xa7, 0x07, 0xbd, 0x7d, 0x55, 0xf6, 0x54, 0x95, 0x18, 0x0d, 0x0d,
0xb4, 0x41, 0xb6, 0xa0, 0x31, 0xda, 0xeb, 0xdb, 0xa3, 0xc3, 0x7e, 0x57, 0x09, 0xa8, 0x90, 0x36,
0x34, 0x87, 0xdd, 0x67, 0x03, 0xbb, 0xf7, 0xb8, 0x3b, 0xfc, 0x6c, 0xd0, 0x6f, 0x57, 0xad, 0x1f,
0xe9, 0xf6, 0x9b, 0x49, 0x39, 0xf2, 0xe1, 0x42, 0x8e, 0x2e, 0xc5, 0x62, 0x4a, 0x9c, 0x4f, 0xcf,
0xc4, 0x49, 0xc5, 0x8c, 0x93, 0x1e, 0x6d, 0xfe, 0xa0, 0xb1, 0x7b, 0xf7, 0x41, 0xcc, 0xfc, 0xa2,
0x82, 0x4f, 0x1f, 0xfc, 0x33, 0x00, 0x00, 0xff, 0xff, 0x35, 0x39, 0xcc, 0x36, 0x3a, 0x22, 0x00,
0x00,
// 3535 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x3a, 0x4d, 0x73, 0x23, 0x49,
0x56, 0x53, 0x92, 0xac, 0x8f, 0x27, 0x59, 0x2e, 0x67, 0x7b, 0xba, 0xd5, 0xee, 0x9e, 0xed, 0xee,
0x9a, 0x9d, 0xd8, 0x86, 0x18, 0x3c, 0xd0, 0x03, 0xec, 0xee, 0x7c, 0xc4, 0xa0, 0x96, 0x34, 0xd3,
0x1e, 0x77, 0xcb, 0x26, 0x6d, 0xcf, 0xb0, 0x04, 0x11, 0x45, 0x76, 0x55, 0xb6, 0x55, 0xeb, 0x52,
0x95, 0xa8, 0x4c, 0xd9, 0x68, 0x0f, 0x04, 0x6c, 0x04, 0x67, 0x08, 0x2e, 0xcc, 0x71, 0xce, 0x04,
0x27, 0x22, 0x38, 0x10, 0xc1, 0x81, 0x13, 0xc1, 0x9d, 0x23, 0xfc, 0x02, 0x82, 0x0b, 0x37, 0x8e,
0x44, 0xbe, 0xcc, 0xfa, 0xd2, 0x47, 0x63, 0x07, 0x27, 0x4e, 0xce, 0xf7, 0xf2, 0xe5, 0xcb, 0x57,
0xf9, 0xbe, 0x9f, 0x0c, 0xdb, 0x33, 0x16, 0x24, 0x41, 0x74, 0x71, 0x30, 0x4b, 0x62, 0x19, 0x93,
0x26, 0xfe, 0x79, 0x3d, 0x7f, 0xb3, 0x7f, 0xc7, 0x9b, 0x30, 0xe9, 0x06, 0x3e, 0x8f, 0x64, 0x20,
0x17, 0x7a, 0x7b, 0xff, 0x8e, 0x58, 0x44, 0x9e, 0x2b, 0xb8, 0x94, 0x41, 0x74, 0x21, 0x0c, 0xd2,
0x61, 0xb3, 0x59, 0x18, 0x78, 0x4c, 0x06, 0x71, 0xe4, 0x4e, 0xb9, 0x64, 0x3e, 0x93, 0xcc, 0x9d,
0x72, 0x21, 0xd8, 0x05, 0xd7, 0x34, 0x0e, 0x83, 0x07, 0x5f, 0x72, 0xe9, 0x4d, 0x82, 0xe8, 0xe2,
0x39, 0xf3, 0x2e, 0xb9, 0x7f, 0x3e, 0x1b, 0x32, 0xc9, 0x86, 0x5c, 0xb2, 0x20, 0x14, 0xe4, 0x11,
0xb4, 0xf1, 0x50, 0x34, 0x9f, 0xbe, 0xe6, 0x49, 0xcf, 0x7a, 0x6c, 0x3d, 0xdd, 0xa6, 0xa0, 0x50,
0x63, 0xc4, 0x90, 0x27, 0xd0, 0x91, 0xb1, 0x64, 0x61, 0x4a, 0x51, 0x41, 0x8a, 0x36, 0xe2, 0x34,
0x89, 0xf3, 0x97, 0x0d, 0xa8, 0x2b, 0xde, 0xf3, 0x19, 0xd9, 0x83, 0x2d, 0x2f, 0x8c, 0xbd, 0x4b,
0x64, 0x54, 0xa3, 0x1a, 0x20, 0x5d, 0xa8, 0x04, 0x3e, 0x9e, 0x6c, 0xd1, 0x4a, 0xe0, 0x93, 0x2f,
0xa0, 0xe9, 0xc5, 0x91, 0x64, 0x9e, 0x14, 0xbd, 0xea, 0xe3, 0xea, 0xd3, 0xf6, 0xb3, 0xf7, 0x0f,
0xd2, 0xcf, 0x3f, 0x38, 0x5d, 0x44, 0xde, 0x61, 0x24, 0x24, 0x0b, 0x43, 0xfc, 0xb0, 0x81, 0xa6,
0xfc, 0xe6, 0x19, 0xcd, 0x0e, 0x91, 0x9f, 0x42, 0xdb, 0x8b, 0xa7, 0xd3, 0x79, 0x14, 0xc8, 0x80,
0x8b, 0x5e, 0x0d, 0x79, 0xdc, 0x2b, 0xf3, 0x18, 0x18, 0x82, 0x05, 0x2d, 0xd2, 0x92, 0x63, 0xd8,
0x49, 0xd9, 0x98, 0x37, 0xe8, 0x6d, 0x3d, 0xb6, 0x9e, 0xb6, 0x9f, 0x7d, 0x90, 0x1f, 0x7f, 0xcb,
0x83, 0xd1, 0xe5, 0xd3, 0xe4, 0x1c, 0x48, 0x81, 0x7f, 0xca, 0xb3, 0x7e, 0x1b, 0x9e, 0x6b, 0x18,
0x90, 0x8f, 0xa1, 0x31, 0x4b, 0xe2, 0x37, 0x41, 0xc8, 0x7b, 0x0d, 0xe4, 0x75, 0x3f, 0xe7, 0x95,
0xf2, 0x38, 0xd1, 0x04, 0x34, 0xa5, 0x24, 0xaf, 0xa0, 0x6b, 0x96, 0xa9, 0x1c, 0xcd, 0xdb, 0xc8,
0xb1, 0x74, 0x98, 0x7c, 0x04, 0x0d, 0x63, 0x71, 0xbd, 0x16, 0xf2, 0x79, 0xb7, 0xfc, 0xc4, 0xa7,
0x7a, 0x93, 0xa6, 0x54, 0xea, 0x71, 0x53, 0x13, 0x4d, 0x05, 0x80, 0x5b, 0x3d, 0xee, 0xd2, 0x69,
0xf2, 0x29, 0xb4, 0xdf, 0xcc, 0xc3, 0xf0, 0x88, 0x2f, 0x94, 0xb7, 0xf4, 0xda, 0xcb, 0x2f, 0xa1,
0xa4, 0x30, 0x9b, 0x5f, 0xce, 0xc3, 0x90, 0x16, 0xa9, 0x95, 0x66, 0x0a, 0x60, 0x2a, 0x50, 0xe7,
0x56, 0x9a, 0x59, 0x65, 0x40, 0xfa, 0x60, 0x5f, 0x33, 0xe9, 0x4d, 0x8e, 0xa3, 0x70, 0xd1, 0xf7,
0xbc, 0x78, 0x1e, 0xc9, 0xde, 0xf6, 0xba, 0xe7, 0x31, 0x9b, 0x74, 0x85, 0x9c, 0xb8, 0x70, 0x6f,
0x19, 0x97, 0x8a, 0xd7, 0xbd, 0x8d, 0x78, 0x9b, 0xb8, 0x38, 0xff, 0x59, 0x83, 0xce, 0xab, 0x79,
0x28, 0x83, 0xf4, 0x46, 0x02, 0xb5, 0x88, 0x4d, 0x39, 0xfa, 0x65, 0x8b, 0xe2, 0x9a, 0x3c, 0x84,
0x96, 0x0c, 0xa6, 0x5c, 0x48, 0x36, 0x9d, 0xa1, 0x77, 0x56, 0x69, 0x8e, 0x50, 0xbb, 0x3a, 0x06,
0x79, 0x71, 0xd4, 0xab, 0xe2, 0xb1, 0x1c, 0x41, 0xbe, 0x00, 0xf0, 0xe2, 0x30, 0x4e, 0xdc, 0x09,
0x13, 0x13, 0xe3, 0x80, 0x8f, 0x73, 0xa1, 0x8b, 0x77, 0x1f, 0x0c, 0x14, 0xe1, 0x0b, 0x26, 0x26,
0xb4, 0xe5, 0xa5, 0x4b, 0x72, 0x5f, 0xc5, 0x00, 0xc5, 0x20, 0xf0, 0xd1, 0x01, 0xab, 0xb4, 0x81,
0xf0, 0xa1, 0x4f, 0x7e, 0x04, 0x3b, 0x97, 0x7c, 0xe1, 0xb1, 0xc4, 0x77, 0x4d, 0x8c, 0x44, 0x77,
0x6a, 0xd1, 0xae, 0x41, 0x9f, 0x68, 0x2c, 0xb9, 0x07, 0x8d, 0x4b, 0xbe, 0x70, 0xe7, 0x81, 0x8f,
0x3e, 0xd2, 0xa2, 0xf5, 0x4b, 0xbe, 0x38, 0x0f, 0x7c, 0xf2, 0x19, 0xd4, 0x83, 0x29, 0xbb, 0xe0,
0xca, 0xfe, 0x95, 0x64, 0x3f, 0xdc, 0x20, 0xd9, 0xa1, 0x09, 0xb2, 0x87, 0x8a, 0x98, 0x9a, 0x33,
0xe4, 0x23, 0xb8, 0xe3, 0xcd, 0x85, 0x8c, 0xa7, 0xc1, 0x2f, 0x74, 0x68, 0x45, 0xc1, 0xd0, 0x05,
0x5a, 0x94, 0x94, 0xb6, 0xf0, 0xd3, 0xf6, 0x9f, 0x40, 0x2b, 0xfb, 0x46, 0x15, 0x02, 0x83, 0xc8,
0xe7, 0x7f, 0xdc, 0xb3, 0x1e, 0x57, 0x9f, 0x56, 0xa9, 0x06, 0xf6, 0xff, 0xcd, 0x82, 0xed, 0xd2,
0x6d, 0x45, 0xe1, 0xad, 0x92, 0xf0, 0xa9, 0xaa, 0x2a, 0x05, 0x55, 0xf5, 0xa0, 0x31, 0x63, 0x8b,
0x30, 0x66, 0x3e, 0xaa, 0xa2, 0x43, 0x53, 0x50, 0x5d, 0x77, 0x1d, 0xf8, 0x52, 0xe9, 0x40, 0x3d,
0xa2, 0x06, 0xc8, 0x5d, 0xa8, 0x4f, 0x78, 0x70, 0x31, 0x91, 0xe6, 0x6d, 0x0d, 0x44, 0xf6, 0xa1,
0xa9, 0x1c, 0x5c, 0x04, 0xbf, 0xe0, 0xf8, 0xa6, 0x55, 0x9a, 0xc1, 0xe4, 0x7d, 0xd8, 0x4e, 0x70,
0xe5, 0x4a, 0x96, 0x5c, 0x70, 0x89, 0x6f, 0x5a, 0xa5, 0x1d, 0x8d, 0x3c, 0x43, 0x5c, 0x1e, 0xe0,
0x9b, 0x85, 0x00, 0xef, 0xfc, 0xab, 0x05, 0x77, 0x5e, 0xc6, 0x1e, 0x0b, 0x8d, 0x66, 0x4e, 0x8c,
0x70, 0xbf, 0x05, 0xb5, 0x4b, 0xbe, 0x10, 0xf8, 0x14, 0xed, 0x67, 0x4f, 0x72, 0x2d, 0xac, 0x21,
0x3e, 0x38, 0xe2, 0x0b, 0x8a, 0xe4, 0xe4, 0x13, 0xe8, 0x4c, 0x95, 0x9a, 0x98, 0xf1, 0xae, 0x0a,
0xfa, 0xc4, 0xdd, 0xf5, 0x4a, 0xa4, 0x25, 0x5a, 0xf5, 0x85, 0x33, 0x26, 0xc4, 0x75, 0x9c, 0xf8,
0xc6, 0x6a, 0x33, 0x78, 0xff, 0xd7, 0xa0, 0x7a, 0xc4, 0x17, 0x6b, 0x7d, 0x81, 0x40, 0x4d, 0x25,
0x3d, 0xbc, 0xaa, 0x43, 0x71, 0xed, 0xfc, 0x83, 0x05, 0xef, 0x96, 0x04, 0xe5, 0x3c, 0x79, 0xc1,
0xc3, 0x30, 0x56, 0x16, 0x6a, 0x2c, 0xd3, 0xbd, 0xe2, 0x89, 0x08, 0xe2, 0x08, 0x99, 0x6d, 0xd1,
0xae, 0x41, 0x7f, 0xa3, 0xb1, 0x4a, 0xc9, 0x33, 0xce, 0xd1, 0xc8, 0x35, 0xe7, 0xba, 0x02, 0x0f,
0x7d, 0xcc, 0xbb, 0xfc, 0x2a, 0xf0, 0xb8, 0x8b, 0xa2, 0x68, 0x49, 0x41, 0xa3, 0xc6, 0x4a, 0xa0,
0x9c, 0x40, 0x2e, 0x66, 0x1c, 0xb5, 0x9b, 0x11, 0x9c, 0x2d, 0x66, 0xe8, 0xbd, 0x22, 0xb8, 0x88,
0x98, 0x9c, 0x27, 0x1c, 0xb5, 0xdc, 0xa1, 0x39, 0xc2, 0xf9, 0xde, 0x02, 0x5b, 0x89, 0x5d, 0xcc,
0xa4, 0x1b, 0xb2, 0xf3, 0x8f, 0x60, 0x27, 0x28, 0x50, 0xb9, 0x59, 0xaa, 0xee, 0x16, 0xd1, 0x25,
0x99, 0x51, 0xa4, 0xea, 0x8a, 0x48, 0xe9, 0xc3, 0xd6, 0xca, 0x96, 0x9b, 0x3e, 0xd1, 0x16, 0x96,
0x0e, 0x29, 0xe8, 0xfc, 0x87, 0x05, 0xf7, 0x36, 0x24, 0xfb, 0x1b, 0xd6, 0x11, 0xef, 0xc3, 0xb6,
0xc9, 0x58, 0x2e, 0xba, 0xae, 0x11, 0xa9, 0x63, 0x90, 0xda, 0xcf, 0xee, 0x43, 0x93, 0x47, 0xc2,
0x2d, 0x08, 0xd6, 0xe0, 0x91, 0xc0, 0x37, 0x7e, 0x02, 0x9d, 0x90, 0x09, 0xe9, 0xce, 0x67, 0x3e,
0x93, 0x5c, 0xc7, 0xa1, 0x1a, 0x6d, 0x2b, 0xdc, 0xb9, 0x46, 0xa9, 0x6f, 0x16, 0x0b, 0x21, 0xf9,
0xd4, 0x95, 0xec, 0x42, 0xa5, 0xf5, 0xaa, 0xfa, 0x66, 0x8d, 0x3a, 0x63, 0x17, 0x82, 0x7c, 0x00,
0xdd, 0x50, 0xd9, 0x88, 0x1b, 0x05, 0xde, 0x25, 0x5e, 0xa2, 0x43, 0xd1, 0x36, 0x62, 0xc7, 0x06,
0xe9, 0xfc, 0x59, 0x1d, 0xee, 0x6f, 0xac, 0x6c, 0xc8, 0xaf, 0xc3, 0x5e, 0x51, 0x10, 0x17, 0xcf,
0x86, 0x0b, 0xf3, 0xf5, 0xa4, 0x20, 0xd0, 0x4b, 0xbd, 0xf3, 0xff, 0xf8, 0x29, 0x94, 0x6e, 0x99,
0xef, 0x73, 0x1f, 0x03, 0x6a, 0x93, 0x6a, 0x40, 0xd9, 0xc9, 0x6b, 0xa5, 0x64, 0xee, 0x63, 0xc9,
0xd0, 0xa4, 0x29, 0xa8, 0xe8, 0xa7, 0x73, 0x25, 0x53, 0x5b, 0xd3, 0x23, 0xa0, 0xe8, 0x13, 0x3e,
0x8d, 0xaf, 0xb8, 0x8f, 0x19, 0xbd, 0x49, 0x53, 0x90, 0x3c, 0x86, 0xce, 0x84, 0x09, 0x17, 0xd9,
0xba, 0x73, 0x81, 0xb9, 0xb9, 0x49, 0x61, 0xc2, 0x44, 0x5f, 0xa1, 0xce, 0x31, 0xc0, 0x5f, 0xf1,
0x24, 0x78, 0x93, 0x96, 0xce, 0x42, 0x32, 0x39, 0xd7, 0xa9, 0xb7, 0x4a, 0x49, 0x71, 0xeb, 0x14,
0x77, 0xb0, 0x08, 0x4e, 0xe6, 0x42, 0xa6, 0x94, 0x3b, 0x48, 0xd9, 0x46, 0x9c, 0x21, 0xf9, 0x1c,
0x1e, 0x98, 0xca, 0xd0, 0x4d, 0xf8, 0x1f, 0xcd, 0xb9, 0x90, 0x5a, 0x8b, 0x78, 0x84, 0xf7, 0x6c,
0x3c, 0xd1, 0x33, 0x24, 0x54, 0x53, 0xa0, 0x32, 0xd5, 0x79, 0xbe, 0xf9, 0xb8, 0x76, 0x83, 0xdd,
0x8d, 0xc7, 0x07, 0xe8, 0x19, 0x5f, 0xc0, 0xc3, 0xe5, 0xe3, 0xea, 0x39, 0x24, 0x37, 0xd7, 0x13,
0x3c, 0x7f, 0xbf, 0x7c, 0x9e, 0x22, 0x85, 0xbe, 0x7f, 0x33, 0x03, 0x2d, 0xc0, 0x9d, 0xcd, 0x0c,
0xb4, 0x04, 0x4f, 0xa0, 0xe3, 0x07, 0x62, 0x16, 0xb2, 0x85, 0xb6, 0xaf, 0x3d, 0x54, 0x7d, 0xdb,
0xe0, 0x94, 0x8d, 0x39, 0xd7, 0xab, 0xfe, 0x9e, 0x96, 0x27, 0xeb, 0xfd, 0x7d, 0xc5, 0xa8, 0x2b,
0x6b, 0x8c, 0x7a, 0xd9, 0x72, 0xab, 0x2b, 0x96, 0xeb, 0x3c, 0x87, 0xfd, 0xe5, 0x8b, 0x4f, 0xe6,
0xaf, 0xc3, 0xc0, 0x1b, 0x4c, 0xd8, 0x0d, 0x63, 0x8d, 0xf3, 0xf7, 0x55, 0xd8, 0x2e, 0xb5, 0x15,
0xff, 0xeb, 0xb9, 0x0e, 0x3a, 0xe6, 0x23, 0x68, 0xcf, 0x92, 0xe0, 0x8a, 0x49, 0xee, 0x5e, 0xf2,
0x85, 0xc9, 0xde, 0x60, 0x50, 0x2a, 0x1b, 0x3d, 0x56, 0x51, 0x55, 0x78, 0x49, 0x30, 0x53, 0x72,
0xa1, 0x5f, 0x76, 0x68, 0x11, 0xa5, 0x92, 0xf9, 0xcf, 0xe3, 0x20, 0x32, 0x5e, 0xd9, 0xa4, 0x06,
0x52, 0xa9, 0x4e, 0xdb, 0x2a, 0xf7, 0x31, 0x99, 0x37, 0x69, 0x06, 0xe7, 0x4e, 0xd3, 0x28, 0x3a,
0xcd, 0x31, 0xd8, 0x46, 0xbb, 0xc2, 0x95, 0xb1, 0xab, 0xf8, 0x98, 0x0a, 0xe9, 0x83, 0x4d, 0xcd,
0x93, 0x21, 0x3f, 0x8b, 0xbf, 0x8e, 0x83, 0x88, 0x76, 0x93, 0x12, 0x4c, 0x3e, 0x85, 0x66, 0x5a,
0xb2, 0x9b, 0x16, 0xe1, 0xd1, 0x06, 0x46, 0xa6, 0x57, 0x10, 0x34, 0x3b, 0xa0, 0x32, 0x18, 0x8f,
0xbc, 0x64, 0x31, 0x93, 0x99, 0xd3, 0xe7, 0x08, 0xcc, 0x6f, 0x33, 0xee, 0x49, 0x96, 0xbb, 0x7e,
0x8e, 0x50, 0x49, 0xcb, 0x90, 0x2a, 0x07, 0xc6, 0x22, 0xa3, 0x83, 0x2f, 0xd7, 0xcd, 0xd1, 0x47,
0x7c, 0x21, 0x9c, 0x5f, 0x56, 0xe1, 0xc1, 0x5b, 0xbe, 0xc8, 0xe8, 0xcb, 0xca, 0xf4, 0xf5, 0x1e,
0xc0, 0x0c, 0x6d, 0x03, 0xd5, 0xa5, 0xf5, 0xdf, 0xd2, 0x18, 0xa5, 0xad, 0x4c, 0xe9, 0xd5, 0xa2,
0xd2, 0xdf, 0x12, 0x58, 0xef, 0x41, 0xc3, 0xf4, 0xf3, 0xa8, 0xbd, 0x16, 0xad, 0x2b, 0xf0, 0xd0,
0x57, 0x76, 0x9b, 0xb6, 0x7d, 0x0b, 0xb5, 0x5b, 0xd7, 0x8a, 0xcf, 0x70, 0x87, 0xa8, 0x44, 0xed,
0xbe, 0x0d, 0x7d, 0x19, 0x02, 0xe4, 0x12, 0x48, 0xc2, 0xaf, 0x38, 0x0b, 0xb9, 0xaf, 0x82, 0x5c,
0xc2, 0x85, 0xc8, 0x0a, 0xdd, 0xcf, 0x6e, 0xa4, 0xc6, 0x03, 0x6a, 0xce, 0xf7, 0xd3, 0xe3, 0xa3,
0x48, 0x26, 0x0b, 0xba, 0x9b, 0x2c, 0xe3, 0xf7, 0x87, 0x70, 0x77, 0x3d, 0x31, 0xb1, 0xa1, 0xaa,
0x5e, 0x48, 0x17, 0x51, 0x6a, 0xa9, 0xc4, 0xbd, 0x62, 0xe1, 0x9c, 0x1b, 0xeb, 0xd7, 0xc0, 0x27,
0x95, 0x9f, 0x58, 0xce, 0x5f, 0x55, 0xc0, 0x5e, 0xf6, 0x40, 0xf2, 0x79, 0x61, 0x0a, 0xb0, 0x52,
0x20, 0x6e, 0xc8, 0x95, 0x85, 0x19, 0xc0, 0x57, 0xd0, 0x31, 0x8a, 0x52, 0x0f, 0x2a, 0x7a, 0x95,
0xe5, 0x4a, 0x7f, 0xb3, 0xcb, 0xd3, 0xf6, 0x2c, 0x5b, 0xab, 0x1e, 0xb3, 0x91, 0x16, 0x9a, 0x55,
0x34, 0xe1, 0xb7, 0x88, 0x91, 0xd6, 0x9c, 0xe9, 0x89, 0xff, 0xc3, 0x24, 0xc2, 0xf9, 0x31, 0xec,
0xe0, 0xae, 0x12, 0xc8, 0xa4, 0xae, 0x9b, 0x85, 0xa2, 0xcf, 0x60, 0x2f, 0x3d, 0xf8, 0x4a, 0xcf,
0x7a, 0x04, 0xe5, 0xec, 0xa6, 0xa7, 0x7f, 0x07, 0xee, 0xea, 0xe6, 0x54, 0x06, 0x57, 0x81, 0x5c,
0x0c, 0x78, 0x24, 0x79, 0xf2, 0x96, 0xf3, 0x36, 0x54, 0x03, 0x5f, 0x3f, 0x6f, 0x87, 0xaa, 0xa5,
0x33, 0xd4, 0xe1, 0xb4, 0xcc, 0xa1, 0xef, 0x79, 0x1c, 0xfd, 0xf6, 0xa6, 0x5c, 0x46, 0xda, 0x2f,
0xcb, 0x5c, 0x86, 0x81, 0x98, 0x06, 0x42, 0xdc, 0x82, 0x8d, 0x0b, 0xef, 0xaf, 0xb2, 0x19, 0xc7,
0xb2, 0x94, 0xc2, 0xb9, 0x72, 0xeb, 0xb4, 0xb8, 0x62, 0xd2, 0xf0, 0x6c, 0x19, 0x4c, 0x5f, 0x2a,
0x07, 0x56, 0x35, 0x83, 0xe0, 0x3c, 0xc2, 0xa7, 0x6a, 0xd2, 0xc6, 0x84, 0x89, 0x53, 0xce, 0x23,
0xe7, 0x2f, 0x2c, 0x78, 0xf4, 0xf6, 0x1b, 0x04, 0x09, 0xe1, 0x3d, 0x66, 0xb6, 0x5d, 0x0f, 0xf7,
0xdd, 0xa8, 0x48, 0x60, 0xec, 0xfb, 0xe9, 0xf2, 0x7c, 0x60, 0x13, 0x47, 0xfa, 0x80, 0x6d, 0xbe,
0xcd, 0xf9, 0xc7, 0x16, 0xfc, 0xe0, 0xed, 0xe7, 0x57, 0xa2, 0xda, 0x4a, 0xab, 0x5f, 0x2b, 0xb6,
0xfa, 0x6f, 0x60, 0xb7, 0x28, 0x6e, 0x5e, 0xde, 0x77, 0x9f, 0xfd, 0xf4, 0xa6, 0x22, 0x1f, 0x14,
0x01, 0xd5, 0x0d, 0x50, 0x3b, 0x5a, 0xc2, 0x14, 0x63, 0x61, 0xad, 0x14, 0x0b, 0x09, 0xd4, 0x12,
0xce, 0xd2, 0xfc, 0x86, 0x6b, 0x25, 0xb2, 0x9f, 0x5a, 0x83, 0x49, 0x6f, 0x39, 0x42, 0xe5, 0x3e,
0x66, 0x2c, 0xce, 0xa4, 0xb8, 0x0c, 0x56, 0xa5, 0xa1, 0x99, 0x81, 0x62, 0x97, 0xda, 0xa1, 0x29,
0xa8, 0x32, 0x29, 0x9b, 0xcb, 0x49, 0xd6, 0xcc, 0x1b, 0x48, 0xb7, 0xbe, 0xb3, 0x70, 0x91, 0xce,
0x4e, 0x31, 0x1b, 0x75, 0x54, 0xeb, 0x3b, 0x0b, 0x17, 0xc6, 0xc7, 0x56, 0x02, 0x76, 0x5b, 0x57,
0x38, 0xc5, 0x80, 0xfd, 0x06, 0x76, 0xa7, 0x7c, 0xfa, 0x9a, 0x27, 0x62, 0x12, 0xcc, 0xd2, 0x62,
0xb1, 0x73, 0xcb, 0x87, 0x7c, 0x95, 0x71, 0xd0, 0xa5, 0x25, 0xb5, 0xa7, 0x4b, 0x18, 0xf2, 0x4b,
0x2b, 0x2f, 0x17, 0xd7, 0x55, 0xb2, 0xdb, 0x78, 0xe5, 0xf3, 0x1b, 0x5f, 0x99, 0x76, 0x22, 0x2b,
0x95, 0x6f, 0x56, 0xf1, 0xad, 0x6e, 0xa9, 0x67, 0xf6, 0x79, 0xc8, 0x95, 0x06, 0xba, 0xda, 0x65,
0x0c, 0xb8, 0xe4, 0x6c, 0x3b, 0x4b, 0xce, 0xe6, 0xfc, 0x97, 0x05, 0xf6, 0xb2, 0xb5, 0x10, 0x80,
0xfa, 0x38, 0x56, 0x2b, 0xfb, 0x1d, 0xb2, 0x03, 0xed, 0x31, 0xbf, 0x3e, 0x8e, 0xf8, 0x59, 0x7c,
0x1c, 0x71, 0xdb, 0x22, 0xf7, 0xe0, 0xce, 0x98, 0x5f, 0x9f, 0xe8, 0xa2, 0xe9, 0xab, 0x24, 0x9e,
0xcf, 0x54, 0xf0, 0xb3, 0x2b, 0xa4, 0x0d, 0x8d, 0x57, 0x3c, 0x52, 0x4c, 0xec, 0x2a, 0x69, 0xc1,
0x16, 0x55, 0x0a, 0xb3, 0x6b, 0x84, 0x40, 0x77, 0x50, 0x2a, 0x55, 0xed, 0x2d, 0xc5, 0x24, 0x8b,
0xc4, 0x87, 0xd1, 0x55, 0x20, 0xf1, 0x72, 0xbb, 0x4e, 0xf6, 0xc0, 0x5e, 0x4e, 0x94, 0x76, 0x83,
0xfc, 0x00, 0xf6, 0x33, 0x6c, 0xae, 0x92, 0x74, 0xbf, 0x49, 0xee, 0xc0, 0x4e, 0xb6, 0x7f, 0x14,
0xa8, 0x4e, 0xc5, 0x6e, 0xe9, 0x3b, 0x56, 0x1e, 0xcc, 0x06, 0xe7, 0xcf, 0x2d, 0xb0, 0x97, 0x15,
0x4b, 0x7a, 0xb0, 0xb7, 0x8c, 0x3b, 0xf4, 0x43, 0xf5, 0x02, 0x0f, 0xe0, 0xde, 0xf2, 0xce, 0x09,
0x8f, 0xfc, 0x20, 0xba, 0xb0, 0x2d, 0xf2, 0x10, 0x7a, 0xcb, 0x9b, 0x69, 0xf4, 0xb5, 0x2b, 0xeb,
0x76, 0x87, 0xdc, 0x0b, 0x55, 0xc5, 0x68, 0x57, 0x9d, 0x3f, 0xb5, 0xe0, 0xfe, 0x46, 0x6d, 0xab,
0xe7, 0x3c, 0x8f, 0x2e, 0xa3, 0xf8, 0x3a, 0xb2, 0xdf, 0x51, 0x40, 0x7e, 0x67, 0x07, 0x9a, 0x85,
0x3b, 0x3a, 0xd0, 0xcc, 0x79, 0x92, 0x6d, 0x68, 0x0d, 0x58, 0xe4, 0xf1, 0x30, 0xe4, 0xbe, 0x5d,
0x53, 0xe7, 0xce, 0x54, 0x63, 0xc4, 0x7d, 0x7b, 0x8b, 0xec, 0xc2, 0xf6, 0x79, 0x84, 0xe0, 0xb7,
0x71, 0x22, 0x27, 0x0b, 0xbb, 0xee, 0x7c, 0x6f, 0x41, 0x47, 0xd9, 0xe3, 0xf3, 0x38, 0xbe, 0x9c,
0xb2, 0xe4, 0x72, 0x73, 0xa8, 0x9f, 0x27, 0xa1, 0x49, 0x5c, 0x6a, 0x99, 0x8d, 0x17, 0xaa, 0x85,
0xf1, 0xc2, 0x03, 0x68, 0x61, 0x6b, 0xe0, 0x2a, 0x5a, 0x1d, 0x54, 0x9a, 0x88, 0x38, 0x4f, 0xc2,
0x62, 0x8f, 0xb8, 0x55, 0xee, 0x11, 0xdf, 0x03, 0x30, 0xc6, 0xaa, 0x2c, 0xb4, 0xae, 0x2d, 0xd4,
0x60, 0xfa, 0xd2, 0xf9, 0x13, 0x78, 0x57, 0x49, 0x38, 0x8a, 0xc4, 0xb9, 0xe0, 0x89, 0xba, 0x48,
0x0f, 0x56, 0x37, 0x88, 0xba, 0x0f, 0xcd, 0xb9, 0xa1, 0x33, 0xf2, 0x66, 0x30, 0xce, 0x39, 0x27,
0x2c, 0xc0, 0xb1, 0x8a, 0xae, 0x19, 0x1b, 0x08, 0x1f, 0x96, 0x5a, 0xd8, 0x5a, 0x49, 0x3c, 0xe7,
0x6b, 0x5d, 0x2e, 0x0d, 0x42, 0xce, 0x92, 0x17, 0x81, 0x90, 0x71, 0xb2, 0x28, 0x06, 0x4f, 0xab,
0x14, 0x3c, 0xdf, 0x03, 0xf0, 0x14, 0xa1, 0xfe, 0x16, 0x13, 0xdc, 0x0d, 0xa6, 0x2f, 0x9d, 0x7f,
0xb1, 0x80, 0x28, 0x66, 0xe6, 0xc7, 0x82, 0x93, 0xc0, 0x93, 0xf3, 0x84, 0xaf, 0x1d, 0x82, 0x15,
0xa6, 0x8c, 0x95, 0x0d, 0x53, 0xc6, 0x2a, 0xce, 0x70, 0x56, 0xa6, 0x8c, 0x35, 0x44, 0xa7, 0x53,
0xc6, 0x07, 0xd0, 0xc2, 0xa6, 0x0d, 0xc7, 0x8c, 0x7a, 0xea, 0x83, 0x63, 0xc6, 0xd3, 0xb5, 0x63,
0xc6, 0x3a, 0x12, 0x6c, 0x18, 0x33, 0x36, 0x8a, 0x63, 0xc6, 0x09, 0xdc, 0x59, 0xfd, 0x12, 0xb1,
0x79, 0x92, 0xfa, 0x13, 0x68, 0xce, 0x0c, 0x91, 0x29, 0x0f, 0x1f, 0x96, 0x43, 0x62, 0x99, 0x13,
0xcd, 0xa8, 0x9d, 0xbf, 0xad, 0x40, 0xbb, 0x30, 0xc2, 0xdf, 0xa0, 0xf7, 0x1e, 0x34, 0x4c, 0x01,
0x9e, 0xbe, 0x97, 0x01, 0x8b, 0x22, 0x55, 0x4b, 0x22, 0x95, 0xdb, 0x0b, 0xdd, 0xec, 0x15, 0xda,
0x0b, 0x02, 0xb5, 0x19, 0x93, 0x13, 0xd3, 0x2a, 0xe0, 0x3a, 0xd3, 0x54, 0xbd, 0xa0, 0xa9, 0xe2,
0xf4, 0x5c, 0x0f, 0x59, 0xb2, 0xe9, 0xf9, 0x1e, 0x6c, 0xf1, 0x69, 0xfc, 0xf3, 0x00, 0x73, 0x5f,
0x8b, 0x6a, 0x40, 0xa9, 0xea, 0x9a, 0x85, 0x21, 0x97, 0x66, 0xea, 0x62, 0x20, 0xc5, 0x5c, 0x99,
0x91, 0x69, 0xbf, 0x70, 0x8d, 0x6a, 0x0d, 0x7c, 0x9f, 0x47, 0xa6, 0xed, 0x32, 0xd0, 0xe6, 0x91,
0x8b, 0xf3, 0x9d, 0x79, 0xae, 0xf4, 0x97, 0x97, 0xf5, 0xcf, 0x55, 0x78, 0x94, 0xca, 0xda, 0x89,
0x77, 0xb5, 0x3c, 0x90, 0x2d, 0x0c, 0x3e, 0x71, 0x8d, 0x33, 0x06, 0x9e, 0x04, 0x57, 0xdc, 0x77,
0xdf, 0x24, 0xf1, 0xd4, 0xbc, 0x52, 0xdb, 0xe0, 0xbe, 0x4c, 0xe2, 0x29, 0xf9, 0x14, 0xf6, 0xf5,
0x34, 0x40, 0x70, 0xdf, 0xc5, 0x0d, 0x33, 0xd4, 0xc4, 0x91, 0xbc, 0x76, 0xf4, 0x7b, 0x38, 0x1b,
0x10, 0xdc, 0x1f, 0x66, 0xfb, 0x87, 0x6a, 0x5b, 0x4f, 0xb8, 0x22, 0x2f, 0x65, 0xaf, 0x1f, 0x16,
0x34, 0x0a, 0xb9, 0xff, 0x06, 0x56, 0x1d, 0xca, 0x22, 0xd2, 0x86, 0x6b, 0xc3, 0x4f, 0x3e, 0x19,
0x99, 0x33, 0xd7, 0x55, 0x7e, 0xe1, 0x47, 0x2a, 0xf2, 0x11, 0xbe, 0x03, 0xfe, 0xa0, 0x65, 0xad,
0xfb, 0xdd, 0xc8, 0xd0, 0xd2, 0x94, 0x4a, 0x5d, 0x6b, 0x7e, 0xf9, 0x48, 0xed, 0x78, 0xf5, 0x84,
0xda, 0xa5, 0x19, 0x99, 0xf3, 0xdf, 0x96, 0x0e, 0x21, 0xa7, 0xec, 0x2a, 0xeb, 0xdc, 0x8a, 0xf6,
0x6a, 0x95, 0xed, 0x75, 0xdd, 0x6f, 0x0e, 0x0f, 0xa1, 0xf5, 0x86, 0x5d, 0xc5, 0xf3, 0x24, 0x90,
0x5a, 0x35, 0x4d, 0x9a, 0x23, 0xde, 0x12, 0x5b, 0x9f, 0x40, 0x47, 0xe7, 0x7a, 0xb7, 0xe8, 0xc2,
0x6d, 0x8d, 0xd3, 0xc3, 0xa2, 0x5f, 0x85, 0x5d, 0x1d, 0x14, 0xc5, 0x24, 0x4e, 0x24, 0xf6, 0xcd,
0xc2, 0xd8, 0xeb, 0x0e, 0x6e, 0x9c, 0x2a, 0xbc, 0xea, 0x9f, 0x85, 0xca, 0x03, 0x3c, 0x12, 0xa6,
0x60, 0x53, 0x4b, 0x65, 0x47, 0x81, 0x70, 0x25, 0x17, 0xa9, 0xd9, 0xd6, 0x03, 0x71, 0xc6, 0x85,
0xfc, 0xba, 0xd6, 0xac, 0xd9, 0x5b, 0xce, 0x5f, 0x5b, 0x3a, 0x7a, 0xaf, 0x8c, 0x1e, 0x36, 0x98,
0xe5, 0x72, 0x5d, 0x57, 0x59, 0xad, 0xeb, 0x46, 0xf0, 0x68, 0xa2, 0xc3, 0xb0, 0xcb, 0x12, 0x6f,
0x12, 0x5c, 0x71, 0x57, 0xcc, 0x67, 0x33, 0x25, 0x3b, 0x8f, 0xd8, 0xeb, 0xd0, 0x8c, 0x9d, 0x9a,
0xf4, 0xa1, 0x21, 0xeb, 0x6b, 0xaa, 0x53, 0x4d, 0x34, 0xd2, 0x34, 0xce, 0xdf, 0x59, 0xda, 0x18,
0x4c, 0x7a, 0x54, 0xb9, 0xe5, 0x86, 0x93, 0xee, 0xcf, 0xa1, 0x6e, 0x4a, 0x3b, 0x5d, 0x96, 0x2f,
0x8d, 0x6b, 0x0a, 0x0c, 0x0f, 0xce, 0xf2, 0xa1, 0x24, 0x35, 0x87, 0x9c, 0x4f, 0xa0, 0x5d, 0x40,
0x63, 0x9a, 0x1f, 0x1f, 0x8d, 0x8f, 0xbf, 0x1d, 0xeb, 0x34, 0x7f, 0x46, 0xcf, 0x4f, 0xcf, 0x46,
0x43, 0xdb, 0xc2, 0x74, 0x3d, 0x46, 0xf0, 0xdb, 0x63, 0x7a, 0xf6, 0xe2, 0x67, 0x76, 0xc5, 0xf9,
0xbe, 0xaa, 0xc7, 0x76, 0xc5, 0x72, 0xc1, 0x54, 0x41, 0x1b, 0x84, 0x27, 0x50, 0x43, 0xff, 0x31,
0xc6, 0xa4, 0xd6, 0xea, 0x83, 0x64, 0x6c, 0x1c, 0xbc, 0x22, 0x63, 0x65, 0x5c, 0xde, 0x44, 0x85,
0xa0, 0xe8, 0x22, 0xf5, 0xf1, 0x1c, 0xa1, 0x54, 0x62, 0x06, 0x4d, 0x3a, 0xa9, 0x99, 0x69, 0x74,
0x86, 0xeb, 0xe3, 0xef, 0x3c, 0x09, 0x17, 0xb3, 0x38, 0x12, 0x69, 0x64, 0xcc, 0x60, 0x15, 0x64,
0x55, 0xe5, 0x1e, 0xe8, 0xc3, 0xda, 0xfe, 0x5a, 0x06, 0xd3, 0x97, 0x84, 0xaf, 0x1f, 0xff, 0x36,
0xf1, 0x65, 0x7f, 0xb3, 0xfc, 0xb2, 0x6b, 0xbe, 0xfa, 0x60, 0x4d, 0x99, 0xbc, 0x6e, 0x68, 0xac,
0x75, 0xd8, 0xca, 0x1a, 0xef, 0xdf, 0x03, 0xb2, 0xa1, 0xe4, 0x2a, 0xea, 0xe2, 0x64, 0x34, 0x1e,
0x1e, 0x8e, 0xbf, 0x32, 0x25, 0xd7, 0x60, 0x30, 0x3a, 0x51, 0x9a, 0xd1, 0x25, 0xd7, 0x68, 0xf0,
0xf2, 0x70, 0x3c, 0x1a, 0xda, 0x55, 0x05, 0x0d, 0xfa, 0xe3, 0xc1, 0xe8, 0xe5, 0x68, 0x68, 0xd7,
0x9c, 0x7f, 0xb7, 0x74, 0x47, 0x5e, 0x2e, 0x79, 0x87, 0xdc, 0x0b, 0xc4, 0xe6, 0x9f, 0x7d, 0x1e,
0x42, 0xcb, 0xbc, 0xe7, 0x61, 0x6a, 0x69, 0x39, 0x82, 0xfc, 0x01, 0xec, 0xf8, 0xe6, 0xbc, 0x5b,
0xb2, 0xbc, 0x8f, 0x97, 0x67, 0x1b, 0xeb, 0xae, 0x3c, 0x48, 0x17, 0xe6, 0x79, 0xba, 0x7e, 0x09,
0x76, 0x3e, 0x84, 0x6e, 0x99, 0xa2, 0xf4, 0xb1, 0xef, 0x94, 0x3e, 0xd6, 0x72, 0xfe, 0xb9, 0x02,
0x3b, 0x4b, 0xff, 0xf2, 0xb0, 0x39, 0xe7, 0x2f, 0xcf, 0xa1, 0x2b, 0x2b, 0x73, 0x68, 0xf2, 0x21,
0x90, 0x22, 0x89, 0x5b, 0x1c, 0xe8, 0xd9, 0x05, 0x42, 0x1d, 0xab, 0x8a, 0x45, 0x44, 0xed, 0x36,
0x45, 0x04, 0xf9, 0x0c, 0x3a, 0x22, 0xf6, 0x02, 0x16, 0xba, 0x61, 0x10, 0x5d, 0xa6, 0xff, 0x67,
0xb2, 0xf4, 0xdf, 0x0b, 0xa7, 0x48, 0xf1, 0x52, 0x11, 0xd0, 0xb6, 0xc8, 0x01, 0xf2, 0xbb, 0xb0,
0xc7, 0x23, 0xe1, 0xa6, 0x85, 0xa4, 0xeb, 0x67, 0xff, 0x59, 0x52, 0x5d, 0x1d, 0xb3, 0xae, 0x54,
0xaa, 0x94, 0xf0, 0x65, 0x94, 0x70, 0x04, 0x00, 0x65, 0xd7, 0x69, 0x3f, 0x5b, 0xa8, 0xf6, 0xac,
0x72, 0xb5, 0x77, 0x04, 0x6d, 0xd3, 0x08, 0xab, 0x86, 0x0c, 0x9f, 0xb0, 0xfb, 0xec, 0x57, 0xf2,
0x1b, 0xfb, 0xf9, 0xbf, 0x1d, 0xbd, 0x32, 0xff, 0x75, 0x64, 0x98, 0x1e, 0x60, 0xe7, 0x5f, 0x3c,
0xed, 0xfc, 0x8d, 0x05, 0x5d, 0x25, 0x62, 0xe1, 0xe6, 0xdf, 0x86, 0x76, 0x92, 0x41, 0xe9, 0x70,
0x64, 0x2f, 0xe7, 0x9f, 0x93, 0xd2, 0x22, 0x21, 0x79, 0x06, 0x7b, 0x62, 0xfe, 0xda, 0xe4, 0x58,
0xf1, 0xb5, 0x88, 0xa3, 0xe7, 0x0b, 0xc9, 0xd3, 0xe2, 0x6b, 0xed, 0x1e, 0xf9, 0x10, 0x76, 0xd3,
0x81, 0x73, 0x7e, 0x40, 0x4f, 0xe1, 0x57, 0x37, 0x9c, 0xef, 0xac, 0xac, 0x90, 0x51, 0x79, 0x14,
0x9b, 0x90, 0xcc, 0xc4, 0xd4, 0x72, 0x6d, 0xa6, 0xbc, 0x0b, 0x75, 0xf3, 0xd3, 0x95, 0xce, 0x02,
0x06, 0x2a, 0x1a, 0x69, 0xad, 0x64, 0xa4, 0x0f, 0xa1, 0x95, 0x4f, 0x6e, 0xb7, 0x70, 0x98, 0x95,
0x23, 0x72, 0x7f, 0xad, 0x17, 0x8b, 0xdf, 0x7f, 0xaa, 0xc0, 0x6e, 0x41, 0x34, 0xd5, 0xcd, 0xc7,
0x11, 0xf9, 0x04, 0xea, 0x0c, 0x57, 0x28, 0x63, 0xf7, 0x99, 0xb3, 0xb6, 0x30, 0xd0, 0xc4, 0x07,
0xfa, 0x0f, 0x35, 0x27, 0xc8, 0x0f, 0x61, 0x3b, 0x0e, 0x7d, 0x43, 0x72, 0x9e, 0xe5, 0x9b, 0x32,
0xd2, 0x54, 0x2b, 0x0a, 0x32, 0xe3, 0xd1, 0x0d, 0xb5, 0x47, 0x4a, 0xa5, 0xf2, 0x6f, 0xdd, 0x48,
0xb7, 0x0b, 0xdb, 0x47, 0xa3, 0x9f, 0x0d, 0xfa, 0x74, 0xe8, 0xf6, 0x87, 0x43, 0x74, 0x6d, 0x02,
0xdd, 0xfe, 0x60, 0x70, 0x7c, 0x3e, 0x3e, 0x3b, 0x35, 0x38, 0x4b, 0xb5, 0xd2, 0x29, 0xd9, 0x70,
0xf4, 0x72, 0xa4, 0x03, 0xde, 0x1e, 0xd8, 0x19, 0x21, 0x1d, 0xbd, 0x3a, 0xfe, 0x06, 0x03, 0x1f,
0x40, 0xfd, 0xe5, 0xf1, 0xe0, 0x48, 0x85, 0x3d, 0x15, 0x25, 0xce, 0xc7, 0x06, 0xda, 0x22, 0x3b,
0xd0, 0x3e, 0x3f, 0x1c, 0xba, 0xe7, 0x27, 0xc3, 0xbe, 0x62, 0x50, 0x27, 0x36, 0x74, 0xc6, 0xfd,
0x57, 0x23, 0x77, 0xf0, 0xa2, 0x3f, 0xfe, 0x6a, 0x34, 0xb4, 0x1b, 0xce, 0x1f, 0xea, 0xf4, 0x5b,
0x70, 0x39, 0xf2, 0xe3, 0x25, 0x1f, 0x5d, 0xb1, 0xc5, 0x9c, 0xb8, 0xec, 0x9e, 0x99, 0x92, 0x2a,
0x05, 0x25, 0x3d, 0xdf, 0xfe, 0xfd, 0xf6, 0xc1, 0x47, 0x9f, 0xa6, 0x87, 0x5f, 0xd7, 0x71, 0xf5,
0xf1, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x54, 0xc8, 0x8b, 0xec, 0x27, 0x00, 0x00,
}

View File

@ -189,6 +189,61 @@ message SyncActivityCenterDismissed {
repeated bytes ids = 2;
}
message SyncActivityCenterNotificationState {
uint64 updated_at = 1;
bool has_seen = 2;
}
message SyncActivityCenterNotifications {
repeated SyncActivityCenterNotification activity_center_notifications = 1;
}
message SyncActivityCenterNotification {
bytes id = 1;
uint64 timestamp = 2;
NotificationType notification_type = 3;
enum NotificationType {
NoType = 0;
NewOneToOne = 1;
NewPrivateGroupChat = 2;
Mention = 3;
Reply = 4;
ContactRequest = 5;
CommunityInvitation = 6;
CommunityRequest = 7;
CommunityMembershipRequest = 8;
CommunityKicked = 9;
ContactVerification = 10;
}
string chat_id = 4;
bool read = 5;
bool dismissed = 6;
bool accepted = 7;
bytes message = 8;
string author = 9;
bytes reply_message = 10;
string community_id = 11;
MembershipStatus membership_status = 12;
enum MembershipStatus {
MembershipStatusIdle = 0;
MembershipStatusPending = 1;
MembershipStatusAccepted = 2;
MembershipStatusDeclined = 3;
}
ContactVerificationStatus contact_verification_status = 13;
enum ContactVerificationStatus {
Unknown = 0;
Pending = 1;
Accepted = 2;
Declined = 3;
Cancelled = 4;
Trusted = 5;
UnTrustWorthy = 6;
}
bool deleted = 14;
uint64 updated_at = 15;
}
message SyncBookmark {
uint64 clock = 1;
string url = 2;

View File

@ -328,6 +328,10 @@ func (m *StatusMessage) HandleApplication() error {
return m.unmarshalProtobufData(new(protobuf.SyncKeypair))
case protobuf.ApplicationMetadataMessage_SYNC_FULL_KEYPAIR:
return m.unmarshalProtobufData(new(protobuf.SyncKeypairFull))
case protobuf.ApplicationMetadataMessage_SYNC_ACTIVITY_CENTER_NOTIFICATION:
return m.unmarshalProtobufData(new(protobuf.SyncActivityCenterNotifications))
case protobuf.ApplicationMetadataMessage_SYNC_ACTIVITY_CENTER_NOTIFICATION_STATE:
return m.unmarshalProtobufData(new(protobuf.SyncActivityCenterNotificationState))
}
return nil
}

View File

@ -1152,7 +1152,7 @@ func (api *PublicAPI) MarkAllActivityCenterNotificationsRead(ctx context.Context
}
func (api *PublicAPI) MarkActivityCenterNotificationsRead(ctx context.Context, ids []types.HexBytes) (*protocol.MessengerResponse, error) {
return api.service.messenger.MarkActivityCenterNotificationsRead(ctx, ids, true)
return api.service.messenger.MarkActivityCenterNotificationsRead(ctx, ids, 0, true)
}
func (api *PublicAPI) MarkActivityCenterNotificationsUnread(ids []types.HexBytes) (*protocol.MessengerResponse, error) {
@ -1160,11 +1160,11 @@ func (api *PublicAPI) MarkActivityCenterNotificationsUnread(ids []types.HexBytes
}
func (api *PublicAPI) AcceptActivityCenterNotifications(ctx context.Context, ids []types.HexBytes) (*protocol.MessengerResponse, error) {
return api.service.messenger.AcceptActivityCenterNotifications(ctx, ids, true)
return api.service.messenger.AcceptActivityCenterNotifications(ctx, ids, 0, true)
}
func (api *PublicAPI) DismissActivityCenterNotifications(ctx context.Context, ids []types.HexBytes) error {
_, err := api.service.messenger.DismissActivityCenterNotifications(ctx, ids, true)
_, err := api.service.messenger.DismissActivityCenterNotifications(ctx, ids, 0, true)
return err
}