Handle read receipts from Matrix

This commit is contained in:
Tulir Asokan 2023-07-15 14:38:24 +03:00
parent a21388cdfc
commit 7860fb64c8
10 changed files with 522 additions and 200 deletions

View file

@ -6,7 +6,7 @@
* [x] Replies (RCS) * [x] Replies (RCS)
* [x] Reactions (RCS) * [x] Reactions (RCS)
* [ ] Typing notifications (RCS) * [ ] Typing notifications (RCS)
* [ ] Read receipts (RCS) * [x] Read receipts (RCS)
* [x] Message deletions (own device only) * [x] Message deletions (own device only)
* Google Messages → Matrix * Google Messages → Matrix
* [ ] Message content * [ ] Message content

View file

@ -216,6 +216,61 @@ func (x *NotifyDittoActivityPayload) GetSuccess() bool {
return false return false
} }
type MessageReadPayload struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ConversationID string `protobuf:"bytes,2,opt,name=conversationID,proto3" json:"conversationID,omitempty"`
MessageID string `protobuf:"bytes,3,opt,name=messageID,proto3" json:"messageID,omitempty"`
}
func (x *MessageReadPayload) Reset() {
*x = MessageReadPayload{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MessageReadPayload) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MessageReadPayload) ProtoMessage() {}
func (x *MessageReadPayload) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MessageReadPayload.ProtoReflect.Descriptor instead.
func (*MessageReadPayload) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{1}
}
func (x *MessageReadPayload) GetConversationID() string {
if x != nil {
return x.ConversationID
}
return ""
}
func (x *MessageReadPayload) GetMessageID() string {
if x != nil {
return x.MessageID
}
return ""
}
type AckMessageResponse struct { type AckMessageResponse struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -227,7 +282,7 @@ type AckMessageResponse struct {
func (x *AckMessageResponse) Reset() { func (x *AckMessageResponse) Reset() {
*x = AckMessageResponse{} *x = AckMessageResponse{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[1] mi := &file_client_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -240,7 +295,7 @@ func (x *AckMessageResponse) String() string {
func (*AckMessageResponse) ProtoMessage() {} func (*AckMessageResponse) ProtoMessage() {}
func (x *AckMessageResponse) ProtoReflect() protoreflect.Message { func (x *AckMessageResponse) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[1] mi := &file_client_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -253,7 +308,7 @@ func (x *AckMessageResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckMessageResponse.ProtoReflect.Descriptor instead. // Deprecated: Use AckMessageResponse.ProtoReflect.Descriptor instead.
func (*AckMessageResponse) Descriptor() ([]byte, []int) { func (*AckMessageResponse) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{1} return file_client_proto_rawDescGZIP(), []int{2}
} }
func (x *AckMessageResponse) GetContainer() *AckContainer { func (x *AckMessageResponse) GetContainer() *AckContainer {
@ -274,7 +329,7 @@ type AckContainer struct {
func (x *AckContainer) Reset() { func (x *AckContainer) Reset() {
*x = AckContainer{} *x = AckContainer{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[2] mi := &file_client_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -287,7 +342,7 @@ func (x *AckContainer) String() string {
func (*AckContainer) ProtoMessage() {} func (*AckContainer) ProtoMessage() {}
func (x *AckContainer) ProtoReflect() protoreflect.Message { func (x *AckContainer) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[2] mi := &file_client_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -300,7 +355,7 @@ func (x *AckContainer) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckContainer.ProtoReflect.Descriptor instead. // Deprecated: Use AckContainer.ProtoReflect.Descriptor instead.
func (*AckContainer) Descriptor() ([]byte, []int) { func (*AckContainer) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{2} return file_client_proto_rawDescGZIP(), []int{3}
} }
func (x *AckContainer) GetData() *AckData { func (x *AckContainer) GetData() *AckData {
@ -321,7 +376,7 @@ type AckData struct {
func (x *AckData) Reset() { func (x *AckData) Reset() {
*x = AckData{} *x = AckData{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[3] mi := &file_client_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -334,7 +389,7 @@ func (x *AckData) String() string {
func (*AckData) ProtoMessage() {} func (*AckData) ProtoMessage() {}
func (x *AckData) ProtoReflect() protoreflect.Message { func (x *AckData) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[3] mi := &file_client_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -347,7 +402,7 @@ func (x *AckData) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckData.ProtoReflect.Descriptor instead. // Deprecated: Use AckData.ProtoReflect.Descriptor instead.
func (*AckData) Descriptor() ([]byte, []int) { func (*AckData) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{3} return file_client_proto_rawDescGZIP(), []int{4}
} }
func (x *AckData) GetAckAmount() *AckAmount { func (x *AckData) GetAckAmount() *AckAmount {
@ -368,7 +423,7 @@ type AckAmount struct {
func (x *AckAmount) Reset() { func (x *AckAmount) Reset() {
*x = AckAmount{} *x = AckAmount{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[4] mi := &file_client_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -381,7 +436,7 @@ func (x *AckAmount) String() string {
func (*AckAmount) ProtoMessage() {} func (*AckAmount) ProtoMessage() {}
func (x *AckAmount) ProtoReflect() protoreflect.Message { func (x *AckAmount) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[4] mi := &file_client_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -394,7 +449,7 @@ func (x *AckAmount) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckAmount.ProtoReflect.Descriptor instead. // Deprecated: Use AckAmount.ProtoReflect.Descriptor instead.
func (*AckAmount) Descriptor() ([]byte, []int) { func (*AckAmount) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{4} return file_client_proto_rawDescGZIP(), []int{5}
} }
func (x *AckAmount) GetCount() int32 { func (x *AckAmount) GetCount() int32 {
@ -417,7 +472,7 @@ type AckMessagePayload struct {
func (x *AckMessagePayload) Reset() { func (x *AckMessagePayload) Reset() {
*x = AckMessagePayload{} *x = AckMessagePayload{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[5] mi := &file_client_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -430,7 +485,7 @@ func (x *AckMessagePayload) String() string {
func (*AckMessagePayload) ProtoMessage() {} func (*AckMessagePayload) ProtoMessage() {}
func (x *AckMessagePayload) ProtoReflect() protoreflect.Message { func (x *AckMessagePayload) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[5] mi := &file_client_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -443,7 +498,7 @@ func (x *AckMessagePayload) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckMessagePayload.ProtoReflect.Descriptor instead. // Deprecated: Use AckMessagePayload.ProtoReflect.Descriptor instead.
func (*AckMessagePayload) Descriptor() ([]byte, []int) { func (*AckMessagePayload) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{5} return file_client_proto_rawDescGZIP(), []int{6}
} }
func (x *AckMessagePayload) GetAuthData() *AuthMessage { func (x *AckMessagePayload) GetAuthData() *AuthMessage {
@ -479,7 +534,7 @@ type AckMessageData struct {
func (x *AckMessageData) Reset() { func (x *AckMessageData) Reset() {
*x = AckMessageData{} *x = AckMessageData{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[6] mi := &file_client_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -492,7 +547,7 @@ func (x *AckMessageData) String() string {
func (*AckMessageData) ProtoMessage() {} func (*AckMessageData) ProtoMessage() {}
func (x *AckMessageData) ProtoReflect() protoreflect.Message { func (x *AckMessageData) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[6] mi := &file_client_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -505,7 +560,7 @@ func (x *AckMessageData) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckMessageData.ProtoReflect.Descriptor instead. // Deprecated: Use AckMessageData.ProtoReflect.Descriptor instead.
func (*AckMessageData) Descriptor() ([]byte, []int) { func (*AckMessageData) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{6} return file_client_proto_rawDescGZIP(), []int{7}
} }
func (x *AckMessageData) GetRequestID() string { func (x *AckMessageData) GetRequestID() string {
@ -534,7 +589,7 @@ type ImageMetaData struct {
func (x *ImageMetaData) Reset() { func (x *ImageMetaData) Reset() {
*x = ImageMetaData{} *x = ImageMetaData{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[7] mi := &file_client_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -547,7 +602,7 @@ func (x *ImageMetaData) String() string {
func (*ImageMetaData) ProtoMessage() {} func (*ImageMetaData) ProtoMessage() {}
func (x *ImageMetaData) ProtoReflect() protoreflect.Message { func (x *ImageMetaData) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[7] mi := &file_client_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -560,7 +615,7 @@ func (x *ImageMetaData) ProtoReflect() protoreflect.Message {
// Deprecated: Use ImageMetaData.ProtoReflect.Descriptor instead. // Deprecated: Use ImageMetaData.ProtoReflect.Descriptor instead.
func (*ImageMetaData) Descriptor() ([]byte, []int) { func (*ImageMetaData) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{7} return file_client_proto_rawDescGZIP(), []int{8}
} }
func (x *ImageMetaData) GetImageID() string { func (x *ImageMetaData) GetImageID() string {
@ -589,7 +644,7 @@ type UploadImagePayload struct {
func (x *UploadImagePayload) Reset() { func (x *UploadImagePayload) Reset() {
*x = UploadImagePayload{} *x = UploadImagePayload{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[8] mi := &file_client_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -602,7 +657,7 @@ func (x *UploadImagePayload) String() string {
func (*UploadImagePayload) ProtoMessage() {} func (*UploadImagePayload) ProtoMessage() {}
func (x *UploadImagePayload) ProtoReflect() protoreflect.Message { func (x *UploadImagePayload) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[8] mi := &file_client_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -615,7 +670,7 @@ func (x *UploadImagePayload) ProtoReflect() protoreflect.Message {
// Deprecated: Use UploadImagePayload.ProtoReflect.Descriptor instead. // Deprecated: Use UploadImagePayload.ProtoReflect.Descriptor instead.
func (*UploadImagePayload) Descriptor() ([]byte, []int) { func (*UploadImagePayload) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{8} return file_client_proto_rawDescGZIP(), []int{9}
} }
func (x *UploadImagePayload) GetMetaData() *ImageMetaData { func (x *UploadImagePayload) GetMetaData() *ImageMetaData {
@ -643,7 +698,7 @@ type BugleBackendService struct {
func (x *BugleBackendService) Reset() { func (x *BugleBackendService) Reset() {
*x = BugleBackendService{} *x = BugleBackendService{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[9] mi := &file_client_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -656,7 +711,7 @@ func (x *BugleBackendService) String() string {
func (*BugleBackendService) ProtoMessage() {} func (*BugleBackendService) ProtoMessage() {}
func (x *BugleBackendService) ProtoReflect() protoreflect.Message { func (x *BugleBackendService) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[9] mi := &file_client_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -669,7 +724,7 @@ func (x *BugleBackendService) ProtoReflect() protoreflect.Message {
// Deprecated: Use BugleBackendService.ProtoReflect.Descriptor instead. // Deprecated: Use BugleBackendService.ProtoReflect.Descriptor instead.
func (*BugleBackendService) Descriptor() ([]byte, []int) { func (*BugleBackendService) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{9} return file_client_proto_rawDescGZIP(), []int{10}
} }
func (x *BugleBackendService) GetData() *BugleCode { func (x *BugleBackendService) GetData() *BugleCode {
@ -690,7 +745,7 @@ type BugleCode struct {
func (x *BugleCode) Reset() { func (x *BugleCode) Reset() {
*x = BugleCode{} *x = BugleCode{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[10] mi := &file_client_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -703,7 +758,7 @@ func (x *BugleCode) String() string {
func (*BugleCode) ProtoMessage() {} func (*BugleCode) ProtoMessage() {}
func (x *BugleCode) ProtoReflect() protoreflect.Message { func (x *BugleCode) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[10] mi := &file_client_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -716,7 +771,7 @@ func (x *BugleCode) ProtoReflect() protoreflect.Message {
// Deprecated: Use BugleCode.ProtoReflect.Descriptor instead. // Deprecated: Use BugleCode.ProtoReflect.Descriptor instead.
func (*BugleCode) Descriptor() ([]byte, []int) { func (*BugleCode) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{10} return file_client_proto_rawDescGZIP(), []int{11}
} }
func (x *BugleCode) GetType() int64 { func (x *BugleCode) GetType() int64 {
@ -734,80 +789,86 @@ var file_client_proto_rawDesc = []byte{
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x1a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x1a, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79,
0x44, 0x69, 0x74, 0x74, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x61, 0x79, 0x44, 0x69, 0x74, 0x74, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x61, 0x79,
0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x48, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x5a,
0x0a, 0x12, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x0a, 0x12, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x50, 0x61, 0x79,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
0x2e, 0x41, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09,
0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x33, 0x0a, 0x0c, 0x41, 0x63, 0x6b, 0x43, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0x48, 0x0a, 0x12, 0x41, 0x63,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x41, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3a, 0x0a, 0x12, 0x32, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20,
0x07, 0x41, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x63, 0x6b, 0x41, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x6b,
0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61,
0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x09, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x33, 0x0a, 0x0c, 0x41, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x74, 0x61,
0x61, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x21, 0x0a, 0x09, 0x41, 0x63, 0x6b, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x6b, 0x44,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x6b,
0x11, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x2e, 0x41, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x09, 0x61, 0x63, 0x6b, 0x41,
0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x21, 0x0a, 0x09, 0x41, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75,
0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x41, 0x63, 0x6b,
0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31,
0x74, 0x79, 0x41, 0x72, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x43, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6e, 0x6f, 0x43, 0x6c, 0x75, 0x65, 0x22, 0x58, 0x0a, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68,
0x0e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74,
0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x61, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x02, 0x20,
0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45,
0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x43, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x0d, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x0c, 0x52, 0x06, 0x6e, 0x6f, 0x43, 0x6c, 0x75, 0x65, 0x22, 0x58, 0x0a, 0x0e, 0x41, 0x63, 0x6b,
0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x72,
0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x06, 0x64, 0x65, 0x76,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73,
0x22, 0x7a, 0x0a, 0x12, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76,
0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x69, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x0d, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61,
0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18,
0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x1c,
0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x68, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x08, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x22, 0x7a, 0x0a, 0x12,
0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f,
0x67, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3c, 0x0a, 0x13, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01,
0x42, 0x75, 0x67, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6d,
0x69, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74,
0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74,
0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1f, 0x0a, 0x09, 0x42, 0x75, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x67, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08,
0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x90, 0x02, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3c, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x6c,
0x42, 0x75, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65,
0x12, 0x07, 0x0a, 0x03, 0x53, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x4d, 0x53, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1f, 0x0a, 0x09, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x43,
0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x43, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x90, 0x02, 0x0a, 0x10, 0x42, 0x75, 0x67, 0x6c,
0x4d, 0x44, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x05, 0x12, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a,
0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x4d, 0x45,
0x44, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03,
0x42, 0x41, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x53, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x4d, 0x53, 0x10, 0x02, 0x12, 0x07,
0x4e, 0x45, 0x52, 0x49, 0x43, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x54, 0x44, 0x10, 0x09, 0x0a, 0x03, 0x52, 0x43, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4c, 0x4f, 0x55, 0x44,
0x12, 0x12, 0x0a, 0x0e, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x44, 0x4e, 0x5f,
0x43, 0x59, 0x10, 0x0a, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x49,
0x58, 0x4d, 0x4c, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x45, 0x52, 0x4d, 0x44, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x06, 0x12,
0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x42, 0x11, 0x0a, 0x0d, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b,
0x4d, 0x5f, 0x53, 0x50, 0x41, 0x4d, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x0d, 0x12, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49,
0x0d, 0x0a, 0x09, 0x53, 0x41, 0x54, 0x45, 0x4c, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x0e, 0x2a, 0x75, 0x43, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x54, 0x44, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e,
0x0a, 0x0c, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x18, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x0a,
0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x58, 0x4d, 0x4c, 0x10,
0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x45, 0x53,
0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x42, 0x4d, 0x5f, 0x53, 0x50,
0x0b, 0x0a, 0x07, 0x46, 0x49, 0x52, 0x45, 0x46, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x4d, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x53,
0x53, 0x41, 0x46, 0x41, 0x52, 0x49, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x45, 0x4c, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x0e, 0x2a, 0x75, 0x0a, 0x0c, 0x42, 0x72,
0x41, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x45, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e,
0x44, 0x47, 0x45, 0x10, 0x07, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x54, 0x59,
0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12,
0x0a, 0x0a, 0x06, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x46,
0x49, 0x52, 0x45, 0x46, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x41, 0x46, 0x41,
0x52, 0x49, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x10, 0x05, 0x12,
0x06, 0x0a, 0x02, 0x49, 0x45, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x44, 0x47, 0x45, 0x10,
0x07, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72,
0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -823,35 +884,36 @@ func file_client_proto_rawDescGZIP() []byte {
} }
var file_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_client_proto_goTypes = []interface{}{ var file_client_proto_goTypes = []interface{}{
(BugleMessageType)(0), // 0: client.BugleMessageType (BugleMessageType)(0), // 0: client.BugleMessageType
(BrowserTypes)(0), // 1: client.BrowserTypes (BrowserTypes)(0), // 1: client.BrowserTypes
(*NotifyDittoActivityPayload)(nil), // 2: client.NotifyDittoActivityPayload (*NotifyDittoActivityPayload)(nil), // 2: client.NotifyDittoActivityPayload
(*AckMessageResponse)(nil), // 3: client.AckMessageResponse (*MessageReadPayload)(nil), // 3: client.MessageReadPayload
(*AckContainer)(nil), // 4: client.AckContainer (*AckMessageResponse)(nil), // 4: client.AckMessageResponse
(*AckData)(nil), // 5: client.AckData (*AckContainer)(nil), // 5: client.AckContainer
(*AckAmount)(nil), // 6: client.AckAmount (*AckData)(nil), // 6: client.AckData
(*AckMessagePayload)(nil), // 7: client.AckMessagePayload (*AckAmount)(nil), // 7: client.AckAmount
(*AckMessageData)(nil), // 8: client.AckMessageData (*AckMessagePayload)(nil), // 8: client.AckMessagePayload
(*ImageMetaData)(nil), // 9: client.ImageMetaData (*AckMessageData)(nil), // 9: client.AckMessageData
(*UploadImagePayload)(nil), // 10: client.UploadImagePayload (*ImageMetaData)(nil), // 10: client.ImageMetaData
(*BugleBackendService)(nil), // 11: client.BugleBackendService (*UploadImagePayload)(nil), // 11: client.UploadImagePayload
(*BugleCode)(nil), // 12: client.BugleCode (*BugleBackendService)(nil), // 12: client.BugleBackendService
(*AuthMessage)(nil), // 13: messages.AuthMessage (*BugleCode)(nil), // 13: client.BugleCode
(*EmptyArr)(nil), // 14: messages.EmptyArr (*AuthMessage)(nil), // 14: messages.AuthMessage
(*Device)(nil), // 15: messages.Device (*EmptyArr)(nil), // 15: messages.EmptyArr
(*Device)(nil), // 16: messages.Device
} }
var file_client_proto_depIdxs = []int32{ var file_client_proto_depIdxs = []int32{
4, // 0: client.AckMessageResponse.container:type_name -> client.AckContainer 5, // 0: client.AckMessageResponse.container:type_name -> client.AckContainer
5, // 1: client.AckContainer.data:type_name -> client.AckData 6, // 1: client.AckContainer.data:type_name -> client.AckData
6, // 2: client.AckData.ackAmount:type_name -> client.AckAmount 7, // 2: client.AckData.ackAmount:type_name -> client.AckAmount
13, // 3: client.AckMessagePayload.authData:type_name -> messages.AuthMessage 14, // 3: client.AckMessagePayload.authData:type_name -> messages.AuthMessage
14, // 4: client.AckMessagePayload.emptyArr:type_name -> messages.EmptyArr 15, // 4: client.AckMessagePayload.emptyArr:type_name -> messages.EmptyArr
15, // 5: client.AckMessageData.device:type_name -> messages.Device 16, // 5: client.AckMessageData.device:type_name -> messages.Device
9, // 6: client.UploadImagePayload.metaData:type_name -> client.ImageMetaData 10, // 6: client.UploadImagePayload.metaData:type_name -> client.ImageMetaData
13, // 7: client.UploadImagePayload.authData:type_name -> messages.AuthMessage 14, // 7: client.UploadImagePayload.authData:type_name -> messages.AuthMessage
12, // 8: client.BugleBackendService.data:type_name -> client.BugleCode 13, // 8: client.BugleBackendService.data:type_name -> client.BugleCode
9, // [9:9] is the sub-list for method output_type 9, // [9:9] is the sub-list for method output_type
9, // [9:9] is the sub-list for method input_type 9, // [9:9] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name 9, // [9:9] is the sub-list for extension type_name
@ -879,7 +941,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckMessageResponse); i { switch v := v.(*MessageReadPayload); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -891,7 +953,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckContainer); i { switch v := v.(*AckMessageResponse); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -903,7 +965,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckData); i { switch v := v.(*AckContainer); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -915,7 +977,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckAmount); i { switch v := v.(*AckData); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -927,7 +989,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckMessagePayload); i { switch v := v.(*AckAmount); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -939,7 +1001,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckMessageData); i { switch v := v.(*AckMessagePayload); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -951,7 +1013,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ImageMetaData); i { switch v := v.(*AckMessageData); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -963,7 +1025,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UploadImagePayload); i { switch v := v.(*ImageMetaData); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -975,7 +1037,7 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BugleBackendService); i { switch v := v.(*UploadImagePayload); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -987,6 +1049,18 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BugleBackendService); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_client_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BugleCode); i { switch v := v.(*BugleCode); i {
case 0: case 0:
return &v.state return &v.state
@ -1005,7 +1079,7 @@ func file_client_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_client_proto_rawDesc, RawDescriptor: file_client_proto_rawDesc,
NumEnums: 2, NumEnums: 2,
NumMessages: 11, NumMessages: 12,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View file

@ -72,55 +72,151 @@ func (BugleRoute) EnumDescriptor() ([]byte, []int) {
type ActionType int32 type ActionType int32
const ( const (
ActionType_UNKNOWN_ACTION_TYPE ActionType = 0 ActionType_UNSPECIFIED ActionType = 0
ActionType_LIST_CONVERSATIONS ActionType = 1 ActionType_LIST_CONVERSATIONS ActionType = 1
ActionType_LIST_MESSAGES ActionType = 2 ActionType_LIST_MESSAGES ActionType = 2
ActionType_SEND_MESSAGE ActionType = 3 ActionType_SEND_MESSAGE ActionType = 3
ActionType_LIST_CONVERSATIONS_SYNC ActionType = 1111 ActionType_LIST_CONVERSATIONS_SYNC ActionType = 1111
ActionType_UPDATE_CONVERSATION ActionType = 15 ActionType_MESSAGE_UPDATES ActionType = 4
ActionType_GET_UPDATES ActionType = 16 ActionType_LIST_CONTACTS ActionType = 6
ActionType_GET_CONVERSATION_TYPE ActionType = 21 ActionType_CONVERSATION_UPDATES ActionType = 7
ActionType_NOTIFY_DITTO_ACTIVITY ActionType = 22 ActionType_GET_OR_CREATE_CONVERSATION ActionType = 9
ActionType_DELETE_MESSAGE ActionType = 23 ActionType_MESSAGE_READ ActionType = 10
ActionType_RESEND_MESSAGE ActionType = 25 ActionType_BROWSER_PRESENCE_CHECK ActionType = 11
ActionType_IS_BUGLE_DEFAULT ActionType = 31 ActionType_TYPING_UPDATES ActionType = 12
ActionType_GET_PARTICIPANTS_THUMBNAIL ActionType = 37 ActionType_SETTINGS_UPDATE ActionType = 13
ActionType_SEND_REACTION ActionType = 38 ActionType_USER_ALERT ActionType = 14
ActionType_UPDATE_CONVERSATION ActionType = 15
ActionType_GET_UPDATES ActionType = 16
ActionType_ACK_BROWSER_PRESENCE ActionType = 17
ActionType_LIST_STICKER_SETS ActionType = 18
ActionType_LEAVE_RCS_GROUP ActionType = 19
ActionType_ADD_PARTICIPANT_TO_RCS_GROUP ActionType = 20
ActionType_GET_CONVERSATION_TYPE ActionType = 21
ActionType_NOTIFY_DITTO_ACTIVITY ActionType = 22
ActionType_DELETE_MESSAGE ActionType = 23
ActionType_INSTALL_STICKER_SET ActionType = 24
ActionType_RESEND_MESSAGE ActionType = 25
ActionType_GET_CONTACT_RCS_GROUP_STATUS ActionType = 26
ActionType_DOWNLOAD_MESSAGE ActionType = 27
ActionType_LIST_TOP_CONTACTS ActionType = 28
ActionType_GET_CONTACTS_THUMBNAIL ActionType = 29
ActionType_CHANGE_PARTICIPANT_COLOR ActionType = 30
ActionType_IS_BUGLE_DEFAULT ActionType = 31
ActionType_STICKER_USER_CONTEXT ActionType = 32
ActionType_FAVORITE_STICKER_PACKS ActionType = 33
ActionType_RECENT_STICKERS ActionType = 34
ActionType_UPDATE_RECENT_STICKERS ActionType = 35
ActionType_GET_FULL_SIZE_IMAGE ActionType = 36
ActionType_GET_PARTICIPANTS_THUMBNAIL ActionType = 37
ActionType_SEND_REACTION ActionType = 38
ActionType_SEND_REPLY ActionType = 39
ActionType_GET_BLOB_FOR_ATTACHMENT ActionType = 40
ActionType_GET_DEVICES_AVAILABLE_FOR_GAIA_PAIRING ActionType = 41
ActionType_CREATE_GAIA_PAIRING ActionType = 42
ActionType_GET_CONVERSATION ActionType = 43
ActionType_CREATE_GAIA_PAIRING_CLIENT_INIT ActionType = 44
ActionType_CREATE_GAIA_PAIRING_CLIENT_FINISHED ActionType = 45
ActionType_UNPAIR_GAIA_PAIRING ActionType = 46
) )
// Enum value maps for ActionType. // Enum value maps for ActionType.
var ( var (
ActionType_name = map[int32]string{ ActionType_name = map[int32]string{
0: "UNKNOWN_ACTION_TYPE", 0: "UNSPECIFIED",
1: "LIST_CONVERSATIONS", 1: "LIST_CONVERSATIONS",
2: "LIST_MESSAGES", 2: "LIST_MESSAGES",
3: "SEND_MESSAGE", 3: "SEND_MESSAGE",
1111: "LIST_CONVERSATIONS_SYNC", 1111: "LIST_CONVERSATIONS_SYNC",
4: "MESSAGE_UPDATES",
6: "LIST_CONTACTS",
7: "CONVERSATION_UPDATES",
9: "GET_OR_CREATE_CONVERSATION",
10: "MESSAGE_READ",
11: "BROWSER_PRESENCE_CHECK",
12: "TYPING_UPDATES",
13: "SETTINGS_UPDATE",
14: "USER_ALERT",
15: "UPDATE_CONVERSATION", 15: "UPDATE_CONVERSATION",
16: "GET_UPDATES", 16: "GET_UPDATES",
17: "ACK_BROWSER_PRESENCE",
18: "LIST_STICKER_SETS",
19: "LEAVE_RCS_GROUP",
20: "ADD_PARTICIPANT_TO_RCS_GROUP",
21: "GET_CONVERSATION_TYPE", 21: "GET_CONVERSATION_TYPE",
22: "NOTIFY_DITTO_ACTIVITY", 22: "NOTIFY_DITTO_ACTIVITY",
23: "DELETE_MESSAGE", 23: "DELETE_MESSAGE",
24: "INSTALL_STICKER_SET",
25: "RESEND_MESSAGE", 25: "RESEND_MESSAGE",
26: "GET_CONTACT_RCS_GROUP_STATUS",
27: "DOWNLOAD_MESSAGE",
28: "LIST_TOP_CONTACTS",
29: "GET_CONTACTS_THUMBNAIL",
30: "CHANGE_PARTICIPANT_COLOR",
31: "IS_BUGLE_DEFAULT", 31: "IS_BUGLE_DEFAULT",
32: "STICKER_USER_CONTEXT",
33: "FAVORITE_STICKER_PACKS",
34: "RECENT_STICKERS",
35: "UPDATE_RECENT_STICKERS",
36: "GET_FULL_SIZE_IMAGE",
37: "GET_PARTICIPANTS_THUMBNAIL", 37: "GET_PARTICIPANTS_THUMBNAIL",
38: "SEND_REACTION", 38: "SEND_REACTION",
39: "SEND_REPLY",
40: "GET_BLOB_FOR_ATTACHMENT",
41: "GET_DEVICES_AVAILABLE_FOR_GAIA_PAIRING",
42: "CREATE_GAIA_PAIRING",
43: "GET_CONVERSATION",
44: "CREATE_GAIA_PAIRING_CLIENT_INIT",
45: "CREATE_GAIA_PAIRING_CLIENT_FINISHED",
46: "UNPAIR_GAIA_PAIRING",
} }
ActionType_value = map[string]int32{ ActionType_value = map[string]int32{
"UNKNOWN_ACTION_TYPE": 0, "UNSPECIFIED": 0,
"LIST_CONVERSATIONS": 1, "LIST_CONVERSATIONS": 1,
"LIST_MESSAGES": 2, "LIST_MESSAGES": 2,
"SEND_MESSAGE": 3, "SEND_MESSAGE": 3,
"LIST_CONVERSATIONS_SYNC": 1111, "LIST_CONVERSATIONS_SYNC": 1111,
"UPDATE_CONVERSATION": 15, "MESSAGE_UPDATES": 4,
"GET_UPDATES": 16, "LIST_CONTACTS": 6,
"GET_CONVERSATION_TYPE": 21, "CONVERSATION_UPDATES": 7,
"NOTIFY_DITTO_ACTIVITY": 22, "GET_OR_CREATE_CONVERSATION": 9,
"DELETE_MESSAGE": 23, "MESSAGE_READ": 10,
"RESEND_MESSAGE": 25, "BROWSER_PRESENCE_CHECK": 11,
"IS_BUGLE_DEFAULT": 31, "TYPING_UPDATES": 12,
"GET_PARTICIPANTS_THUMBNAIL": 37, "SETTINGS_UPDATE": 13,
"SEND_REACTION": 38, "USER_ALERT": 14,
"UPDATE_CONVERSATION": 15,
"GET_UPDATES": 16,
"ACK_BROWSER_PRESENCE": 17,
"LIST_STICKER_SETS": 18,
"LEAVE_RCS_GROUP": 19,
"ADD_PARTICIPANT_TO_RCS_GROUP": 20,
"GET_CONVERSATION_TYPE": 21,
"NOTIFY_DITTO_ACTIVITY": 22,
"DELETE_MESSAGE": 23,
"INSTALL_STICKER_SET": 24,
"RESEND_MESSAGE": 25,
"GET_CONTACT_RCS_GROUP_STATUS": 26,
"DOWNLOAD_MESSAGE": 27,
"LIST_TOP_CONTACTS": 28,
"GET_CONTACTS_THUMBNAIL": 29,
"CHANGE_PARTICIPANT_COLOR": 30,
"IS_BUGLE_DEFAULT": 31,
"STICKER_USER_CONTEXT": 32,
"FAVORITE_STICKER_PACKS": 33,
"RECENT_STICKERS": 34,
"UPDATE_RECENT_STICKERS": 35,
"GET_FULL_SIZE_IMAGE": 36,
"GET_PARTICIPANTS_THUMBNAIL": 37,
"SEND_REACTION": 38,
"SEND_REPLY": 39,
"GET_BLOB_FOR_ATTACHMENT": 40,
"GET_DEVICES_AVAILABLE_FOR_GAIA_PAIRING": 41,
"CREATE_GAIA_PAIRING": 42,
"GET_CONVERSATION": 43,
"CREATE_GAIA_PAIRING_CLIENT_INIT": 44,
"CREATE_GAIA_PAIRING_CLIENT_FINISHED": 45,
"UNPAIR_GAIA_PAIRING": 46,
} }
) )
@ -628,7 +724,7 @@ func (x *InternalRequestData) GetAction() ActionType {
if x != nil { if x != nil {
return x.Action return x.Action
} }
return ActionType_UNKNOWN_ACTION_TYPE return ActionType_UNSPECIFIED
} }
func (x *InternalRequestData) GetBool1() bool { func (x *InternalRequestData) GetBool1() bool {
@ -863,7 +959,7 @@ func (x *SendMessageInternal) GetAction() ActionType {
if x != nil { if x != nil {
return x.Action return x.Action
} }
return ActionType_UNKNOWN_ACTION_TYPE return ActionType_UNSPECIFIED
} }
func (x *SendMessageInternal) GetEncryptedProtoData() []byte { func (x *SendMessageInternal) GetEncryptedProtoData() []byte {
@ -1657,34 +1753,86 @@ var file_messages_proto_rawDesc = []byte{
0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10,
0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x13, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x13,
0x12, 0x0d, 0x0a, 0x09, 0x50, 0x61, 0x69, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x0e, 0x2a, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x61, 0x69, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x0e, 0x2a,
0xd1, 0x02, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x8b, 0x09, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f,
0x0a, 0x13, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x16, 0x0a, 0x12, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41,
0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x01, 0x12, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54, 0x5f,
0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x53, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45,
0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x17,
0x47, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x17, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f,
0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x4e, 0x53, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0xd7, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x45,
0xd7, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x04, 0x12,
0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0f, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53,
0x45, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x10, 0x12, 0x19, 0x0a, 0x15, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49,
0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a,
0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x15, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x47, 0x45, 0x54, 0x5f, 0x4f, 0x52, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f,
0x59, 0x5f, 0x44, 0x49, 0x54, 0x54, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c,
0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x0a, 0x12, 0x1a,
0x53, 0x41, 0x47, 0x45, 0x10, 0x17, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x44, 0x0a, 0x16, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e,
0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x19, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x53, 0x43, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59,
0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x1f, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x13,
0x12, 0x1e, 0x0a, 0x1a, 0x47, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x0a, 0x0f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54,
0x41, 0x4e, 0x54, 0x53, 0x5f, 0x54, 0x48, 0x55, 0x4d, 0x42, 0x4e, 0x41, 0x49, 0x4c, 0x10, 0x25, 0x45, 0x10, 0x0d, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x45, 0x52,
0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x54, 0x10, 0x0e, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f,
0x4e, 0x10, 0x26, 0x2a, 0x50, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0f, 0x12, 0x0f, 0x0a, 0x0b,
0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x45, 0x47, 0x45, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x10, 0x12, 0x18, 0x0a,
0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x14, 0x41, 0x43, 0x4b, 0x5f, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x45,
0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, 0x53, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x11, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f,
0x14, 0x0a, 0x10, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x53, 0x10, 0x12, 0x12, 0x13,
0x49, 0x4f, 0x4e, 0x10, 0x10, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x0a, 0x0f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55,
0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x50, 0x10, 0x13, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49,
0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52,
0x4f, 0x55, 0x50, 0x10, 0x14, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e,
0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x15,
0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x5f, 0x44, 0x49, 0x54, 0x54, 0x4f,
0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x44,
0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x17, 0x12,
0x17, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b,
0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x53, 0x45,
0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x19, 0x12, 0x20, 0x0a, 0x1c,
0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x5f, 0x52, 0x43, 0x53, 0x5f,
0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x1a, 0x12, 0x14,
0x0a, 0x10, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41,
0x47, 0x45, 0x10, 0x1b, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x54, 0x4f, 0x50,
0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x10, 0x1c, 0x12, 0x1a, 0x0a, 0x16, 0x47,
0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x54, 0x48, 0x55, 0x4d,
0x42, 0x4e, 0x41, 0x49, 0x4c, 0x10, 0x1d, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e, 0x47,
0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4f,
0x4c, 0x4f, 0x52, 0x10, 0x1e, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x53, 0x5f, 0x42, 0x55, 0x47, 0x4c,
0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x1f, 0x12, 0x18, 0x0a, 0x14, 0x53,
0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54,
0x45, 0x58, 0x54, 0x10, 0x20, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x56, 0x4f, 0x52, 0x49, 0x54,
0x45, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x53, 0x10,
0x21, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x43, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x49, 0x43,
0x4b, 0x45, 0x52, 0x53, 0x10, 0x22, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45,
0x5f, 0x52, 0x45, 0x43, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x53,
0x10, 0x23, 0x12, 0x17, 0x0a, 0x13, 0x47, 0x45, 0x54, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x53,
0x49, 0x5a, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x24, 0x12, 0x1e, 0x0a, 0x1a, 0x47,
0x45, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x53, 0x5f,
0x54, 0x48, 0x55, 0x4d, 0x42, 0x4e, 0x41, 0x49, 0x4c, 0x10, 0x25, 0x12, 0x11, 0x0a, 0x0d, 0x53,
0x45, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x26, 0x12, 0x0e,
0x0a, 0x0a, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x59, 0x10, 0x27, 0x12, 0x1b,
0x0a, 0x17, 0x47, 0x45, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x41,
0x54, 0x54, 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x28, 0x12, 0x2a, 0x0a, 0x26, 0x47,
0x45, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c,
0x41, 0x42, 0x4c, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41,
0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x29, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x52, 0x45, 0x41, 0x54,
0x45, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x2a,
0x12, 0x14, 0x0a, 0x10, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41,
0x54, 0x49, 0x4f, 0x4e, 0x10, 0x2b, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45,
0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4c,
0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x2c, 0x12, 0x27, 0x0a, 0x23, 0x43,
0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49,
0x4e, 0x47, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48,
0x45, 0x44, 0x10, 0x2d, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x50, 0x41, 0x49, 0x52, 0x5f, 0x47,
0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x2e, 0x2a, 0x50, 0x0a,
0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14,
0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f,
0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f,
0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x47,
0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x10, 0x42,
0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View file

@ -9,6 +9,11 @@ message NotifyDittoActivityPayload {
bool success = 2; bool success = 2;
} }
message MessageReadPayload {
string conversationID = 2;
string messageID = 3;
}
message AckMessageResponse { message AckMessageResponse {
AckContainer container = 1; AckContainer container = 1;
} }

View file

@ -184,20 +184,52 @@ message ConfigVersion {
} }
enum ActionType { enum ActionType {
UNKNOWN_ACTION_TYPE = 0; UNSPECIFIED = 0;
LIST_CONVERSATIONS = 1; LIST_CONVERSATIONS = 1;
LIST_MESSAGES = 2; LIST_MESSAGES = 2;
SEND_MESSAGE = 3; SEND_MESSAGE = 3;
LIST_CONVERSATIONS_SYNC = 1111; LIST_CONVERSATIONS_SYNC = 1111;
MESSAGE_UPDATES = 4;
LIST_CONTACTS = 6;
CONVERSATION_UPDATES = 7;
GET_OR_CREATE_CONVERSATION = 9;
MESSAGE_READ = 10;
BROWSER_PRESENCE_CHECK = 11;
TYPING_UPDATES = 12;
SETTINGS_UPDATE = 13;
USER_ALERT = 14;
UPDATE_CONVERSATION = 15; UPDATE_CONVERSATION = 15;
GET_UPDATES = 16; GET_UPDATES = 16;
ACK_BROWSER_PRESENCE = 17;
LIST_STICKER_SETS = 18;
LEAVE_RCS_GROUP = 19;
ADD_PARTICIPANT_TO_RCS_GROUP = 20;
GET_CONVERSATION_TYPE = 21; GET_CONVERSATION_TYPE = 21;
NOTIFY_DITTO_ACTIVITY = 22; NOTIFY_DITTO_ACTIVITY = 22;
DELETE_MESSAGE = 23; DELETE_MESSAGE = 23;
INSTALL_STICKER_SET = 24;
RESEND_MESSAGE = 25; RESEND_MESSAGE = 25;
GET_CONTACT_RCS_GROUP_STATUS = 26;
DOWNLOAD_MESSAGE = 27;
LIST_TOP_CONTACTS = 28;
GET_CONTACTS_THUMBNAIL = 29;
CHANGE_PARTICIPANT_COLOR = 30;
IS_BUGLE_DEFAULT = 31; IS_BUGLE_DEFAULT = 31;
STICKER_USER_CONTEXT = 32;
FAVORITE_STICKER_PACKS = 33;
RECENT_STICKERS = 34;
UPDATE_RECENT_STICKERS = 35;
GET_FULL_SIZE_IMAGE = 36;
GET_PARTICIPANTS_THUMBNAIL = 37; GET_PARTICIPANTS_THUMBNAIL = 37;
SEND_REACTION = 38; SEND_REACTION = 38;
SEND_REPLY = 39;
GET_BLOB_FOR_ATTACHMENT = 40;
GET_DEVICES_AVAILABLE_FOR_GAIA_PAIRING = 41;
CREATE_GAIA_PAIRING = 42;
GET_CONVERSATION = 43;
CREATE_GAIA_PAIRING_CLIENT_INIT = 44;
CREATE_GAIA_PAIRING_CLIENT_FINISHED = 45;
UNPAIR_GAIA_PAIRING = 46;
} }
enum MessageType { enum MessageType {

View file

@ -54,3 +54,20 @@ func (m *Messages) Delete(messageId string) (*binary.DeleteMessageResponse, erro
m.client.Logger.Debug().Any("res", res).Msg("deleted message!") m.client.Logger.Debug().Any("res", res).Msg("deleted message!")
return res, nil return res, nil
} }
func (m *Messages) MarkRead(conversationID, messageID string) error {
payload := &binary.MessageReadPayload{ConversationID: conversationID, MessageID: messageID}
actionType := binary.ActionType_MESSAGE_READ
sentRequestId, sendErr := m.client.sessionHandler.completeSendMessage(actionType, true, payload)
if sendErr != nil {
return sendErr
}
_, err := m.client.sessionHandler.WaitForResponse(sentRequestId, actionType)
if err != nil {
return err
}
return nil
}

View file

@ -20,6 +20,7 @@ var Routes = map[binary.ActionType]Route{
binary.ActionType_GET_UPDATES: GET_UPDATES, binary.ActionType_GET_UPDATES: GET_UPDATES,
binary.ActionType_LIST_CONVERSATIONS: LIST_CONVERSATIONS, binary.ActionType_LIST_CONVERSATIONS: LIST_CONVERSATIONS,
binary.ActionType_LIST_CONVERSATIONS_SYNC: LIST_CONVERSATIONS_WITH_UPDATES, binary.ActionType_LIST_CONVERSATIONS_SYNC: LIST_CONVERSATIONS_WITH_UPDATES,
binary.ActionType_MESSAGE_READ: MESSAGE_READ,
binary.ActionType_NOTIFY_DITTO_ACTIVITY: NOTIFY_DITTO_ACTIVITY, binary.ActionType_NOTIFY_DITTO_ACTIVITY: NOTIFY_DITTO_ACTIVITY,
binary.ActionType_GET_CONVERSATION_TYPE: GET_CONVERSATION_TYPE, binary.ActionType_GET_CONVERSATION_TYPE: GET_CONVERSATION_TYPE,
binary.ActionType_LIST_MESSAGES: LIST_MESSAGES, binary.ActionType_LIST_MESSAGES: LIST_MESSAGES,

View file

@ -37,3 +37,12 @@ var DELETE_MESSAGE = Route{
UseSessionID: false, UseSessionID: false,
UseTTL: true, UseTTL: true,
} }
var MESSAGE_READ = Route{
Action: binary.ActionType_MESSAGE_READ,
MessageType: binary.MessageType_BUGLE_MESSAGE,
BugleRoute: binary.BugleRoute_DataEvent,
ResponseStruct: nil,
UseSessionID: false,
UseTTL: true,
}

View file

@ -253,8 +253,8 @@ type Portal struct {
} }
var ( var (
_ bridge.Portal = (*Portal)(nil) _ bridge.Portal = (*Portal)(nil)
//_ bridge.ReadReceiptHandlingPortal = (*Portal)(nil) _ bridge.ReadReceiptHandlingPortal = (*Portal)(nil)
//_ bridge.MembershipHandlingPortal = (*Portal)(nil) //_ bridge.MembershipHandlingPortal = (*Portal)(nil)
//_ bridge.MetaHandlingPortal = (*Portal)(nil) //_ bridge.MetaHandlingPortal = (*Portal)(nil)
//_ bridge.TypingPortal = (*Portal)(nil) //_ bridge.TypingPortal = (*Portal)(nil)
@ -1248,6 +1248,41 @@ func (portal *Portal) HandleMatrixMessage(sender *User, evt *event.Event, timing
} }
} }
func (portal *Portal) HandleMatrixReadReceipt(brUser bridge.User, eventID id.EventID, receipt event.ReadReceipt) {
user := brUser.(*User)
log := portal.zlog.With().
Str("event_id", eventID.String()).
Time("receipt_ts", receipt.Timestamp).
Str("action", "handle matrix read receipt").
Logger()
ctx := log.WithContext(context.TODO())
log.Debug().Msg("Handling Matrix read receipt")
targetMessage, err := portal.bridge.DB.Message.GetByMXID(ctx, eventID)
if err != nil {
log.Err(err).Msg("Failed to get target message to handle read receipt")
return
} else if targetMessage == nil {
lastMessage, err := portal.bridge.DB.Message.GetLastInChat(ctx, portal.Key)
if err != nil {
log.Err(err).Msg("Failed to get last message to handle read receipt")
return
} else if receipt.Timestamp.Before(lastMessage.Timestamp) {
log.Debug().Msg("Ignoring read receipt for unknown message with timestamp before last message")
return
} else {
log.Debug().Msg("Marking last message in chat as read for receipt targeting unknown message")
}
targetMessage = lastMessage
}
log = log.With().Str("message_id", targetMessage.ID).Logger()
err = user.Client.Messages.MarkRead(portal.ID, targetMessage.ID)
if err != nil {
log.Err(err).Msg("Failed to mark message as read")
} else {
log.Debug().Msg("Marked message as read after Matrix read receipt")
}
}
func (portal *Portal) HandleMatrixReaction(sender *User, evt *event.Event) { func (portal *Portal) HandleMatrixReaction(sender *User, evt *event.Event) {
err := portal.handleMatrixReaction(sender, evt) err := portal.handleMatrixReaction(sender, evt)
go portal.sendMessageMetrics(evt, err, "Error sending", nil) go portal.sendMessageMetrics(evt, err, "Error sending", nil)

View file

@ -576,6 +576,7 @@ func (user *User) syncConversation(v *binary.Conversation) {
default: default:
portal.UpdateMetadata(user, v) portal.UpdateMetadata(user, v)
portal.missedForwardBackfill(user, time.UnixMicro(v.LastMessageTimestamp), v.LatestMessageID, !v.GetUnread()) portal.missedForwardBackfill(user, time.UnixMicro(v.LastMessageTimestamp), v.LatestMessageID, !v.GetUnread())
// TODO sync read status if there was nothing backfilled
} }
} else if updateType == binary.ConvUpdateTypes_UNARCHIVED || updateType == binary.ConvUpdateTypes_ARCHIVED { } else if updateType == binary.ConvUpdateTypes_UNARCHIVED || updateType == binary.ConvUpdateTypes_ARCHIVED {
err := portal.CreateMatrixRoom(user, v) err := portal.CreateMatrixRoom(user, v)