feat: backup profile data to waku and sync them from waku

Changes applied here introduce backing up profile data (display name and identity
images) to waku and fetch them from waku. Information about those data is sent
as a separate signal to a client via `sync.from.waku.profile` signal.

New signal `sync.from.waku.progress` is introduced which will be used to notify a client
about the progress of fetching data from waku.
This commit is contained in:
Sale Djenic 2022-11-30 10:41:35 +01:00 committed by saledjenic
parent 6abbe98cd2
commit 1340a55c1d
27 changed files with 1411 additions and 443 deletions

View File

@ -704,6 +704,16 @@ func (b *GethStatusBackend) saveAccountsAndSettings(settings settings.Settings,
if err != nil {
return err
}
// In case of setting up new account either way (creating new, importing seed phrase, keycard account...) we should not
// back up any data after login, as it was the case before, that's the reason why we're setting last backup time to the time
// when an account was created.
now := time.Now().Unix()
err = accdb.SetLastBackup(uint64(now))
if err != nil {
return err
}
return accdb.SaveAccounts(subaccs)
}

View File

@ -38,6 +38,7 @@
// 1664392661_add_third_party_id_to_waku_messages.up.sql (70B)
// 1664783660_add_sync_info_to_saved_addresses.up.sql (388B)
// 1668109917_wakunodes.up.sql (99B)
// 1670249678_display_name_to_settings_sync_clock_table.up.sql (83B)
// 1670836810_add_imported_flag_to_community_archive_hashes.up.sql (144B)
// 1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql (86B)
// doc.go (74B)
@ -124,7 +125,7 @@ func _1640111208_dummyUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xf0, 0xae, 0x20, 0x6e, 0x75, 0xd1, 0x36, 0x14, 0xf2, 0x40, 0xe5, 0xd6, 0x7a, 0xc4, 0xa5, 0x72, 0xaa, 0xb5, 0x4d, 0x71, 0x97, 0xb8, 0xe8, 0x95, 0x22, 0x95, 0xa2, 0xac, 0xaf, 0x48, 0x58}}
return a, nil
}
@ -144,7 +145,7 @@ func _1642666031_add_removed_clock_to_bookmarksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1642666031_add_removed_clock_to_bookmarks.up.sql", size: 117, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1642666031_add_removed_clock_to_bookmarks.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x84, 0x4e, 0x38, 0x99, 0x7a, 0xc, 0x90, 0x13, 0xec, 0xfe, 0x2f, 0x55, 0xff, 0xb7, 0xb6, 0xaa, 0x96, 0xc6, 0x92, 0x79, 0xcc, 0xee, 0x4e, 0x99, 0x53, 0xfe, 0x1c, 0xbb, 0x32, 0x2, 0xa4, 0x27}}
return a, nil
}
@ -164,7 +165,7 @@ func _1643644541_gif_api_key_settingUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1643644541_gif_api_key_setting.up.sql", size: 108, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1643644541_gif_api_key_setting.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x94, 0x28, 0xfb, 0x66, 0xd1, 0x7c, 0xb8, 0x89, 0xe2, 0xb4, 0x71, 0x65, 0x24, 0x57, 0x22, 0x95, 0x38, 0x97, 0x3, 0x9b, 0xc6, 0xa4, 0x41, 0x7b, 0xba, 0xf7, 0xdb, 0x70, 0xf7, 0x20, 0x3a}}
return a, nil
}
@ -184,7 +185,7 @@ func _1644188994_recent_stickersUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1644188994_recent_stickers.up.sql", size: 79, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1644188994_recent_stickers.up.sql", size: 79, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0xad, 0xaa, 0x30, 0xbf, 0x4, 0x7, 0xf8, 0xc3, 0x3, 0xb8, 0x97, 0x23, 0x2b, 0xbd, 0x1c, 0x60, 0x69, 0xb0, 0x42, 0x5e, 0x6b, 0xd, 0xa7, 0xa3, 0x6b, 0x2e, 0xdc, 0x70, 0x13, 0x72, 0x7}}
return a, nil
}
@ -204,7 +205,7 @@ func _1646659233_add_address_to_dapp_permisssionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1646659233_add_address_to_dapp_permisssion.up.sql", size: 700, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1646659233_add_address_to_dapp_permisssion.up.sql", size: 700, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xed, 0xb0, 0x35, 0xcc, 0x2e, 0x16, 0xe6, 0x15, 0x86, 0x2c, 0x37, 0x80, 0xae, 0xa3, 0xc5, 0x31, 0x78, 0x5, 0x9d, 0xcd, 0x7b, 0xeb, 0x5f, 0xf2, 0xb3, 0x74, 0x72, 0xdf, 0xcf, 0x88, 0xb, 0x40}}
return a, nil
}
@ -224,7 +225,7 @@ func _1646841105_add_emoji_accountUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1646841105_add_emoji_account.up.sql", size: 96, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1646841105_add_emoji_account.up.sql", size: 96, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe6, 0x77, 0x29, 0x95, 0x18, 0x64, 0x82, 0x63, 0xe7, 0xaf, 0x6c, 0xa9, 0x15, 0x7d, 0x46, 0xa6, 0xbc, 0xdf, 0xa7, 0xd, 0x2b, 0xd2, 0x2d, 0x97, 0x4d, 0xa, 0x6b, 0xd, 0x6e, 0x90, 0x42, 0x5c}}
return a, nil
}
@ -244,7 +245,7 @@ func _1647278782_display_nameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647278782_display_name.up.sql", size: 110, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1647278782_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa1, 0x1f, 0x3e, 0x61, 0x65, 0x8d, 0xff, 0xee, 0xde, 0xc5, 0x91, 0xd9, 0x5c, 0xb5, 0xe2, 0xf0, 0xb7, 0xe7, 0x5c, 0x5c, 0x16, 0x25, 0x89, 0xee, 0x78, 0x12, 0xea, 0x3e, 0x48, 0x41, 0xa6}}
return a, nil
}
@ -264,7 +265,7 @@ func _1647862838_reset_last_backupUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647862838_reset_last_backup.up.sql", size: 37, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1647862838_reset_last_backup.up.sql", size: 37, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x21, 0xe3, 0xd5, 0xf6, 0x5f, 0xfe, 0x65, 0xfa, 0x1d, 0x88, 0xf8, 0x5f, 0x24, 0x71, 0x34, 0x68, 0x96, 0x2a, 0x60, 0x87, 0x15, 0x82, 0x4d, 0x8a, 0x59, 0x3d, 0x1f, 0xd8, 0x56, 0xd4, 0xfb, 0xda}}
return a, nil
}
@ -284,7 +285,7 @@ func _1647871652_add_settings_sync_clock_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647871652_add_settings_sync_clock_table.up.sql", size: 1044, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1647871652_add_settings_sync_clock_table.up.sql", size: 1044, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0x58, 0xec, 0x85, 0x90, 0xfa, 0x30, 0x98, 0x98, 0x9a, 0xa6, 0xa8, 0x96, 0x2b, 0x38, 0x93, 0xf3, 0xae, 0x46, 0x74, 0xa4, 0x41, 0x62, 0x9b, 0x2, 0x86, 0xbf, 0xe5, 0x2a, 0xce, 0xe2, 0xc0}}
return a, nil
}
@ -304,7 +305,7 @@ func _1647880168_add_torrent_configUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647880168_add_torrent_config.up.sql", size: 211, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1647880168_add_torrent_config.up.sql", size: 211, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x92, 0x22, 0x37, 0x96, 0xf3, 0xb5, 0x5b, 0x27, 0xd0, 0x7d, 0x43, 0x5, 0x4e, 0x9d, 0xe2, 0x49, 0xbe, 0x86, 0x31, 0xa1, 0x89, 0xff, 0xd6, 0x51, 0xe0, 0x9c, 0xb, 0xda, 0xfc, 0xf2, 0x93}}
return a, nil
}
@ -324,7 +325,7 @@ func _1647882837_add_communities_settings_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647882837_add_communities_settings_table.up.sql", size: 206, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1647882837_add_communities_settings_table.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbd, 0x87, 0x78, 0x99, 0xd9, 0x5d, 0xbd, 0xf7, 0x57, 0x9c, 0xca, 0x97, 0xbd, 0xb3, 0xe9, 0xb5, 0x89, 0x31, 0x3f, 0xf6, 0x5c, 0x13, 0xb, 0xc3, 0x54, 0x93, 0x18, 0x40, 0x7, 0x82, 0xfe, 0x7e}}
return a, nil
}
@ -344,7 +345,7 @@ func _1647956635_add_waku_messages_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647956635_add_waku_messages_table.up.sql", size: 266, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1647956635_add_waku_messages_table.up.sql", size: 266, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xe, 0xe1, 0xdc, 0xda, 0x2e, 0x89, 0x8d, 0xdc, 0x2a, 0x1c, 0x13, 0xa1, 0xfc, 0xfe, 0xf, 0xb2, 0xb9, 0x85, 0xc8, 0x45, 0xd6, 0xd1, 0x7, 0x5c, 0xa3, 0x8, 0x47, 0x44, 0x6d, 0x96, 0xe0}}
return a, nil
}
@ -364,7 +365,7 @@ func _1648554928_network_testUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1648554928_network_test.up.sql", size: 132, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1648554928_network_test.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0xc5, 0x7f, 0x87, 0xf3, 0x2c, 0xf7, 0xbb, 0xd3, 0x3a, 0x4e, 0x76, 0x88, 0xca, 0xaf, 0x73, 0xce, 0x8f, 0xa1, 0xf6, 0x3d, 0x4d, 0xed, 0x6f, 0x49, 0xf2, 0xfe, 0x56, 0x2a, 0x60, 0x68, 0xca}}
return a, nil
}
@ -384,7 +385,7 @@ func _1649174829_add_visitble_tokenUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1649174829_add_visitble_token.up.sql", size: 84, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1649174829_add_visitble_token.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa3, 0x22, 0xc0, 0x2b, 0x3f, 0x4f, 0x3d, 0x5e, 0x4c, 0x68, 0x7c, 0xd0, 0x15, 0x36, 0x9f, 0xec, 0xa1, 0x2a, 0x7b, 0xb4, 0xe3, 0xc6, 0xc9, 0xb4, 0x81, 0x50, 0x4a, 0x11, 0x3b, 0x35, 0x7, 0xcf}}
return a, nil
}
@ -404,7 +405,7 @@ func _1649882262_add_derived_from_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1649882262_add_derived_from_accounts.up.sql", size: 110, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1649882262_add_derived_from_accounts.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0xb9, 0x44, 0x4d, 0x85, 0x8d, 0x7f, 0xb4, 0xae, 0x4f, 0x5c, 0x66, 0x64, 0xb6, 0xe2, 0xe, 0x3d, 0xad, 0x9d, 0x8, 0x4f, 0xab, 0x6e, 0xa8, 0x7d, 0x76, 0x3, 0xad, 0x96, 0x1, 0xee, 0x5c}}
return a, nil
}
@ -424,7 +425,7 @@ func _1650612625_add_community_message_archive_hashes_tableUpSql() (*asset, erro
return nil, err
}
info := bindataFileInfo{name: "1650612625_add_community_message_archive_hashes_table.up.sql", size: 130, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1650612625_add_community_message_archive_hashes_table.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0x31, 0xb3, 0x75, 0x23, 0xe2, 0x45, 0xe, 0x47, 0x1b, 0x35, 0xa5, 0x6e, 0x83, 0x4e, 0x64, 0x7d, 0xd7, 0xa2, 0xda, 0xe9, 0x53, 0xf1, 0x16, 0x86, 0x2c, 0x57, 0xad, 0xfa, 0xca, 0x39, 0xde}}
return a, nil
}
@ -444,7 +445,7 @@ func _1650616788_add_communities_archives_info_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1650616788_add_communities_archives_info_table.up.sql", size: 208, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1650616788_add_communities_archives_info_table.up.sql", size: 208, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0x4f, 0x80, 0x45, 0xb9, 0xd9, 0x15, 0xe2, 0x78, 0xd0, 0xcb, 0x71, 0xc1, 0x1b, 0xb7, 0x1b, 0x1b, 0x97, 0xfe, 0x47, 0x53, 0x3c, 0x62, 0xbc, 0xdd, 0x3a, 0x94, 0x1a, 0xc, 0x48, 0x76, 0xe}}
return a, nil
}
@ -464,7 +465,7 @@ func _1652715604_add_clock_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1652715604_add_clock_accounts.up.sql", size: 62, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1652715604_add_clock_accounts.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xd9, 0x8d, 0x73, 0xc9, 0xef, 0xfa, 0xb1, 0x4b, 0xa5, 0xf3, 0x5, 0x19, 0x26, 0x46, 0xf8, 0x47, 0x93, 0xdb, 0xac, 0x2, 0xef, 0xf9, 0x71, 0x56, 0x83, 0xe6, 0x2d, 0xb0, 0xd7, 0x83, 0x5c}}
return a, nil
}
@ -484,7 +485,7 @@ func _1653037334_add_notifications_settings_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1653037334_add_notifications_settings_table.up.sql", size: 1276, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1653037334_add_notifications_settings_table.up.sql", size: 1276, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4b, 0xc4, 0x65, 0xac, 0xa, 0xf2, 0xef, 0xb6, 0x39, 0x3c, 0xc5, 0xb1, 0xb2, 0x9c, 0x86, 0x58, 0xe0, 0x38, 0xcb, 0x57, 0x3c, 0x76, 0x73, 0x87, 0x79, 0x4e, 0xf6, 0xed, 0xb0, 0x8e, 0x9e, 0xa}}
return a, nil
}
@ -504,7 +505,7 @@ func _1654702119_add_mutual_contact_settingsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1654702119_add_mutual_contact_settings.up.sql", size: 78, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1654702119_add_mutual_contact_settings.up.sql", size: 78, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x26, 0x66, 0x67, 0x50, 0xfe, 0xd7, 0xe3, 0x29, 0x8b, 0xff, 0x9d, 0x5a, 0x87, 0xa7, 0x99, 0x6e, 0xd6, 0xcd, 0x2e, 0xbb, 0x17, 0xdf, 0x7f, 0xf7, 0xa3, 0xfa, 0x32, 0x7c, 0x2d, 0x92, 0xc8, 0x74}}
return a, nil
}
@ -524,7 +525,7 @@ func _1655375270_add_clock_field_to_communities_settings_tableUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1655375270_add_clock_field_to_communities_settings_table.up.sql", size: 74, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1655375270_add_clock_field_to_communities_settings_table.up.sql", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x19, 0xc5, 0xc0, 0xf9, 0x84, 0x53, 0xdf, 0x83, 0xcf, 0xb6, 0x40, 0x6d, 0xf5, 0xdc, 0x77, 0x37, 0xb7, 0xe3, 0xa, 0x75, 0xe7, 0x6, 0x11, 0xca, 0x2b, 0x51, 0x92, 0xdd, 0x7d, 0xdb, 0xc3, 0xf5}}
return a, nil
}
@ -544,7 +545,7 @@ func _1655385721_drop_networks_configUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1655385721_drop_networks_config.up.sql", size: 27, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1655385721_drop_networks_config.up.sql", size: 27, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfc, 0xa7, 0x20, 0xbb, 0x67, 0x21, 0xe, 0xc6, 0xc8, 0x21, 0x74, 0xe0, 0xce, 0xc8, 0xe2, 0x2, 0xb4, 0xea, 0xf0, 0xe5, 0xc4, 0x4d, 0xdd, 0xd4, 0x52, 0x31, 0xa9, 0x3d, 0xcd, 0xd8, 0x9b, 0xab}}
return a, nil
}
@ -564,7 +565,7 @@ func _1655385724_networks_chaincolor_shortnameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1655385724_networks_chainColor_shortName.up.sql", size: 220, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1655385724_networks_chainColor_shortName.up.sql", size: 220, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0xe7, 0x84, 0xbb, 0x5f, 0xd2, 0x2c, 0x42, 0x88, 0x62, 0x52, 0xb6, 0x58, 0x31, 0xac, 0xc, 0x96, 0x2b, 0x1b, 0xe5, 0x4e, 0x9a, 0x3a, 0xf6, 0xf6, 0xfc, 0xa9, 0x1a, 0x35, 0x62, 0x28, 0x88}}
return a, nil
}
@ -584,7 +585,7 @@ func _1655456688_add_deleted_at_field_to_bookmarks_tableUpSql() (*asset, error)
return nil, err
}
info := bindataFileInfo{name: "1655456688_add_deleted_at_field_to_bookmarks_table.up.sql", size: 69, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1655456688_add_deleted_at_field_to_bookmarks_table.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe7, 0x9a, 0xbd, 0x9a, 0xc9, 0xf, 0xdf, 0x90, 0x0, 0x5d, 0xea, 0x6e, 0x7d, 0x51, 0x95, 0xcd, 0x90, 0xd3, 0x1a, 0x36, 0x6c, 0xf4, 0xbd, 0xa7, 0x6b, 0xbf, 0xe5, 0xdb, 0xa3, 0x88, 0xe3, 0x50}}
return a, nil
}
@ -604,7 +605,7 @@ func _1655462032_create_bookmarks_deleted_at_indexUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1655462032_create_bookmarks_deleted_at_index.up.sql", size: 81, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1655462032_create_bookmarks_deleted_at_index.up.sql", size: 81, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x8e, 0x20, 0x6b, 0x14, 0x9e, 0xcd, 0x97, 0xd3, 0xfe, 0x62, 0x3, 0x26, 0x59, 0x1, 0x6c, 0x99, 0xef, 0x6d, 0x21, 0xd4, 0xb5, 0xa3, 0xf4, 0x39, 0x40, 0x54, 0x6, 0xd, 0x60, 0x13, 0x38}}
return a, nil
}
@ -624,7 +625,7 @@ func _1657617291_add_multi_transactions_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1657617291_add_multi_transactions_table.up.sql", size: 412, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1657617291_add_multi_transactions_table.up.sql", size: 412, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x86, 0xb0, 0x4e, 0x8c, 0x4, 0x82, 0xb4, 0x43, 0xaa, 0xd0, 0x16, 0xdd, 0xcb, 0x88, 0x81, 0xac, 0x4, 0x34, 0x1a, 0x8f, 0x2e, 0xc5, 0x69, 0xb, 0xf0, 0x17, 0xf7, 0xe3, 0x9, 0xe, 0x54, 0xe0}}
return a, nil
}
@ -644,7 +645,7 @@ func _1660134042_add_social_links_settings_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134042_add_social_links_settings_table.up.sql", size: 334, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1660134042_add_social_links_settings_table.up.sql", size: 334, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x84, 0x73, 0xb6, 0xe7, 0x3f, 0xaa, 0x39, 0x9a, 0x56, 0x56, 0x31, 0xf1, 0x8e, 0x26, 0x23, 0x1, 0xe4, 0xfa, 0x98, 0xfe, 0x78, 0x87, 0x20, 0xcb, 0x52, 0xf4, 0x38, 0x7f, 0xc4, 0x1c, 0x4, 0x22}}
return a, nil
}
@ -664,7 +665,7 @@ func _1660134060_settings_bioUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134060_settings_bio.up.sql", size: 91, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1660134060_settings_bio.up.sql", size: 91, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x25, 0xa0, 0xa6, 0x47, 0xff, 0xbc, 0x2a, 0x0, 0xff, 0x59, 0x4b, 0xb0, 0xc9, 0x4e, 0x15, 0xe4, 0xd9, 0xda, 0xeb, 0xfe, 0x55, 0x98, 0xc3, 0x9d, 0x96, 0xe7, 0xf, 0xd1, 0x5c, 0x93, 0x73}}
return a, nil
}
@ -684,7 +685,7 @@ func _1660134070_add_wakuv2_storeUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134070_add_wakuv2_store.up.sql", size: 269, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1660134070_add_wakuv2_store.up.sql", size: 269, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1d, 0xe6, 0xc3, 0x9, 0xef, 0xdc, 0xae, 0x49, 0x30, 0x78, 0x54, 0xd6, 0xdb, 0xbf, 0xc0, 0x8e, 0x25, 0x8f, 0xfc, 0x67, 0x80, 0x39, 0x37, 0xd4, 0x86, 0xc1, 0x85, 0xc8, 0x99, 0xc4, 0x59, 0xd4}}
return a, nil
}
@ -704,7 +705,7 @@ func _1660134072_waku2_store_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134072_waku2_store_messages.up.sql", size: 497, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1660134072_waku2_store_messages.up.sql", size: 497, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xeb, 0xb4, 0xa0, 0xa1, 0x2b, 0xcb, 0x4c, 0x3c, 0xc6, 0xd0, 0xe8, 0x96, 0xe3, 0x96, 0xf1, 0x4f, 0x1f, 0xe0, 0xe7, 0x1f, 0x85, 0xa3, 0xe, 0xf7, 0x52, 0x56, 0x63, 0x2b, 0xb0, 0x87, 0x7b}}
return a, nil
}
@ -724,7 +725,7 @@ func _1662365868_add_key_uid_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662365868_add_key_uid_accounts.up.sql", size: 68, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1662365868_add_key_uid_accounts.up.sql", size: 68, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc6, 0xd8, 0x2f, 0x2f, 0x3b, 0xa8, 0xbd, 0x6d, 0xf6, 0x87, 0x7e, 0xd2, 0xf1, 0xa2, 0xf7, 0x81, 0x6a, 0x23, 0x10, 0xbc, 0xbf, 0x5b, 0xe7, 0x2b, 0x9c, 0xa9, 0x8a, 0x18, 0xbb, 0xd0, 0x86, 0x91}}
return a, nil
}
@ -744,7 +745,7 @@ func _1662447680_add_keypairs_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662447680_add_keypairs_table.up.sql", size: 218, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1662447680_add_keypairs_table.up.sql", size: 218, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0x25, 0xa9, 0xc7, 0x63, 0x27, 0x97, 0x35, 0x5f, 0x6b, 0xab, 0x26, 0xcb, 0xf9, 0xbd, 0x5e, 0xac, 0x3, 0xa0, 0x5e, 0xb9, 0x71, 0xa3, 0x1f, 0xb3, 0x4f, 0x7f, 0x79, 0x28, 0x48, 0xbe, 0xc}}
return a, nil
}
@ -764,7 +765,7 @@ func _1662460056_move_favourites_to_saved_addressesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662460056_move_favourites_to_saved_addresses.up.sql", size: 233, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1662460056_move_favourites_to_saved_addresses.up.sql", size: 233, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0xa2, 0x8c, 0xa3, 0xec, 0xad, 0xdf, 0xc3, 0x48, 0x5, 0x9b, 0x50, 0x25, 0x59, 0xae, 0x7d, 0xee, 0x58, 0xd2, 0x41, 0x27, 0xf2, 0x22, 0x2e, 0x9a, 0xb9, 0x4a, 0xcc, 0x38, 0x6e, 0x3a, 0xb2}}
return a, nil
}
@ -784,7 +785,7 @@ func _1662738097_add_base_fee_transactionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662738097_add_base_fee_transaction.up.sql", size: 112, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1662738097_add_base_fee_transaction.up.sql", size: 112, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0xfb, 0x10, 0xae, 0xfc, 0x77, 0x70, 0x98, 0x6f, 0xec, 0xaa, 0xcd, 0x7, 0xc7, 0x74, 0x23, 0xc, 0xd5, 0x1e, 0x82, 0xdd, 0xfe, 0xff, 0x3b, 0xd2, 0x49, 0x10, 0x5b, 0x30, 0xc, 0x2d, 0xb0}}
return a, nil
}
@ -804,7 +805,7 @@ func _1662972194_add_keypairs_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662972194_add_keypairs_table.up.sql", size: 345, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1662972194_add_keypairs_table.up.sql", size: 345, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x76, 0xf2, 0x86, 0xe1, 0x7e, 0xe9, 0x47, 0x32, 0x48, 0xd5, 0x6b, 0xe5, 0xd, 0xab, 0xb7, 0xf1, 0xd4, 0xf1, 0xad, 0x38, 0xa6, 0x11, 0xe7, 0xce, 0x5c, 0x11, 0x11, 0xf, 0x47, 0xb2, 0x4}}
return a, nil
}
@ -824,7 +825,7 @@ func _1664392661_add_third_party_id_to_waku_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664392661_add_third_party_id_to_waku_messages.up.sql", size: 70, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1664392661_add_third_party_id_to_waku_messages.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfd, 0x67, 0x66, 0x9e, 0x66, 0x74, 0xce, 0x1c, 0xb, 0x1b, 0x9d, 0xd5, 0xfc, 0x65, 0xe, 0x83, 0x90, 0x4c, 0x61, 0x4e, 0x6b, 0xe7, 0x86, 0xbe, 0x36, 0x4f, 0x91, 0x36, 0x4, 0x47, 0x7b, 0x82}}
return a, nil
}
@ -844,7 +845,7 @@ func _1664783660_add_sync_info_to_saved_addressesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664783660_add_sync_info_to_saved_addresses.up.sql", size: 388, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "1664783660_add_sync_info_to_saved_addresses.up.sql", size: 388, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x67, 0x7c, 0x3a, 0x95, 0x4e, 0x55, 0xb2, 0xbd, 0xb4, 0x18, 0x93, 0xc1, 0xcf, 0x9f, 0x12, 0xbb, 0x49, 0x8a, 0x2a, 0x6a, 0x2a, 0x7f, 0xad, 0x44, 0xc3, 0xf, 0x3a, 0x79, 0x18, 0xb9, 0x4c, 0x64}}
return a, nil
}
@ -864,11 +865,31 @@ func _1668109917_wakunodesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1668109917_wakunodes.up.sql", size: 99, mode: os.FileMode(0664), modTime: time.Unix(1669200987, 0)}
info := bindataFileInfo{name: "1668109917_wakunodes.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x29, 0xaa, 0x9e, 0x2, 0x66, 0x85, 0x69, 0xa8, 0xd9, 0xe2, 0x4b, 0x8d, 0x2a, 0x9c, 0xdf, 0xd2, 0xef, 0x64, 0x58, 0xe3, 0xa6, 0xe7, 0xc1, 0xd1, 0xc8, 0x9c, 0xc0, 0x2c, 0x1, 0xa8, 0x7b, 0x81}}
return a, nil
}
var __1670249678_display_name_to_settings_sync_clock_tableUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x41\x0a\x42\x21\x10\x06\xe0\xab\xfc\x47\x68\xdf\x6a\xca\x29\x82\x69\x1e\x3c\xc6\xb5\x88\x49\x48\x66\xc1\xb8\xf1\xf6\xef\x23\x31\xde\x61\x74\x11\x86\xd7\x39\xdb\x78\x7b\xf2\x35\x4a\x2a\xfd\x57\x3e\xa0\x10\x70\xdd\x24\x3e\x15\xaf\xe6\xff\x9e\x57\x1a\xf9\x5b\xf1\x50\xe3\x3b\xef\xd0\xcd\xa0\x51\x04\x81\x6f\x14\xc5\x70\x3a\x1f\x01\x00\x00\xff\xff\x39\x3a\xe6\xb0\x53\x00\x00\x00")
func _1670249678_display_name_to_settings_sync_clock_tableUpSqlBytes() ([]byte, error) {
return bindataRead(
__1670249678_display_name_to_settings_sync_clock_tableUpSql,
"1670249678_display_name_to_settings_sync_clock_table.up.sql",
)
}
func _1670249678_display_name_to_settings_sync_clock_tableUpSql() (*asset, error) {
bytes, err := _1670249678_display_name_to_settings_sync_clock_tableUpSqlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "1670249678_display_name_to_settings_sync_clock_table.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1671625544, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x39, 0x18, 0xdc, 0xc4, 0x1f, 0x79, 0x22, 0x16, 0x4d, 0xdf, 0x6c, 0x66, 0xd5, 0xa4, 0x88, 0x5d, 0x5, 0x37, 0xa7, 0x41, 0x5, 0x50, 0xae, 0x12, 0xfa, 0x7e, 0x89, 0x24, 0x5c, 0xae, 0x30, 0xfc}}
return a, nil
}
var __1670836810_add_imported_flag_to_community_archive_hashesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xce\xcf\xcd\x2d\xcd\xcb\x2c\xa9\x8c\xcf\x4d\x2d\x2e\x4e\x4c\x4f\x8d\x4f\x2c\x4a\xce\xc8\x2c\x4b\x8d\xcf\x48\x2c\xce\x48\x2d\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\xc8\xcc\x2d\xc8\x2f\x2a\x49\x4d\x51\x70\xf2\xf7\xf7\x51\x70\x71\x75\x73\x0c\xf5\x09\x51\x70\x73\xf4\x09\x76\xb5\xe6\x0a\x0d\x70\x71\x0c\x21\xc2\xbc\x60\xd7\x10\x84\x41\xb6\x0a\x06\xd6\x5c\x5c\x80\x00\x00\x00\xff\xff\xf5\xc9\x5a\x6d\x90\x00\x00\x00")
func _1670836810_add_imported_flag_to_community_archive_hashesUpSqlBytes() ([]byte, error) {
@ -884,7 +905,7 @@ func _1670836810_add_imported_flag_to_community_archive_hashesUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1670836810_add_imported_flag_to_community_archive_hashes.up.sql", size: 144, mode: os.FileMode(0664), modTime: time.Unix(1670944751, 0)}
info := bindataFileInfo{name: "1670836810_add_imported_flag_to_community_archive_hashes.up.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1671625544, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6f, 0xf, 0xf0, 0xbd, 0xfe, 0x63, 0x25, 0x8f, 0x5e, 0x46, 0x4b, 0x45, 0x31, 0x8b, 0x3e, 0xd8, 0x6b, 0x5d, 0x9d, 0x6d, 0x10, 0x9a, 0x87, 0x4b, 0x18, 0xc6, 0x39, 0x81, 0x6e, 0xe4, 0x75, 0xfb}}
return a, nil
}
@ -904,7 +925,7 @@ func _1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql() (*asset,
return nil, err
}
info := bindataFileInfo{name: "1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql", size: 86, mode: os.FileMode(0664), modTime: time.Unix(1671438768, 0)}
info := bindataFileInfo{name: "1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1671625544, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xda, 0x8b, 0x4b, 0xd6, 0xd8, 0xe2, 0x3d, 0xf7, 0x6b, 0xcd, 0x1e, 0x70, 0x9, 0x2e, 0x35, 0x4, 0x61, 0xc3, 0xb5, 0x9d, 0xc5, 0x27, 0x21, 0xa, 0x5a, 0xd6, 0x3e, 0xa6, 0x24, 0xa2, 0x12, 0xdf}}
return a, nil
}
@ -924,7 +945,7 @@ func docGo() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0664), modTime: time.Unix(1668713068, 0)}
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1670843716, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}}
return a, nil
}
@ -1096,6 +1117,8 @@ var _bindata = map[string]func() (*asset, error){
"1668109917_wakunodes.up.sql": _1668109917_wakunodesUpSql,
"1670249678_display_name_to_settings_sync_clock_table.up.sql": _1670249678_display_name_to_settings_sync_clock_tableUpSql,
"1670836810_add_imported_flag_to_community_archive_hashes.up.sql": _1670836810_add_imported_flag_to_community_archive_hashesUpSql,
"1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql": _1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql,
@ -1182,6 +1205,7 @@ var _bintree = &bintree{nil, map[string]*bintree{
"1664392661_add_third_party_id_to_waku_messages.up.sql": &bintree{_1664392661_add_third_party_id_to_waku_messagesUpSql, map[string]*bintree{}},
"1664783660_add_sync_info_to_saved_addresses.up.sql": &bintree{_1664783660_add_sync_info_to_saved_addressesUpSql, map[string]*bintree{}},
"1668109917_wakunodes.up.sql": &bintree{_1668109917_wakunodesUpSql, map[string]*bintree{}},
"1670249678_display_name_to_settings_sync_clock_table.up.sql": &bintree{_1670249678_display_name_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1670836810_add_imported_flag_to_community_archive_hashes.up.sql": &bintree{_1670836810_add_imported_flag_to_community_archive_hashesUpSql, map[string]*bintree{}},
"1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql": &bintree{_1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},

View File

@ -0,0 +1 @@
ALTER TABLE settings_sync_clock ADD COLUMN display_name INTEGER NOT NULL DEFAULT 0;

View File

@ -72,6 +72,12 @@ var (
DisplayName = SettingField{
reactFieldName: "display-name",
dBColumnName: "display_name",
syncProtobufFactory: &SyncProtobufFactory{
fromInterface: displayNameProtobufFactory,
fromStruct: displayNameProtobufFactoryStruct,
valueFromProtobuf: StringFromSyncProtobuf,
protobufType: protobuf.SyncSetting_DISPLAY_NAME,
},
}
Bio = SettingField{
reactFieldName: "bio",

View File

@ -426,6 +426,14 @@ func (db *Database) GetMessagesFromContactsOnly() (result bool, err error) {
return result, err
}
func (db *Database) GetProfilePicturesShowTo() (result int64, err error) {
err = db.makeSelectRow(ProfilePicturesShowTo).Scan(&result)
if err == sql.ErrNoRows {
return result, nil
}
return result, err
}
func (db *Database) GetLatestDerivedPath() (result uint, err error) {
err = db.makeSelectRow(LatestDerivedPath).Scan(&result)
return

View File

@ -9,8 +9,8 @@ import (
)
type ValueHandler func(interface{}) (interface{}, error)
type SyncSettingProtobufFactoryInterface func(interface{}, uint64, string) (*common.RawMessage, error)
type SyncSettingProtobufFactoryStruct func(Settings, uint64, string) (*common.RawMessage, error)
type SyncSettingProtobufFactoryInterface func(interface{}, uint64, string) (*common.RawMessage, *protobuf.SyncSetting, error)
type SyncSettingProtobufFactoryStruct func(Settings, uint64, string) (*common.RawMessage, *protobuf.SyncSetting, error)
type SyncSettingProtobufToValue func(setting *protobuf.SyncSetting) interface{}
// SyncProtobufFactory represents a collection of functionality to generate and parse *protobuf.SyncSetting

View File

@ -33,123 +33,128 @@ func buildRawSyncSettingMessage(msg *protobuf.SyncSetting, chatID string) (*comm
// Currency
func buildRawCurrencySyncMessage(v string, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawCurrencySyncMessage(v string, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_CURRENCY,
Value: &protobuf.SyncSetting_ValueString{ValueString: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func currencyProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func currencyProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertString(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawCurrencySyncMessage(v, clock, chatID)
}
func currencyProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func currencyProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawCurrencySyncMessage(s.Currency, clock, chatID)
}
// GifFavorites
func buildRawGifFavoritesSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawGifFavoritesSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_GIF_FAVOURITES,
Value: &protobuf.SyncSetting_ValueBytes{ValueBytes: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func gifFavouritesProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func gifFavouritesProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertBytes(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawGifFavoritesSyncMessage(v, clock, chatID)
}
func gifFavouritesProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func gifFavouritesProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
gf := extractJSONRawMessage(s.GifFavorites)
return buildRawGifFavoritesSyncMessage(gf, clock, chatID)
}
// GifRecents
func buildRawGifRecentsSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawGifRecentsSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_GIF_RECENTS,
Value: &protobuf.SyncSetting_ValueBytes{ValueBytes: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func gifRecentsProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func gifRecentsProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertBytes(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawGifRecentsSyncMessage(v, clock, chatID)
}
func gifRecentsProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func gifRecentsProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
gr := extractJSONRawMessage(s.GifRecents)
return buildRawGifRecentsSyncMessage(gr, clock, chatID)
}
// MessagesFromContactsOnly
func buildRawMessagesFromContactsOnlySyncMessage(v bool, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawMessagesFromContactsOnlySyncMessage(v bool, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_MESSAGES_FROM_CONTACTS_ONLY,
Value: &protobuf.SyncSetting_ValueBool{ValueBool: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func messagesFromContactsOnlyProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func messagesFromContactsOnlyProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertBool(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawMessagesFromContactsOnlySyncMessage(v, clock, chatID)
}
func messagesFromContactsOnlyProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func messagesFromContactsOnlyProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawMessagesFromContactsOnlySyncMessage(s.MessagesFromContactsOnly, clock, chatID)
}
// PreferredName
func buildRawPreferredNameSyncMessage(v string, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawPreferredNameSyncMessage(v string, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_PREFERRED_NAME,
Value: &protobuf.SyncSetting_ValueString{ValueString: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func preferredNameProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func preferredNameProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertString(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawPreferredNameSyncMessage(v, clock, chatID)
}
func preferredNameProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func preferredNameProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
var pn string
if s.PreferredName != nil {
pn = *s.PreferredName
@ -160,171 +165,178 @@ func preferredNameProtobufFactoryStruct(s Settings, clock uint64, chatID string)
// PreviewPrivacy
func buildRawPreviewPrivacySyncMessage(v bool, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawPreviewPrivacySyncMessage(v bool, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_PREVIEW_PRIVACY,
Value: &protobuf.SyncSetting_ValueBool{ValueBool: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func previewPrivacyProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func previewPrivacyProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertBool(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawPreviewPrivacySyncMessage(v, clock, chatID)
}
func previewPrivacyProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func previewPrivacyProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawPreviewPrivacySyncMessage(s.PreviewPrivacy, clock, chatID)
}
// ProfilePicturesShowTo
func buildRawProfilePicturesShowToSyncMessage(v int64, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawProfilePicturesShowToSyncMessage(v int64, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_PROFILE_PICTURES_SHOW_TO,
Value: &protobuf.SyncSetting_ValueInt64{ValueInt64: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func profilePicturesShowToProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func profilePicturesShowToProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := parseNumberToInt64(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawProfilePicturesShowToSyncMessage(v, clock, chatID)
}
func profilePicturesShowToProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func profilePicturesShowToProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawProfilePicturesShowToSyncMessage(int64(s.ProfilePicturesShowTo), clock, chatID)
}
// ProfilePicturesVisibility
func buildRawProfilePicturesVisibilitySyncMessage(v int64, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawProfilePicturesVisibilitySyncMessage(v int64, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_PROFILE_PICTURES_VISIBILITY,
Value: &protobuf.SyncSetting_ValueInt64{ValueInt64: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func profilePicturesVisibilityProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func profilePicturesVisibilityProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := parseNumberToInt64(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawProfilePicturesVisibilitySyncMessage(v, clock, chatID)
}
func profilePicturesVisibilityProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func profilePicturesVisibilityProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawProfilePicturesVisibilitySyncMessage(int64(s.ProfilePicturesVisibility), clock, chatID)
}
// SendStatusUpdates
func buildRawSendStatusUpdatesSyncMessage(v bool, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawSendStatusUpdatesSyncMessage(v bool, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_SEND_STATUS_UPDATES,
Value: &protobuf.SyncSetting_ValueBool{ValueBool: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func sendStatusUpdatesProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func sendStatusUpdatesProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertBool(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawSendStatusUpdatesSyncMessage(v, clock, chatID)
}
func sendStatusUpdatesProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func sendStatusUpdatesProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawSendStatusUpdatesSyncMessage(s.SendStatusUpdates, clock, chatID)
}
// StickerPacksInstalled
func buildRawStickerPacksInstalledSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawStickerPacksInstalledSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_STICKERS_PACKS_INSTALLED,
Value: &protobuf.SyncSetting_ValueBytes{ValueBytes: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func stickersPacksInstalledProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func stickersPacksInstalledProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := parseJSONBlobData(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawStickerPacksInstalledSyncMessage(v, clock, chatID)
}
func stickersPacksInstalledProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func stickersPacksInstalledProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
spi := extractJSONRawMessage(s.StickerPacksInstalled)
return buildRawStickerPacksInstalledSyncMessage(spi, clock, chatID)
}
// StickerPacksPending
func buildRawStickerPacksPendingSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawStickerPacksPendingSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_STICKERS_PACKS_PENDING,
Value: &protobuf.SyncSetting_ValueBytes{ValueBytes: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func stickersPacksPendingProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func stickersPacksPendingProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := parseJSONBlobData(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawStickerPacksPendingSyncMessage(v, clock, chatID)
}
func stickersPacksPendingProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func stickersPacksPendingProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
spp := extractJSONRawMessage(s.StickerPacksPending)
return buildRawStickerPacksPendingSyncMessage(spp, clock, chatID)
}
// StickersRecentStickers
func buildRawStickersRecentStickersSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, error) {
func buildRawStickersRecentStickersSyncMessage(v []byte, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_STICKERS_RECENT_STICKERS,
Value: &protobuf.SyncSetting_ValueBytes{ValueBytes: v},
Clock: clock,
}
return buildRawSyncSettingMessage(pb, chatID)
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func stickersRecentStickersProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, error) {
func stickersRecentStickersProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := parseJSONBlobData(value)
if err != nil {
return nil, err
return nil, nil, err
}
return buildRawStickersRecentStickersSyncMessage(v, clock, chatID)
}
func stickersRecentStickersProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, error) {
func stickersRecentStickersProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
srs := extractJSONRawMessage(s.StickersRecentStickers)
return buildRawStickersRecentStickersSyncMessage(srs, clock, chatID)
}
@ -426,3 +438,29 @@ func extractJSONRawMessage(jrm *json.RawMessage) []byte {
}
return out
}
// DisplayName
func buildRawDisplayNameSyncMessage(v string, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
pb := &protobuf.SyncSetting{
Type: protobuf.SyncSetting_DISPLAY_NAME,
Value: &protobuf.SyncSetting_ValueString{ValueString: v},
Clock: clock,
}
rm, err := buildRawSyncSettingMessage(pb, chatID)
return rm, pb, err
}
func displayNameProtobufFactory(value interface{}, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
v, err := assertString(value)
if err != nil {
return nil, nil, err
}
return buildRawDisplayNameSyncMessage(v, clock, chatID)
}
func displayNameProtobufFactoryStruct(s Settings, clock uint64, chatID string) (*common.RawMessage, *protobuf.SyncSetting, error) {
return buildRawDisplayNameSyncMessage(s.DisplayName, clock, chatID)
}

View File

@ -43,7 +43,7 @@ func TestProfilePicturesVisibilityProtobufFactory(t *testing.T) {
for _, c := range cs {
a := require.New(t)
rm, err := profilePicturesVisibilityProtobufFactory(c.Input.Value, c.Input.Clock, "0x123def")
rm, _, err := profilePicturesVisibilityProtobufFactory(c.Input.Value, c.Input.Clock, "0x123def")
a.NoError(err, c.Name)
ppvp := new(protobuf.SyncSetting)

View File

@ -556,7 +556,7 @@ func (s *MessengerCommunitiesSuite) TestCommunityContactCodeAdvertisement() {
s.joinCommunity(community, s.alice)
// Trigger ContactCodeAdvertisement
err := s.bob.SetDisplayName("bobby")
err := s.bob.SetDisplayName("bobby", true)
s.Require().NoError(err)
err = s.bob.SetBio("I like P2P chats")
s.Require().NoError(err)

View File

@ -151,6 +151,7 @@ type Messenger struct {
downloadHistoryArchiveTasksWaitGroup sync.WaitGroup
verificationDatabase *verification.Persistence
savedAddressesManager *wallet.SavedAddressesManager
backedupMessagesHandler backupHandler
// TODO(samyoul) Determine if/how the remaining usage of this mutex can be removed
mutex sync.Mutex
@ -479,6 +480,9 @@ func NewMessenger(
},
logger: logger,
savedAddressesManager: savedAddressesManager,
backedupMessagesHandler: backupHandler{
postponeHandling: true,
},
}
if c.outputMessagesCSV {
@ -684,6 +688,7 @@ func (m *Messenger) Start() (*MessengerResponse, error) {
m.broadcastLatestUserStatus()
m.timeoutAutomaticStatusUpdates()
m.startBackupLoop()
m.startWaitingForTheLatestBackedupMessageLoop()
err = m.startAutoMessageLoop()
if err != nil {
return nil, err
@ -3570,9 +3575,11 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
p := msg.ParsedMessage.Interface().(protobuf.Backup)
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, senderID, filter.Topic, filter.ChatID, msg.Type, p)
logger.Debug("Handling Backup", zap.Any("message", p))
err = m.HandleBackup(messageState, p)
if err != nil {
logger.Warn("failed to handle Backup", zap.Error(err))
errors := m.HandleBackup(messageState, p)
if len(errors) > 0 {
for _, err := range errors {
logger.Warn("failed to handle Backup", zap.Error(err))
}
allMessagesProcessed = false
continue
}
@ -3706,12 +3713,13 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, senderID, filter.Topic, filter.ChatID, msg.Type, ss)
logger.Debug("Handling SyncSetting", zap.Any("message", ss))
err := m.handleSyncSetting(messageState.Response, &ss)
settingField, err := m.extractSyncSetting(&ss)
if err != nil {
logger.Warn("failed to handle SyncSetting", zap.Error(err))
allMessagesProcessed = false
continue
}
messageState.Response.Settings = append(messageState.Response.Settings, settingField)
case protobuf.RequestAddressForTransaction:
command := msg.ParsedMessage.Interface().(protobuf.RequestAddressForTransaction)

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/protobuf/proto"
"go.uber.org/zap"
"github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/protobuf"
)
@ -78,6 +79,124 @@ func (m *Messenger) startBackupLoop() {
}
func (m *Messenger) BackupData(ctx context.Context) (uint64, error) {
clock, chat := m.getLastClockWithRelatedChat()
contactsToBackup := m.backupContacts(ctx)
communitiesToBackup, err := m.backupCommunities(ctx, clock)
if err != nil {
return 0, err
}
profileToBackup, err := m.backupProfile(ctx, clock)
if err != nil {
return 0, err
}
_, settings, errors := m.prepareSyncSettingsMessages(clock)
if len(errors) != 0 {
// return just the first error, the others have been logged
return 0, errors[0]
}
backupDetailsOnly := func() *protobuf.Backup {
return &protobuf.Backup{
Clock: clock,
ContactsDetails: &protobuf.FetchingBackedUpDataDetails{
DataNumber: uint32(0),
TotalNumber: uint32(len(contactsToBackup)),
},
CommunitiesDetails: &protobuf.FetchingBackedUpDataDetails{
DataNumber: uint32(0),
TotalNumber: uint32(len(communitiesToBackup)),
},
ProfileDetails: &protobuf.FetchingBackedUpDataDetails{
DataNumber: uint32(0),
TotalNumber: uint32(len(profileToBackup)),
},
SettingsDetails: &protobuf.FetchingBackedUpDataDetails{
DataNumber: uint32(0),
TotalNumber: uint32(len(settings)),
},
}
}
// Update contacts messages encode and dispatch
for i, d := range contactsToBackup {
pb := backupDetailsOnly()
pb.ContactsDetails.DataNumber = uint32(i + 1)
pb.Contacts = d.Contacts
err = m.encodeAndDispatchBackupMessage(ctx, pb, chat.ID)
if err != nil {
return 0, err
}
}
// Update communities messages encode and dispatch
for i, d := range communitiesToBackup {
pb := backupDetailsOnly()
pb.CommunitiesDetails.DataNumber = uint32(i + 1)
pb.Communities = d.Communities
err = m.encodeAndDispatchBackupMessage(ctx, pb, chat.ID)
if err != nil {
return 0, err
}
}
// Update profile messages encode and dispatch
for i, d := range profileToBackup {
pb := backupDetailsOnly()
pb.ProfileDetails.DataNumber = uint32(i + 1)
pb.Profile = d.Profile
err = m.encodeAndDispatchBackupMessage(ctx, pb, chat.ID)
if err != nil {
return 0, err
}
}
// Update settings messages encode and dispatch
for i, d := range settings {
pb := backupDetailsOnly()
pb.SettingsDetails.DataNumber = uint32(i + 1)
pb.Setting = d
err = m.encodeAndDispatchBackupMessage(ctx, pb, chat.ID)
if err != nil {
return 0, err
}
}
chat.LastClockValue = clock
err = m.saveChat(chat)
if err != nil {
return 0, err
}
clockInSeconds := clock / 1000
err = m.settings.SetLastBackup(clockInSeconds)
if err != nil {
return 0, err
}
if m.config.messengerSignalsHandler != nil {
m.config.messengerSignalsHandler.BackupPerformed(clockInSeconds)
}
return clockInSeconds, nil
}
func (m *Messenger) encodeAndDispatchBackupMessage(ctx context.Context, message *protobuf.Backup, chatID string) error {
encodedMessage, err := proto.Marshal(message)
if err != nil {
return err
}
_, err = m.dispatchMessage(ctx, common.RawMessage{
LocalChatID: chatID,
Payload: encodedMessage,
SkipEncryption: true,
SendOnPersonalTopic: true,
MessageType: protobuf.ApplicationMetadataMessage_BACKUP,
})
return err
}
func (m *Messenger) backupContacts(ctx context.Context) []*protobuf.Backup {
var contacts []*protobuf.SyncInstallationContactV2
m.allContacts.Range(func(contactID string, contact *Contact) (shouldContinue bool) {
syncContact := m.syncBackupContact(ctx, contact)
@ -87,8 +206,7 @@ func (m *Messenger) BackupData(ctx context.Context) (uint64, error) {
return true
})
clock, chat := m.getLastClockWithRelatedChat()
var backupMessages []*protobuf.Backup
for i := 0; i < len(contacts); i += BackupContactsPerBatch {
j := i + BackupContactsPerBatch
if j > len(contacts) {
@ -100,52 +218,41 @@ func (m *Messenger) BackupData(ctx context.Context) (uint64, error) {
backupMessage := &protobuf.Backup{
Contacts: contactsToAdd,
}
encodedMessage, err := proto.Marshal(backupMessage)
if err != nil {
return 0, err
}
_, err = m.dispatchMessage(ctx, common.RawMessage{
LocalChatID: chat.ID,
Payload: encodedMessage,
SkipEncryption: true,
SendOnPersonalTopic: true,
MessageType: protobuf.ApplicationMetadataMessage_BACKUP,
})
if err != nil {
return 0, err
}
backupMessages = append(backupMessages, backupMessage)
}
return backupMessages
}
func (m *Messenger) backupCommunities(ctx context.Context, clock uint64) ([]*protobuf.Backup, error) {
joinedCs, err := m.communitiesManager.JoinedAndPendingCommunitiesWithRequests()
if err != nil {
return 0, err
return nil, err
}
deletedCs, err := m.communitiesManager.DeletedCommunities()
if err != nil {
return 0, err
return nil, err
}
var backupMessages []*protobuf.Backup
cs := append(joinedCs, deletedCs...)
for _, c := range cs {
_, beingImported := m.importingCommunities[c.IDString()]
if !beingImported {
settings, err := m.communitiesManager.GetCommunitySettingsByID(c.ID())
if err != nil {
return 0, err
return nil, err
}
syncMessage, err := c.ToSyncCommunityProtobuf(clock, settings)
if err != nil {
return 0, err
return nil, err
}
encodedKeys, err := m.encryptor.GetAllHREncodedKeys(c.ID())
if err != nil {
return 0, err
return nil, err
}
syncMessage.EncryptionKeys = encodedKeys
@ -153,39 +260,11 @@ func (m *Messenger) BackupData(ctx context.Context) (uint64, error) {
Communities: []*protobuf.SyncCommunity{syncMessage},
}
encodedMessage, err := proto.Marshal(backupMessage)
if err != nil {
return 0, err
}
_, err = m.dispatchMessage(ctx, common.RawMessage{
LocalChatID: chat.ID,
Payload: encodedMessage,
SkipEncryption: true,
SendOnPersonalTopic: true,
MessageType: protobuf.ApplicationMetadataMessage_BACKUP,
})
if err != nil {
return 0, err
}
backupMessages = append(backupMessages, backupMessage)
}
}
chat.LastClockValue = clock
err = m.saveChat(chat)
if err != nil {
return 0, err
}
clockInSeconds := clock / 1000
err = m.settings.SetLastBackup(clockInSeconds)
if err != nil {
return 0, err
}
if m.config.messengerSignalsHandler != nil {
m.config.messengerSignalsHandler.BackupPerformed(clockInSeconds)
}
return clockInSeconds, nil
return backupMessages, nil
}
// syncContact sync as contact with paired devices
@ -220,3 +299,54 @@ func (m *Messenger) syncBackupContact(ctx context.Context, contact *Contact) *pr
TrustStatus: int64(contact.TrustStatus),
}
}
func (m *Messenger) backupProfile(ctx context.Context, clock uint64) ([]*protobuf.Backup, error) {
displayName, err := m.settings.DisplayName()
if err != nil {
return nil, err
}
displayNameClock, err := m.settings.GetSettingLastSynced(settings.DisplayName)
if err != nil {
return nil, err
}
if displayNameClock == 0 {
displayNameClock = clock
}
keyUID := m.account.KeyUID
images, err := m.multiAccounts.GetIdentityImages(keyUID)
if err != nil {
return nil, err
}
pictures := make([]*protobuf.SyncProfilePicture, len(images))
for i, image := range images {
p := &protobuf.SyncProfilePicture{}
p.Name = image.Name
p.Payload = image.Payload
p.Width = uint32(image.Width)
p.Height = uint32(image.Height)
p.FileSize = uint32(image.FileSize)
p.ResizeTarget = uint32(image.ResizeTarget)
if image.Clock == 0 {
p.Clock = clock
} else {
p.Clock = image.Clock
}
pictures[i] = p
}
backupMessage := &protobuf.Backup{
Profile: &protobuf.BackedUpProfile{
KeyUid: keyUID,
DisplayName: displayName,
Pictures: pictures,
DisplayNameClock: displayNameClock,
},
}
backupMessages := []*protobuf.Backup{backupMessage}
return backupMessages, nil
}

View File

@ -0,0 +1,205 @@
package protocol
import (
"sync"
"time"
"go.uber.org/zap"
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/wakusync"
)
const (
// timeToPostponeBackedUpMessagesHandling - the idea is to wait for 30 secs in loading state with the hope that at least
// one message from the set of last backed up messages will arrive, that we can know which set of messages to work with
timeToPostponeBackedUpMessagesHandling = 30 * time.Second
SyncWakuSectionKeyProfile = "profile"
SyncWakuSectionKeyContacts = "contacts"
SyncWakuSectionKeyCommunities = "communities"
SyncWakuSectionKeySettings = "settings"
)
type backupHandler struct {
messagesToProceed []protobuf.Backup
lastKnownTime uint64
postponeHandling bool
postponeTasksWaitGroup sync.WaitGroup
}
func (bh *backupHandler) addMessage(message protobuf.Backup) {
if message.Clock < bh.lastKnownTime {
return
}
if message.Clock > bh.lastKnownTime {
bh.messagesToProceed = nil
bh.lastKnownTime = message.Clock
}
bh.messagesToProceed = append(bh.messagesToProceed, message)
}
func (m *Messenger) startWaitingForTheLatestBackedupMessageLoop() {
ticker := time.NewTicker(timeToPostponeBackedUpMessagesHandling)
m.backedupMessagesHandler.postponeTasksWaitGroup.Add(1)
go func() {
defer m.backedupMessagesHandler.postponeTasksWaitGroup.Done()
for {
select {
case <-ticker.C:
if !m.backedupMessagesHandler.postponeHandling {
return
}
m.backedupMessagesHandler.postponeHandling = false
for _, msg := range m.backedupMessagesHandler.messagesToProceed {
messageState := m.buildMessageState()
errors := m.HandleBackup(messageState, msg)
if len(errors) > 0 {
for _, err := range errors {
m.logger.Warn("failed to handle postponed Backup messages", zap.Error(err))
}
}
}
m.backedupMessagesHandler.messagesToProceed = nil
case <-m.quit:
ticker.Stop()
return
}
}
}()
}
func (m *Messenger) HandleBackup(state *ReceivedMessageState, message protobuf.Backup) []error {
var errors []error
if m.backedupMessagesHandler.postponeHandling {
m.backedupMessagesHandler.addMessage(message)
return errors
}
err := m.handleBackedUpProfile(message.Profile, message.Clock)
if err != nil {
errors = append(errors, err)
}
for _, contact := range message.Contacts {
err = m.HandleSyncInstallationContact(state, *contact)
if err != nil {
errors = append(errors, err)
}
}
for _, community := range message.Communities {
err = m.handleSyncCommunity(state, *community)
if err != nil {
errors = append(errors, err)
}
}
err = m.handleBackedUpSettings(message.Setting)
if err != nil {
errors = append(errors, err)
}
if m.config.messengerSignalsHandler != nil {
response := wakusync.WakuBackedUpDataResponse{}
response.AddFetchingBackedUpDataDetails(SyncWakuSectionKeyProfile, message.ProfileDetails)
response.AddFetchingBackedUpDataDetails(SyncWakuSectionKeyContacts, message.ContactsDetails)
response.AddFetchingBackedUpDataDetails(SyncWakuSectionKeyCommunities, message.CommunitiesDetails)
response.AddFetchingBackedUpDataDetails(SyncWakuSectionKeySettings, message.SettingsDetails)
m.config.messengerSignalsHandler.SendWakuFetchingBackupProgress(&response)
}
return errors
}
func (m *Messenger) handleBackedUpProfile(message *protobuf.BackedUpProfile, backupTime uint64) error {
if message == nil {
return nil
}
dbDisplayNameClock, err := m.settings.GetSettingLastSynced(settings.DisplayName)
if err != nil {
return err
}
response := wakusync.WakuBackedUpDataResponse{
Profile: &wakusync.BackedUpProfile{},
}
if dbDisplayNameClock < message.DisplayNameClock {
err := m.SetDisplayName(message.DisplayName, false)
response.AddDisplayName(message.DisplayName, err == nil)
}
syncWithBackedUpImages := false
dbImages, err := m.multiAccounts.GetIdentityImages(message.KeyUid)
if err != nil {
syncWithBackedUpImages = true
}
if len(dbImages) == 0 {
if len(message.Pictures) > 0 {
syncWithBackedUpImages = true
}
} else {
// since both images (large and thumbnail) are always stored in the same time, we're free to use either of those two clocks for comparison
lastImageStoredClock := dbImages[0].Clock
syncWithBackedUpImages = lastImageStoredClock < backupTime
}
if syncWithBackedUpImages {
if len(message.Pictures) == 0 {
err = m.multiAccounts.DeleteIdentityImage(message.KeyUid)
response.AddImages(nil, err == nil)
} else {
idImages := make([]images.IdentityImage, len(message.Pictures))
for i, pic := range message.Pictures {
img := images.IdentityImage{
Name: pic.Name,
Payload: pic.Payload,
Width: int(pic.Width),
Height: int(pic.Height),
FileSize: int(pic.FileSize),
ResizeTarget: int(pic.ResizeTarget),
Clock: pic.Clock,
}
idImages[i] = img
}
err = m.multiAccounts.StoreIdentityImages(message.KeyUid, idImages, false)
response.AddImages(idImages, err == nil)
}
}
if m.config.messengerSignalsHandler != nil {
m.config.messengerSignalsHandler.SendWakuBackedUpProfile(&response)
}
return err
}
func (m *Messenger) handleBackedUpSettings(message *protobuf.SyncSetting) error {
if message == nil {
return nil
}
settingField, err := m.extractSyncSetting(message)
if err != nil {
m.logger.Warn("failed to handle SyncSetting from backed up message", zap.Error(err))
return nil
}
response := wakusync.WakuBackedUpDataResponse{
Setting: settingField,
}
if m.config.messengerSignalsHandler != nil {
m.config.messengerSignalsHandler.SendWakuBackedUpSettings(&response)
}
return nil
}

View File

@ -3,6 +3,8 @@ package protocol
import (
"context"
"crypto/ecdsa"
"encoding/json"
"fmt"
"testing"
"github.com/stretchr/testify/suite"
@ -11,6 +13,8 @@ import (
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/eth-node/types"
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests"
"github.com/status-im/status-go/protocol/tt"
@ -106,13 +110,9 @@ func (s *MessengerBackupSuite) TestBackupContacts() {
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := s.m.RetrieveAll()
_, err := bob2.RetrieveAll()
if err != nil {
s.logger.Info("Failed")
return false
}
if len(bob2.Contacts()) < 2 {
bob2.logger.Info("Failed")
return false
}
@ -122,6 +122,9 @@ func (s *MessengerBackupSuite) TestBackupContacts() {
"contacts not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
s.Require().Len(bob2.AddedContacts(), 2)
actualContacts = bob2.AddedContacts()
@ -138,6 +141,193 @@ func (s *MessengerBackupSuite) TestBackupContacts() {
s.Require().Equal(clock, lastBackup)
}
func (s *MessengerBackupSuite) TestBackupProfile() {
const bob1DisplayName = "bobby"
// Create bob1
bob1 := s.m
err := bob1.SetDisplayName(bob1DisplayName, true)
s.Require().NoError(err)
bob1KeyUID := bob1.account.KeyUID
imagesExpected := fmt.Sprintf(`[{"keyUid":"%s","type":"large","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUg=","width":240,"height":300,"fileSize":1024,"resizeTarget":240,"clock":0},{"keyUid":"%s","type":"thumbnail","uri":"data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=","width":80,"height":80,"fileSize":256,"resizeTarget":80,"clock":0}]`,
bob1KeyUID, bob1KeyUID)
iis := images.SampleIdentityImages()
s.Require().NoError(bob1.multiAccounts.StoreIdentityImages(bob1KeyUID, iis, false))
// Create bob2
bob2, err := newMessengerWithKey(s.shh, bob1.identity, s.logger, nil)
s.Require().NoError(err)
_, err = bob2.Start()
s.Require().NoError(err)
// Check bob1
storedBob1DisplayName, err := bob1.settings.DisplayName()
s.Require().NoError(err)
s.Require().Equal(bob1DisplayName, storedBob1DisplayName)
bob1Images, err := bob1.multiAccounts.GetIdentityImages(bob1KeyUID)
s.Require().NoError(err)
jBob1Images, err := json.Marshal(bob1Images)
s.Require().NoError(err)
s.Require().Equal(imagesExpected, string(jBob1Images))
// Check bob2
storedBob2DisplayName, err := bob2.settings.DisplayName()
s.Require().NoError(err)
s.Require().Equal("", storedBob2DisplayName)
var expectedEmpty []*images.IdentityImage
bob2Images, err := bob2.multiAccounts.GetIdentityImages(bob1KeyUID)
s.Require().NoError(err)
s.Require().Equal(expectedEmpty, bob2Images)
// Backup
clock, err := bob1.BackupData(context.Background())
s.Require().NoError(err)
// Wait for the message to reach its destination
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := bob2.RetrieveAll()
if err != nil {
bob2.logger.Info("Failed")
return false
}
return true
},
"profile data not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
// Check bob2
storedBob2DisplayName, err = bob2.settings.DisplayName()
s.Require().NoError(err)
s.Require().Equal(bob1DisplayName, storedBob2DisplayName)
bob2Images, err = bob2.multiAccounts.GetIdentityImages(bob1KeyUID)
s.Require().NoError(err)
s.Require().Equal(2, len(bob2Images))
s.Require().Equal(bob2Images[0].Payload, bob1Images[0].Payload)
s.Require().Equal(bob2Images[1].Payload, bob1Images[1].Payload)
lastBackup, err := bob1.lastBackup()
s.Require().NoError(err)
s.Require().NotEmpty(lastBackup)
s.Require().Equal(clock, lastBackup)
}
func (s *MessengerBackupSuite) TestBackupSettings() {
const (
bob1DisplayName = "bobby"
bob1Currency = "eur"
bob1MessagesFromContactsOnly = true
bob1ProfilePicturesShowTo = settings.ProfilePicturesShowToEveryone
bob1ProfilePicturesVisibility = settings.ProfilePicturesVisibilityEveryone
)
// Create bob1 and set fields which are supposed to be backed up to/fetched from waku
bob1 := s.m
err := bob1.settings.SaveSettingField(settings.DisplayName, bob1DisplayName)
s.Require().NoError(err)
err = bob1.settings.SaveSettingField(settings.Currency, bob1Currency)
s.Require().NoError(err)
err = bob1.settings.SaveSettingField(settings.MessagesFromContactsOnly, bob1MessagesFromContactsOnly)
s.Require().NoError(err)
err = bob1.settings.SaveSettingField(settings.ProfilePicturesShowTo, bob1ProfilePicturesShowTo)
s.Require().NoError(err)
err = bob1.settings.SaveSettingField(settings.ProfilePicturesVisibility, bob1ProfilePicturesVisibility)
s.Require().NoError(err)
// Create bob2
bob2, err := newMessengerWithKey(s.shh, bob1.identity, s.logger, nil)
s.Require().NoError(err)
_, err = bob2.Start()
s.Require().NoError(err)
// Check bob1
storedBob1DisplayName, err := bob1.settings.DisplayName()
s.Require().NoError(err)
s.Require().Equal(bob1DisplayName, storedBob1DisplayName)
storedBob1Currency, err := bob1.settings.GetCurrency()
s.Require().NoError(err)
s.Require().Equal(bob1Currency, storedBob1Currency)
storedBob1MessagesFromContactsOnly, err := bob1.settings.GetMessagesFromContactsOnly()
s.Require().NoError(err)
s.Require().Equal(bob1MessagesFromContactsOnly, storedBob1MessagesFromContactsOnly)
storedBob1ProfilePicturesShowTo, err := bob1.settings.GetProfilePicturesShowTo()
s.Require().NoError(err)
s.Require().Equal(int64(bob1ProfilePicturesShowTo), storedBob1ProfilePicturesShowTo)
storedBob1ProfilePicturesVisibility, err := bob1.settings.GetProfilePicturesVisibility()
s.Require().NoError(err)
s.Require().Equal(int(bob1ProfilePicturesVisibility), storedBob1ProfilePicturesVisibility)
// Check bob2
storedBob2DisplayName, err := bob2.settings.DisplayName()
s.Require().NoError(err)
s.Require().NotEqual(storedBob1DisplayName, storedBob2DisplayName)
storedBob2Currency, err := bob2.settings.GetCurrency()
s.Require().NoError(err)
s.Require().NotEqual(storedBob1Currency, storedBob2Currency)
storedBob2MessagesFromContactsOnly, err := bob2.settings.GetMessagesFromContactsOnly()
s.Require().NoError(err)
s.Require().NotEqual(storedBob1MessagesFromContactsOnly, storedBob2MessagesFromContactsOnly)
storedBob2ProfilePicturesShowTo, err := bob2.settings.GetProfilePicturesShowTo()
s.Require().NoError(err)
s.Require().NotEqual(storedBob1ProfilePicturesShowTo, storedBob2ProfilePicturesShowTo)
storedBob2ProfilePicturesVisibility, err := bob2.settings.GetProfilePicturesVisibility()
s.Require().NoError(err)
s.Require().NotEqual(storedBob1ProfilePicturesVisibility, storedBob2ProfilePicturesVisibility)
// Backup
clock, err := bob1.BackupData(context.Background())
s.Require().NoError(err)
// Wait for the message to reach its destination
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := bob2.RetrieveAll()
if err != nil {
bob2.logger.Info("Failed")
return false
}
return true
},
"profile data not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
// Check bob2
storedBob2DisplayName, err = bob2.settings.DisplayName()
s.Require().NoError(err)
s.Require().Equal(storedBob1DisplayName, storedBob2DisplayName)
storedBob2Currency, err = bob2.settings.GetCurrency()
s.Require().NoError(err)
s.Require().Equal(storedBob1Currency, storedBob2Currency)
storedBob2MessagesFromContactsOnly, err = bob2.settings.GetMessagesFromContactsOnly()
s.Require().NoError(err)
s.Require().Equal(storedBob1MessagesFromContactsOnly, storedBob2MessagesFromContactsOnly)
storedBob2ProfilePicturesShowTo, err = bob2.settings.GetProfilePicturesShowTo()
s.Require().NoError(err)
s.Require().Equal(storedBob1ProfilePicturesShowTo, storedBob2ProfilePicturesShowTo)
storedBob2ProfilePicturesVisibility, err = bob2.settings.GetProfilePicturesVisibility()
s.Require().NoError(err)
s.Require().Equal(storedBob1ProfilePicturesVisibility, storedBob2ProfilePicturesVisibility)
lastBackup, err := bob1.lastBackup()
s.Require().NoError(err)
s.Require().NotEmpty(lastBackup)
s.Require().Equal(clock, lastBackup)
}
func (s *MessengerBackupSuite) TestBackupContactsGreaterThanBatch() {
bob1 := s.m
// Create bob2
@ -170,22 +360,21 @@ func (s *MessengerBackupSuite) TestBackupContactsGreaterThanBatch() {
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := s.m.RetrieveAll()
_, err := bob2.RetrieveAll()
if err != nil {
s.logger.Info("Failed")
return false
}
if len(bob2.Contacts()) < BackupContactsPerBatch*2 {
return false
}
return true
},
"contacts not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
s.Require().Less(BackupContactsPerBatch*2, len(bob2.Contacts()))
s.Require().Len(bob2.AddedContacts(), BackupContactsPerBatch*2)
}
@ -246,23 +435,21 @@ func (s *MessengerBackupSuite) TestBackupRemovedContact() {
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := s.m.RetrieveAll()
_, err := bob2.RetrieveAll()
if err != nil {
s.logger.Info("Failed")
return false
}
if len(bob2.Contacts()) != 1 && bob2.Contacts()[0].ID != contactID1 {
bob2.logger.Info("Failed")
return false
}
return true
},
"contacts not backed up",
)
// Bob 2 should remove the contact
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
s.Require().Len(bob2.AddedContacts(), 1)
s.Require().Equal(contactID1, bob2.AddedContacts()[0].ID)
@ -303,25 +490,27 @@ func (s *MessengerBackupSuite) TestBackupLocalNickname() {
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := s.m.RetrieveAll()
_, err := bob2.RetrieveAll()
if err != nil {
s.logger.Info("Failed")
bob2.logger.Info("Failed")
return false
}
for _, c := range bob2.Contacts() {
if c.ID == contactID1 {
actualContact = c
return true
}
}
return false
return true
},
"contacts not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
for _, c := range bob2.Contacts() {
if c.ID == contactID1 {
actualContact = c
break
}
}
s.Require().Equal(actualContact.LocalNickname, nickname)
lastBackup, err := bob1.lastBackup()
s.Require().NoError(err)
@ -356,11 +545,20 @@ func (s *MessengerBackupSuite) TestBackupBlockedContacts() {
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
return len(bob2.AddedContacts()) >= 1
_, err := bob2.RetrieveAll()
if err != nil {
bob2.logger.Info("Failed")
return false
}
return true
},
"contacts not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
s.Require().Len(bob2.AddedContacts(), 1)
actualContacts := bob2.AddedContacts()
@ -422,19 +620,21 @@ func (s *MessengerBackupSuite) TestBackupCommunities() {
_, err = WaitOnMessengerResponse(
bob2,
func(r *MessengerResponse) bool {
_, err := s.m.RetrieveAll()
_, err := bob2.RetrieveAll()
if err != nil {
s.logger.Info("Failed")
bob2.logger.Info("Failed")
return false
}
communities, err := bob2.Communities()
s.Require().NoError(err)
return len(communities) >= 2
return true
},
"communities not backed up",
)
s.Require().NoError(err)
bob2.backedupMessagesHandler.postponeTasksWaitGroup.Wait()
communities, err = bob2.JoinedCommunities()
s.Require().NoError(err)
s.Require().Len(communities, 1)

View File

@ -23,6 +23,7 @@ import (
"github.com/status-im/status-go/protocol/pushnotificationclient"
"github.com/status-im/status-go/protocol/pushnotificationserver"
"github.com/status-im/status-go/protocol/transport"
"github.com/status-im/status-go/protocol/wakusync"
"github.com/status-im/status-go/services/mailservers"
)
@ -52,6 +53,9 @@ type MessengerSignalsHandler interface {
DiscordCommunityImportProgress(importProgress *discord.ImportProgress)
DiscordCommunityImportFinished(communityID string)
DiscordCommunityImportCancelled(communityID string)
SendWakuFetchingBackupProgress(response *wakusync.WakuBackedUpDataResponse)
SendWakuBackedUpProfile(response *wakusync.WakuBackedUpDataResponse)
SendWakuBackedUpSettings(response *wakusync.WakuBackedUpDataResponse)
}
type config struct {

View File

@ -407,24 +407,6 @@ func (m *Messenger) handleCommandMessage(state *ReceivedMessageState, message *c
return nil
}
func (m *Messenger) HandleBackup(state *ReceivedMessageState, message protobuf.Backup) error {
for _, contact := range message.Contacts {
err := m.HandleSyncInstallationContact(state, *contact)
if err != nil {
return err
}
}
for _, community := range message.Communities {
err := m.handleSyncCommunity(state, *community)
if err != nil {
return err
}
}
return nil
}
func (m *Messenger) HandleSyncInstallationContact(state *ReceivedMessageState, message protobuf.SyncInstallationContactV2) error {
removedOrBlocked := message.Removed || message.Blocked
chat, ok := state.AllChats.Load(message.Id)

View File

@ -49,7 +49,7 @@ func ValidateDisplayName(displayName *string) error {
return nil
}
func (m *Messenger) SetDisplayName(displayName string) error {
func (m *Messenger) SetDisplayName(displayName string, publishChange bool) error {
currDisplayName, err := m.settings.DisplayName()
if err != nil {
return err
@ -74,12 +74,16 @@ func (m *Messenger) SetDisplayName(displayName string) error {
return err
}
err = m.resetLastPublishedTimeForChatIdentity()
if err != nil {
return err
if publishChange {
err = m.resetLastPublishedTimeForChatIdentity()
if err != nil {
return err
}
return m.publishContactCode()
}
return m.publishContactCode()
return nil
}
func ValidateBio(bio *string) error {

View File

@ -8,94 +8,111 @@ import (
"github.com/status-im/status-go/multiaccounts/errors"
"github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/protobuf"
)
// syncSettings syncs all settings that are syncable
func (m *Messenger) syncSettings() error {
logger := m.logger.Named("syncSettings")
func (m *Messenger) prepareSyncSettingsMessages(currentClock uint64) (resultRaw []*common.RawMessage, resultSync []*protobuf.SyncSetting, errors []error) {
s, err := m.settings.GetSettings()
if err != nil {
return err
errors = append(errors, err)
return
}
logger := m.logger.Named("prepareSyncSettings")
// Do not use the network clock, use the db value
_, chat := m.getLastClockWithRelatedChat()
var errs []error
for _, sf := range settings.SettingFieldRegister {
if sf.CanSync(settings.FromStruct) {
// Pull clock from the db
clock, err := m.settings.GetSettingLastSynced(sf)
if err != nil {
logger.Error("m.settings.GetSettingLastSynced", zap.Error(err), zap.Any("SettingField", sf))
return err
errors = append(errors, err)
return
}
if clock == 0 {
clock = currentClock
}
// Build protobuf
rm, err := sf.SyncProtobufFactory().FromStruct()(s, clock, chat.ID)
rm, sm, err := sf.SyncProtobufFactory().FromStruct()(s, clock, chat.ID)
if err != nil {
// Collect errors to give other sync messages a chance to send
logger.Error("SyncProtobufFactory.Struct", zap.Error(err))
errs = append(errs, err)
errors = append(errors, err)
}
_, err = m.dispatchMessage(context.Background(), *rm)
if err != nil {
logger.Error("dispatchMessage", zap.Error(err))
return err
}
logger.Debug("dispatchMessage success", zap.Any("rm", rm))
resultRaw = append(resultRaw, rm)
resultSync = append(resultSync, sm)
}
}
return
}
if len(errs) != 0 {
func (m *Messenger) syncSettings() error {
logger := m.logger.Named("syncSettings")
clock, _ := m.getLastClockWithRelatedChat()
rawMessages, _, errors := m.prepareSyncSettingsMessages(clock)
if len(errors) != 0 {
// return just the first error, the others have been logged
return errs[0]
return errors[0]
}
for _, rm := range rawMessages {
_, err := m.dispatchMessage(context.Background(), *rm)
if err != nil {
logger.Error("dispatchMessage", zap.Error(err))
return err
}
logger.Debug("dispatchMessage success", zap.Any("rm", rm))
}
return nil
}
// handleSyncSetting parses incoming *protobuf.SyncSetting and stores the setting data if needed
func (m *Messenger) handleSyncSetting(response *MessengerResponse, syncSetting *protobuf.SyncSetting) error {
// extractSyncSetting parses incoming *protobuf.SyncSetting and stores the setting data if needed
func (m *Messenger) extractSyncSetting(syncSetting *protobuf.SyncSetting) (*settings.SyncSettingField, error) {
sf, err := settings.GetFieldFromProtobufType(syncSetting.Type)
if err != nil {
m.logger.Error(
"handleSyncSetting - settings.GetFieldFromProtobufType",
"extractSyncSetting - settings.GetFieldFromProtobufType",
zap.Error(err),
zap.Any("syncSetting", syncSetting),
)
return err
return nil, err
}
spf := sf.SyncProtobufFactory()
if spf == nil {
m.logger.Warn("handleSyncSetting - received protobuf for setting with no SyncProtobufFactory", zap.Any("SettingField", sf))
return nil
m.logger.Warn("extractSyncSetting - received protobuf for setting with no SyncProtobufFactory", zap.Any("SettingField", sf))
return nil, nil
}
if spf.Inactive() {
m.logger.Warn("handleSyncSetting - received protobuf for inactive sync setting", zap.Any("SettingField", sf))
return nil
m.logger.Warn("extractSyncSetting - received protobuf for inactive sync setting", zap.Any("SettingField", sf))
return nil, nil
}
value := spf.ExtractValueFromProtobuf()(syncSetting)
err = m.settings.SaveSyncSetting(sf, value, syncSetting.Clock)
if err == errors.ErrNewClockOlderThanCurrent {
m.logger.Info("handleSyncSetting - SaveSyncSetting :", zap.Error(err))
return nil
m.logger.Info("extractSyncSetting - SaveSyncSetting :", zap.Error(err))
return nil, nil
}
if err != nil {
return err
return nil, err
}
if v, ok := value.([]byte); ok {
value = json.RawMessage(v)
}
response.Settings = append(response.Settings, &settings.SyncSettingField{SettingField: sf, Value: value})
return nil
return &settings.SyncSettingField{SettingField: sf, Value: value}, nil
}
// startSyncSettingsLoop watches the m.settings.SyncQueue and sends a sync message in response to a settings update
@ -117,7 +134,7 @@ func (m *Messenger) startSyncSettingsLoop() {
logger.Error("m.settings.SetSettingLastSynced", zap.Error(err))
break
}
rm, err := s.SyncProtobufFactory().FromInterface()(s.Value, clock, chat.ID)
rm, _, err := s.SyncProtobufFactory().FromInterface()(s.Value, clock, chat.ID)
if err != nil {
logger.Error("SyncProtobufFactory().FromInterface", zap.Error(err), zap.Any("SyncSettingField", s))
break

View File

@ -45,7 +45,7 @@ func (x SyncTrustedUser_TrustStatus) String() string {
}
func (SyncTrustedUser_TrustStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{24, 0}
return fileDescriptor_d61ab7221f0b5518, []int{25, 0}
}
type SyncVerificationRequest_VerificationStatus int32
@ -79,7 +79,7 @@ func (x SyncVerificationRequest_VerificationStatus) String() string {
}
func (SyncVerificationRequest_VerificationStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{25, 0}
return fileDescriptor_d61ab7221f0b5518, []int{26, 0}
}
type SyncContactRequestDecision_DecisionStatus int32
@ -104,14 +104,70 @@ func (x SyncContactRequestDecision_DecisionStatus) String() string {
}
func (SyncContactRequestDecision_DecisionStatus) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{26, 0}
return fileDescriptor_d61ab7221f0b5518, []int{27, 0}
}
// `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of
type FetchingBackedUpDataDetails struct {
DataNumber uint32 `protobuf:"varint,1,opt,name=data_number,json=dataNumber,proto3" json:"data_number,omitempty"`
TotalNumber uint32 `protobuf:"varint,2,opt,name=total_number,json=totalNumber,proto3" json:"total_number,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FetchingBackedUpDataDetails) Reset() { *m = FetchingBackedUpDataDetails{} }
func (m *FetchingBackedUpDataDetails) String() string { return proto.CompactTextString(m) }
func (*FetchingBackedUpDataDetails) ProtoMessage() {}
func (*FetchingBackedUpDataDetails) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{0}
}
func (m *FetchingBackedUpDataDetails) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FetchingBackedUpDataDetails.Unmarshal(m, b)
}
func (m *FetchingBackedUpDataDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FetchingBackedUpDataDetails.Marshal(b, m, deterministic)
}
func (m *FetchingBackedUpDataDetails) XXX_Merge(src proto.Message) {
xxx_messageInfo_FetchingBackedUpDataDetails.Merge(m, src)
}
func (m *FetchingBackedUpDataDetails) XXX_Size() int {
return xxx_messageInfo_FetchingBackedUpDataDetails.Size(m)
}
func (m *FetchingBackedUpDataDetails) XXX_DiscardUnknown() {
xxx_messageInfo_FetchingBackedUpDataDetails.DiscardUnknown(m)
}
var xxx_messageInfo_FetchingBackedUpDataDetails proto.InternalMessageInfo
func (m *FetchingBackedUpDataDetails) GetDataNumber() uint32 {
if m != nil {
return m.DataNumber
}
return 0
}
func (m *FetchingBackedUpDataDetails) GetTotalNumber() uint32 {
if m != nil {
return m.TotalNumber
}
return 0
}
type Backup struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
Contacts []*SyncInstallationContactV2 `protobuf:"bytes,3,rep,name=contacts,proto3" json:"contacts,omitempty"`
Communities []*SyncCommunity `protobuf:"bytes,4,rep,name=communities,proto3" json:"communities,omitempty"`
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
// this is what we already had
Contacts []*SyncInstallationContactV2 `protobuf:"bytes,3,rep,name=contacts,proto3" json:"contacts,omitempty"`
Communities []*SyncCommunity `protobuf:"bytes,4,rep,name=communities,proto3" json:"communities,omitempty"`
// newly added details to be backed up to and fetched from waku
ContactsDetails *FetchingBackedUpDataDetails `protobuf:"bytes,5,opt,name=contactsDetails,proto3" json:"contactsDetails,omitempty"`
CommunitiesDetails *FetchingBackedUpDataDetails `protobuf:"bytes,6,opt,name=communitiesDetails,proto3" json:"communitiesDetails,omitempty"`
Profile *BackedUpProfile `protobuf:"bytes,7,opt,name=profile,proto3" json:"profile,omitempty"`
ProfileDetails *FetchingBackedUpDataDetails `protobuf:"bytes,8,opt,name=profileDetails,proto3" json:"profileDetails,omitempty"`
Setting *SyncSetting `protobuf:"bytes,9,opt,name=setting,proto3" json:"setting,omitempty"`
SettingsDetails *FetchingBackedUpDataDetails `protobuf:"bytes,10,opt,name=settingsDetails,proto3" json:"settingsDetails,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -121,7 +177,7 @@ func (m *Backup) Reset() { *m = Backup{} }
func (m *Backup) String() string { return proto.CompactTextString(m) }
func (*Backup) ProtoMessage() {}
func (*Backup) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{0}
return fileDescriptor_d61ab7221f0b5518, []int{1}
}
func (m *Backup) XXX_Unmarshal(b []byte) error {
@ -170,6 +226,48 @@ func (m *Backup) GetCommunities() []*SyncCommunity {
return nil
}
func (m *Backup) GetContactsDetails() *FetchingBackedUpDataDetails {
if m != nil {
return m.ContactsDetails
}
return nil
}
func (m *Backup) GetCommunitiesDetails() *FetchingBackedUpDataDetails {
if m != nil {
return m.CommunitiesDetails
}
return nil
}
func (m *Backup) GetProfile() *BackedUpProfile {
if m != nil {
return m.Profile
}
return nil
}
func (m *Backup) GetProfileDetails() *FetchingBackedUpDataDetails {
if m != nil {
return m.ProfileDetails
}
return nil
}
func (m *Backup) GetSetting() *SyncSetting {
if m != nil {
return m.Setting
}
return nil
}
func (m *Backup) GetSettingsDetails() *FetchingBackedUpDataDetails {
if m != nil {
return m.SettingsDetails
}
return nil
}
type MultiAccount struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
@ -188,7 +286,7 @@ func (m *MultiAccount) Reset() { *m = MultiAccount{} }
func (m *MultiAccount) String() string { return proto.CompactTextString(m) }
func (*MultiAccount) ProtoMessage() {}
func (*MultiAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{1}
return fileDescriptor_d61ab7221f0b5518, []int{2}
}
func (m *MultiAccount) XXX_Unmarshal(b []byte) error {
@ -276,7 +374,7 @@ func (m *MultiAccount_ColourHash) Reset() { *m = MultiAccount_ColourHash
func (m *MultiAccount_ColourHash) String() string { return proto.CompactTextString(m) }
func (*MultiAccount_ColourHash) ProtoMessage() {}
func (*MultiAccount_ColourHash) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{1, 0}
return fileDescriptor_d61ab7221f0b5518, []int{2, 0}
}
func (m *MultiAccount_ColourHash) XXX_Unmarshal(b []byte) error {
@ -322,7 +420,7 @@ func (m *MultiAccount_IdentityImage) Reset() { *m = MultiAccount_Identit
func (m *MultiAccount_IdentityImage) String() string { return proto.CompactTextString(m) }
func (*MultiAccount_IdentityImage) ProtoMessage() {}
func (*MultiAccount_IdentityImage) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{1, 1}
return fileDescriptor_d61ab7221f0b5518, []int{2, 1}
}
func (m *MultiAccount_IdentityImage) XXX_Unmarshal(b []byte) error {
@ -412,7 +510,7 @@ func (m *LocalPairingPayload) Reset() { *m = LocalPairingPayload{} }
func (m *LocalPairingPayload) String() string { return proto.CompactTextString(m) }
func (*LocalPairingPayload) ProtoMessage() {}
func (*LocalPairingPayload) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{2}
return fileDescriptor_d61ab7221f0b5518, []int{3}
}
func (m *LocalPairingPayload) XXX_Unmarshal(b []byte) error {
@ -466,7 +564,7 @@ func (m *LocalPairingPayload_Key) Reset() { *m = LocalPairingPayload_Key
func (m *LocalPairingPayload_Key) String() string { return proto.CompactTextString(m) }
func (*LocalPairingPayload_Key) ProtoMessage() {}
func (*LocalPairingPayload_Key) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{2, 0}
return fileDescriptor_d61ab7221f0b5518, []int{3, 0}
}
func (m *LocalPairingPayload_Key) XXX_Unmarshal(b []byte) error {
@ -515,7 +613,7 @@ func (m *PairInstallation) Reset() { *m = PairInstallation{} }
func (m *PairInstallation) String() string { return proto.CompactTextString(m) }
func (*PairInstallation) ProtoMessage() {}
func (*PairInstallation) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{3}
return fileDescriptor_d61ab7221f0b5518, []int{4}
}
func (m *PairInstallation) XXX_Unmarshal(b []byte) error {
@ -581,7 +679,7 @@ func (m *SyncInstallationContact) Reset() { *m = SyncInstallationContact
func (m *SyncInstallationContact) String() string { return proto.CompactTextString(m) }
func (*SyncInstallationContact) ProtoMessage() {}
func (*SyncInstallationContact) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{4}
return fileDescriptor_d61ab7221f0b5518, []int{5}
}
func (m *SyncInstallationContact) XXX_Unmarshal(b []byte) error {
@ -675,7 +773,7 @@ func (m *SyncInstallationContactV2) Reset() { *m = SyncInstallationConta
func (m *SyncInstallationContactV2) String() string { return proto.CompactTextString(m) }
func (*SyncInstallationContactV2) ProtoMessage() {}
func (*SyncInstallationContactV2) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{5}
return fileDescriptor_d61ab7221f0b5518, []int{6}
}
func (m *SyncInstallationContactV2) XXX_Unmarshal(b []byte) error {
@ -807,7 +905,7 @@ func (m *SyncInstallationAccount) Reset() { *m = SyncInstallationAccount
func (m *SyncInstallationAccount) String() string { return proto.CompactTextString(m) }
func (*SyncInstallationAccount) ProtoMessage() {}
func (*SyncInstallationAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{6}
return fileDescriptor_d61ab7221f0b5518, []int{7}
}
func (m *SyncInstallationAccount) XXX_Unmarshal(b []byte) error {
@ -861,7 +959,7 @@ func (m *SyncInstallationPublicChat) Reset() { *m = SyncInstallationPubl
func (m *SyncInstallationPublicChat) String() string { return proto.CompactTextString(m) }
func (*SyncInstallationPublicChat) ProtoMessage() {}
func (*SyncInstallationPublicChat) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{7}
return fileDescriptor_d61ab7221f0b5518, []int{8}
}
func (m *SyncInstallationPublicChat) XXX_Unmarshal(b []byte) error {
@ -918,7 +1016,7 @@ func (m *SyncCommunity) Reset() { *m = SyncCommunity{} }
func (m *SyncCommunity) String() string { return proto.CompactTextString(m) }
func (*SyncCommunity) ProtoMessage() {}
func (*SyncCommunity) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{8}
return fileDescriptor_d61ab7221f0b5518, []int{9}
}
func (m *SyncCommunity) XXX_Unmarshal(b []byte) error {
@ -1040,7 +1138,7 @@ func (m *SyncCommunityRequestsToJoin) Reset() { *m = SyncCommunityReques
func (m *SyncCommunityRequestsToJoin) String() string { return proto.CompactTextString(m) }
func (*SyncCommunityRequestsToJoin) ProtoMessage() {}
func (*SyncCommunityRequestsToJoin) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{9}
return fileDescriptor_d61ab7221f0b5518, []int{10}
}
func (m *SyncCommunityRequestsToJoin) XXX_Unmarshal(b []byte) error {
@ -1124,7 +1222,7 @@ func (m *SyncInstallation) Reset() { *m = SyncInstallation{} }
func (m *SyncInstallation) String() string { return proto.CompactTextString(m) }
func (*SyncInstallation) ProtoMessage() {}
func (*SyncInstallation) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{10}
return fileDescriptor_d61ab7221f0b5518, []int{11}
}
func (m *SyncInstallation) XXX_Unmarshal(b []byte) error {
@ -1185,7 +1283,7 @@ func (m *SyncChatRemoved) Reset() { *m = SyncChatRemoved{} }
func (m *SyncChatRemoved) String() string { return proto.CompactTextString(m) }
func (*SyncChatRemoved) ProtoMessage() {}
func (*SyncChatRemoved) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{11}
return fileDescriptor_d61ab7221f0b5518, []int{12}
}
func (m *SyncChatRemoved) XXX_Unmarshal(b []byte) error {
@ -1232,7 +1330,7 @@ func (m *SyncChatMessagesRead) Reset() { *m = SyncChatMessagesRead{} }
func (m *SyncChatMessagesRead) String() string { return proto.CompactTextString(m) }
func (*SyncChatMessagesRead) ProtoMessage() {}
func (*SyncChatMessagesRead) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{12}
return fileDescriptor_d61ab7221f0b5518, []int{13}
}
func (m *SyncChatMessagesRead) XXX_Unmarshal(b []byte) error {
@ -1279,7 +1377,7 @@ func (m *SyncActivityCenterRead) Reset() { *m = SyncActivityCenterRead{}
func (m *SyncActivityCenterRead) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterRead) ProtoMessage() {}
func (*SyncActivityCenterRead) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{13}
return fileDescriptor_d61ab7221f0b5518, []int{14}
}
func (m *SyncActivityCenterRead) XXX_Unmarshal(b []byte) error {
@ -1326,7 +1424,7 @@ func (m *SyncActivityCenterAccepted) Reset() { *m = SyncActivityCenterAc
func (m *SyncActivityCenterAccepted) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterAccepted) ProtoMessage() {}
func (*SyncActivityCenterAccepted) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{14}
return fileDescriptor_d61ab7221f0b5518, []int{15}
}
func (m *SyncActivityCenterAccepted) XXX_Unmarshal(b []byte) error {
@ -1373,7 +1471,7 @@ func (m *SyncActivityCenterDismissed) Reset() { *m = SyncActivityCenterD
func (m *SyncActivityCenterDismissed) String() string { return proto.CompactTextString(m) }
func (*SyncActivityCenterDismissed) ProtoMessage() {}
func (*SyncActivityCenterDismissed) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{15}
return fileDescriptor_d61ab7221f0b5518, []int{16}
}
func (m *SyncActivityCenterDismissed) XXX_Unmarshal(b []byte) error {
@ -1424,7 +1522,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{16}
return fileDescriptor_d61ab7221f0b5518, []int{17}
}
func (m *SyncBookmark) XXX_Unmarshal(b []byte) error {
@ -1499,7 +1597,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{17}
return fileDescriptor_d61ab7221f0b5518, []int{18}
}
func (m *SyncClearHistory) XXX_Unmarshal(b []byte) error {
@ -1551,7 +1649,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{18}
return fileDescriptor_d61ab7221f0b5518, []int{19}
}
func (m *SyncProfilePicture) XXX_Unmarshal(b []byte) error {
@ -1633,7 +1731,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{19}
return fileDescriptor_d61ab7221f0b5518, []int{20}
}
func (m *SyncProfilePictures) XXX_Unmarshal(b []byte) error {
@ -1690,7 +1788,7 @@ func (m *SyncWalletAccount) Reset() { *m = SyncWalletAccount{} }
func (m *SyncWalletAccount) String() string { return proto.CompactTextString(m) }
func (*SyncWalletAccount) ProtoMessage() {}
func (*SyncWalletAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{20}
return fileDescriptor_d61ab7221f0b5518, []int{21}
}
func (m *SyncWalletAccount) XXX_Unmarshal(b []byte) error {
@ -1806,7 +1904,7 @@ func (m *SyncWalletAccounts) Reset() { *m = SyncWalletAccounts{} }
func (m *SyncWalletAccounts) String() string { return proto.CompactTextString(m) }
func (*SyncWalletAccounts) ProtoMessage() {}
func (*SyncWalletAccounts) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{21}
return fileDescriptor_d61ab7221f0b5518, []int{22}
}
func (m *SyncWalletAccounts) XXX_Unmarshal(b []byte) error {
@ -1850,7 +1948,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{22}
return fileDescriptor_d61ab7221f0b5518, []int{23}
}
func (m *SyncSavedAddress) XXX_Unmarshal(b []byte) error {
@ -1926,7 +2024,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{23}
return fileDescriptor_d61ab7221f0b5518, []int{24}
}
func (m *SyncCommunitySettings) XXX_Unmarshal(b []byte) error {
@ -1981,7 +2079,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{24}
return fileDescriptor_d61ab7221f0b5518, []int{25}
}
func (m *SyncTrustedUser) XXX_Unmarshal(b []byte) error {
@ -2042,7 +2140,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{25}
return fileDescriptor_d61ab7221f0b5518, []int{26}
}
func (m *SyncVerificationRequest) XXX_Unmarshal(b []byte) error {
@ -2139,7 +2237,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{26}
return fileDescriptor_d61ab7221f0b5518, []int{27}
}
func (m *SyncContactRequestDecision) XXX_Unmarshal(b []byte) error {
@ -2181,10 +2279,75 @@ func (m *SyncContactRequestDecision) GetDecisionStatus() SyncContactRequestDecis
return SyncContactRequestDecision_ACCEPTED
}
// `BackedUpProfile` is used to describe profile of logged in user
type BackedUpProfile struct {
KeyUid string `protobuf:"bytes,1,opt,name=key_uid,json=keyUid,proto3" json:"key_uid,omitempty"`
DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
DisplayNameClock uint64 `protobuf:"varint,3,opt,name=display_name_clock,json=displayNameClock,proto3" json:"display_name_clock,omitempty"`
Pictures []*SyncProfilePicture `protobuf:"bytes,4,rep,name=pictures,proto3" json:"pictures,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
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{28}
}
func (m *BackedUpProfile) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BackedUpProfile.Unmarshal(m, b)
}
func (m *BackedUpProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BackedUpProfile.Marshal(b, m, deterministic)
}
func (m *BackedUpProfile) XXX_Merge(src proto.Message) {
xxx_messageInfo_BackedUpProfile.Merge(m, src)
}
func (m *BackedUpProfile) XXX_Size() int {
return xxx_messageInfo_BackedUpProfile.Size(m)
}
func (m *BackedUpProfile) XXX_DiscardUnknown() {
xxx_messageInfo_BackedUpProfile.DiscardUnknown(m)
}
var xxx_messageInfo_BackedUpProfile proto.InternalMessageInfo
func (m *BackedUpProfile) GetKeyUid() string {
if m != nil {
return m.KeyUid
}
return ""
}
func (m *BackedUpProfile) GetDisplayName() string {
if m != nil {
return m.DisplayName
}
return ""
}
func (m *BackedUpProfile) GetDisplayNameClock() uint64 {
if m != nil {
return m.DisplayNameClock
}
return 0
}
func (m *BackedUpProfile) GetPictures() []*SyncProfilePicture {
if m != nil {
return m.Pictures
}
return nil
}
func init() {
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)
proto.RegisterType((*FetchingBackedUpDataDetails)(nil), "protobuf.FetchingBackedUpDataDetails")
proto.RegisterType((*Backup)(nil), "protobuf.Backup")
proto.RegisterType((*MultiAccount)(nil), "protobuf.MultiAccount")
proto.RegisterType((*MultiAccount_ColourHash)(nil), "protobuf.MultiAccount.ColourHash")
@ -2215,6 +2378,7 @@ func init() {
proto.RegisterType((*SyncTrustedUser)(nil), "protobuf.SyncTrustedUser")
proto.RegisterType((*SyncVerificationRequest)(nil), "protobuf.SyncVerificationRequest")
proto.RegisterType((*SyncContactRequestDecision)(nil), "protobuf.SyncContactRequestDecision")
proto.RegisterType((*BackedUpProfile)(nil), "protobuf.BackedUpProfile")
}
func init() {
@ -2222,129 +2386,141 @@ func init() {
}
var fileDescriptor_d61ab7221f0b5518 = []byte{
// 1977 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xcd, 0x72, 0xdb, 0xc8,
0xf1, 0x5f, 0x10, 0x34, 0x3f, 0x9a, 0x1f, 0xe2, 0xc2, 0xfe, 0xdb, 0x58, 0x59, 0x2e, 0xcb, 0xf0,
0x7f, 0x6b, 0x75, 0x48, 0xb4, 0x29, 0x6f, 0x52, 0x9b, 0xac, 0x77, 0x2b, 0x4b, 0x53, 0xac, 0x35,
0xd7, 0x36, 0xad, 0x82, 0x24, 0x3b, 0x49, 0xa5, 0x0a, 0x35, 0x02, 0x46, 0xe2, 0x84, 0x20, 0x80,
0x60, 0x86, 0x72, 0x90, 0x07, 0xc8, 0x03, 0xe4, 0x92, 0xeb, 0x9e, 0x93, 0x5b, 0xaa, 0x92, 0x53,
0x1e, 0x20, 0xb7, 0x1c, 0x72, 0x4c, 0x2a, 0x0f, 0x90, 0xa7, 0x48, 0xf5, 0xcc, 0x00, 0x04, 0x24,
0x52, 0x51, 0x2a, 0xa7, 0x9c, 0x38, 0xfd, 0x43, 0xcf, 0x4c, 0x4f, 0x77, 0x4f, 0xf7, 0x6f, 0x08,
0xbd, 0x84, 0xb0, 0x94, 0x45, 0xe7, 0xfb, 0x49, 0x1a, 0x8b, 0xd8, 0x6a, 0xc9, 0x9f, 0xd3, 0xe5,
0x99, 0xf3, 0x5b, 0x03, 0x1a, 0xcf, 0x88, 0x3f, 0x5f, 0x26, 0xd6, 0x1d, 0xb8, 0xe5, 0x87, 0xb1,
0x3f, 0xb7, 0x8d, 0x5d, 0x63, 0xaf, 0xee, 0x2a, 0xc1, 0xea, 0x43, 0x8d, 0x05, 0x76, 0x6d, 0xd7,
0xd8, 0x6b, 0xbb, 0x35, 0x16, 0x58, 0x3f, 0x84, 0x96, 0x1f, 0x47, 0x82, 0xf8, 0x82, 0xdb, 0xe6,
0xae, 0xb9, 0xd7, 0x79, 0xf2, 0x78, 0x3f, 0x5f, 0x6d, 0xff, 0x28, 0x8b, 0xfc, 0x49, 0xc4, 0x05,
0x09, 0x43, 0x22, 0x58, 0x1c, 0x8d, 0x94, 0xe6, 0x9b, 0x27, 0x6e, 0x31, 0xc9, 0xfa, 0x01, 0x74,
0xfc, 0x78, 0xb1, 0x58, 0x46, 0x4c, 0x30, 0xca, 0xed, 0xba, 0x5c, 0xe3, 0x5e, 0x75, 0x8d, 0x91,
0x56, 0xc8, 0xdc, 0xb2, 0xae, 0xf3, 0xa7, 0x3a, 0x74, 0x5f, 0x2d, 0x43, 0xc1, 0x86, 0xbe, 0x1f,
0x2f, 0x23, 0x61, 0x59, 0x50, 0x8f, 0xc8, 0x82, 0x4a, 0x8b, 0xdb, 0xae, 0x1c, 0x5b, 0x3b, 0xd0,
0x16, 0x6c, 0x41, 0xb9, 0x20, 0x8b, 0x44, 0xda, 0x6d, 0xba, 0x2b, 0x00, 0xbf, 0xb2, 0x80, 0x46,
0x82, 0xf9, 0x71, 0x64, 0x9b, 0x72, 0xda, 0x0a, 0xb0, 0xbe, 0x04, 0xf0, 0xe3, 0x30, 0x4e, 0xbd,
0x19, 0xe1, 0x33, 0x6d, 0xda, 0xa3, 0x95, 0x69, 0xe5, 0xbd, 0xf7, 0x47, 0x71, 0x18, 0x2f, 0xd3,
0xe7, 0x84, 0xcf, 0xdc, 0xb6, 0x9c, 0x84, 0x43, 0xcb, 0x86, 0xa6, 0x14, 0x26, 0x81, 0x7d, 0x4b,
0xee, 0x9d, 0x8b, 0xd6, 0x47, 0xb0, 0x35, 0xa7, 0x99, 0x4f, 0xd2, 0xc0, 0xd3, 0xc1, 0xb0, 0x1b,
0x72, 0xff, 0xbe, 0x86, 0x0f, 0x15, 0x6a, 0xdd, 0x83, 0xe6, 0x9c, 0x66, 0xde, 0x92, 0x05, 0x76,
0x53, 0x2a, 0x34, 0xe6, 0x34, 0x3b, 0x61, 0x81, 0xf5, 0x39, 0x34, 0xd8, 0x82, 0x9c, 0x53, 0x6e,
0xb7, 0xa4, 0x65, 0xff, 0xbf, 0xc1, 0xb2, 0x89, 0x3c, 0x8f, 0xc8, 0x26, 0xa8, 0xec, 0xea, 0x39,
0xdb, 0x0e, 0xc0, 0xca, 0x64, 0x0c, 0x36, 0x8b, 0x02, 0xfa, 0x0b, 0xdb, 0xd8, 0x35, 0xf7, 0x4c,
0x57, 0x09, 0xdb, 0x7f, 0x33, 0xa0, 0x57, 0x99, 0x5d, 0x36, 0xc6, 0xa8, 0x18, 0x93, 0xbb, 0xbe,
0x56, 0x72, 0xbd, 0x0d, 0xcd, 0x84, 0x64, 0x61, 0x4c, 0x02, 0xe9, 0xda, 0xae, 0x9b, 0x8b, 0xb8,
0xdd, 0x3b, 0x16, 0x08, 0xf4, 0x29, 0x3a, 0x45, 0x09, 0xd6, 0x5d, 0x68, 0xcc, 0x28, 0x3b, 0x9f,
0x09, 0xed, 0x2b, 0x2d, 0x59, 0xdb, 0xd0, 0x3a, 0x63, 0x21, 0xe5, 0xec, 0x97, 0x54, 0xfa, 0xc8,
0x74, 0x0b, 0xd9, 0x7a, 0x0c, 0xbd, 0x54, 0x8e, 0x3c, 0x41, 0xd2, 0x73, 0x2a, 0xa4, 0x8f, 0x4c,
0xb7, 0xab, 0xc0, 0x63, 0x89, 0xad, 0x52, 0xb9, 0x55, 0x4a, 0x65, 0xe7, 0xaf, 0x06, 0xdc, 0x7e,
0x19, 0xfb, 0x24, 0xd4, 0x9e, 0x3e, 0xd4, 0xc6, 0x7d, 0x0f, 0xea, 0x73, 0x9a, 0x71, 0xe9, 0x8a,
0x4a, 0xbc, 0xd7, 0x28, 0xef, 0xbf, 0xa0, 0x99, 0x2b, 0xd5, 0xad, 0xcf, 0xa0, 0xbb, 0x40, 0xb7,
0x13, 0xe5, 0x76, 0xe9, 0x89, 0xce, 0x93, 0xbb, 0xeb, 0x83, 0xe2, 0x56, 0x74, 0xf1, 0x84, 0x09,
0xe1, 0xfc, 0x5d, 0x9c, 0x06, 0x3a, 0x0b, 0x0b, 0x79, 0xfb, 0xdb, 0x60, 0xbe, 0xa0, 0xd9, 0xda,
0xdc, 0xb6, 0xa0, 0x1e, 0x10, 0x41, 0xe4, 0x56, 0x5d, 0x57, 0x8e, 0x9d, 0x5f, 0x19, 0x30, 0x40,
0x1b, 0xcb, 0xf7, 0x6e, 0xc3, 0x5d, 0xfe, 0x08, 0xb6, 0x58, 0x49, 0xcb, 0x2b, 0x2e, 0x76, 0xbf,
0x0c, 0x4f, 0x02, 0xeb, 0x21, 0x74, 0x02, 0x7a, 0xc1, 0x7c, 0xea, 0x89, 0x2c, 0xa1, 0xda, 0x42,
0x50, 0xd0, 0x71, 0x96, 0xd0, 0xc2, 0xb8, 0xfa, 0xca, 0x38, 0xe7, 0x9f, 0x06, 0xdc, 0xdb, 0x50,
0x00, 0x6e, 0x58, 0x5b, 0x1e, 0x43, 0x2f, 0x49, 0x63, 0x0c, 0xb5, 0x27, 0x93, 0x56, 0x6f, 0xdc,
0xd5, 0xa0, 0xca, 0xc8, 0x0f, 0xa0, 0x45, 0x23, 0xee, 0x95, 0xb6, 0x6f, 0xd2, 0x88, 0x4f, 0xd1,
0x3d, 0x8f, 0xa0, 0x1b, 0x12, 0x2e, 0xbc, 0x65, 0x12, 0x10, 0x41, 0xd5, 0x0d, 0xac, 0xbb, 0x1d,
0xc4, 0x4e, 0x14, 0x84, 0x27, 0xe3, 0x19, 0x17, 0x74, 0xe1, 0x09, 0x72, 0xce, 0xed, 0xc6, 0xae,
0x89, 0x27, 0x53, 0xd0, 0x31, 0x39, 0xe7, 0xd6, 0x87, 0xd0, 0x0f, 0x31, 0xec, 0x5e, 0xc4, 0xfc,
0xb9, 0xdc, 0x44, 0x5d, 0xc2, 0x9e, 0x44, 0xa7, 0x1a, 0x74, 0xfe, 0x61, 0xc2, 0x07, 0x1b, 0xab,
0x9d, 0xf5, 0x1d, 0xb8, 0x53, 0x36, 0xc4, 0x93, 0x73, 0xc3, 0x4c, 0x9f, 0xde, 0x2a, 0x19, 0xf4,
0x52, 0x7d, 0xf9, 0x1f, 0x76, 0x05, 0xc6, 0x96, 0x04, 0x01, 0x0d, 0xec, 0xf6, 0xae, 0xb1, 0xd7,
0x72, 0x95, 0x80, 0xb5, 0xe0, 0x14, 0x83, 0x4c, 0x03, 0x1b, 0x24, 0x9e, 0x8b, 0xa8, 0xbf, 0x58,
0xa2, 0x4d, 0x1d, 0xa5, 0x2f, 0x05, 0xd4, 0x4f, 0xe9, 0x22, 0xbe, 0xa0, 0x81, 0xdd, 0x55, 0xfa,
0x5a, 0xb4, 0x76, 0xa1, 0x3b, 0x23, 0xdc, 0x93, 0xcb, 0x7a, 0x4b, 0x6e, 0xf7, 0xe4, 0x67, 0x98,
0x11, 0x3e, 0x44, 0xe8, 0x84, 0x5b, 0x1f, 0xc3, 0xed, 0x0b, 0x9a, 0xb2, 0x33, 0xe6, 0xab, 0xbc,
0xe6, 0x82, 0x88, 0x25, 0xb7, 0xfb, 0xb2, 0x32, 0x58, 0xe5, 0x4f, 0x47, 0xf2, 0x0b, 0x7a, 0x47,
0xa4, 0x4b, 0x2e, 0x72, 0xcd, 0x2d, 0xa9, 0xd9, 0x91, 0x98, 0x52, 0x71, 0xde, 0x5d, 0x4d, 0xe6,
0xbc, 0xeb, 0xac, 0x4f, 0xe6, 0x2b, 0x11, 0xab, 0xad, 0x89, 0xd8, 0xe5, 0xb0, 0x98, 0x57, 0xc2,
0xe2, 0x3c, 0x83, 0xed, 0xcb, 0x1b, 0x1f, 0x2e, 0x4f, 0x43, 0xe6, 0x8f, 0x66, 0xe4, 0x86, 0x17,
0xc9, 0xf9, 0x83, 0x09, 0xbd, 0x4a, 0x1f, 0xfd, 0xb7, 0xf3, 0xba, 0x32, 0xeb, 0x1e, 0x42, 0x27,
0x49, 0xd9, 0x05, 0x11, 0xd4, 0x9b, 0xd3, 0x4c, 0x17, 0x71, 0xd0, 0x10, 0x16, 0xa5, 0x5d, 0x2c,
0x0c, 0xdc, 0x4f, 0x59, 0x82, 0x76, 0xc9, 0xa4, 0xeb, 0xba, 0x65, 0x08, 0x6b, 0xfa, 0xcf, 0x62,
0x16, 0xe9, 0x94, 0x6b, 0xb9, 0x5a, 0xc2, 0x8a, 0xa7, 0x02, 0x41, 0x03, 0x59, 0xd3, 0x5b, 0x6e,
0x21, 0xaf, 0x32, 0xa2, 0x59, 0xce, 0x88, 0xd7, 0x30, 0x48, 0xe9, 0xcf, 0x97, 0x94, 0x0b, 0xee,
0x89, 0xd8, 0xc3, 0x75, 0x74, 0xe3, 0xfb, 0x70, 0x13, 0x5b, 0xd0, 0xea, 0xc7, 0xf1, 0xd7, 0x31,
0x8b, 0xdc, 0x7e, 0x5a, 0x91, 0xad, 0xa7, 0xd0, 0xe2, 0x54, 0x08, 0x16, 0x9d, 0x73, 0x99, 0xab,
0x9d, 0x27, 0x0f, 0x37, 0x2c, 0x74, 0xa4, 0xd5, 0xdc, 0x62, 0x02, 0x12, 0x07, 0x1a, 0xf9, 0x69,
0x96, 0x88, 0x22, 0xa3, 0x57, 0x00, 0x7e, 0xe5, 0x09, 0xf5, 0x05, 0x59, 0xe5, 0xf5, 0x0a, 0xc0,
0xba, 0xab, 0x55, 0x31, 0x3b, 0x65, 0xaf, 0xe9, 0x4a, 0xcf, 0xf5, 0x57, 0xf0, 0x0b, 0x9a, 0x71,
0xe7, 0x2f, 0x06, 0xdc, 0xbf, 0xe6, 0x44, 0x3a, 0x5e, 0x46, 0x11, 0xaf, 0x07, 0x00, 0x89, 0xcc,
0x0d, 0x19, 0x2e, 0x15, 0xff, 0xb6, 0x42, 0x30, 0x5a, 0x45, 0xd0, 0xcd, 0x72, 0xd0, 0xaf, 0xa9,
0x1a, 0xf7, 0xa0, 0xe9, 0xcf, 0x88, 0xc0, 0xc6, 0x70, 0x4b, 0x75, 0x7b, 0x14, 0x27, 0x01, 0xe6,
0x6d, 0x4e, 0xc4, 0x32, 0xfc, 0xda, 0x50, 0x81, 0x2f, 0xb0, 0x89, 0x0c, 0x22, 0xde, 0x26, 0x55,
0x24, 0xea, 0xae, 0x12, 0x9c, 0x5f, 0xd7, 0x60, 0x70, 0x39, 0x9d, 0xad, 0x2f, 0x4a, 0x1c, 0xf2,
0x4a, 0xd3, 0xdd, 0x50, 0x55, 0x4b, 0x0c, 0xf2, 0x2b, 0xe8, 0xea, 0x53, 0xa3, 0x75, 0xdc, 0xae,
0x5d, 0x66, 0x43, 0x9b, 0xef, 0x8f, 0xdb, 0x49, 0x8a, 0x31, 0xb7, 0x9e, 0x42, 0x33, 0x6f, 0xde,
0xa6, 0xcc, 0x87, 0x6b, 0xcc, 0xc8, 0xfb, 0x78, 0x3e, 0xe3, 0xbf, 0xe1, 0xb1, 0x9f, 0xc2, 0x96,
0xfc, 0x8a, 0x06, 0xe9, 0x22, 0x77, 0xb3, 0x7b, 0xfd, 0x39, 0xdc, 0xc9, 0x27, 0xbe, 0xa2, 0x9c,
0x23, 0xaf, 0x73, 0x29, 0xb9, 0xe9, 0xec, 0x2f, 0xe1, 0x2e, 0xce, 0x1e, 0xfa, 0x82, 0x5d, 0x30,
0x91, 0x8d, 0x68, 0x24, 0x68, 0x7a, 0xcd, 0xfc, 0x01, 0x98, 0x2c, 0x50, 0xee, 0xed, 0xba, 0x38,
0x74, 0x0e, 0x54, 0x6d, 0xaa, 0xae, 0x30, 0xf4, 0x7d, 0x2a, 0x2f, 0xc1, 0x4d, 0x57, 0x19, 0xab,
0x24, 0xaf, 0xae, 0x72, 0xc0, 0xf8, 0x82, 0x71, 0xfe, 0x1f, 0x2c, 0xf3, 0x8d, 0x01, 0x5d, 0x5c,
0xe7, 0x59, 0x1c, 0xcf, 0x17, 0x24, 0x9d, 0x6f, 0x9e, 0xb8, 0x4c, 0x43, 0xed, 0x06, 0x1c, 0x16,
0xe4, 0xc5, 0x2c, 0x31, 0xab, 0xfb, 0xd0, 0x96, 0x55, 0xdb, 0x43, 0x5d, 0x75, 0x2b, 0x5a, 0x12,
0x38, 0x49, 0xc3, 0x72, 0x6f, 0xba, 0x55, 0xed, 0x4d, 0x0f, 0x00, 0x02, 0x1a, 0x52, 0xec, 0xf1,
0x44, 0xc8, 0x5b, 0x51, 0x77, 0xdb, 0x1a, 0x19, 0x0a, 0xe7, 0x6b, 0x95, 0xfc, 0xa3, 0x90, 0x92,
0xf4, 0x39, 0xe3, 0x22, 0x4e, 0xb3, 0xf2, 0x1d, 0x33, 0x2a, 0x77, 0xec, 0x01, 0x80, 0x8f, 0x8a,
0x6a, 0xad, 0x9a, 0x5a, 0x4b, 0x23, 0x43, 0xe1, 0xfc, 0xd9, 0x00, 0x0b, 0x17, 0x3b, 0x54, 0xfd,
0xe4, 0x90, 0xf9, 0x62, 0x99, 0xd2, 0xb5, 0x34, 0xb1, 0xc4, 0xc3, 0x6b, 0x1b, 0x78, 0x38, 0x9e,
0xbd, 0x77, 0x95, 0x87, 0xd7, 0x25, 0x9c, 0xf3, 0xf0, 0xfb, 0xd0, 0x96, 0xfd, 0x4c, 0x12, 0xf1,
0x5b, 0xf2, 0x93, 0x24, 0xe2, 0x47, 0x6b, 0x89, 0x78, 0x43, 0x2a, 0x6c, 0x20, 0xe2, 0xcd, 0x32,
0x11, 0x9f, 0xc1, 0xed, 0xab, 0x27, 0xe1, 0x9b, 0xdf, 0x1a, 0xdf, 0x87, 0x56, 0xa2, 0x95, 0xf4,
0x65, 0xdf, 0xa9, 0xde, 0xb3, 0xea, 0x4a, 0x6e, 0xa1, 0xed, 0xfc, 0xae, 0x06, 0xef, 0xa3, 0xc2,
0x5b, 0x12, 0x86, 0x54, 0x5c, 0xdf, 0xc0, 0x6d, 0x68, 0x92, 0x20, 0x48, 0x29, 0xe7, 0xb9, 0xd7,
0xb4, 0x88, 0xfe, 0x79, 0x27, 0x17, 0x90, 0x6e, 0x6b, 0xb9, 0x5a, 0x42, 0xdf, 0x63, 0xec, 0xa4,
0xd7, 0x5a, 0xae, 0x1c, 0x23, 0x26, 0x39, 0xb3, 0xaa, 0x9f, 0x72, 0x8c, 0x2b, 0x63, 0xec, 0x91,
0x14, 0xa8, 0x27, 0x5f, 0x2e, 0xa2, 0x76, 0x42, 0xc4, 0x4c, 0x13, 0x2b, 0x39, 0xc6, 0x5e, 0x52,
0x94, 0x70, 0xf9, 0x80, 0xe9, 0x96, 0x6b, 0x7a, 0x1e, 0xef, 0x76, 0x29, 0xde, 0x78, 0x1e, 0x7c,
0x65, 0xca, 0xbe, 0xd4, 0x76, 0x95, 0x20, 0xa3, 0xca, 0x82, 0x80, 0x46, 0xba, 0x21, 0x69, 0x69,
0x33, 0xd3, 0x72, 0x5e, 0xa9, 0x0c, 0xab, 0x38, 0x8b, 0x5b, 0x9f, 0x42, 0x4b, 0xd7, 0xbc, 0xbc,
0x5a, 0xdf, 0xaf, 0x7a, 0xbf, 0xa2, 0xef, 0x16, 0xca, 0xce, 0x1f, 0x0d, 0x95, 0xfe, 0x47, 0xe4,
0x82, 0x06, 0x43, 0xed, 0xcb, 0x92, 0x97, 0x8d, 0xaa, 0x97, 0xd7, 0xbd, 0x28, 0x77, 0xa0, 0x7d,
0x46, 0x2e, 0xe2, 0x65, 0xca, 0x04, 0xd5, 0xce, 0x5f, 0x01, 0xd8, 0xc9, 0xfc, 0x19, 0x61, 0xf2,
0x21, 0x53, 0x97, 0xa1, 0x6c, 0x4a, 0x79, 0x12, 0x5c, 0x73, 0x65, 0x1f, 0x41, 0x57, 0xb1, 0x2f,
0xaf, 0x9c, 0x99, 0x1d, 0x85, 0x8d, 0x64, 0x7e, 0xfe, 0xc6, 0x80, 0xff, 0x5b, 0xcb, 0x07, 0x36,
0x64, 0xce, 0xe5, 0xee, 0xa8, 0x4e, 0x50, 0xe9, 0x8e, 0x63, 0x78, 0x38, 0x53, 0x05, 0xc0, 0x23,
0xa9, 0x3f, 0x63, 0x17, 0xd4, 0xe3, 0xcb, 0x24, 0x89, 0x53, 0xe1, 0xd1, 0x88, 0x9c, 0x86, 0x9a,
0x0b, 0xb6, 0xdc, 0x1d, 0xad, 0x36, 0x54, 0x5a, 0x47, 0x4a, 0x69, 0xac, 0x74, 0x9c, 0xdf, 0x1b,
0xaa, 0x75, 0x1c, 0x23, 0x53, 0x45, 0xee, 0x4b, 0xd3, 0x1b, 0xbe, 0xad, 0xbe, 0x80, 0x86, 0x26,
0xbb, 0xb8, 0x4f, 0xff, 0x32, 0x87, 0x2a, 0x2d, 0xb8, 0x7f, 0xbc, 0xa2, 0xc1, 0xae, 0x9e, 0xe4,
0x7c, 0x06, 0x9d, 0x12, 0x6c, 0x75, 0xa0, 0x79, 0x32, 0x7d, 0x31, 0x7d, 0xfd, 0x76, 0x3a, 0x78,
0x0f, 0x85, 0x63, 0xf7, 0xe4, 0xe8, 0x78, 0x7c, 0x30, 0x30, 0xac, 0xf7, 0xa1, 0x77, 0x32, 0x95,
0xe2, 0xdb, 0xd7, 0xee, 0xf1, 0xf3, 0x1f, 0x0f, 0x6a, 0xce, 0x37, 0xa6, 0xe2, 0xd2, 0x6f, 0x4a,
0x44, 0x5c, 0x13, 0x9b, 0x0d, 0xc6, 0x5b, 0x50, 0x3f, 0x4b, 0xe3, 0x45, 0x9e, 0x0a, 0x38, 0xc6,
0x03, 0x89, 0x58, 0xd7, 0xec, 0x9a, 0x88, 0x31, 0x35, 0xfc, 0x19, 0x66, 0x5e, 0x74, 0x9e, 0xf3,
0x98, 0x15, 0x80, 0x21, 0xd1, 0xec, 0x4f, 0x95, 0x53, 0xfd, 0xfe, 0x29, 0xb0, 0xa1, 0x7c, 0x83,
0xa7, 0x94, 0x27, 0x71, 0xc4, 0xf3, 0x6b, 0x59, 0xc8, 0x58, 0x8b, 0x53, 0x9a, 0x84, 0x4c, 0x4d,
0x56, 0x29, 0xd2, 0xd6, 0xc8, 0x50, 0x58, 0x74, 0xfd, 0x83, 0xa3, 0x25, 0x3d, 0xfb, 0xdd, 0xaa,
0x67, 0xd7, 0x9c, 0x7a, 0xff, 0xcd, 0x95, 0x27, 0xc9, 0xda, 0x67, 0x8a, 0x8a, 0x61, 0xbb, 0x68,
0xe0, 0x3f, 0x02, 0xeb, 0xea, 0xcc, 0x2b, 0xb1, 0x38, 0x1c, 0x4f, 0x0f, 0x26, 0xd3, 0xaf, 0x06,
0x86, 0xd5, 0x85, 0xd6, 0x70, 0x34, 0x1a, 0x1f, 0x62, 0x64, 0x6a, 0x28, 0x1d, 0x8c, 0x47, 0x2f,
0x27, 0xd3, 0xf1, 0xc1, 0xc0, 0x44, 0x69, 0x34, 0x9c, 0x8e, 0xc6, 0x2f, 0xc7, 0x07, 0x83, 0xba,
0xf3, 0x77, 0x43, 0x75, 0xf6, 0x9c, 0x6c, 0x29, 0x3b, 0x0f, 0xa8, 0xcf, 0xf8, 0xe6, 0xbf, 0x13,
0x76, 0xa0, 0xad, 0xfd, 0x39, 0xc9, 0x33, 0x6d, 0x05, 0x58, 0x3f, 0x85, 0xad, 0x40, 0xcf, 0xf7,
0x2a, 0x99, 0xf7, 0xc9, 0x65, 0x8e, 0xb4, 0x6e, 0xcb, 0xfd, 0x7c, 0xa0, 0xdd, 0xd3, 0x0f, 0x2a,
0xb2, 0xf3, 0x2d, 0xe8, 0x57, 0x35, 0x2a, 0x87, 0x7d, 0xaf, 0x72, 0x58, 0xe3, 0x59, 0xef, 0x27,
0x9d, 0xfd, 0x8f, 0x9f, 0xe6, 0xdb, 0x9e, 0x36, 0xe4, 0xe8, 0x93, 0x7f, 0x05, 0x00, 0x00, 0xff,
0xff, 0x8d, 0x35, 0xba, 0x88, 0x16, 0x15, 0x00, 0x00,
// 2174 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x51, 0x73, 0x1b, 0x49,
0x11, 0xbe, 0xd5, 0x2a, 0x96, 0xd4, 0x92, 0x6d, 0xdd, 0xe4, 0x2e, 0x51, 0x9c, 0xa4, 0xe2, 0x6c,
0x48, 0x5d, 0x1e, 0x0e, 0x1f, 0x95, 0x40, 0x1d, 0x5c, 0xee, 0x8a, 0x53, 0x64, 0x73, 0xd1, 0x25,
0x51, 0x5c, 0x63, 0x3b, 0x01, 0x8a, 0xaa, 0xad, 0xf1, 0xee, 0xc4, 0x1a, 0xbc, 0xda, 0x5d, 0x76,
0x46, 0x0e, 0xcb, 0x0f, 0xe0, 0x07, 0xf0, 0xc2, 0xeb, 0xbd, 0xf3, 0x46, 0xd5, 0xf1, 0xc4, 0x0f,
0xe0, 0x8d, 0x07, 0x5e, 0xa8, 0x82, 0xe2, 0x07, 0xf0, 0x2b, 0xa8, 0xe9, 0x99, 0x95, 0x76, 0x65,
0xc9, 0x38, 0xc5, 0x13, 0x4f, 0x9a, 0xee, 0xe9, 0xee, 0xed, 0xe9, 0xee, 0xe9, 0xfe, 0x46, 0xb0,
0x9e, 0x32, 0x91, 0x89, 0xf8, 0x64, 0x27, 0xcd, 0x12, 0x95, 0x90, 0x26, 0xfe, 0x1c, 0x4f, 0xdf,
0x6c, 0x5d, 0x95, 0x79, 0x1c, 0xf8, 0x92, 0x2b, 0x25, 0xe2, 0x13, 0x69, 0xb6, 0x3d, 0x06, 0x37,
0x7f, 0xc2, 0x55, 0x30, 0x16, 0xf1, 0xc9, 0x13, 0x16, 0x9c, 0xf2, 0xf0, 0x28, 0xdd, 0x65, 0x8a,
0xed, 0x72, 0xc5, 0x44, 0x24, 0xc9, 0x1d, 0x68, 0x87, 0x4c, 0x31, 0x3f, 0x9e, 0x4e, 0x8e, 0x79,
0xd6, 0x73, 0xb6, 0x9d, 0x07, 0xeb, 0x14, 0x34, 0x6b, 0x84, 0x1c, 0x72, 0x17, 0x3a, 0x2a, 0x51,
0x2c, 0x2a, 0x24, 0x6a, 0x28, 0xd1, 0x46, 0x9e, 0x11, 0xf1, 0xfe, 0x5e, 0x87, 0x35, 0x6d, 0x7b,
0x9a, 0x92, 0x0f, 0xe0, 0x4a, 0x10, 0x25, 0xc1, 0x29, 0x1a, 0xaa, 0x53, 0x43, 0x90, 0x0d, 0xa8,
0x89, 0x10, 0x35, 0x5b, 0xb4, 0x26, 0x42, 0xf2, 0x63, 0x68, 0x06, 0x49, 0xac, 0x58, 0xa0, 0x64,
0xcf, 0xdd, 0x76, 0x1f, 0xb4, 0x1f, 0xde, 0xdb, 0x29, 0x4e, 0xb1, 0x73, 0x90, 0xc7, 0xc1, 0x30,
0x96, 0x8a, 0x45, 0x11, 0x53, 0x22, 0x89, 0x07, 0x46, 0xf2, 0xd5, 0x43, 0x3a, 0x53, 0x22, 0x3f,
0x82, 0x76, 0x90, 0x4c, 0x26, 0xd3, 0x58, 0x28, 0xc1, 0x65, 0xaf, 0x8e, 0x36, 0xae, 0x57, 0x6d,
0x0c, 0xac, 0x40, 0x4e, 0xcb, 0xb2, 0xe4, 0x25, 0x6c, 0x16, 0x66, 0x6c, 0x0c, 0x7a, 0x57, 0xb6,
0x9d, 0x07, 0xed, 0x87, 0xf7, 0xe7, 0xea, 0x17, 0x04, 0x8c, 0x2e, 0x6a, 0x93, 0x23, 0x20, 0x25,
0xfb, 0x85, 0xcd, 0xb5, 0x77, 0xb1, 0xb9, 0xc4, 0x00, 0x79, 0x04, 0x8d, 0x34, 0x4b, 0xde, 0x88,
0x88, 0xf7, 0x1a, 0x68, 0xeb, 0xc6, 0xdc, 0x56, 0x61, 0x63, 0xdf, 0x08, 0xd0, 0x42, 0x92, 0xbc,
0x80, 0x0d, 0xbb, 0x2c, 0xfc, 0x68, 0xbe, 0x8b, 0x1f, 0x0b, 0xca, 0xe4, 0x13, 0x68, 0xd8, 0x6a,
0xea, 0xb5, 0xd0, 0xce, 0x87, 0xd5, 0x10, 0x1f, 0x98, 0x4d, 0x5a, 0x48, 0xe9, 0xe0, 0x16, 0xe5,
0x57, 0x38, 0x00, 0xef, 0x14, 0xdc, 0x05, 0x6d, 0xef, 0xcf, 0x75, 0xe8, 0xbc, 0x98, 0x46, 0x4a,
0xf4, 0x83, 0x20, 0x99, 0xc6, 0x8a, 0x10, 0xa8, 0xc7, 0x6c, 0xc2, 0xb1, 0xbe, 0x5a, 0x14, 0xd7,
0xe4, 0x16, 0xb4, 0x94, 0x98, 0x70, 0xa9, 0xd8, 0x24, 0xc5, 0x2a, 0x73, 0xe9, 0x9c, 0xa1, 0x77,
0x45, 0xc8, 0x63, 0x25, 0x82, 0x24, 0xee, 0xb9, 0xa8, 0x36, 0x67, 0x90, 0x2f, 0x01, 0x82, 0x24,
0x4a, 0x32, 0x7f, 0xcc, 0xe4, 0xd8, 0x16, 0xd2, 0xdd, 0xb9, 0xb3, 0xe5, 0x6f, 0xef, 0x0c, 0x92,
0x28, 0x99, 0x66, 0x4f, 0x99, 0x1c, 0xd3, 0x16, 0x2a, 0xe9, 0x25, 0xe9, 0x41, 0x03, 0x89, 0x61,
0x88, 0x85, 0xe4, 0xd2, 0x82, 0x24, 0x1f, 0xc1, 0xe6, 0x29, 0xcf, 0x03, 0x96, 0x85, 0xbe, 0xbd,
0xb2, 0x58, 0x16, 0x2d, 0xba, 0x61, 0xd9, 0xfb, 0x86, 0x4b, 0xae, 0x43, 0xe3, 0x94, 0xe7, 0xfe,
0x54, 0x84, 0x98, 0xeb, 0x16, 0x5d, 0x3b, 0xe5, 0xf9, 0x91, 0x08, 0xc9, 0xe7, 0xb0, 0x26, 0x26,
0xec, 0x84, 0xeb, 0x3c, 0x6a, 0xcf, 0xbe, 0xb3, 0xc2, 0xb3, 0x21, 0x9e, 0x47, 0xe5, 0x43, 0x2d,
0x4c, 0xad, 0xce, 0x96, 0x07, 0x30, 0x77, 0x59, 0x5f, 0x4d, 0x11, 0x87, 0xfc, 0xd7, 0x3d, 0x67,
0xdb, 0x7d, 0xe0, 0x52, 0x43, 0x6c, 0xfd, 0xc3, 0x81, 0xf5, 0x8a, 0x76, 0xd9, 0x19, 0xa7, 0xe2,
0x4c, 0x11, 0xfa, 0x5a, 0x29, 0xf4, 0x3d, 0x68, 0xa4, 0x2c, 0x8f, 0x12, 0x16, 0x62, 0x68, 0x3b,
0xb4, 0x20, 0xf5, 0xe7, 0xde, 0x8a, 0x50, 0xe9, 0x98, 0xea, 0xa0, 0x18, 0x82, 0x5c, 0x83, 0xb5,
0x31, 0x17, 0x27, 0x63, 0x65, 0x63, 0x65, 0x29, 0xb2, 0x05, 0x4d, 0x5d, 0x78, 0x52, 0xfc, 0x86,
0x63, 0x8c, 0x5c, 0x3a, 0xa3, 0xc9, 0x3d, 0x58, 0xcf, 0x70, 0xe5, 0x2b, 0x96, 0x9d, 0x70, 0x85,
0x31, 0x72, 0x69, 0xc7, 0x30, 0x0f, 0x91, 0x37, 0x6f, 0x3c, 0xcd, 0x52, 0xe3, 0xf1, 0xfe, 0xe6,
0xc0, 0xd5, 0xe7, 0x49, 0xc0, 0x22, 0x1b, 0xe9, 0x7d, 0xeb, 0xdc, 0x0f, 0xa0, 0x7e, 0xca, 0x73,
0x89, 0xa1, 0xa8, 0xe4, 0x7b, 0x89, 0xf0, 0xce, 0x33, 0x9e, 0x53, 0x14, 0x27, 0x9f, 0x41, 0x67,
0xa2, 0xc3, 0xce, 0x4c, 0xd8, 0x31, 0x12, 0xed, 0x87, 0xd7, 0x96, 0x27, 0x85, 0x56, 0x64, 0xf5,
0x09, 0x53, 0x26, 0xe5, 0xdb, 0x24, 0x0b, 0x6d, 0x15, 0xce, 0xe8, 0xad, 0xef, 0x82, 0xfb, 0x8c,
0xe7, 0x4b, 0x6b, 0x9b, 0x40, 0x5d, 0x37, 0x63, 0xfc, 0x54, 0x87, 0xe2, 0xda, 0xfb, 0xad, 0x03,
0x5d, 0xed, 0x63, 0xb9, 0x4b, 0xae, 0xe8, 0xbc, 0x1f, 0xc1, 0xa6, 0x28, 0x49, 0xf9, 0xb3, 0x36,
0xbc, 0x51, 0x66, 0x0f, 0x43, 0x9c, 0x03, 0xfc, 0x4c, 0x04, 0xdc, 0x57, 0x79, 0xca, 0xad, 0x87,
0x60, 0x58, 0x87, 0x79, 0xca, 0x67, 0xce, 0xd5, 0xe7, 0xce, 0x79, 0xff, 0x76, 0xe0, 0xfa, 0x8a,
0x76, 0x7d, 0xc9, 0x49, 0x70, 0x0f, 0xd6, 0x6d, 0xcf, 0xf1, 0xb1, 0x68, 0xed, 0x87, 0x3b, 0x96,
0x69, 0x2a, 0xf2, 0x06, 0x34, 0x79, 0x2c, 0xfd, 0xd2, 0xe7, 0x1b, 0x3c, 0x96, 0x23, 0x1d, 0x9e,
0xbb, 0xd0, 0x89, 0x98, 0x54, 0xfe, 0x34, 0x0d, 0x99, 0xe2, 0xe6, 0x06, 0xd6, 0x69, 0x5b, 0xf3,
0x8e, 0x0c, 0x4b, 0x9f, 0x4c, 0xe6, 0x52, 0xf1, 0x89, 0xaf, 0xd8, 0x89, 0x6e, 0xcc, 0xae, 0x3e,
0x99, 0x61, 0x1d, 0xb2, 0x13, 0x49, 0xee, 0xc3, 0x46, 0xa4, 0xd3, 0xee, 0xc7, 0x22, 0x38, 0xc5,
0x8f, 0x98, 0x4b, 0xb8, 0x8e, 0xdc, 0x91, 0x65, 0x7a, 0xff, 0x72, 0xe1, 0xc6, 0xca, 0xd9, 0x44,
0xbe, 0x07, 0x1f, 0x94, 0x1d, 0xf1, 0x51, 0x37, 0xca, 0xed, 0xe9, 0x49, 0xc9, 0xa1, 0xe7, 0x66,
0xe7, 0xff, 0x38, 0x14, 0x3a, 0xb7, 0x2c, 0x0c, 0x79, 0x88, 0x53, 0xa1, 0x49, 0x0d, 0xa1, 0x7b,
0xc1, 0xb1, 0x4e, 0x32, 0x0f, 0xb1, 0xe9, 0x37, 0x69, 0x41, 0x6a, 0xf9, 0xc9, 0x54, 0xfb, 0xd4,
0x36, 0xf2, 0x48, 0x68, 0xf9, 0x8c, 0x4f, 0x92, 0x33, 0x1e, 0xf6, 0x3a, 0x46, 0xde, 0x92, 0x64,
0x1b, 0x3a, 0x63, 0x26, 0x7d, 0x34, 0xeb, 0x4f, 0x65, 0x6f, 0x1d, 0xb7, 0x61, 0xcc, 0x64, 0x5f,
0xb3, 0x8e, 0xf4, 0x64, 0xba, 0x7a, 0xc6, 0x33, 0xf1, 0x46, 0x04, 0xa6, 0xae, 0xa5, 0x62, 0x6a,
0x2a, 0x7b, 0x1b, 0xd8, 0x19, 0x48, 0x79, 0xeb, 0x00, 0x77, 0x10, 0xc6, 0x64, 0x53, 0xa9, 0x0a,
0xc9, 0x4d, 0x94, 0x6c, 0x23, 0xcf, 0x88, 0x78, 0x6f, 0xcf, 0x17, 0x73, 0x31, 0x75, 0x96, 0x17,
0xf3, 0xb9, 0x8c, 0xd5, 0x96, 0x64, 0x6c, 0x31, 0x2d, 0xee, 0xb9, 0xb4, 0x78, 0x4f, 0x60, 0x6b,
0xf1, 0xc3, 0xfb, 0xd3, 0xe3, 0x48, 0x04, 0x83, 0x31, 0xbb, 0xe4, 0x45, 0xf2, 0xbe, 0x75, 0x61,
0xbd, 0x82, 0x7a, 0xfe, 0xab, 0x5e, 0x07, 0xab, 0xee, 0x0e, 0xb4, 0xd3, 0x4c, 0x9c, 0x31, 0xc5,
0xfd, 0x53, 0x9e, 0xdb, 0x26, 0x0e, 0x96, 0xa5, 0x9b, 0xd2, 0xb6, 0x6e, 0x0c, 0x32, 0xc8, 0x44,
0xaa, 0xfd, 0xc2, 0xa2, 0xeb, 0xd0, 0x32, 0x4b, 0xf7, 0xf4, 0x5f, 0x26, 0x22, 0xb6, 0x25, 0xd7,
0xa4, 0x96, 0xd2, 0x1d, 0xcf, 0x24, 0x82, 0x87, 0xd8, 0xd3, 0x9b, 0x74, 0x46, 0xcf, 0x2b, 0xa2,
0x51, 0xae, 0x88, 0x97, 0xd0, 0xcd, 0xf8, 0xaf, 0xa6, 0x5c, 0x2a, 0xe9, 0xab, 0xc4, 0xd7, 0x76,
0xec, 0xe0, 0xbb, 0xbf, 0x0a, 0xdb, 0x59, 0xf1, 0xc3, 0xe4, 0xeb, 0x44, 0xc4, 0x74, 0x23, 0xab,
0xd0, 0xe4, 0x31, 0x34, 0x0b, 0x44, 0x61, 0x11, 0xcc, 0x9d, 0x15, 0x86, 0x2c, 0x94, 0x91, 0x74,
0xa6, 0xa0, 0x81, 0x03, 0x8f, 0x83, 0x2c, 0x4f, 0xd5, 0xac, 0xa2, 0xe7, 0x0c, 0xbd, 0x2b, 0x53,
0x1e, 0x28, 0x36, 0xaf, 0xeb, 0x39, 0x43, 0xf7, 0x5d, 0x2b, 0xaa, 0xab, 0x13, 0x67, 0x4d, 0x07,
0x23, 0xb7, 0x31, 0x67, 0x3f, 0xe3, 0xb9, 0xf4, 0xfe, 0xea, 0xc0, 0xcd, 0x0b, 0x4e, 0x64, 0xf3,
0xe5, 0xcc, 0xf2, 0x75, 0x1b, 0x20, 0xc5, 0xda, 0xc0, 0x74, 0x99, 0xfc, 0xb7, 0x0c, 0x47, 0x67,
0x6b, 0x96, 0x74, 0xb7, 0x9c, 0xf4, 0x0b, 0xba, 0xc6, 0x75, 0x68, 0x04, 0x63, 0xa6, 0xf4, 0x60,
0xb8, 0x62, 0xa6, 0xbd, 0x26, 0x87, 0xa1, 0xae, 0xdb, 0x02, 0x95, 0xe6, 0x7a, 0x77, 0xcd, 0x24,
0x7e, 0xc6, 0x1b, 0x62, 0x12, 0xf5, 0x6d, 0x32, 0x4d, 0xa2, 0x4e, 0x0d, 0xe1, 0xfd, 0xae, 0x06,
0xdd, 0xc5, 0x72, 0x26, 0x5f, 0x94, 0x10, 0xff, 0xb9, 0xa1, 0xbb, 0xa2, 0xab, 0x96, 0xf0, 0xfe,
0x57, 0xd0, 0xb1, 0xa7, 0xd6, 0xde, 0xc9, 0x5e, 0x6d, 0x11, 0x0d, 0xad, 0xbe, 0x3f, 0xb4, 0x9d,
0xce, 0xd6, 0x92, 0x3c, 0x86, 0x46, 0x31, 0xbc, 0x5d, 0xac, 0x87, 0x0b, 0xdc, 0x28, 0xe6, 0x78,
0xa1, 0xf1, 0x3f, 0xbc, 0x3a, 0xbc, 0x4f, 0x61, 0x13, 0x77, 0xb5, 0x43, 0xb6, 0xc9, 0x5d, 0xee,
0x5e, 0x7f, 0x0e, 0x1f, 0x14, 0x8a, 0x2f, 0xb8, 0x94, 0x1a, 0xd7, 0x51, 0xce, 0x2e, 0xab, 0xfd,
0x25, 0x5c, 0xd3, 0xda, 0xfd, 0x40, 0x89, 0x33, 0xa1, 0xf2, 0x01, 0x8f, 0x15, 0xcf, 0x2e, 0xd0,
0xef, 0x82, 0x2b, 0x42, 0x13, 0xde, 0x0e, 0xd5, 0x4b, 0x6f, 0xd7, 0xf4, 0xa6, 0xaa, 0x85, 0x7e,
0x10, 0x70, 0xbc, 0x04, 0x97, 0xb5, 0xb2, 0x67, 0x8a, 0xbc, 0x6a, 0x65, 0x57, 0xc8, 0x89, 0x90,
0xf2, 0x1d, 0xcc, 0x7c, 0xe3, 0x40, 0x47, 0xdb, 0x79, 0x92, 0x24, 0xa7, 0x13, 0x96, 0x9d, 0xae,
0x56, 0x9c, 0x66, 0x91, 0x0d, 0x83, 0x5e, 0xce, 0xc0, 0x8b, 0x5b, 0x42, 0x56, 0x37, 0xa1, 0x85,
0x5d, 0xdb, 0xd7, 0xb2, 0xe6, 0x56, 0x34, 0x91, 0x71, 0x94, 0x45, 0xe5, 0xd9, 0x74, 0xa5, 0x3a,
0x9b, 0x6e, 0x03, 0x84, 0x3c, 0xe2, 0x7a, 0xc6, 0x33, 0x85, 0xb7, 0xa2, 0x4e, 0x5b, 0x96, 0xd3,
0x57, 0xde, 0xd7, 0xa6, 0xf8, 0x07, 0x11, 0x67, 0xd9, 0x53, 0x21, 0x55, 0x92, 0xe5, 0xe5, 0x3b,
0xe6, 0x54, 0xee, 0xd8, 0x6d, 0x80, 0x40, 0x0b, 0x1a, 0x5b, 0x35, 0x63, 0xcb, 0x72, 0xfa, 0xca,
0xfb, 0x8b, 0x03, 0x44, 0x1b, 0xb3, 0xcf, 0xbc, 0x7d, 0x11, 0xa8, 0x69, 0xc6, 0x97, 0xc2, 0xc4,
0x12, 0x0e, 0xaf, 0xad, 0xc0, 0xe1, 0x2e, 0x3e, 0xdc, 0xcf, 0xe1, 0xf0, 0x3a, 0xb2, 0x0b, 0x1c,
0x7e, 0x13, 0x5a, 0x38, 0xcf, 0x10, 0x88, 0x5f, 0xc1, 0x2d, 0x04, 0xe2, 0x07, 0x4b, 0x81, 0xf8,
0x1a, 0x0a, 0xac, 0x00, 0xe2, 0x8d, 0x32, 0x10, 0x1f, 0xc3, 0xd5, 0xf3, 0x27, 0x91, 0xab, 0xdf,
0x1a, 0x3f, 0x84, 0x66, 0x6a, 0x85, 0xec, 0x65, 0xbf, 0x55, 0xbd, 0x67, 0x55, 0x4b, 0x74, 0x26,
0xed, 0xfd, 0xa1, 0x06, 0xef, 0x6b, 0x81, 0xd7, 0x2c, 0x8a, 0xb8, 0xba, 0x78, 0x80, 0xf7, 0xa0,
0xc1, 0xc2, 0x30, 0xe3, 0x52, 0x16, 0x51, 0xb3, 0xa4, 0x8e, 0xcf, 0x5b, 0x34, 0x80, 0x61, 0x6b,
0x52, 0x4b, 0xe9, 0xd8, 0xeb, 0xdc, 0x61, 0xd4, 0x9a, 0x14, 0xd7, 0x9a, 0x87, 0x98, 0xd9, 0xf4,
0x4f, 0x5c, 0x6b, 0xcb, 0x3a, 0xf7, 0x1a, 0x14, 0x98, 0x27, 0x5f, 0x41, 0x6a, 0xe9, 0x94, 0xa9,
0xb1, 0x05, 0x56, 0xb8, 0xd6, 0xb3, 0x64, 0xd6, 0xc2, 0xf1, 0x01, 0xd3, 0x29, 0xf7, 0xf4, 0x22,
0xdf, 0xad, 0x52, 0xbe, 0xf5, 0x79, 0xf4, 0x2b, 0x13, 0xe7, 0x52, 0x8b, 0x1a, 0x02, 0xb3, 0x2a,
0xc2, 0x90, 0xc7, 0x76, 0x20, 0x59, 0x6a, 0x35, 0xd2, 0xf2, 0x5e, 0x98, 0x0a, 0xab, 0x04, 0x4b,
0x92, 0x4f, 0xa1, 0x69, 0x7b, 0x5e, 0xd1, 0xad, 0x6f, 0x56, 0xa3, 0x5f, 0x91, 0xa7, 0x33, 0x61,
0xef, 0x4f, 0x8e, 0x29, 0xff, 0x03, 0x76, 0xc6, 0xc3, 0xbe, 0x8d, 0x65, 0x29, 0xca, 0x4e, 0x35,
0xca, 0xcb, 0x5e, 0x94, 0xb7, 0xa0, 0xf5, 0x86, 0x9d, 0x25, 0xd3, 0x4c, 0x28, 0x6e, 0x83, 0x3f,
0x67, 0xe8, 0x49, 0x16, 0x8c, 0x99, 0xc0, 0x87, 0x4c, 0x1d, 0x53, 0xd9, 0x40, 0x7a, 0x18, 0x5e,
0x70, 0x65, 0xef, 0x42, 0xc7, 0xa0, 0x2f, 0xbf, 0x5c, 0x99, 0x6d, 0xc3, 0x1b, 0x60, 0x7d, 0xfe,
0xde, 0x81, 0x0f, 0x97, 0xe2, 0x81, 0x15, 0x95, 0xb3, 0x38, 0x1d, 0xcd, 0x09, 0x2a, 0xd3, 0x71,
0x0f, 0xee, 0x8c, 0x4d, 0x03, 0xf0, 0x59, 0x16, 0x8c, 0xc5, 0x19, 0xf7, 0xe5, 0x34, 0x4d, 0x93,
0x4c, 0xf9, 0x3c, 0x66, 0xc7, 0x91, 0xc5, 0x82, 0x4d, 0x7a, 0xcb, 0x8a, 0xf5, 0x8d, 0xd4, 0x81,
0x11, 0xda, 0x33, 0x32, 0xde, 0x1f, 0x1d, 0x33, 0x3a, 0x0e, 0x35, 0x52, 0xd5, 0xd8, 0x97, 0x67,
0x97, 0x7c, 0x5b, 0x7d, 0x01, 0x6b, 0x16, 0xec, 0xea, 0xef, 0x6c, 0x2c, 0x62, 0xa8, 0x92, 0xc1,
0x9d, 0xc3, 0x39, 0x0c, 0xa6, 0x56, 0xc9, 0xfb, 0x0c, 0xda, 0x25, 0x36, 0x69, 0x43, 0xe3, 0x68,
0xf4, 0x6c, 0xf4, 0xf2, 0xf5, 0xa8, 0xfb, 0x9e, 0x26, 0x0e, 0xe9, 0xd1, 0xc1, 0xe1, 0xde, 0x6e,
0xd7, 0x21, 0xef, 0xc3, 0xfa, 0xd1, 0x08, 0xc9, 0xd7, 0x2f, 0xe9, 0xe1, 0xd3, 0x9f, 0x75, 0x6b,
0xde, 0x37, 0xae, 0xc1, 0xd2, 0xaf, 0x4a, 0x40, 0xdc, 0x02, 0x9b, 0x15, 0xce, 0x13, 0xa8, 0xbf,
0xc9, 0x92, 0x49, 0x51, 0x0a, 0x7a, 0xad, 0x0f, 0xa4, 0x12, 0xdb, 0xb3, 0x6b, 0x2a, 0xd1, 0xa5,
0x11, 0x8c, 0x75, 0xe5, 0xc5, 0x27, 0x05, 0x8e, 0x99, 0x33, 0x74, 0x4a, 0x2c, 0xfa, 0x33, 0xed,
0xd4, 0xbe, 0x7f, 0x66, 0xbc, 0x3e, 0xbe, 0xc1, 0x33, 0x2e, 0xd3, 0x24, 0x96, 0xc5, 0xb5, 0x9c,
0xd1, 0xba, 0x17, 0x67, 0x3c, 0x8d, 0x84, 0x51, 0x36, 0x25, 0xd2, 0xb2, 0x9c, 0xbe, 0x22, 0x7c,
0xf9, 0x83, 0xa3, 0x89, 0x91, 0xfd, 0x7e, 0x35, 0xb2, 0x4b, 0x4e, 0xbd, 0xf3, 0xea, 0xdc, 0x93,
0x64, 0xe9, 0x33, 0xc5, 0xe4, 0xb0, 0x35, 0x1b, 0xe0, 0x3f, 0x05, 0x72, 0x5e, 0xf3, 0x5c, 0x2e,
0xf6, 0xf7, 0x46, 0xbb, 0xc3, 0xd1, 0x57, 0x5d, 0x87, 0x74, 0xa0, 0xd9, 0x1f, 0x0c, 0xf6, 0xf6,
0x75, 0x66, 0x6a, 0x9a, 0xda, 0xdd, 0x1b, 0x3c, 0x1f, 0x8e, 0xf6, 0x76, 0xbb, 0xae, 0xa6, 0x06,
0xfd, 0xd1, 0x60, 0xef, 0xf9, 0xde, 0x6e, 0xb7, 0xee, 0xfd, 0xd3, 0x31, 0x93, 0xbd, 0x00, 0x5b,
0xc6, 0xcf, 0x5d, 0x1e, 0x08, 0xb9, 0xfa, 0xef, 0x84, 0x5b, 0xd0, 0xb2, 0xf1, 0x1c, 0x16, 0x95,
0x36, 0x67, 0x90, 0x5f, 0xc0, 0x66, 0x68, 0xf5, 0xfd, 0x4a, 0xe5, 0x3d, 0x5a, 0xc4, 0x48, 0xcb,
0x3e, 0xb9, 0x53, 0x2c, 0x6c, 0x78, 0x36, 0xc2, 0x0a, 0xed, 0x7d, 0x0c, 0x1b, 0x55, 0x89, 0xca,
0x61, 0xdf, 0xab, 0x1c, 0xd6, 0xf1, 0xbe, 0x75, 0x60, 0x73, 0xe1, 0x6f, 0xd2, 0xd5, 0xd3, 0xe6,
0x2e, 0x74, 0x42, 0x21, 0xd3, 0x88, 0xe5, 0x7e, 0xa9, 0x1f, 0xb5, 0x2d, 0x0f, 0x71, 0xf2, 0xc7,
0x40, 0xca, 0x22, 0x7e, 0x19, 0x65, 0x77, 0x4b, 0x82, 0xd8, 0x4e, 0x2a, 0xe3, 0xab, 0xfe, 0x2e,
0xe3, 0xeb, 0xc9, 0xfa, 0xcf, 0xdb, 0x3b, 0x9f, 0x3c, 0x2e, 0x64, 0x8f, 0xd7, 0x70, 0xf5, 0xe8,
0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x30, 0x89, 0x4d, 0x75, 0xf4, 0x17, 0x00, 0x00,
}

View File

@ -1,14 +1,30 @@
syntax = "proto3";
import "sync_settings.proto";
option go_package = "./;protobuf";
package protobuf;
/* `FetchingBackedUpDataDetails` is used to describe how many messages a single backup data structure consists of */
message FetchingBackedUpDataDetails {
uint32 data_number = 1;
uint32 total_number = 2;
}
message Backup {
uint64 clock = 1;
string id = 2;
/* this is what we already had */
repeated SyncInstallationContactV2 contacts = 3;
repeated SyncCommunity communities = 4;
/* newly added details to be backed up to and fetched from waku */
FetchingBackedUpDataDetails contactsDetails = 5;
FetchingBackedUpDataDetails communitiesDetails = 6;
BackedUpProfile profile = 7;
FetchingBackedUpDataDetails profileDetails = 8;
SyncSetting setting = 9;
FetchingBackedUpDataDetails settingsDetails = 10;
}
message MultiAccount {
@ -255,3 +271,11 @@ message SyncContactRequestDecision {
DECLINED = 1;
}
}
/* `BackedUpProfile` is used to describe profile of logged in user */
message BackedUpProfile {
string key_uid = 1;
string display_name = 2;
uint64 display_name_clock = 3;
repeated SyncProfilePicture pictures = 4;
}

View File

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

View File

@ -28,6 +28,7 @@ message SyncSetting {
STICKERS_PACKS_INSTALLED = 10;
STICKERS_PACKS_PENDING = 11;
STICKERS_RECENT_STICKERS = 12;
DISPLAY_NAME = 13;
}
}

View File

@ -0,0 +1,22 @@
package wakusync
import (
"github.com/status-im/status-go/images"
)
type BackedUpProfile struct {
DisplayName string `json:"displayName,omitempty"`
DisplayNameStored bool `json:"displayNameStored,omitempty"`
Images []images.IdentityImage `json:"images,omitempty,omitempty"`
ImagesStored bool `json:"imagesStored,omitempty"`
}
func (sfwr *WakuBackedUpDataResponse) AddDisplayName(displayName string, stored bool) {
sfwr.Profile.DisplayName = displayName
sfwr.Profile.DisplayNameStored = stored
}
func (sfwr *WakuBackedUpDataResponse) AddImages(images []images.IdentityImage, stored bool) {
sfwr.Profile.ImagesStored = stored
sfwr.Profile.Images = images
}

View File

@ -0,0 +1,36 @@
package wakusync
import (
"github.com/status-im/status-go/protocol/protobuf"
)
type FetchingBackupedDataDetails struct {
DataNumber uint32 `json:"dataNumber,omitempty"`
TotalNumber uint32 `json:"totalNumber,omitempty"`
}
func (sfwr *WakuBackedUpDataResponse) AddFetchingBackedUpDataDetails(section string, details *protobuf.FetchingBackedUpDataDetails) {
if details == nil {
return
}
if sfwr.FetchingDataProgress == nil {
sfwr.FetchingDataProgress = make(map[string]protobuf.FetchingBackedUpDataDetails)
}
sfwr.FetchingDataProgress[section] = *details
}
func (sfwr *WakuBackedUpDataResponse) FetchingBackedUpDataDetails() map[string]FetchingBackupedDataDetails {
if len(sfwr.FetchingDataProgress) == 0 {
return nil
}
result := make(map[string]FetchingBackupedDataDetails)
for section, details := range sfwr.FetchingDataProgress {
result[section] = FetchingBackupedDataDetails{
DataNumber: details.DataNumber,
TotalNumber: details.TotalNumber,
}
}
return result
}

View File

@ -0,0 +1,29 @@
package wakusync
import (
"encoding/json"
"github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/protocol/protobuf"
)
type WakuBackedUpDataResponse struct {
FetchingDataProgress map[string]protobuf.FetchingBackedUpDataDetails // key represents the data/section backup details refer to
Profile *BackedUpProfile
Setting *settings.SyncSettingField
}
func (sfwr *WakuBackedUpDataResponse) MarshalJSON() ([]byte, error) {
responseItem := struct {
FetchingDataProgress map[string]FetchingBackupedDataDetails `json:"fetchingBackedUpDataProgress,omitempty"`
Profile *BackedUpProfile `json:"backedUpProfile,omitempty"`
Setting *settings.SyncSettingField `json:"backedUpSettings,omitempty"`
}{
Profile: sfwr.Profile,
Setting: sfwr.Setting,
}
responseItem.FetchingDataProgress = sfwr.FetchingBackedUpDataDetails()
return json.Marshal(responseItem)
}

View File

@ -789,7 +789,7 @@ func (api *PublicAPI) SendContactUpdate(ctx context.Context, contactID, name, pi
}
func (api *PublicAPI) SetDisplayName(ctx context.Context, displayName string) error {
return api.service.messenger.SetDisplayName(displayName)
return api.service.messenger.SetDisplayName(displayName, true)
}
func (api *PublicAPI) MarkAsTrusted(ctx context.Context, contactID string) error {

View File

@ -5,6 +5,7 @@ import (
"github.com/status-im/status-go/protocol"
"github.com/status-im/status-go/protocol/communities"
"github.com/status-im/status-go/protocol/discord"
"github.com/status-im/status-go/protocol/wakusync"
"github.com/status-im/status-go/signal"
)
@ -143,3 +144,15 @@ func (m *MessengerSignalsHandler) DiscordCommunityImportFinished(id string) {
func (m *MessengerSignalsHandler) DiscordCommunityImportCancelled(id string) {
signal.SendDiscordCommunityImportCancelled(id)
}
func (m *MessengerSignalsHandler) SendWakuFetchingBackupProgress(response *wakusync.WakuBackedUpDataResponse) {
signal.SendWakuFetchingBackupProgress(response)
}
func (m *MessengerSignalsHandler) SendWakuBackedUpProfile(response *wakusync.WakuBackedUpDataResponse) {
signal.SendWakuBackedUpProfile(response)
}
func (m *MessengerSignalsHandler) SendWakuBackedUpSettings(response *wakusync.WakuBackedUpDataResponse) {
signal.SendWakuBackedUpSettings(response)
}

View File

@ -0,0 +1,26 @@
package signal
import "encoding/json"
const (
// EventWakuFetchingBackupProgress is triggered during the syncing from waku
EventWakuFetchingBackupProgress = "waku.fetching.backup.progress"
// EventSyncFromWakuProfile is triggered during the syncing user profile from waku
EventWakuBackedUpProfile = "waku.backedup.profile"
// EventWakuBackedUpSettings is triggered during the syncing user settings from waku
EventWakuBackedUpSettings = "waku.backedup.settings"
)
func SendWakuFetchingBackupProgress(obj json.Marshaler) {
send(EventWakuFetchingBackupProgress, obj)
}
func SendWakuBackedUpProfile(obj json.Marshaler) {
send(EventWakuBackedUpProfile, obj)
}
func SendWakuBackedUpSettings(obj json.Marshaler) {
send(EventWakuBackedUpSettings, obj)
}