mirror of
				https://github.com/usememos/memos.git
				synced 2025-06-05 22:09:59 +02:00 
			
		
		
		
	feat: add version update inbox message
This commit is contained in:
		@@ -49,5 +49,10 @@ func convertActivityPayloadFromStore(payload *storepb.ActivityPayload) *apiv2pb.
 | 
			
		||||
			RelatedMemoId: payload.MemoComment.RelatedMemoId,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if payload.VersionUpdate != nil {
 | 
			
		||||
		v2Payload.VersionUpdate = &apiv2pb.ActivityVersionUpdatePayload{
 | 
			
		||||
			Version: payload.VersionUpdate.Version,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return v2Payload
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -32,8 +32,13 @@ message ActivityMemoCommentPayload {
 | 
			
		||||
  int32 related_memo_id = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ActivityVersionUpdatePayload {
 | 
			
		||||
  string version = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ActivityPayload {
 | 
			
		||||
  ActivityMemoCommentPayload memo_comment = 1;
 | 
			
		||||
  ActivityVersionUpdatePayload version_update = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message GetActivityRequest {
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@ message Inbox {
 | 
			
		||||
  enum Type {
 | 
			
		||||
    TYPE_UNSPECIFIED = 0;
 | 
			
		||||
    TYPE_MEMO_COMMENT = 1;
 | 
			
		||||
    TYPE_VERSION_UPDATE = 2;
 | 
			
		||||
  }
 | 
			
		||||
  Type type = 6;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
    - [Activity](#memos-api-v2-Activity)
 | 
			
		||||
    - [ActivityMemoCommentPayload](#memos-api-v2-ActivityMemoCommentPayload)
 | 
			
		||||
    - [ActivityPayload](#memos-api-v2-ActivityPayload)
 | 
			
		||||
    - [ActivityVersionUpdatePayload](#memos-api-v2-ActivityVersionUpdatePayload)
 | 
			
		||||
    - [GetActivityRequest](#memos-api-v2-GetActivityRequest)
 | 
			
		||||
    - [GetActivityResponse](#memos-api-v2-GetActivityResponse)
 | 
			
		||||
  
 | 
			
		||||
@@ -155,6 +156,22 @@
 | 
			
		||||
| Field | Type | Label | Description |
 | 
			
		||||
| ----- | ---- | ----- | ----------- |
 | 
			
		||||
| memo_comment | [ActivityMemoCommentPayload](#memos-api-v2-ActivityMemoCommentPayload) |  |  |
 | 
			
		||||
| version_update | [ActivityVersionUpdatePayload](#memos-api-v2-ActivityVersionUpdatePayload) |  |  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<a name="memos-api-v2-ActivityVersionUpdatePayload"></a>
 | 
			
		||||
 | 
			
		||||
### ActivityVersionUpdatePayload
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| Field | Type | Label | Description |
 | 
			
		||||
| ----- | ---- | ----- | ----------- |
 | 
			
		||||
| version | [string](#string) |  |  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -377,6 +394,7 @@
 | 
			
		||||
| ---- | ------ | ----------- |
 | 
			
		||||
| TYPE_UNSPECIFIED | 0 |  |
 | 
			
		||||
| TYPE_MEMO_COMMENT | 1 |  |
 | 
			
		||||
| TYPE_VERSION_UPDATE | 2 |  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
@@ -164,18 +164,66 @@ func (x *ActivityMemoCommentPayload) GetRelatedMemoId() int32 {
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ActivityVersionUpdatePayload struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityVersionUpdatePayload) Reset() {
 | 
			
		||||
	*x = ActivityVersionUpdatePayload{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[2]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityVersionUpdatePayload) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*ActivityVersionUpdatePayload) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityVersionUpdatePayload) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[2]
 | 
			
		||||
	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 ActivityVersionUpdatePayload.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*ActivityVersionUpdatePayload) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityVersionUpdatePayload) GetVersion() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Version
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ActivityPayload struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	MemoComment *ActivityMemoCommentPayload `protobuf:"bytes,1,opt,name=memo_comment,json=memoComment,proto3" json:"memo_comment,omitempty"`
 | 
			
		||||
	MemoComment   *ActivityMemoCommentPayload   `protobuf:"bytes,1,opt,name=memo_comment,json=memoComment,proto3" json:"memo_comment,omitempty"`
 | 
			
		||||
	VersionUpdate *ActivityVersionUpdatePayload `protobuf:"bytes,2,opt,name=version_update,json=versionUpdate,proto3" json:"version_update,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityPayload) Reset() {
 | 
			
		||||
	*x = ActivityPayload{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[2]
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[3]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
@@ -188,7 +236,7 @@ func (x *ActivityPayload) String() string {
 | 
			
		||||
func (*ActivityPayload) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityPayload) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[2]
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
@@ -201,7 +249,7 @@ func (x *ActivityPayload) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use ActivityPayload.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*ActivityPayload) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{2}
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityPayload) GetMemoComment() *ActivityMemoCommentPayload {
 | 
			
		||||
@@ -211,6 +259,13 @@ func (x *ActivityPayload) GetMemoComment() *ActivityMemoCommentPayload {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ActivityPayload) GetVersionUpdate() *ActivityVersionUpdatePayload {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.VersionUpdate
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetActivityRequest struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
@@ -222,7 +277,7 @@ type GetActivityRequest struct {
 | 
			
		||||
func (x *GetActivityRequest) Reset() {
 | 
			
		||||
	*x = GetActivityRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[3]
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[4]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
@@ -235,7 +290,7 @@ func (x *GetActivityRequest) String() string {
 | 
			
		||||
func (*GetActivityRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetActivityRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[3]
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
@@ -248,7 +303,7 @@ func (x *GetActivityRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use GetActivityRequest.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*GetActivityRequest) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{3}
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetActivityRequest) GetId() int32 {
 | 
			
		||||
@@ -269,7 +324,7 @@ type GetActivityResponse struct {
 | 
			
		||||
func (x *GetActivityResponse) Reset() {
 | 
			
		||||
	*x = GetActivityResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[4]
 | 
			
		||||
		mi := &file_api_v2_activity_service_proto_msgTypes[5]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
@@ -282,7 +337,7 @@ func (x *GetActivityResponse) String() string {
 | 
			
		||||
func (*GetActivityResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetActivityResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[4]
 | 
			
		||||
	mi := &file_api_v2_activity_service_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
@@ -295,7 +350,7 @@ func (x *GetActivityResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use GetActivityResponse.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*GetActivityResponse) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{4}
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescGZIP(), []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetActivityResponse) GetActivity() *Activity {
 | 
			
		||||
@@ -334,39 +389,48 @@ var file_api_v2_activity_service_proto_rawDesc = []byte{
 | 
			
		||||
	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x49, 0x64, 0x12,
 | 
			
		||||
	0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x5f,
 | 
			
		||||
	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76,
 | 
			
		||||
	0x69, 0x74, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x6d, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
 | 
			
		||||
	0x32, 0x28, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
 | 
			
		||||
	0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d,
 | 
			
		||||
	0x65, 0x6e, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f,
 | 
			
		||||
	0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x63,
 | 
			
		||||
	0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a,
 | 
			
		||||
	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x49, 0x0a,
 | 
			
		||||
	0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
 | 
			
		||||
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x08,
 | 
			
		||||
	0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x32, 0x7d, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69,
 | 
			
		||||
	0x76, 0x69, 0x74, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0b, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x20, 0x2e, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x49, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x41, 0x63, 0x74, 0x69, 0x76,
 | 
			
		||||
	0x69, 0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
 | 
			
		||||
	0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
 | 
			
		||||
	0x6e, 0x22, 0xb1, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x61,
 | 
			
		||||
	0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x63, 0x6f,
 | 
			
		||||
	0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6d, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76,
 | 
			
		||||
	0x69, 0x74, 0x79, 0x4d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61,
 | 
			
		||||
	0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
 | 
			
		||||
	0x6e, 0x74, 0x12, 0x51, 0x0a, 0x0e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70,
 | 
			
		||||
	0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69,
 | 
			
		||||
	0x74, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50,
 | 
			
		||||
	0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x55,
 | 
			
		||||
	0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69,
 | 
			
		||||
	0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
 | 
			
		||||
	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x13, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x01,
 | 
			
		||||
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x08, 0x61, 0x63,
 | 
			
		||||
	0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x32, 0x7d, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69,
 | 
			
		||||
	0x74, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0b, 0x47, 0x65, 0x74,
 | 
			
		||||
	0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
 | 
			
		||||
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76,
 | 
			
		||||
	0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74,
 | 
			
		||||
	0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x41,
 | 
			
		||||
	0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
 | 
			
		||||
	0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x63, 0x74,
 | 
			
		||||
	0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e,
 | 
			
		||||
	0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x41, 0x63,
 | 
			
		||||
	0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
 | 
			
		||||
	0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
 | 
			
		||||
	0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f,
 | 
			
		||||
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32,
 | 
			
		||||
	0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d,
 | 
			
		||||
	0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
 | 
			
		||||
	0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41,
 | 
			
		||||
	0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82,
 | 
			
		||||
	0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76,
 | 
			
		||||
	0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x41, 0x63, 0x74, 0x69,
 | 
			
		||||
	0x76, 0x69, 0x74, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f,
 | 
			
		||||
	0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75,
 | 
			
		||||
	0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f,
 | 
			
		||||
	0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73,
 | 
			
		||||
	0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
 | 
			
		||||
	0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69,
 | 
			
		||||
	0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@@ -381,27 +445,29 @@ func file_api_v2_activity_service_proto_rawDescGZIP() []byte {
 | 
			
		||||
	return file_api_v2_activity_service_proto_rawDescData
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var file_api_v2_activity_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
 | 
			
		||||
var file_api_v2_activity_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
 | 
			
		||||
var file_api_v2_activity_service_proto_goTypes = []interface{}{
 | 
			
		||||
	(*Activity)(nil),                   // 0: memos.api.v2.Activity
 | 
			
		||||
	(*ActivityMemoCommentPayload)(nil), // 1: memos.api.v2.ActivityMemoCommentPayload
 | 
			
		||||
	(*ActivityPayload)(nil),            // 2: memos.api.v2.ActivityPayload
 | 
			
		||||
	(*GetActivityRequest)(nil),         // 3: memos.api.v2.GetActivityRequest
 | 
			
		||||
	(*GetActivityResponse)(nil),        // 4: memos.api.v2.GetActivityResponse
 | 
			
		||||
	(*timestamppb.Timestamp)(nil),      // 5: google.protobuf.Timestamp
 | 
			
		||||
	(*Activity)(nil),                     // 0: memos.api.v2.Activity
 | 
			
		||||
	(*ActivityMemoCommentPayload)(nil),   // 1: memos.api.v2.ActivityMemoCommentPayload
 | 
			
		||||
	(*ActivityVersionUpdatePayload)(nil), // 2: memos.api.v2.ActivityVersionUpdatePayload
 | 
			
		||||
	(*ActivityPayload)(nil),              // 3: memos.api.v2.ActivityPayload
 | 
			
		||||
	(*GetActivityRequest)(nil),           // 4: memos.api.v2.GetActivityRequest
 | 
			
		||||
	(*GetActivityResponse)(nil),          // 5: memos.api.v2.GetActivityResponse
 | 
			
		||||
	(*timestamppb.Timestamp)(nil),        // 6: google.protobuf.Timestamp
 | 
			
		||||
}
 | 
			
		||||
var file_api_v2_activity_service_proto_depIdxs = []int32{
 | 
			
		||||
	5, // 0: memos.api.v2.Activity.create_time:type_name -> google.protobuf.Timestamp
 | 
			
		||||
	2, // 1: memos.api.v2.Activity.payload:type_name -> memos.api.v2.ActivityPayload
 | 
			
		||||
	6, // 0: memos.api.v2.Activity.create_time:type_name -> google.protobuf.Timestamp
 | 
			
		||||
	3, // 1: memos.api.v2.Activity.payload:type_name -> memos.api.v2.ActivityPayload
 | 
			
		||||
	1, // 2: memos.api.v2.ActivityPayload.memo_comment:type_name -> memos.api.v2.ActivityMemoCommentPayload
 | 
			
		||||
	0, // 3: memos.api.v2.GetActivityResponse.activity:type_name -> memos.api.v2.Activity
 | 
			
		||||
	3, // 4: memos.api.v2.ActivityService.GetActivity:input_type -> memos.api.v2.GetActivityRequest
 | 
			
		||||
	4, // 5: memos.api.v2.ActivityService.GetActivity:output_type -> memos.api.v2.GetActivityResponse
 | 
			
		||||
	5, // [5:6] is the sub-list for method output_type
 | 
			
		||||
	4, // [4:5] is the sub-list for method input_type
 | 
			
		||||
	4, // [4:4] is the sub-list for extension type_name
 | 
			
		||||
	4, // [4:4] is the sub-list for extension extendee
 | 
			
		||||
	0, // [0:4] is the sub-list for field type_name
 | 
			
		||||
	2, // 3: memos.api.v2.ActivityPayload.version_update:type_name -> memos.api.v2.ActivityVersionUpdatePayload
 | 
			
		||||
	0, // 4: memos.api.v2.GetActivityResponse.activity:type_name -> memos.api.v2.Activity
 | 
			
		||||
	4, // 5: memos.api.v2.ActivityService.GetActivity:input_type -> memos.api.v2.GetActivityRequest
 | 
			
		||||
	5, // 6: memos.api.v2.ActivityService.GetActivity:output_type -> memos.api.v2.GetActivityResponse
 | 
			
		||||
	6, // [6:7] is the sub-list for method output_type
 | 
			
		||||
	5, // [5:6] is the sub-list for method input_type
 | 
			
		||||
	5, // [5:5] is the sub-list for extension type_name
 | 
			
		||||
	5, // [5:5] is the sub-list for extension extendee
 | 
			
		||||
	0, // [0:5] is the sub-list for field type_name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() { file_api_v2_activity_service_proto_init() }
 | 
			
		||||
@@ -435,7 +501,7 @@ func file_api_v2_activity_service_proto_init() {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_api_v2_activity_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*ActivityPayload); i {
 | 
			
		||||
			switch v := v.(*ActivityVersionUpdatePayload); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
@@ -447,7 +513,7 @@ func file_api_v2_activity_service_proto_init() {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_api_v2_activity_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*GetActivityRequest); i {
 | 
			
		||||
			switch v := v.(*ActivityPayload); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
@@ -459,6 +525,18 @@ func file_api_v2_activity_service_proto_init() {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_api_v2_activity_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*GetActivityRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_api_v2_activity_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
 | 
			
		||||
			switch v := v.(*GetActivityResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
@@ -477,7 +555,7 @@ func file_api_v2_activity_service_proto_init() {
 | 
			
		||||
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
			
		||||
			RawDescriptor: file_api_v2_activity_service_proto_rawDesc,
 | 
			
		||||
			NumEnums:      0,
 | 
			
		||||
			NumMessages:   5,
 | 
			
		||||
			NumMessages:   6,
 | 
			
		||||
			NumExtensions: 0,
 | 
			
		||||
			NumServices:   1,
 | 
			
		||||
		},
 | 
			
		||||
 
 | 
			
		||||
@@ -75,8 +75,9 @@ func (Inbox_Status) EnumDescriptor() ([]byte, []int) {
 | 
			
		||||
type Inbox_Type int32
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	Inbox_TYPE_UNSPECIFIED  Inbox_Type = 0
 | 
			
		||||
	Inbox_TYPE_MEMO_COMMENT Inbox_Type = 1
 | 
			
		||||
	Inbox_TYPE_UNSPECIFIED    Inbox_Type = 0
 | 
			
		||||
	Inbox_TYPE_MEMO_COMMENT   Inbox_Type = 1
 | 
			
		||||
	Inbox_TYPE_VERSION_UPDATE Inbox_Type = 2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Enum value maps for Inbox_Type.
 | 
			
		||||
@@ -84,10 +85,12 @@ var (
 | 
			
		||||
	Inbox_Type_name = map[int32]string{
 | 
			
		||||
		0: "TYPE_UNSPECIFIED",
 | 
			
		||||
		1: "TYPE_MEMO_COMMENT",
 | 
			
		||||
		2: "TYPE_VERSION_UPDATE",
 | 
			
		||||
	}
 | 
			
		||||
	Inbox_Type_value = map[string]int32{
 | 
			
		||||
		"TYPE_UNSPECIFIED":  0,
 | 
			
		||||
		"TYPE_MEMO_COMMENT": 1,
 | 
			
		||||
		"TYPE_UNSPECIFIED":    0,
 | 
			
		||||
		"TYPE_MEMO_COMMENT":   1,
 | 
			
		||||
		"TYPE_VERSION_UPDATE": 2,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -514,7 +517,7 @@ var file_api_v2_inbox_service_proto_rawDesc = []byte{
 | 
			
		||||
	0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
 | 
			
		||||
	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, 0x03, 0x0a, 0x05, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x12, 0x12,
 | 
			
		||||
	0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x03, 0x0a, 0x05, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x12, 0x12,
 | 
			
		||||
	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
 | 
			
		||||
	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,
 | 
			
		||||
@@ -535,69 +538,71 @@ var file_api_v2_inbox_service_proto_rawDesc = []byte{
 | 
			
		||||
	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f,
 | 
			
		||||
	0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a,
 | 
			
		||||
	0x06, 0x55, 0x4e, 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x52, 0x43,
 | 
			
		||||
	0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x22, 0x33, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12,
 | 
			
		||||
	0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x22, 0x4c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12,
 | 
			
		||||
	0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
 | 
			
		||||
	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45,
 | 
			
		||||
	0x4d, 0x4f, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x42, 0x0e, 0x0a, 0x0c,
 | 
			
		||||
	0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x12,
 | 
			
		||||
	0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
 | 
			
		||||
	0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x44, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a,
 | 
			
		||||
	0x07, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13,
 | 
			
		||||
	0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x52, 0x07, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x12,
 | 
			
		||||
	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32,
 | 
			
		||||
	0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x12, 0x3b, 0x0a,
 | 
			
		||||
	0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 | 
			
		||||
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a,
 | 
			
		||||
	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x40, 0x0a, 0x13, 0x55, 0x70,
 | 
			
		||||
	0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x65, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
 | 
			
		||||
	0x32, 0x13, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
 | 
			
		||||
	0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x22, 0x28, 0x0a, 0x12,
 | 
			
		||||
	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
 | 
			
		||||
	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
 | 
			
		||||
	0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf9, 0x02,
 | 
			
		||||
	0x0a, 0x0c, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b,
 | 
			
		||||
	0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x12, 0x20, 0x2e,
 | 
			
		||||
	0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73,
 | 
			
		||||
	0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 | 
			
		||||
	0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c,
 | 
			
		||||
	0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x0b,
 | 
			
		||||
	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x12, 0x20, 0x2e, 0x6d, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
 | 
			
		||||
	0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
 | 
			
		||||
	0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64,
 | 
			
		||||
	0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x22, 0x2e, 0xda, 0x41, 0x11, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74,
 | 
			
		||||
	0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x05, 0x69, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x32, 0x0b, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73,
 | 
			
		||||
	0x12, 0x77, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x12,
 | 
			
		||||
	0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x44,
 | 
			
		||||
	0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32,
 | 
			
		||||
	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4,
 | 
			
		||||
	0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x69,
 | 
			
		||||
	0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x42, 0xa9, 0x01, 0x0a, 0x10, 0x63, 0x6f,
 | 
			
		||||
	0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x11,
 | 
			
		||||
	0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74,
 | 
			
		||||
	0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
 | 
			
		||||
	0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65,
 | 
			
		||||
	0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f,
 | 
			
		||||
	0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
 | 
			
		||||
	0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70,
 | 
			
		||||
	0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x4d, 0x4f, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13,
 | 
			
		||||
	0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44,
 | 
			
		||||
	0x41, 0x54, 0x45, 0x10, 0x02, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69,
 | 
			
		||||
	0x74, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62,
 | 
			
		||||
	0x6f, 0x78, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75,
 | 
			
		||||
	0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22,
 | 
			
		||||
	0x44, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65,
 | 
			
		||||
	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x69, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49,
 | 
			
		||||
	0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x69,
 | 
			
		||||
	0x6e, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52,
 | 
			
		||||
	0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
 | 
			
		||||
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69,
 | 
			
		||||
	0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d,
 | 
			
		||||
	0x61, 0x73, 0x6b, 0x22, 0x40, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62,
 | 
			
		||||
	0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65, 0x6d, 0x6f,
 | 
			
		||||
	0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x05,
 | 
			
		||||
	0x69, 0x6e, 0x62, 0x6f, 0x78, 0x22, 0x28, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49,
 | 
			
		||||
	0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
 | 
			
		||||
	0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf9, 0x02, 0x0a, 0x0c, 0x49, 0x6e, 0x62, 0x6f, 0x78,
 | 
			
		||||
	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x49,
 | 
			
		||||
	0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x65,
 | 
			
		||||
	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
 | 
			
		||||
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x62, 0x6f,
 | 
			
		||||
	0x78, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4,
 | 
			
		||||
	0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x62,
 | 
			
		||||
	0x6f, 0x78, 0x65, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49,
 | 
			
		||||
	0x6e, 0x62, 0x6f, 0x78, 0x12, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f,
 | 
			
		||||
	0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0xda, 0x41, 0x11, 0x69, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82,
 | 
			
		||||
	0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x32, 0x0b, 0x2f, 0x76,
 | 
			
		||||
	0x32, 0x2f, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x12, 0x77, 0x0a, 0x0b, 0x44, 0x65, 0x6c,
 | 
			
		||||
	0x65, 0x74, 0x65, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x12, 0x20, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
 | 
			
		||||
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e,
 | 
			
		||||
	0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x65, 0x6d,
 | 
			
		||||
	0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
 | 
			
		||||
	0x49, 0x6e, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0xda,
 | 
			
		||||
	0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x2a, 0x14, 0x2f, 0x76,
 | 
			
		||||
	0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x2f,
 | 
			
		||||
	0x2a, 0x7d, 0x42, 0xa9, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
 | 
			
		||||
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x11, 0x49, 0x6e, 0x62, 0x6f, 0x78, 0x53, 0x65,
 | 
			
		||||
	0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69,
 | 
			
		||||
	0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f,
 | 
			
		||||
	0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65,
 | 
			
		||||
	0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02,
 | 
			
		||||
	0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69,
 | 
			
		||||
	0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c,
 | 
			
		||||
	0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56,
 | 
			
		||||
	0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e,
 | 
			
		||||
	0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06,
 | 
			
		||||
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										105
									
								
								web/src/components/Inbox/VersionUpdateMessage.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								web/src/components/Inbox/VersionUpdateMessage.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
			
		||||
import { Tooltip } from "@mui/joy";
 | 
			
		||||
import classNames from "classnames";
 | 
			
		||||
import { useEffect, useState } from "react";
 | 
			
		||||
import toast from "react-hot-toast";
 | 
			
		||||
import { activityServiceClient } from "@/grpcweb";
 | 
			
		||||
import { useInboxStore } from "@/store/v1";
 | 
			
		||||
import { Activity } from "@/types/proto/api/v2/activity_service";
 | 
			
		||||
import { Inbox, Inbox_Status } from "@/types/proto/api/v2/inbox_service";
 | 
			
		||||
import { useTranslate } from "@/utils/i18n";
 | 
			
		||||
import Icon from "../Icon";
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
  inbox: Inbox;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const VersionUpdateMessage = ({ inbox }: Props) => {
 | 
			
		||||
  const t = useTranslate();
 | 
			
		||||
  const inboxStore = useInboxStore();
 | 
			
		||||
  const [activity, setActivity] = useState<Activity | undefined>(undefined);
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    if (!inbox.activityId) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    activityServiceClient
 | 
			
		||||
      .getActivity({
 | 
			
		||||
        id: inbox.activityId,
 | 
			
		||||
      })
 | 
			
		||||
      .then(({ activity }) => {
 | 
			
		||||
        console.log("activity", activity);
 | 
			
		||||
        setActivity(activity);
 | 
			
		||||
      });
 | 
			
		||||
  }, [inbox.activityId]);
 | 
			
		||||
 | 
			
		||||
  const handleNavigate = () => {
 | 
			
		||||
    if (!activity?.payload?.versionUpdate?.version) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    window.open(`https://github.com/usememos/memos/releases/tag/v${activity?.payload?.versionUpdate?.version}`);
 | 
			
		||||
    if (inbox.status === Inbox_Status.UNREAD) {
 | 
			
		||||
      handleArchiveMessage(true);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const handleArchiveMessage = async (silence = false) => {
 | 
			
		||||
    await inboxStore.updateInbox(
 | 
			
		||||
      {
 | 
			
		||||
        name: inbox.name,
 | 
			
		||||
        status: Inbox_Status.ARCHIVED,
 | 
			
		||||
      },
 | 
			
		||||
      ["status"]
 | 
			
		||||
    );
 | 
			
		||||
    if (!silence) {
 | 
			
		||||
      toast.success("Archived");
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="w-full flex flex-row justify-start items-start gap-3">
 | 
			
		||||
      <div
 | 
			
		||||
        className={classNames(
 | 
			
		||||
          "shrink-0 mt-2 p-2 rounded-full border",
 | 
			
		||||
          inbox.status === Inbox_Status.UNREAD
 | 
			
		||||
            ? "border-green-600 text-green-600 bg-blue-50 dark:bg-zinc-800"
 | 
			
		||||
            : "border-gray-400 text-gray-400 bg-gray-50 dark:bg-zinc-800"
 | 
			
		||||
        )}
 | 
			
		||||
      >
 | 
			
		||||
        <Tooltip title={"Comment"} placement="bottom">
 | 
			
		||||
          <Icon.ArrowUp className="w-4 sm:w-5 h-auto" />
 | 
			
		||||
        </Tooltip>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div
 | 
			
		||||
        className={classNames(
 | 
			
		||||
          "border w-full p-3 px-4 rounded-lg flex flex-col justify-start items-start gap-2 dark:border-zinc-800 hover:bg-gray-100 dark:hover:bg-zinc-800",
 | 
			
		||||
          inbox.status !== Inbox_Status.UNREAD && "opacity-60"
 | 
			
		||||
        )}
 | 
			
		||||
      >
 | 
			
		||||
        <div className="w-full flex flex-row justify-between items-center">
 | 
			
		||||
          <span className="text-xs text-gray-500">{inbox.createTime?.toLocaleString()}</span>
 | 
			
		||||
          <div>
 | 
			
		||||
            {inbox.status === Inbox_Status.UNREAD && (
 | 
			
		||||
              <Tooltip title={t("common.archive")} placement="top">
 | 
			
		||||
                <Icon.Inbox
 | 
			
		||||
                  className="w-4 h-auto cursor-pointer text-gray-400 hover:text-blue-600"
 | 
			
		||||
                  onClick={() => handleArchiveMessage()}
 | 
			
		||||
                />
 | 
			
		||||
              </Tooltip>
 | 
			
		||||
            )}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <p
 | 
			
		||||
          className="text-base leading-tight cursor-pointer text-gray-500 dark:text-gray-400 hover:underline hover:text-blue-600"
 | 
			
		||||
          onClick={handleNavigate}
 | 
			
		||||
        >
 | 
			
		||||
          {t("inbox.version-update", {
 | 
			
		||||
            version: activity?.payload?.versionUpdate?.version,
 | 
			
		||||
          })}
 | 
			
		||||
        </p>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default VersionUpdateMessage;
 | 
			
		||||
@@ -370,6 +370,7 @@
 | 
			
		||||
    "password-login-disabled": "Can't remove last identity provider when password login is disabled"
 | 
			
		||||
  },
 | 
			
		||||
  "inbox": {
 | 
			
		||||
    "memo-comment": "{{user}} has a comment on your {{memo}}."
 | 
			
		||||
    "memo-comment": "{{user}} has a comment on your {{memo}}.",
 | 
			
		||||
    "version-update": "New version {{version}} is available now!"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ import { useEffect } from "react";
 | 
			
		||||
import Empty from "@/components/Empty";
 | 
			
		||||
import Icon from "@/components/Icon";
 | 
			
		||||
import MemoCommentMessage from "@/components/Inbox/MemoCommentMessage";
 | 
			
		||||
import VersionUpdateMessage from "@/components/Inbox/VersionUpdateMessage";
 | 
			
		||||
import MobileHeader from "@/components/MobileHeader";
 | 
			
		||||
import { useInboxStore } from "@/store/v1";
 | 
			
		||||
import { Inbox_Type } from "@/types/proto/api/v2/inbox_service";
 | 
			
		||||
@@ -38,6 +39,8 @@ const Inboxes = () => {
 | 
			
		||||
            {inboxes.map((inbox) => {
 | 
			
		||||
              if (inbox.type === Inbox_Type.TYPE_MEMO_COMMENT) {
 | 
			
		||||
                return <MemoCommentMessage key={`${inbox.name}-${inbox.status}`} inbox={inbox} />;
 | 
			
		||||
              } else if (inbox.type === Inbox_Type.TYPE_VERSION_UPDATE) {
 | 
			
		||||
                return <VersionUpdateMessage key={`${inbox.name}-${inbox.status}`} inbox={inbox} />;
 | 
			
		||||
              }
 | 
			
		||||
              return undefined;
 | 
			
		||||
            })}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user