mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-27 13:13:43 +00:00
Update to the latest Backup.proto
This commit is contained in:
committed by
Michelle Tang
parent
2ff4ea2832
commit
19bf6f95c7
@@ -55,6 +55,7 @@ fun RecipientTable.getContactsForBackup(selfId: Long): ContactArchiveExporter {
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.MUTE_UNTIL}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.CHAT_COLORS}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.CUSTOM_CHAT_COLORS_ID}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.AVATAR_COLOR}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.EXTRAS}",
|
||||
"${IdentityTable.TABLE_NAME}.${IdentityTable.IDENTITY_KEY}",
|
||||
"${IdentityTable.TABLE_NAME}.${IdentityTable.VERIFIED}"
|
||||
@@ -91,6 +92,7 @@ fun RecipientTable.getGroupsForBackup(selfAci: ServiceId.ACI): GroupArchiveExpor
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.PROFILE_SHARING}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.MUTE_UNTIL}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.EXTRAS}",
|
||||
"${RecipientTable.TABLE_NAME}.${RecipientTable.AVATAR_COLOR}",
|
||||
"${GroupTable.TABLE_NAME}.${GroupTable.V2_MASTER_KEY}",
|
||||
"${GroupTable.TABLE_NAME}.${GroupTable.SHOW_AS_STORY_STATE}",
|
||||
"${GroupTable.TABLE_NAME}.${GroupTable.TITLE}",
|
||||
|
||||
@@ -18,6 +18,8 @@ import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.Contact
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.Self
|
||||
import org.thoughtcrime.securesms.backup.v2.util.clampToValidBackupRange
|
||||
import org.thoughtcrime.securesms.backup.v2.util.toRemote
|
||||
import org.thoughtcrime.securesms.conversation.colors.AvatarColor
|
||||
import org.thoughtcrime.securesms.database.IdentityTable
|
||||
import org.thoughtcrime.securesms.database.RecipientTable
|
||||
import org.thoughtcrime.securesms.database.RecipientTableCursorUtil
|
||||
@@ -49,7 +51,9 @@ class ContactArchiveExporter(private val cursor: Cursor, private val selfId: Lon
|
||||
if (id == selfId) {
|
||||
return ArchiveRecipient(
|
||||
id = id,
|
||||
self = Self()
|
||||
self = Self(
|
||||
avatarColor = cursor.requireString(RecipientTable.AVATAR_COLOR)?.let { AvatarColor.deserialize(it) }?.toRemote()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -81,6 +85,7 @@ class ContactArchiveExporter(private val cursor: Cursor, private val selfId: Lon
|
||||
.systemGivenName(cursor.requireString(RecipientTable.SYSTEM_GIVEN_NAME) ?: "")
|
||||
.systemFamilyName(cursor.requireString(RecipientTable.SYSTEM_FAMILY_NAME) ?: "")
|
||||
.systemNickname(cursor.requireString(RecipientTable.SYSTEM_NICKNAME) ?: "")
|
||||
.avatarColor(cursor.requireString(RecipientTable.AVATAR_COLOR)?.let { AvatarColor.deserialize(it) }?.toRemote())
|
||||
|
||||
val registeredState = RecipientTable.RegisteredState.fromId(cursor.requireInt(RecipientTable.REGISTERED))
|
||||
if (registeredState == RecipientTable.RegisteredState.REGISTERED) {
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.signal.core.util.requireBoolean
|
||||
import org.signal.core.util.requireInt
|
||||
import org.signal.core.util.requireLong
|
||||
import org.signal.core.util.requireNonNullBlob
|
||||
import org.signal.core.util.requireString
|
||||
import org.signal.storageservice.protos.groups.AccessControl
|
||||
import org.signal.storageservice.protos.groups.Member
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedBannedMember
|
||||
@@ -23,6 +24,8 @@ import org.signal.storageservice.protos.groups.local.EnabledState
|
||||
import org.thoughtcrime.securesms.backup.v2.ArchiveGroup
|
||||
import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.Group
|
||||
import org.thoughtcrime.securesms.backup.v2.util.toRemote
|
||||
import org.thoughtcrime.securesms.conversation.colors.AvatarColor
|
||||
import org.thoughtcrime.securesms.database.GroupTable
|
||||
import org.thoughtcrime.securesms.database.RecipientTable
|
||||
import org.thoughtcrime.securesms.database.RecipientTableCursorUtil
|
||||
@@ -59,7 +62,8 @@ class GroupArchiveExporter(private val selfAci: ServiceId.ACI, private val curso
|
||||
blocked = cursor.requireBoolean(RecipientTable.BLOCKED),
|
||||
hideStory = extras?.hideStory() ?: false,
|
||||
storySendMode = showAsStoryState.toRemote(),
|
||||
snapshot = decryptedGroup.toRemote(isActive, selfAci)
|
||||
snapshot = decryptedGroup.toRemote(isActive, selfAci),
|
||||
avatarColor = cursor.requireString(RecipientTable.AVATAR_COLOR)?.let { AvatarColor.deserialize(it) }?.toRemote()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.signal.core.util.insertInto
|
||||
import org.signal.core.util.toInt
|
||||
import org.signal.core.util.update
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.Contact
|
||||
import org.thoughtcrime.securesms.backup.v2.util.toLocal
|
||||
import org.thoughtcrime.securesms.database.IdentityTable
|
||||
import org.thoughtcrime.securesms.database.RecipientTable
|
||||
import org.thoughtcrime.securesms.database.SQLiteDatabase
|
||||
@@ -54,7 +55,8 @@ object ContactArchiveImporter {
|
||||
RecipientTable.NICKNAME_FAMILY_NAME to contact.nickname?.family,
|
||||
RecipientTable.SYSTEM_GIVEN_NAME to contact.systemGivenName,
|
||||
RecipientTable.SYSTEM_FAMILY_NAME to contact.systemFamilyName,
|
||||
RecipientTable.SYSTEM_NICKNAME to contact.systemNickname
|
||||
RecipientTable.SYSTEM_NICKNAME to contact.systemNickname,
|
||||
RecipientTable.AVATAR_COLOR to contact.avatarColor?.toLocal()?.serialize()
|
||||
)
|
||||
|
||||
if (contact.registered != null) {
|
||||
@@ -111,6 +113,6 @@ private fun Contact.toLocalExtras(): RecipientExtras {
|
||||
private val Contact.formattedE164: String?
|
||||
get() {
|
||||
return e164?.let {
|
||||
SignalE164Util.formatAsE164(e164.toString())
|
||||
SignalE164Util.formatAsE164("+$e164")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedTimer
|
||||
import org.signal.storageservice.protos.groups.local.EnabledState
|
||||
import org.thoughtcrime.securesms.backup.v2.ArchiveGroup
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.Group
|
||||
import org.thoughtcrime.securesms.backup.v2.util.toLocal
|
||||
import org.thoughtcrime.securesms.conversation.colors.AvatarColorHash
|
||||
import org.thoughtcrime.securesms.database.GroupTable
|
||||
import org.thoughtcrime.securesms.database.RecipientTable
|
||||
@@ -56,6 +57,7 @@ object GroupArchiveImporter {
|
||||
put(RecipientTable.BLOCKED, group.blocked.toInt())
|
||||
put(RecipientTable.TYPE, RecipientTable.RecipientType.GV2.id)
|
||||
put(RecipientTable.STORAGE_SERVICE_ID, Base64.encodeWithPadding(StorageSyncHelper.generateKey()))
|
||||
put(RecipientTable.AVATAR_COLOR, group.avatarColor?.toLocal()?.serialize())
|
||||
if (group.hideStory) {
|
||||
val extras = RecipientExtras.Builder().hideStory(true).build()
|
||||
put(RecipientTable.EXTRAS, extras.encode())
|
||||
|
||||
@@ -68,6 +68,7 @@ object AccountDataArchiveProcessor {
|
||||
givenName = selfRecord.signalProfileName.givenName,
|
||||
familyName = selfRecord.signalProfileName.familyName,
|
||||
avatarUrlPath = selfRecord.signalProfileAvatar ?: "",
|
||||
svrPin = SignalStore.svr.pin ?: "",
|
||||
username = selfRecord.username?.takeIf { it.isNotBlank() },
|
||||
usernameLink = if (selfRecord.username.isNotNullOrBlank() && signalStore.accountValues.usernameLink != null) {
|
||||
AccountData.UsernameLink(
|
||||
@@ -114,6 +115,9 @@ object AccountDataArchiveProcessor {
|
||||
SignalDatabase.recipients.restoreSelfFromBackup(accountData, selfId)
|
||||
|
||||
SignalStore.account.setRegistered(true)
|
||||
if (accountData.svrPin.isNotBlank()) {
|
||||
SignalStore.svr.setPin(accountData.svrPin)
|
||||
}
|
||||
|
||||
val context = AppDependencies.application
|
||||
val settings = accountData.accountSettings
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.thoughtcrime.securesms.backup.v2.processor
|
||||
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.core.util.update
|
||||
import org.thoughtcrime.securesms.backup.v2.ArchiveRecipient
|
||||
import org.thoughtcrime.securesms.backup.v2.ExportState
|
||||
import org.thoughtcrime.securesms.backup.v2.ImportState
|
||||
@@ -21,6 +22,8 @@ import org.thoughtcrime.securesms.backup.v2.importer.GroupArchiveImporter
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.Frame
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.ReleaseNotes
|
||||
import org.thoughtcrime.securesms.backup.v2.stream.BackupFrameEmitter
|
||||
import org.thoughtcrime.securesms.backup.v2.util.toLocal
|
||||
import org.thoughtcrime.securesms.database.RecipientTable
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
@@ -99,9 +102,16 @@ object RecipientArchiveProcessor {
|
||||
recipient.contact != null -> ContactArchiveImporter.import(recipient.contact)
|
||||
recipient.group != null -> GroupArchiveImporter.import(recipient.group)
|
||||
recipient.distributionList != null -> DistributionListArchiveImporter.import(recipient.distributionList, importState)
|
||||
recipient.self != null -> Recipient.self().id
|
||||
recipient.releaseNotes != null -> SignalDatabase.recipients.restoreReleaseNotes()
|
||||
recipient.callLink != null -> CallLinkArchiveImporter.import(recipient.callLink)
|
||||
recipient.self != null -> {
|
||||
SignalDatabase.writableDatabase
|
||||
.update(RecipientTable.TABLE_NAME)
|
||||
.values(RecipientTable.AVATAR_COLOR to recipient.self.avatarColor?.toLocal()?.serialize())
|
||||
.where("${RecipientTable.ID} = ?", Recipient.self().id)
|
||||
.run()
|
||||
Recipient.self().id
|
||||
}
|
||||
else -> {
|
||||
Log.w(TAG, "Unrecognized recipient type!")
|
||||
null
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.attachments.TombstoneAttachment
|
||||
import org.thoughtcrime.securesms.backup.v2.BackupRepository.getMediaName
|
||||
import org.thoughtcrime.securesms.backup.v2.ImportState
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.FilePointer
|
||||
import org.thoughtcrime.securesms.conversation.colors.AvatarColor
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable
|
||||
import org.thoughtcrime.securesms.stickers.StickerLocator
|
||||
import org.whispersystems.signalservice.api.backup.MediaName
|
||||
@@ -25,6 +26,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPoin
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId
|
||||
import org.whispersystems.signalservice.api.util.UuidUtil
|
||||
import java.util.Optional
|
||||
import org.thoughtcrime.securesms.backup.v2.proto.AvatarColor as RemoteAvatarColor
|
||||
|
||||
/**
|
||||
* Converts a [FilePointer] to a local [Attachment] object for inserting into the database.
|
||||
@@ -176,3 +178,39 @@ fun DatabaseAttachment.toRemoteFilePointer(mediaArchiveEnabled: Boolean, content
|
||||
fun Long.clampToValidBackupRange(): Long {
|
||||
return this.coerceIn(0, 8640000000000000)
|
||||
}
|
||||
|
||||
fun AvatarColor.toRemote(): RemoteAvatarColor {
|
||||
return when (this) {
|
||||
AvatarColor.A100 -> RemoteAvatarColor.A100
|
||||
AvatarColor.A110 -> RemoteAvatarColor.A110
|
||||
AvatarColor.A120 -> RemoteAvatarColor.A120
|
||||
AvatarColor.A130 -> RemoteAvatarColor.A130
|
||||
AvatarColor.A140 -> RemoteAvatarColor.A140
|
||||
AvatarColor.A150 -> RemoteAvatarColor.A150
|
||||
AvatarColor.A160 -> RemoteAvatarColor.A160
|
||||
AvatarColor.A170 -> RemoteAvatarColor.A170
|
||||
AvatarColor.A180 -> RemoteAvatarColor.A180
|
||||
AvatarColor.A190 -> RemoteAvatarColor.A190
|
||||
AvatarColor.A200 -> RemoteAvatarColor.A200
|
||||
AvatarColor.A210 -> RemoteAvatarColor.A210
|
||||
AvatarColor.UNKNOWN -> RemoteAvatarColor.A100
|
||||
AvatarColor.ON_SURFACE_VARIANT -> RemoteAvatarColor.A100
|
||||
}
|
||||
}
|
||||
|
||||
fun RemoteAvatarColor.toLocal(): AvatarColor {
|
||||
return when (this) {
|
||||
RemoteAvatarColor.A100 -> AvatarColor.A100
|
||||
RemoteAvatarColor.A110 -> AvatarColor.A110
|
||||
RemoteAvatarColor.A120 -> AvatarColor.A120
|
||||
RemoteAvatarColor.A130 -> AvatarColor.A130
|
||||
RemoteAvatarColor.A140 -> AvatarColor.A140
|
||||
RemoteAvatarColor.A150 -> AvatarColor.A150
|
||||
RemoteAvatarColor.A160 -> AvatarColor.A160
|
||||
RemoteAvatarColor.A170 -> AvatarColor.A170
|
||||
RemoteAvatarColor.A180 -> AvatarColor.A180
|
||||
RemoteAvatarColor.A190 -> AvatarColor.A190
|
||||
RemoteAvatarColor.A200 -> AvatarColor.A200
|
||||
RemoteAvatarColor.A210 -> AvatarColor.A210
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user