Export/import simple update messages
This commit is contained in:
parent
19083cadf7
commit
9df3c63ca6
14 changed files with 1604 additions and 386 deletions
|
@ -20,7 +20,7 @@ message BackupInfo {
|
|||
// 3. All ChatItems must appear in global Chat rendering order.
|
||||
// (The order in which they were received by the client.)
|
||||
//
|
||||
// Recipients, Chats, Ad-hoc Calls, & StickerPacks can be in any order.
|
||||
// Recipients, Chats, StickerPacks, and AdHocCalls can be in any order.
|
||||
// (But must respect rule 2.)
|
||||
// For example, Chats may all be together at the beginning,
|
||||
// or may each immediately precede its first ChatItem.
|
||||
|
@ -31,6 +31,7 @@ message Frame {
|
|||
Chat chat = 3;
|
||||
ChatItem chatItem = 4;
|
||||
StickerPack stickerPack = 5;
|
||||
AdHocCall adHocCall = 6;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,6 +99,7 @@ message Recipient {
|
|||
DistributionList distributionList = 4;
|
||||
Self self = 5;
|
||||
ReleaseNotes releaseNotes = 6;
|
||||
CallLink callLink = 7;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,7 +136,83 @@ message Group {
|
|||
bool whitelisted = 2;
|
||||
bool hideStory = 3;
|
||||
StorySendMode storySendMode = 4;
|
||||
string name = 5;
|
||||
GroupSnapshot snapshot = 5;
|
||||
|
||||
// These are simply plaintext copies of the groups proto from Groups.proto.
|
||||
// They should be kept completely in-sync with Groups.proto.
|
||||
// These exist to allow us to have the latest snapshot of a group during restoration without having to hit the network.
|
||||
// We would use Groups.proto if we could, but we want a plaintext version to improve export readability.
|
||||
// For documentation, defer to Groups.proto. The only name change is Group -> GroupSnapshot to avoid the naming conflict.
|
||||
message GroupSnapshot {
|
||||
bytes publicKey = 1;
|
||||
GroupAttributeBlob title = 2;
|
||||
GroupAttributeBlob description = 11;
|
||||
string avatarUrl = 3;
|
||||
GroupAttributeBlob disappearingMessagesTimer = 4;
|
||||
AccessControl accessControl = 5;
|
||||
uint32 version = 6;
|
||||
repeated Member members = 7;
|
||||
repeated MemberPendingProfileKey membersPendingProfileKey = 8;
|
||||
repeated MemberPendingAdminApproval membersPendingAdminApproval = 9;
|
||||
bytes inviteLinkPassword = 10;
|
||||
bool announcements_only = 12;
|
||||
repeated MemberBanned members_banned = 13;
|
||||
}
|
||||
|
||||
message GroupAttributeBlob {
|
||||
oneof content {
|
||||
string title = 1;
|
||||
bytes avatar = 2;
|
||||
uint32 disappearingMessagesDuration = 3;
|
||||
string descriptionText = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message Member {
|
||||
enum Role {
|
||||
UNKNOWN = 0;
|
||||
DEFAULT = 1;
|
||||
ADMINISTRATOR = 2;
|
||||
}
|
||||
|
||||
bytes userId = 1;
|
||||
Role role = 2;
|
||||
bytes profileKey = 3;
|
||||
reserved /*presentation*/ 4; // The field is deprecated in the context of static group state
|
||||
uint32 joinedAtVersion = 5;
|
||||
}
|
||||
|
||||
message MemberPendingProfileKey {
|
||||
Member member = 1;
|
||||
bytes addedByUserId = 2;
|
||||
uint64 timestamp = 3;
|
||||
}
|
||||
|
||||
message MemberPendingAdminApproval {
|
||||
bytes userId = 1;
|
||||
bytes profileKey = 2;
|
||||
reserved /*presentation*/ 3; // The field is deprecated in the context of static group state
|
||||
uint64 timestamp = 4;
|
||||
}
|
||||
|
||||
message MemberBanned {
|
||||
bytes userId = 1;
|
||||
uint64 timestamp = 2;
|
||||
}
|
||||
|
||||
message AccessControl {
|
||||
enum AccessRequired {
|
||||
UNKNOWN = 0;
|
||||
ANY = 1;
|
||||
MEMBER = 2;
|
||||
ADMINISTRATOR = 3;
|
||||
UNSATISFIABLE = 4;
|
||||
}
|
||||
|
||||
AccessRequired attributes = 1;
|
||||
AccessRequired members = 2;
|
||||
AccessRequired addFromInviteLink = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message Self {}
|
||||
|
@ -153,6 +231,41 @@ message Chat {
|
|||
FilePointer wallpaper = 9;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call Links have some associated data including a call, but unlike other recipients
|
||||
* are not tied to threads because they do not have messages associated with them.
|
||||
*
|
||||
* note:
|
||||
* - room id can be derived from the root key
|
||||
* - the presence of an admin key means this user is a call admin
|
||||
*/
|
||||
message CallLink {
|
||||
enum Restrictions {
|
||||
UNKNOWN = 0;
|
||||
NONE = 1;
|
||||
ADMIN_APPROVAL = 2;
|
||||
}
|
||||
|
||||
bytes rootKey = 1;
|
||||
optional bytes adminKey = 2; // Only present if the user is an admin
|
||||
string name = 3;
|
||||
Restrictions restrictions = 4;
|
||||
uint64 expirationMs = 5;
|
||||
}
|
||||
|
||||
message AdHocCall {
|
||||
enum State {
|
||||
UNKNOWN_STATE = 0;
|
||||
GENERIC = 1;
|
||||
}
|
||||
|
||||
uint64 callId = 1;
|
||||
// Refers to a `CallLink` recipient.
|
||||
uint64 recipientId = 2;
|
||||
State state = 3;
|
||||
uint64 callTimestamp = 4;
|
||||
}
|
||||
|
||||
message DistributionList {
|
||||
enum PrivacyMode {
|
||||
UNKNOWN = 0;
|
||||
|
@ -196,8 +309,8 @@ message ChatItem {
|
|||
uint64 chatId = 1; // conversation id
|
||||
uint64 authorId = 2; // recipient id
|
||||
uint64 dateSent = 3;
|
||||
optional uint64 expireStartDate = 4; // timestamp of when expiration timer started ticking down
|
||||
optional uint64 expiresInMs = 5; // how long timer of message is (ms)
|
||||
uint64 expireStartDate = 4; // timestamp of when expiration timer started ticking down
|
||||
uint64 expiresInMs = 5; // how long timer of message is (ms)
|
||||
repeated ChatItem revisions = 6; // ordered from oldest to newest
|
||||
bool sms = 7;
|
||||
|
||||
|
@ -213,6 +326,7 @@ message ChatItem {
|
|||
StickerMessage stickerMessage = 13;
|
||||
RemoteDeletedMessage remoteDeletedMessage = 14;
|
||||
ChatUpdateMessage updateMessage = 15;
|
||||
PaymentNotification paymentNotification = 16;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -255,6 +369,54 @@ message ContactMessage {
|
|||
repeated Reaction reactions = 2;
|
||||
}
|
||||
|
||||
message PaymentNotification {
|
||||
message TransactionDetails {
|
||||
message MobileCoinTxoIdentification { // Used to map to payments on the ledger
|
||||
repeated bytes publicKey = 1; // for received transactions
|
||||
repeated bytes keyImages = 2; // for sent transactions
|
||||
}
|
||||
|
||||
message FailedTransaction { // Failed payments can't be synced from the ledger
|
||||
enum FailureReason {
|
||||
GENERIC = 0;
|
||||
NETWORK = 1;
|
||||
INSUFFICIENT_FUNDS = 2;
|
||||
}
|
||||
FailureReason reason = 1;
|
||||
}
|
||||
|
||||
message Transaction {
|
||||
enum Status {
|
||||
INITIAL = 0;
|
||||
SUBMITTED = 1;
|
||||
SUCCESSFUL = 2;
|
||||
}
|
||||
Status status = 1;
|
||||
|
||||
// This identification is used to map the payment table to the ledger
|
||||
// and is likely required otherwise we may have issues reconciling with
|
||||
// the ledger
|
||||
MobileCoinTxoIdentification mobileCoinIdentification = 2;
|
||||
optional uint64 timestamp = 3;
|
||||
optional uint64 blockIndex = 4;
|
||||
optional uint64 blockTimestamp = 5;
|
||||
optional bytes transaction = 6; // mobile coin blobs
|
||||
optional bytes receipt = 7; // mobile coin blobs
|
||||
}
|
||||
|
||||
oneof payment {
|
||||
Transaction transaction = 1;
|
||||
FailedTransaction failedTransaction = 2;
|
||||
}
|
||||
}
|
||||
|
||||
optional string amountMob = 1; // stored as a decimal string, e.g. 1.00001
|
||||
optional string feeMob = 2; // stored as a decimal string, e.g. 1.00001
|
||||
optional string note = 3;
|
||||
TransactionDetails transactionDetails = 4;
|
||||
|
||||
}
|
||||
|
||||
message ContactAttachment {
|
||||
message Name {
|
||||
optional string givenName = 1;
|
||||
|
@ -481,73 +643,72 @@ message ChatUpdateMessage {
|
|||
ProfileChangeChatUpdate profileChange = 4;
|
||||
ThreadMergeChatUpdate threadMerge = 5;
|
||||
SessionSwitchoverChatUpdate sessionSwitchover = 6;
|
||||
CallChatUpdate callingMessage = 7;
|
||||
IndividualCall individualCall = 7;
|
||||
GroupCall groupCall = 8;
|
||||
}
|
||||
}
|
||||
|
||||
message CallChatUpdate{
|
||||
Call call = 1;
|
||||
|
||||
oneof chatUpdate {
|
||||
IndividualCallChatUpdate callMessage = 2;
|
||||
GroupCallChatUpdate groupCall = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message Call {
|
||||
message IndividualCall {
|
||||
enum Type {
|
||||
UNKNOWN_TYPE = 0;
|
||||
AUDIO_CALL = 1;
|
||||
VIDEO_CALL = 2;
|
||||
GROUP_CALL = 3;
|
||||
AD_HOC_CALL = 4;
|
||||
}
|
||||
|
||||
enum Direction {
|
||||
UNKNOWN_DIRECTION = 0;
|
||||
INCOMING = 1;
|
||||
OUTGOING = 2;
|
||||
}
|
||||
|
||||
enum State {
|
||||
UNKNOWN_EVENT = 0;
|
||||
COMPLETED = 1; // A call that was successfully completed or was accepted and in-progress at the time of the backup.
|
||||
DECLINED_BY_USER = 2; // An incoming call that was manually declined by the user.
|
||||
DECLINED_BY_NOTIFICATION_PROFILE = 3; // An incoming call that was automatically declined by an active notification profile.
|
||||
MISSED = 4; // An incoming call that either expired, was cancelled by the sender, or was auto-rejected due to already being in a different call.
|
||||
UNKNOWN_STATE = 0;
|
||||
ACCEPTED = 1;
|
||||
NOT_ACCEPTED = 2;
|
||||
// An incoming call that is no longer ongoing, which we neither accepted
|
||||
// not actively declined. For example, it expired, was canceled by the
|
||||
// sender, or was rejected due to being in another call.
|
||||
MISSED = 3;
|
||||
// We auto-declined an incoming call due to a notification profile.
|
||||
MISSED_NOTIFICATION_PROFILE = 4;
|
||||
}
|
||||
|
||||
uint64 callId = 1;
|
||||
uint64 conversationRecipientId = 2;
|
||||
Type type = 3;
|
||||
bool outgoing = 4;
|
||||
uint64 timestamp = 5;
|
||||
optional uint64 ringerRecipientId = 6;
|
||||
State state = 7;
|
||||
optional uint64 callId = 1;
|
||||
Type type = 2;
|
||||
Direction direction = 3;
|
||||
State state = 4;
|
||||
uint64 startedCallTimestamp = 5;
|
||||
}
|
||||
|
||||
message IndividualCallChatUpdate {
|
||||
enum Type {
|
||||
UNKNOWN = 0;
|
||||
INCOMING_AUDIO_CALL = 1;
|
||||
INCOMING_VIDEO_CALL = 2;
|
||||
OUTGOING_AUDIO_CALL = 3;
|
||||
OUTGOING_VIDEO_CALL = 4;
|
||||
MISSED_INCOMING_AUDIO_CALL = 5;
|
||||
MISSED_INCOMING_VIDEO_CALL = 6;
|
||||
UNANSWERED_OUTGOING_AUDIO_CALL = 7;
|
||||
UNANSWERED_OUTGOING_VIDEO_CALL = 8;
|
||||
message GroupCall {
|
||||
enum State {
|
||||
UNKNOWN_STATE = 0;
|
||||
// A group call was started without ringing.
|
||||
GENERIC = 1;
|
||||
// We joined a group call that was started without ringing.
|
||||
JOINED = 2;
|
||||
// An incoming group call is actively ringing.
|
||||
RINGING = 3;
|
||||
// We accepted an incoming group ring.
|
||||
ACCEPTED = 4;
|
||||
// We declined an incoming group ring.
|
||||
DECLINED = 5;
|
||||
// We missed an incoming group ring, for example because it expired.
|
||||
MISSED = 6;
|
||||
// We auto-declined an incoming group ring due to a notification profile.
|
||||
MISSED_NOTIFICATION_PROFILE = 7;
|
||||
// An outgoing ring was started. We don't track any state for outgoing rings
|
||||
// beyond that they started.
|
||||
OUTGOING_RING = 8;
|
||||
}
|
||||
|
||||
Type type = 1;
|
||||
}
|
||||
|
||||
message GroupCallChatUpdate {
|
||||
enum LocalUserJoined {
|
||||
UNKNOWN = 0;
|
||||
JOINED = 1;
|
||||
DID_NOT_JOIN = 2;
|
||||
}
|
||||
|
||||
optional bytes startedCallAci = 1;
|
||||
uint64 startedCallTimestamp = 2;
|
||||
repeated bytes inCallAcis = 3;
|
||||
uint64 endedCallTimestamp = 4; // 0 indicates we do not know
|
||||
LocalUserJoined localUserJoined = 5;
|
||||
optional uint64 callId = 1;
|
||||
State state = 2;
|
||||
optional uint64 ringerRecipientId = 3;
|
||||
optional uint64 startedCallRecipientId = 4;
|
||||
uint64 startedCallTimestamp = 5;
|
||||
// The time the call ended. 0 indicates an unknown time.
|
||||
uint64 endedCallTimestamp = 6;
|
||||
}
|
||||
|
||||
message SimpleChatUpdate {
|
||||
|
@ -846,4 +1007,4 @@ message StickerPack {
|
|||
message StickerPackSticker {
|
||||
string emoji = 1;
|
||||
uint32 id = 2;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue