signalmeow: update protobufs

This commit is contained in:
Tulir Asokan 2025-01-30 12:41:05 +02:00
parent f5c818b360
commit e4bb6db825
6 changed files with 153 additions and 87 deletions

View file

@ -236,8 +236,8 @@ func deleteNil(bodyRange *signalpb.BodyRange) bool {
func backupToSignalBodyRange(from *backuppb.BodyRange) *signalpb.BodyRange {
var out signalpb.BodyRange
out.Start = from.Start
out.Length = from.Length
out.Start = &from.Start
out.Length = &from.Length
switch av := from.AssociatedValue.(type) {
case *backuppb.BodyRange_MentionAci:
// TODO confirm this is correct

View file

@ -197,12 +197,16 @@ func (acp *archiveChunkProcessor) processFrame(frame *backuppb.Frame) error {
acp.cli.Log.Trace().Any("backup_frame", frame).Msg("Processing backup frame")
switch item := frame.Item.(type) {
case *backuppb.Frame_Recipient:
if item.Recipient.Destination == nil {
zerolog.Ctx(acp.ctx).Debug().Msg("Ignoring recipient frame with no destination")
return nil
}
return acp.cli.Store.BackupStore.AddBackupRecipient(acp.ctx, item.Recipient)
case *backuppb.Frame_Chat:
return acp.cli.Store.BackupStore.AddBackupChat(acp.ctx, item.Chat)
case *backuppb.Frame_ChatItem:
switch item.ChatItem.Item.(type) {
case *backuppb.ChatItem_DirectStoryReplyMessage, *backuppb.ChatItem_UpdateMessage:
case *backuppb.ChatItem_DirectStoryReplyMessage, *backuppb.ChatItem_UpdateMessage, nil:
zerolog.Ctx(acp.ctx).Debug().
Uint64("chat_id", item.ChatItem.ChatId).
Uint64("message_id", item.ChatItem.DateSent).

View file

@ -25,7 +25,7 @@ const (
type GroupV2AccessLevel int32
const (
GroupV2AccessLevel_UNKNOWN GroupV2AccessLevel = 0
GroupV2AccessLevel_UNKNOWN GroupV2AccessLevel = 0 // Interpret as "Unsatisfiable"
GroupV2AccessLevel_ANY GroupV2AccessLevel = 1
GroupV2AccessLevel_MEMBER GroupV2AccessLevel = 2
GroupV2AccessLevel_ADMINISTRATOR GroupV2AccessLevel = 3
@ -80,7 +80,7 @@ func (GroupV2AccessLevel) EnumDescriptor() ([]byte, []int) {
type AccountData_PhoneNumberSharingMode int32
const (
AccountData_UNKNOWN AccountData_PhoneNumberSharingMode = 0
AccountData_UNKNOWN AccountData_PhoneNumberSharingMode = 0 // Interpret as "Nobody"
AccountData_EVERYBODY AccountData_PhoneNumberSharingMode = 1
AccountData_NOBODY AccountData_PhoneNumberSharingMode = 2
)
@ -129,7 +129,7 @@ func (AccountData_PhoneNumberSharingMode) EnumDescriptor() ([]byte, []int) {
type AccountData_UsernameLink_Color int32
const (
AccountData_UsernameLink_UNKNOWN AccountData_UsernameLink_Color = 0
AccountData_UsernameLink_UNKNOWN AccountData_UsernameLink_Color = 0 // Interpret as "Blue"
AccountData_UsernameLink_BLUE AccountData_UsernameLink_Color = 1
AccountData_UsernameLink_WHITE AccountData_UsernameLink_Color = 2
AccountData_UsernameLink_GREY AccountData_UsernameLink_Color = 3
@ -196,9 +196,9 @@ func (AccountData_UsernameLink_Color) EnumDescriptor() ([]byte, []int) {
type Contact_IdentityState int32
const (
Contact_DEFAULT Contact_IdentityState = 0
Contact_DEFAULT Contact_IdentityState = 0 // A valid value -- indicates unset by the user
Contact_VERIFIED Contact_IdentityState = 1
Contact_UNVERIFIED Contact_IdentityState = 2
Contact_UNVERIFIED Contact_IdentityState = 2 // Was once verified and is now unverified
)
// Enum value maps for Contact_IdentityState.
@ -245,7 +245,7 @@ func (Contact_IdentityState) EnumDescriptor() ([]byte, []int) {
type Contact_Visibility int32
const (
Contact_VISIBLE Contact_Visibility = 0
Contact_VISIBLE Contact_Visibility = 0 // A valid value -- the contact is not hidden
Contact_HIDDEN Contact_Visibility = 1
Contact_HIDDEN_MESSAGE_REQUEST Contact_Visibility = 2
)
@ -294,7 +294,7 @@ func (Contact_Visibility) EnumDescriptor() ([]byte, []int) {
type Group_StorySendMode int32
const (
Group_DEFAULT Group_StorySendMode = 0
Group_DEFAULT Group_StorySendMode = 0 // A valid value -- indicates unset by the user
Group_DISABLED Group_StorySendMode = 1
Group_ENABLED Group_StorySendMode = 2
)
@ -343,7 +343,7 @@ func (Group_StorySendMode) EnumDescriptor() ([]byte, []int) {
type Group_Member_Role int32
const (
Group_Member_UNKNOWN Group_Member_Role = 0
Group_Member_UNKNOWN Group_Member_Role = 0 // Intepret as "Default"
Group_Member_DEFAULT Group_Member_Role = 1
Group_Member_ADMINISTRATOR Group_Member_Role = 2
)
@ -392,7 +392,7 @@ func (Group_Member_Role) EnumDescriptor() ([]byte, []int) {
type Group_AccessControl_AccessRequired int32
const (
Group_AccessControl_UNKNOWN Group_AccessControl_AccessRequired = 0
Group_AccessControl_UNKNOWN Group_AccessControl_AccessRequired = 0 // Intepret as "Unsatisfiable"
Group_AccessControl_ANY Group_AccessControl_AccessRequired = 1
Group_AccessControl_MEMBER Group_AccessControl_AccessRequired = 2
Group_AccessControl_ADMINISTRATOR Group_AccessControl_AccessRequired = 3
@ -447,7 +447,7 @@ func (Group_AccessControl_AccessRequired) EnumDescriptor() ([]byte, []int) {
type CallLink_Restrictions int32
const (
CallLink_UNKNOWN CallLink_Restrictions = 0
CallLink_UNKNOWN CallLink_Restrictions = 0 // Interpret as "Admin Approval"
CallLink_NONE CallLink_Restrictions = 1
CallLink_ADMIN_APPROVAL CallLink_Restrictions = 2
)
@ -496,7 +496,7 @@ func (CallLink_Restrictions) EnumDescriptor() ([]byte, []int) {
type AdHocCall_State int32
const (
AdHocCall_UNKNOWN_STATE AdHocCall_State = 0
AdHocCall_UNKNOWN_STATE AdHocCall_State = 0 // Interpret as "Generic"
AdHocCall_GENERIC AdHocCall_State = 1
)
@ -542,7 +542,7 @@ func (AdHocCall_State) EnumDescriptor() ([]byte, []int) {
type DistributionList_PrivacyMode int32
const (
DistributionList_UNKNOWN DistributionList_PrivacyMode = 0
DistributionList_UNKNOWN DistributionList_PrivacyMode = 0 // Interpret as "Only with"
DistributionList_ONLY_WITH DistributionList_PrivacyMode = 1
DistributionList_ALL_EXCEPT DistributionList_PrivacyMode = 2
DistributionList_ALL DistributionList_PrivacyMode = 3
@ -643,7 +643,7 @@ func (SendStatus_Failed_FailureReason) EnumDescriptor() ([]byte, []int) {
type PaymentNotification_TransactionDetails_FailedTransaction_FailureReason int32
const (
PaymentNotification_TransactionDetails_FailedTransaction_GENERIC PaymentNotification_TransactionDetails_FailedTransaction_FailureReason = 0
PaymentNotification_TransactionDetails_FailedTransaction_GENERIC PaymentNotification_TransactionDetails_FailedTransaction_FailureReason = 0 // A valid value -- reason unknown
PaymentNotification_TransactionDetails_FailedTransaction_NETWORK PaymentNotification_TransactionDetails_FailedTransaction_FailureReason = 1
PaymentNotification_TransactionDetails_FailedTransaction_INSUFFICIENT_FUNDS PaymentNotification_TransactionDetails_FailedTransaction_FailureReason = 2
)
@ -692,7 +692,7 @@ func (PaymentNotification_TransactionDetails_FailedTransaction_FailureReason) En
type PaymentNotification_TransactionDetails_Transaction_Status int32
const (
PaymentNotification_TransactionDetails_Transaction_INITIAL PaymentNotification_TransactionDetails_Transaction_Status = 0
PaymentNotification_TransactionDetails_Transaction_INITIAL PaymentNotification_TransactionDetails_Transaction_Status = 0 // A valid value -- state unconfirmed
PaymentNotification_TransactionDetails_Transaction_SUBMITTED PaymentNotification_TransactionDetails_Transaction_Status = 1
PaymentNotification_TransactionDetails_Transaction_SUCCESSFUL PaymentNotification_TransactionDetails_Transaction_Status = 2
)
@ -741,7 +741,7 @@ func (PaymentNotification_TransactionDetails_Transaction_Status) EnumDescriptor(
type GiftBadge_State int32
const (
GiftBadge_UNOPENED GiftBadge_State = 0
GiftBadge_UNOPENED GiftBadge_State = 0 // A valid state
GiftBadge_OPENED GiftBadge_State = 1
GiftBadge_REDEEMED GiftBadge_State = 2
GiftBadge_FAILED GiftBadge_State = 3
@ -793,7 +793,7 @@ func (GiftBadge_State) EnumDescriptor() ([]byte, []int) {
type ContactAttachment_Phone_Type int32
const (
ContactAttachment_Phone_UNKNOWN ContactAttachment_Phone_Type = 0
ContactAttachment_Phone_UNKNOWN ContactAttachment_Phone_Type = 0 // Interpret as "Home"
ContactAttachment_Phone_HOME ContactAttachment_Phone_Type = 1
ContactAttachment_Phone_MOBILE ContactAttachment_Phone_Type = 2
ContactAttachment_Phone_WORK ContactAttachment_Phone_Type = 3
@ -848,7 +848,7 @@ func (ContactAttachment_Phone_Type) EnumDescriptor() ([]byte, []int) {
type ContactAttachment_Email_Type int32
const (
ContactAttachment_Email_UNKNOWN ContactAttachment_Email_Type = 0
ContactAttachment_Email_UNKNOWN ContactAttachment_Email_Type = 0 // Intepret as "Home"
ContactAttachment_Email_HOME ContactAttachment_Email_Type = 1
ContactAttachment_Email_MOBILE ContactAttachment_Email_Type = 2
ContactAttachment_Email_WORK ContactAttachment_Email_Type = 3
@ -903,7 +903,7 @@ func (ContactAttachment_Email_Type) EnumDescriptor() ([]byte, []int) {
type ContactAttachment_PostalAddress_Type int32
const (
ContactAttachment_PostalAddress_UNKNOWN ContactAttachment_PostalAddress_Type = 0
ContactAttachment_PostalAddress_UNKNOWN ContactAttachment_PostalAddress_Type = 0 // Interpret as "Home"
ContactAttachment_PostalAddress_HOME ContactAttachment_PostalAddress_Type = 1
ContactAttachment_PostalAddress_WORK ContactAttachment_PostalAddress_Type = 2
ContactAttachment_PostalAddress_CUSTOM ContactAttachment_PostalAddress_Type = 3
@ -958,7 +958,7 @@ func (ContactAttachment_PostalAddress_Type) EnumDescriptor() ([]byte, []int) {
type MessageAttachment_Flag int32
const (
MessageAttachment_NONE MessageAttachment_Flag = 0
MessageAttachment_NONE MessageAttachment_Flag = 0 // A valid value -- no flag applied
MessageAttachment_VOICE_MESSAGE MessageAttachment_Flag = 1
MessageAttachment_BORDERLESS MessageAttachment_Flag = 2
MessageAttachment_GIF MessageAttachment_Flag = 3
@ -1010,7 +1010,7 @@ func (MessageAttachment_Flag) EnumDescriptor() ([]byte, []int) {
type Quote_Type int32
const (
Quote_UNKNOWN Quote_Type = 0
Quote_UNKNOWN Quote_Type = 0 // Interpret as "Normal"
Quote_NORMAL Quote_Type = 1
Quote_GIFT_BADGE Quote_Type = 2
Quote_VIEW_ONCE Quote_Type = 3
@ -1062,7 +1062,7 @@ func (Quote_Type) EnumDescriptor() ([]byte, []int) {
type BodyRange_Style int32
const (
BodyRange_NONE BodyRange_Style = 0
BodyRange_NONE BodyRange_Style = 0 // Importers should ignore the body range without throwing an error.
BodyRange_BOLD BodyRange_Style = 1
BodyRange_ITALIC BodyRange_Style = 2
BodyRange_SPOILER BodyRange_Style = 3
@ -1120,7 +1120,7 @@ func (BodyRange_Style) EnumDescriptor() ([]byte, []int) {
type IndividualCall_Type int32
const (
IndividualCall_UNKNOWN_TYPE IndividualCall_Type = 0
IndividualCall_UNKNOWN_TYPE IndividualCall_Type = 0 // Interpret as "Audio call"
IndividualCall_AUDIO_CALL IndividualCall_Type = 1
IndividualCall_VIDEO_CALL IndividualCall_Type = 2
)
@ -1169,7 +1169,7 @@ func (IndividualCall_Type) EnumDescriptor() ([]byte, []int) {
type IndividualCall_Direction int32
const (
IndividualCall_UNKNOWN_DIRECTION IndividualCall_Direction = 0
IndividualCall_UNKNOWN_DIRECTION IndividualCall_Direction = 0 // Interpret as "Incoming"
IndividualCall_INCOMING IndividualCall_Direction = 1
IndividualCall_OUTGOING IndividualCall_Direction = 2
)
@ -1218,7 +1218,7 @@ func (IndividualCall_Direction) EnumDescriptor() ([]byte, []int) {
type IndividualCall_State int32
const (
IndividualCall_UNKNOWN_STATE IndividualCall_State = 0
IndividualCall_UNKNOWN_STATE IndividualCall_State = 0 // Interpret as "Accepted"
IndividualCall_ACCEPTED IndividualCall_State = 1
IndividualCall_NOT_ACCEPTED IndividualCall_State = 2
// An incoming call that is no longer ongoing, which we neither accepted
@ -1277,7 +1277,7 @@ func (IndividualCall_State) EnumDescriptor() ([]byte, []int) {
type GroupCall_State int32
const (
GroupCall_UNKNOWN_STATE GroupCall_State = 0
GroupCall_UNKNOWN_STATE GroupCall_State = 0 // Interpret as "Generic"
// A group call was started without ringing.
GroupCall_GENERIC GroupCall_State = 1
// We joined a group call that was started without ringing.
@ -1353,7 +1353,7 @@ func (GroupCall_State) EnumDescriptor() ([]byte, []int) {
type SimpleChatUpdate_Type int32
const (
SimpleChatUpdate_UNKNOWN SimpleChatUpdate_Type = 0
SimpleChatUpdate_UNKNOWN SimpleChatUpdate_Type = 0 // Importers should skip the update without throwing an error.
SimpleChatUpdate_JOINED_SIGNAL SimpleChatUpdate_Type = 1
SimpleChatUpdate_IDENTITY_UPDATE SimpleChatUpdate_Type = 2
SimpleChatUpdate_IDENTITY_VERIFIED SimpleChatUpdate_Type = 3
@ -1444,7 +1444,7 @@ func (SimpleChatUpdate_Type) EnumDescriptor() ([]byte, []int) {
type ChatStyle_WallpaperPreset int32
const (
ChatStyle_UNKNOWN_WALLPAPER_PRESET ChatStyle_WallpaperPreset = 0
ChatStyle_UNKNOWN_WALLPAPER_PRESET ChatStyle_WallpaperPreset = 0 // Interpret as the wallpaper being unset
ChatStyle_SOLID_BLUSH ChatStyle_WallpaperPreset = 1
ChatStyle_SOLID_COPPER ChatStyle_WallpaperPreset = 2
ChatStyle_SOLID_DUST ChatStyle_WallpaperPreset = 3
@ -1550,7 +1550,7 @@ func (ChatStyle_WallpaperPreset) EnumDescriptor() ([]byte, []int) {
type ChatStyle_BubbleColorPreset int32
const (
ChatStyle_UNKNOWN_BUBBLE_COLOR_PRESET ChatStyle_BubbleColorPreset = 0
ChatStyle_UNKNOWN_BUBBLE_COLOR_PRESET ChatStyle_BubbleColorPreset = 0 // Interpret as the user's default chat bubble color
ChatStyle_SOLID_ULTRAMARINE ChatStyle_BubbleColorPreset = 1
ChatStyle_SOLID_CRIMSON ChatStyle_BubbleColorPreset = 2
ChatStyle_SOLID_VERMILION ChatStyle_BubbleColorPreset = 3
@ -1659,7 +1659,7 @@ func (ChatStyle_BubbleColorPreset) EnumDescriptor() ([]byte, []int) {
type NotificationProfile_DayOfWeek int32
const (
NotificationProfile_UNKNOWN NotificationProfile_DayOfWeek = 0
NotificationProfile_UNKNOWN NotificationProfile_DayOfWeek = 0 // Interpret as "Monday"
NotificationProfile_MONDAY NotificationProfile_DayOfWeek = 1
NotificationProfile_TUESDAY NotificationProfile_DayOfWeek = 2
NotificationProfile_WEDNESDAY NotificationProfile_DayOfWeek = 3
@ -1724,7 +1724,7 @@ func (NotificationProfile_DayOfWeek) EnumDescriptor() ([]byte, []int) {
type ChatFolder_FolderType int32
const (
ChatFolder_UNKNOWN ChatFolder_FolderType = 0
ChatFolder_UNKNOWN ChatFolder_FolderType = 0 // Interpret as "Custom"
ChatFolder_ALL ChatFolder_FolderType = 1
ChatFolder_CUSTOM ChatFolder_FolderType = 2
)
@ -1864,6 +1864,8 @@ func (x *BackupInfo) GetFirstAppVersion() string {
// or may each immediately precede its first ChatItem.
type Frame struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should skip this frame without throwing an error.
//
// Types that are valid to be assigned to Item:
//
// *Frame_Account
@ -2151,6 +2153,8 @@ func (x *AccountData) GetBackupsSubscriberData() *AccountData_IAPSubscriberData
type Recipient struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // generated id for reference only within this file
// If unset, importers should skip this frame without throwing an error.
//
// Types that are valid to be assigned to Destination:
//
// *Recipient_Contact
@ -2310,6 +2314,8 @@ type Contact struct {
E164 *uint64 `protobuf:"varint,4,opt,name=e164,proto3,oneof" json:"e164,omitempty"`
Blocked bool `protobuf:"varint,5,opt,name=blocked,proto3" json:"blocked,omitempty"`
Visibility Contact_Visibility `protobuf:"varint,6,opt,name=visibility,proto3,enum=signal.backup.Contact_Visibility" json:"visibility,omitempty"`
// If unset, consider the user to be registered
//
// Types that are valid to be assigned to Registration:
//
// *Contact_Registered_
@ -2511,6 +2517,7 @@ type Group struct {
HideStory bool `protobuf:"varint,3,opt,name=hideStory,proto3" json:"hideStory,omitempty"`
StorySendMode Group_StorySendMode `protobuf:"varint,4,opt,name=storySendMode,proto3,enum=signal.backup.Group_StorySendMode" json:"storySendMode,omitempty"`
Snapshot *Group_GroupSnapshot `protobuf:"bytes,5,opt,name=snapshot,proto3" json:"snapshot,omitempty"`
Blocked bool `protobuf:"varint,6,opt,name=blocked,proto3" json:"blocked,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -2580,6 +2587,13 @@ func (x *Group) GetSnapshot() *Group_GroupSnapshot {
return nil
}
func (x *Group) GetBlocked() bool {
if x != nil {
return x.Blocked
}
return false
}
type Self struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
@ -2925,6 +2939,8 @@ type DistributionListItem struct {
// distribution ids are UUIDv4s. "My Story" is represented
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
DistributionId []byte `protobuf:"bytes,1,opt,name=distributionId,proto3" json:"distributionId,omitempty"` // distribution list ids are uuids
// If unset, importers should skip the item entirely without showing an error.
//
// Types that are valid to be assigned to Item:
//
// *DistributionListItem_DeletionTimestamp
@ -3089,12 +3105,16 @@ type ChatItem struct {
ExpiresInMs *uint64 `protobuf:"varint,5,opt,name=expiresInMs,proto3,oneof" json:"expiresInMs,omitempty"` // how long timer of message is (ms)
Revisions []*ChatItem `protobuf:"bytes,6,rep,name=revisions,proto3" json:"revisions,omitempty"` // ordered from oldest to newest
Sms bool `protobuf:"varint,7,opt,name=sms,proto3" json:"sms,omitempty"`
// If unset, importers should skip this item without throwing an error.
//
// Types that are valid to be assigned to DirectionalDetails:
//
// *ChatItem_Incoming
// *ChatItem_Outgoing
// *ChatItem_Directionless
DirectionalDetails isChatItem_DirectionalDetails `protobuf_oneof:"directionalDetails"`
// If unset, importers should skip this item without throwing an error.
//
// Types that are valid to be assigned to Item:
//
// *ChatItem_StandardMessage
@ -3396,6 +3416,8 @@ type SendStatus struct {
state protoimpl.MessageState `protogen:"open.v1"`
RecipientId uint64 `protobuf:"varint,1,opt,name=recipientId,proto3" json:"recipientId,omitempty"`
Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // the time the status was last updated -- if from a receipt, it should be the sentTime of the receipt
// If unset, importers should consider the status to be "pending"
//
// Types that are valid to be assigned to DeliveryStatus:
//
// *SendStatus_Pending_
@ -3760,15 +3782,16 @@ func (x *ContactMessage) GetReactions() []*Reaction {
type DirectStoryReplyMessage struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should ignore the message without throwing an error.
//
// Types that are valid to be assigned to Reply:
//
// *DirectStoryReplyMessage_TextReply_
// *DirectStoryReplyMessage_Emoji
Reply isDirectStoryReplyMessage_Reply `protobuf_oneof:"reply"`
Reactions []*Reaction `protobuf:"bytes,3,rep,name=reactions,proto3" json:"reactions,omitempty"`
StorySentTimestamp *uint64 `protobuf:"varint,4,opt,name=storySentTimestamp,proto3,oneof" json:"storySentTimestamp,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
Reply isDirectStoryReplyMessage_Reply `protobuf_oneof:"reply"`
Reactions []*Reaction `protobuf:"bytes,3,rep,name=reactions,proto3" json:"reactions,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *DirectStoryReplyMessage) Reset() {
@ -3833,13 +3856,6 @@ func (x *DirectStoryReplyMessage) GetReactions() []*Reaction {
return nil
}
func (x *DirectStoryReplyMessage) GetStorySentTimestamp() uint64 {
if x != nil && x.StorySentTimestamp != nil {
return *x.StorySentTimestamp
}
return 0
}
type isDirectStoryReplyMessage_Reply interface {
isDirectStoryReplyMessage_Reply()
}
@ -4432,6 +4448,8 @@ func (x *MessageAttachment) GetClientUuid() []byte {
type FilePointer struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
//
// Types that are valid to be assigned to Locator:
//
// *FilePointer_BackupLocator_
@ -4669,9 +4687,13 @@ func (x *Quote) GetType() Quote_Type {
}
type BodyRange struct {
state protoimpl.MessageState `protogen:"open.v1"`
Start *uint32 `protobuf:"varint,1,opt,name=start,proto3,oneof" json:"start,omitempty"`
Length *uint32 `protobuf:"varint,2,opt,name=length,proto3,oneof" json:"length,omitempty"`
state protoimpl.MessageState `protogen:"open.v1"`
// 'start' and 'length' are measured in UTF-16 code units.
// They may refer to offsets in a longText attachment.
Start uint32 `protobuf:"varint,1,opt,name=start,proto3" json:"start,omitempty"`
Length uint32 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"`
// If unset, importers should ignore the body range without throwing an error.
//
// Types that are valid to be assigned to AssociatedValue:
//
// *BodyRange_MentionAci
@ -4712,15 +4734,15 @@ func (*BodyRange) Descriptor() ([]byte, []int) {
}
func (x *BodyRange) GetStart() uint32 {
if x != nil && x.Start != nil {
return *x.Start
if x != nil {
return x.Start
}
return 0
}
func (x *BodyRange) GetLength() uint32 {
if x != nil && x.Length != nil {
return *x.Length
if x != nil {
return x.Length
}
return 0
}
@ -4838,6 +4860,8 @@ func (x *Reaction) GetSortOrder() uint64 {
type ChatUpdateMessage struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should ignore the update message without throwing an error.
//
// Types that are valid to be assigned to Update:
//
// *ChatUpdateMessage_SimpleUpdate
@ -5350,6 +5374,8 @@ func (x *ProfileChangeChatUpdate) GetNewName() string {
type LearnedProfileChatUpdate struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should consider the previous name to be an empty string.
//
// Types that are valid to be assigned to PreviousName:
//
// *LearnedProfileChatUpdate_E164
@ -7305,11 +7331,15 @@ func (x *StickerPack) GetPackKey() []byte {
type ChatStyle struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should consider there to be no wallpaper.
//
// Types that are valid to be assigned to Wallpaper:
//
// *ChatStyle_WallpaperPreset_
// *ChatStyle_WallpaperPhoto
Wallpaper isChatStyle_Wallpaper `protobuf_oneof:"wallpaper"`
// If unset, importers should consider it to be AutomaticBubbleColor
//
// Types that are valid to be assigned to BubbleColor:
//
// *ChatStyle_AutoBubbleColor
@ -7997,6 +8027,8 @@ func (x *AccountData_SubscriberData) GetManuallyCancelled() bool {
type AccountData_IAPSubscriberData struct {
state protoimpl.MessageState `protogen:"open.v1"`
SubscriberId []byte `protobuf:"bytes,1,opt,name=subscriberId,proto3" json:"subscriberId,omitempty"`
// If unset, importers should ignore the subscriber data without throwing an error.
//
// Types that are valid to be assigned to IapSubscriptionId:
//
// *AccountData_IAPSubscriberData_PurchaseToken
@ -8359,6 +8391,8 @@ func (x *Group_GroupSnapshot) GetMembersBanned() []*Group_MemberBanned {
type Group_GroupAttributeBlob struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, consider the field it represents to not be present
//
// Types that are valid to be assigned to Content:
//
// *Group_GroupAttributeBlob_Title
@ -9250,6 +9284,8 @@ func (x *DirectStoryReplyMessage_TextReply) GetLongText() *FilePointer {
type PaymentNotification_TransactionDetails struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should treat the transaction as successful with no metadata.
//
// Types that are valid to be assigned to Payment:
//
// *PaymentNotification_TransactionDetails_Transaction_
@ -10123,6 +10159,8 @@ func (x *Quote_QuotedAttachment) GetThumbnail() *MessageAttachment {
type GroupChangeChatUpdate_Update struct {
state protoimpl.MessageState `protogen:"open.v1"`
// If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
//
// Types that are valid to be assigned to Update:
//
// *GroupChangeChatUpdate_Update_GenericGroupUpdate
@ -10864,6 +10902,8 @@ func (x *ChatStyle_Gradient) GetPositions() []float32 {
type ChatStyle_CustomChatColor struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
// If unset, use the default chat color
//
// Types that are valid to be assigned to Color:
//
// *ChatStyle_CustomChatColor_Solid

Binary file not shown.

View file

@ -30,6 +30,7 @@ message BackupInfo {
// For example, Chats may all be together at the beginning,
// or may each immediately precede its first ChatItem.
message Frame {
// If unset, importers should skip this frame without throwing an error.
oneof item {
AccountData account = 1;
Recipient recipient = 2;
@ -44,13 +45,13 @@ message Frame {
message AccountData {
enum PhoneNumberSharingMode {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Nobody"
EVERYBODY = 1;
NOBODY = 2;
}
message UsernameLink {
enum Color {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Blue"
BLUE = 1;
WHITE = 2;
GREY = 3;
@ -97,6 +98,7 @@ message AccountData {
message IAPSubscriberData {
bytes subscriberId = 1;
// If unset, importers should ignore the subscriber data without throwing an error.
oneof iapSubscriptionId {
// Identifies an Android Play Store IAP subscription.
string purchaseToken = 2;
@ -119,6 +121,7 @@ message AccountData {
message Recipient {
uint64 id = 1; // generated id for reference only within this file
// If unset, importers should skip this frame without throwing an error.
oneof destination {
Contact contact = 2;
Group group = 3;
@ -131,9 +134,9 @@ message Recipient {
message Contact {
enum IdentityState {
DEFAULT = 0;
DEFAULT = 0; // A valid value -- indicates unset by the user
VERIFIED = 1;
UNVERIFIED = 2;
UNVERIFIED = 2; // Was once verified and is now unverified
}
message Registered {}
@ -142,7 +145,7 @@ message Contact {
}
enum Visibility {
VISIBLE = 0;
VISIBLE = 0; // A valid value -- the contact is not hidden
HIDDEN = 1;
HIDDEN_MESSAGE_REQUEST = 2;
}
@ -159,6 +162,7 @@ message Contact {
bool blocked = 5;
Visibility visibility = 6;
// If unset, consider the user to be registered
oneof registration {
Registered registered = 7;
NotRegistered notRegistered = 8;
@ -177,7 +181,7 @@ message Contact {
message Group {
enum StorySendMode {
DEFAULT = 0;
DEFAULT = 0; // A valid value -- indicates unset by the user
DISABLED = 1;
ENABLED = 2;
}
@ -187,6 +191,7 @@ message Group {
bool hideStory = 3;
StorySendMode storySendMode = 4;
GroupSnapshot snapshot = 5;
bool blocked = 6;
// These are simply plaintext copies of the groups proto from Groups.proto.
// They should be kept completely in-sync with Groups.proto.
@ -210,6 +215,7 @@ message Group {
}
message GroupAttributeBlob {
// If unset, consider the field it represents to not be present
oneof content {
string title = 1;
bytes avatar = 2;
@ -220,7 +226,7 @@ message Group {
message Member {
enum Role {
UNKNOWN = 0;
UNKNOWN = 0; // Intepret as "Default"
DEFAULT = 1;
ADMINISTRATOR = 2;
}
@ -252,7 +258,7 @@ message Group {
message AccessControl {
enum AccessRequired {
UNKNOWN = 0;
UNKNOWN = 0; // Intepret as "Unsatisfiable"
ANY = 1;
MEMBER = 2;
ADMINISTRATOR = 3;
@ -292,7 +298,7 @@ message Chat {
*/
message CallLink {
enum Restrictions {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Admin Approval"
NONE = 1;
ADMIN_APPROVAL = 2;
}
@ -306,7 +312,7 @@ message CallLink {
message AdHocCall {
enum State {
UNKNOWN_STATE = 0;
UNKNOWN_STATE = 0; // Interpret as "Generic"
GENERIC = 1;
}
@ -322,6 +328,7 @@ message DistributionListItem {
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
bytes distributionId = 1; // distribution list ids are uuids
// If unset, importers should skip the item entirely without showing an error.
oneof item {
uint64 deletionTimestamp = 2;
DistributionList distributionList = 3;
@ -330,7 +337,7 @@ message DistributionListItem {
message DistributionList {
enum PrivacyMode {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Only with"
ONLY_WITH = 1;
ALL_EXCEPT = 2;
ALL = 3;
@ -365,12 +372,14 @@ message ChatItem {
repeated ChatItem revisions = 6; // ordered from oldest to newest
bool sms = 7;
// If unset, importers should skip this item without throwing an error.
oneof directionalDetails {
IncomingMessageDetails incoming = 8;
OutgoingMessageDetails outgoing = 9;
DirectionlessMessageDetails directionless = 10;
}
// If unset, importers should skip this item without throwing an error.
oneof item {
StandardMessage standardMessage = 11;
ContactMessage contactMessage = 12;
@ -419,6 +428,7 @@ message SendStatus {
uint64 recipientId = 1;
uint64 timestamp = 2; // the time the status was last updated -- if from a receipt, it should be the sentTime of the receipt
// If unset, importers should consider the status to be "pending"
oneof deliveryStatus {
Pending pending = 3;
Sent sent = 4;
@ -455,13 +465,14 @@ message DirectStoryReplyMessage {
FilePointer longText = 2;
}
// If unset, importers should ignore the message without throwing an error.
oneof reply {
TextReply textReply = 1;
string emoji = 2;
}
repeated Reaction reactions = 3;
optional uint64 storySentTimestamp = 4;
reserved /*storySentTimestamp*/ 4;
}
message PaymentNotification {
@ -473,7 +484,7 @@ message PaymentNotification {
message FailedTransaction { // Failed payments can't be synced from the ledger
enum FailureReason {
GENERIC = 0;
GENERIC = 0; // A valid value -- reason unknown
NETWORK = 1;
INSUFFICIENT_FUNDS = 2;
}
@ -482,7 +493,7 @@ message PaymentNotification {
message Transaction {
enum Status {
INITIAL = 0;
INITIAL = 0; // A valid value -- state unconfirmed
SUBMITTED = 1;
SUCCESSFUL = 2;
}
@ -499,6 +510,7 @@ message PaymentNotification {
optional bytes receipt = 7; // mobile coin blobs
}
// If unset, importers should treat the transaction as successful with no metadata.
oneof payment {
Transaction transaction = 1;
FailedTransaction failedTransaction = 2;
@ -513,7 +525,7 @@ message PaymentNotification {
message GiftBadge {
enum State {
UNOPENED = 0;
UNOPENED = 0; // A valid state
OPENED = 1;
REDEEMED = 2;
FAILED = 3;
@ -541,7 +553,7 @@ message ContactAttachment {
message Phone {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Home"
HOME = 1;
MOBILE = 2;
WORK = 3;
@ -555,7 +567,7 @@ message ContactAttachment {
message Email {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Intepret as "Home"
HOME = 1;
MOBILE = 2;
WORK = 3;
@ -569,7 +581,7 @@ message ContactAttachment {
message PostalAddress {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Home"
HOME = 1;
WORK = 2;
CUSTOM = 3;
@ -629,7 +641,7 @@ message MessageAttachment {
// but explicitly mutually exclusive. Note the different raw values
// (non-zero starting values are not supported in proto3.)
enum Flag {
NONE = 0;
NONE = 0; // A valid value -- no flag applied
VOICE_MESSAGE = 1;
BORDERLESS = 2;
GIF = 3;
@ -680,6 +692,7 @@ message FilePointer {
message InvalidAttachmentLocator {
}
// If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
oneof locator {
BackupLocator backupLocator = 1;
AttachmentLocator attachmentLocator = 2;
@ -698,7 +711,7 @@ message FilePointer {
message Quote {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Normal"
NORMAL = 1;
GIFT_BADGE = 2;
VIEW_ONCE = 3;
@ -719,7 +732,7 @@ message Quote {
message BodyRange {
enum Style {
NONE = 0;
NONE = 0; // Importers should ignore the body range without throwing an error.
BOLD = 1;
ITALIC = 2;
SPOILER = 3;
@ -727,9 +740,12 @@ message BodyRange {
MONOSPACE = 5;
}
optional uint32 start = 1;
optional uint32 length = 2;
// 'start' and 'length' are measured in UTF-16 code units.
// They may refer to offsets in a longText attachment.
uint32 start = 1;
uint32 length = 2;
// If unset, importers should ignore the body range without throwing an error.
oneof associatedValue {
bytes mentionAci = 3;
Style style = 4;
@ -746,6 +762,7 @@ message Reaction {
}
message ChatUpdateMessage {
// If unset, importers should ignore the update message without throwing an error.
oneof update {
SimpleChatUpdate simpleUpdate = 1;
GroupChangeChatUpdate groupChange = 2;
@ -761,19 +778,19 @@ message ChatUpdateMessage {
message IndividualCall {
enum Type {
UNKNOWN_TYPE = 0;
UNKNOWN_TYPE = 0; // Interpret as "Audio call"
AUDIO_CALL = 1;
VIDEO_CALL = 2;
}
enum Direction {
UNKNOWN_DIRECTION = 0;
UNKNOWN_DIRECTION = 0; // Interpret as "Incoming"
INCOMING = 1;
OUTGOING = 2;
}
enum State {
UNKNOWN_STATE = 0;
UNKNOWN_STATE = 0; // Interpret as "Accepted"
ACCEPTED = 1;
NOT_ACCEPTED = 2;
// An incoming call that is no longer ongoing, which we neither accepted
@ -794,7 +811,7 @@ message IndividualCall {
message GroupCall {
enum State {
UNKNOWN_STATE = 0;
UNKNOWN_STATE = 0; // Interpret as "Generic"
// A group call was started without ringing.
GENERIC = 1;
// We joined a group call that was started without ringing.
@ -825,7 +842,7 @@ message GroupCall {
message SimpleChatUpdate {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Importers should skip the update without throwing an error.
JOINED_SIGNAL = 1;
IDENTITY_UPDATE = 2;
IDENTITY_VERIFIED = 3;
@ -859,6 +876,7 @@ message ProfileChangeChatUpdate {
}
message LearnedProfileChatUpdate {
// If unset, importers should consider the previous name to be an empty string.
oneof previousName {
uint64 e164 = 1;
string username = 2;
@ -875,6 +893,7 @@ message SessionSwitchoverChatUpdate {
message GroupChangeChatUpdate {
message Update {
// If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
oneof update {
GenericGroupUpdate genericGroupUpdate = 1;
GroupCreationUpdate groupCreationUpdate = 2;
@ -944,7 +963,7 @@ message GroupDescriptionUpdate {
}
enum GroupV2AccessLevel {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Unsatisfiable"
ANY = 1;
MEMBER = 2;
ADMINISTRATOR = 3;
@ -1134,6 +1153,7 @@ message ChatStyle {
message CustomChatColor {
uint64 id = 1;
// If unset, use the default chat color
oneof color {
fixed32 solid = 2; // 0xAARRGGBB
Gradient gradient = 3;
@ -1144,7 +1164,7 @@ message ChatStyle {
}
enum WallpaperPreset {
UNKNOWN_WALLPAPER_PRESET = 0;
UNKNOWN_WALLPAPER_PRESET = 0; // Interpret as the wallpaper being unset
SOLID_BLUSH = 1;
SOLID_COPPER = 2;
SOLID_DUST = 3;
@ -1169,7 +1189,7 @@ message ChatStyle {
}
enum BubbleColorPreset {
UNKNOWN_BUBBLE_COLOR_PRESET = 0;
UNKNOWN_BUBBLE_COLOR_PRESET = 0; // Interpret as the user's default chat bubble color
SOLID_ULTRAMARINE = 1;
SOLID_CRIMSON = 2;
SOLID_VERMILION = 3;
@ -1194,6 +1214,7 @@ message ChatStyle {
GRADIENT_TANGERINE = 22;
}
// If unset, importers should consider there to be no wallpaper.
oneof wallpaper {
WallpaperPreset wallpaperPreset = 1;
// This `FilePointer` is expected not to contain a `fileName`, `width`,
@ -1201,6 +1222,7 @@ message ChatStyle {
FilePointer wallpaperPhoto = 2;
}
// If unset, importers should consider it to be AutomaticBubbleColor
oneof bubbleColor {
// Bubble setting is automatically determined based on the wallpaper setting,
// or `SOLID_ULTRAMARINE` for `noWallpaper`
@ -1216,7 +1238,7 @@ message ChatStyle {
message NotificationProfile {
enum DayOfWeek {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Monday"
MONDAY = 1;
TUESDAY = 2;
WEDNESDAY = 3;
@ -1242,7 +1264,7 @@ message NotificationProfile {
message ChatFolder {
// Represents the default "All chats" folder record vs all other custom folders
enum FolderType {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Custom"
ALL = 1;
CUSTOM = 2;
}

View file

@ -1,8 +1,8 @@
#!/bin/bash
set -euo pipefail
ANDROID_GIT_REVISION=${1:-50db945ef1673da9990affeff022da64e4caa264}
DESKTOP_GIT_REVISION=${1:-ca1d17354db10a14f9f5558dcb546af9f3bba578}
ANDROID_GIT_REVISION=${1:-aa9c87ee67364a28977a2a5ba3bb7f5e715e19a0}
DESKTOP_GIT_REVISION=${1:-3f0536f5a58b6a20949690afd76093f41931843c}
update_proto() {
case "$1" in