diff --git a/Spotify/metadata.pb.go b/Spotify/metadata.pb.go index 3af7899..88877f0 100644 --- a/Spotify/metadata.pb.go +++ b/Spotify/metadata.pb.go @@ -1,16 +1,24 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: metadata.proto +// versions: +// protoc-gen-go v1.27.1 +// protoc v3.19.4 +// source: Spotify/metadata.proto package Spotify -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) type Album_Type int32 @@ -21,36 +29,58 @@ const ( Album_EP Album_Type = 4 ) -var Album_Type_name = map[int32]string{ - 1: "ALBUM", - 2: "SINGLE", - 3: "COMPILATION", - 4: "EP", -} -var Album_Type_value = map[string]int32{ - "ALBUM": 1, - "SINGLE": 2, - "COMPILATION": 3, - "EP": 4, -} +// Enum value maps for Album_Type. +var ( + Album_Type_name = map[int32]string{ + 1: "ALBUM", + 2: "SINGLE", + 3: "COMPILATION", + 4: "EP", + } + Album_Type_value = map[string]int32{ + "ALBUM": 1, + "SINGLE": 2, + "COMPILATION": 3, + "EP": 4, + } +) func (x Album_Type) Enum() *Album_Type { p := new(Album_Type) *p = x return p } + func (x Album_Type) String() string { - return proto.EnumName(Album_Type_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Album_Type) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[0].Descriptor() +} + +func (Album_Type) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[0] +} + +func (x Album_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *Album_Type) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Album_Type_value, data, "Album_Type") + +// Deprecated: Do not use. +func (x *Album_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = Album_Type(value) + *x = Album_Type(num) return nil } -func (Album_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{5, 0} } + +// Deprecated: Use Album_Type.Descriptor instead. +func (Album_Type) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{5, 0} +} type Image_Size int32 @@ -61,36 +91,58 @@ const ( Image_XLARGE Image_Size = 3 ) -var Image_Size_name = map[int32]string{ - 0: "DEFAULT", - 1: "SMALL", - 2: "LARGE", - 3: "XLARGE", -} -var Image_Size_value = map[string]int32{ - "DEFAULT": 0, - "SMALL": 1, - "LARGE": 2, - "XLARGE": 3, -} +// Enum value maps for Image_Size. +var ( + Image_Size_name = map[int32]string{ + 0: "DEFAULT", + 1: "SMALL", + 2: "LARGE", + 3: "XLARGE", + } + Image_Size_value = map[string]int32{ + "DEFAULT": 0, + "SMALL": 1, + "LARGE": 2, + "XLARGE": 3, + } +) func (x Image_Size) Enum() *Image_Size { p := new(Image_Size) *p = x return p } + func (x Image_Size) String() string { - return proto.EnumName(Image_Size_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (x *Image_Size) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Image_Size_value, data, "Image_Size") + +func (Image_Size) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[1].Descriptor() +} + +func (Image_Size) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[1] +} + +func (x Image_Size) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Image_Size) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = Image_Size(value) + *x = Image_Size(num) return nil } -func (Image_Size) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{7, 0} } + +// Deprecated: Use Image_Size.Descriptor instead. +func (Image_Size) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{7, 0} +} type Copyright_Type int32 @@ -99,1050 +151,3157 @@ const ( Copyright_C Copyright_Type = 1 ) -var Copyright_Type_name = map[int32]string{ - 0: "P", - 1: "C", -} -var Copyright_Type_value = map[string]int32{ - "P": 0, - "C": 1, -} +// Enum value maps for Copyright_Type. +var ( + Copyright_Type_name = map[int32]string{ + 0: "P", + 1: "C", + } + Copyright_Type_value = map[string]int32{ + "P": 0, + "C": 1, + } +) func (x Copyright_Type) Enum() *Copyright_Type { p := new(Copyright_Type) *p = x return p } + func (x Copyright_Type) String() string { - return proto.EnumName(Copyright_Type_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Copyright_Type) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[2].Descriptor() +} + +func (Copyright_Type) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[2] +} + +func (x Copyright_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Copyright_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Copyright_Type(num) + return nil +} + +// Deprecated: Use Copyright_Type.Descriptor instead. +func (Copyright_Type) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{11, 0} +} + +type Restriction_Catalogue int32 + +const ( + Restriction_AD Restriction_Catalogue = 0 + Restriction_SUBSCRIPTION Restriction_Catalogue = 1 + Restriction_CATALOGUE_ALL Restriction_Catalogue = 2 + Restriction_SHUFFLE Restriction_Catalogue = 3 + Restriction_COMMERCIAL Restriction_Catalogue = 4 +) + +// Enum value maps for Restriction_Catalogue. +var ( + Restriction_Catalogue_name = map[int32]string{ + 0: "AD", + 1: "SUBSCRIPTION", + 2: "CATALOGUE_ALL", + 3: "SHUFFLE", + 4: "COMMERCIAL", + } + Restriction_Catalogue_value = map[string]int32{ + "AD": 0, + "SUBSCRIPTION": 1, + "CATALOGUE_ALL": 2, + "SHUFFLE": 3, + "COMMERCIAL": 4, + } +) + +func (x Restriction_Catalogue) Enum() *Restriction_Catalogue { + p := new(Restriction_Catalogue) + *p = x + return p +} + +func (x Restriction_Catalogue) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Restriction_Catalogue) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[3].Descriptor() +} + +func (Restriction_Catalogue) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[3] +} + +func (x Restriction_Catalogue) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Restriction_Catalogue) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Restriction_Catalogue(num) + return nil +} + +// Deprecated: Use Restriction_Catalogue.Descriptor instead. +func (Restriction_Catalogue) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{12, 0} +} + +type Restriction_Type int32 + +const ( + Restriction_STREAMING Restriction_Type = 0 +) + +// Enum value maps for Restriction_Type. +var ( + Restriction_Type_name = map[int32]string{ + 0: "STREAMING", + } + Restriction_Type_value = map[string]int32{ + "STREAMING": 0, + } +) + +func (x Restriction_Type) Enum() *Restriction_Type { + p := new(Restriction_Type) + *p = x + return p +} + +func (x Restriction_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Restriction_Type) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[4].Descriptor() +} + +func (Restriction_Type) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[4] +} + +func (x Restriction_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Restriction_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Restriction_Type(num) + return nil +} + +// Deprecated: Use Restriction_Type.Descriptor instead. +func (Restriction_Type) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{12, 1} +} + +type AudioFile_Format int32 + +const ( + AudioFile_OGG_VORBIS_96 AudioFile_Format = 0 + AudioFile_OGG_VORBIS_160 AudioFile_Format = 1 + AudioFile_OGG_VORBIS_320 AudioFile_Format = 2 + AudioFile_MP3_256 AudioFile_Format = 3 + AudioFile_MP3_320 AudioFile_Format = 4 + AudioFile_MP3_160 AudioFile_Format = 5 + AudioFile_MP3_96 AudioFile_Format = 6 + AudioFile_MP3_160_ENC AudioFile_Format = 7 + // v4 + // AAC_24 = 0x8; + // AAC_48 = 0x9; + AudioFile_MP4_128_DUAL AudioFile_Format = 8 + AudioFile_OTHER3 AudioFile_Format = 9 + AudioFile_AAC_160 AudioFile_Format = 10 + AudioFile_AAC_320 AudioFile_Format = 11 + AudioFile_MP4_128 AudioFile_Format = 12 + AudioFile_OTHER5 AudioFile_Format = 13 +) + +// Enum value maps for AudioFile_Format. +var ( + AudioFile_Format_name = map[int32]string{ + 0: "OGG_VORBIS_96", + 1: "OGG_VORBIS_160", + 2: "OGG_VORBIS_320", + 3: "MP3_256", + 4: "MP3_320", + 5: "MP3_160", + 6: "MP3_96", + 7: "MP3_160_ENC", + 8: "MP4_128_DUAL", + 9: "OTHER3", + 10: "AAC_160", + 11: "AAC_320", + 12: "MP4_128", + 13: "OTHER5", + } + AudioFile_Format_value = map[string]int32{ + "OGG_VORBIS_96": 0, + "OGG_VORBIS_160": 1, + "OGG_VORBIS_320": 2, + "MP3_256": 3, + "MP3_320": 4, + "MP3_160": 5, + "MP3_96": 6, + "MP3_160_ENC": 7, + "MP4_128_DUAL": 8, + "OTHER3": 9, + "AAC_160": 10, + "AAC_320": 11, + "MP4_128": 12, + "OTHER5": 13, + } +) + +func (x AudioFile_Format) Enum() *AudioFile_Format { + p := new(AudioFile_Format) + *p = x + return p +} + +func (x AudioFile_Format) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AudioFile_Format) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[5].Descriptor() +} + +func (AudioFile_Format) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[5] +} + +func (x AudioFile_Format) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AudioFile_Format) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AudioFile_Format(num) + return nil +} + +// Deprecated: Use AudioFile_Format.Descriptor instead. +func (AudioFile_Format) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{16, 0} +} + +type Show_MediaType int32 + +const ( + Show_MIXED Show_MediaType = 0 + Show_AUDIO Show_MediaType = 1 + Show_VIDEO Show_MediaType = 2 +) + +// Enum value maps for Show_MediaType. +var ( + Show_MediaType_name = map[int32]string{ + 0: "MIXED", + 1: "AUDIO", + 2: "VIDEO", + } + Show_MediaType_value = map[string]int32{ + "MIXED": 0, + "AUDIO": 1, + "VIDEO": 2, + } +) + +func (x Show_MediaType) Enum() *Show_MediaType { + p := new(Show_MediaType) + *p = x + return p +} + +func (x Show_MediaType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Show_MediaType) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[6].Descriptor() +} + +func (Show_MediaType) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[6] +} + +func (x Show_MediaType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Show_MediaType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Show_MediaType(num) + return nil +} + +// Deprecated: Use Show_MediaType.Descriptor instead. +func (Show_MediaType) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{18, 0} +} + +type Show_ConsumptionOrder int32 + +const ( + Show_SEQUENTIAL Show_ConsumptionOrder = 1 + Show_EPISODIC Show_ConsumptionOrder = 2 + Show_RECENT Show_ConsumptionOrder = 3 +) + +// Enum value maps for Show_ConsumptionOrder. +var ( + Show_ConsumptionOrder_name = map[int32]string{ + 1: "SEQUENTIAL", + 2: "EPISODIC", + 3: "RECENT", + } + Show_ConsumptionOrder_value = map[string]int32{ + "SEQUENTIAL": 1, + "EPISODIC": 2, + "RECENT": 3, + } +) + +func (x Show_ConsumptionOrder) Enum() *Show_ConsumptionOrder { + p := new(Show_ConsumptionOrder) + *p = x + return p } -func (x *Copyright_Type) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Copyright_Type_value, data, "Copyright_Type") + +func (x Show_ConsumptionOrder) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Show_ConsumptionOrder) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[7].Descriptor() +} + +func (Show_ConsumptionOrder) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[7] +} + +func (x Show_ConsumptionOrder) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Show_ConsumptionOrder) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Show_ConsumptionOrder(num) + return nil +} + +// Deprecated: Use Show_ConsumptionOrder.Descriptor instead. +func (Show_ConsumptionOrder) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{18, 1} +} + +type Show_PassthroughEnum int32 + +const ( + Show_UNKNOWN Show_PassthroughEnum = 0 + Show_NONE Show_PassthroughEnum = 1 + Show_ALLOWED Show_PassthroughEnum = 2 +) + +// Enum value maps for Show_PassthroughEnum. +var ( + Show_PassthroughEnum_name = map[int32]string{ + 0: "UNKNOWN", + 1: "NONE", + 2: "ALLOWED", + } + Show_PassthroughEnum_value = map[string]int32{ + "UNKNOWN": 0, + "NONE": 1, + "ALLOWED": 2, + } +) + +func (x Show_PassthroughEnum) Enum() *Show_PassthroughEnum { + p := new(Show_PassthroughEnum) + *p = x + return p +} + +func (x Show_PassthroughEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Show_PassthroughEnum) Descriptor() protoreflect.EnumDescriptor { + return file_Spotify_metadata_proto_enumTypes[8].Descriptor() +} + +func (Show_PassthroughEnum) Type() protoreflect.EnumType { + return &file_Spotify_metadata_proto_enumTypes[8] +} + +func (x Show_PassthroughEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Show_PassthroughEnum) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = Copyright_Type(value) + *x = Show_PassthroughEnum(num) + return nil +} + +// Deprecated: Use Show_PassthroughEnum.Descriptor instead. +func (Show_PassthroughEnum) EnumDescriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{18, 2} +} + +type TopTracks struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Country *string `protobuf:"bytes,1,opt,name=country" json:"country,omitempty"` + Track []*Track `protobuf:"bytes,2,rep,name=track" json:"track,omitempty"` +} + +func (x *TopTracks) Reset() { + *x = TopTracks{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TopTracks) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TopTracks) ProtoMessage() {} + +func (x *TopTracks) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[0] + 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 TopTracks.ProtoReflect.Descriptor instead. +func (*TopTracks) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{0} +} + +func (x *TopTracks) GetCountry() string { + if x != nil && x.Country != nil { + return *x.Country + } + return "" +} + +func (x *TopTracks) GetTrack() []*Track { + if x != nil { + return x.Track + } return nil } -func (Copyright_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{11, 0} } -type Restriction_Type int32 +type ActivityPeriod struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + StartYear *int32 `protobuf:"zigzag32,1,opt,name=start_year,json=startYear" json:"start_year,omitempty"` + EndYear *int32 `protobuf:"zigzag32,2,opt,name=end_year,json=endYear" json:"end_year,omitempty"` + Decade *int32 `protobuf:"zigzag32,3,opt,name=decade" json:"decade,omitempty"` +} + +func (x *ActivityPeriod) Reset() { + *x = ActivityPeriod{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActivityPeriod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivityPeriod) ProtoMessage() {} + +func (x *ActivityPeriod) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_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 ActivityPeriod.ProtoReflect.Descriptor instead. +func (*ActivityPeriod) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{1} +} + +func (x *ActivityPeriod) GetStartYear() int32 { + if x != nil && x.StartYear != nil { + return *x.StartYear + } + return 0 +} + +func (x *ActivityPeriod) GetEndYear() int32 { + if x != nil && x.EndYear != nil { + return *x.EndYear + } + return 0 +} + +func (x *ActivityPeriod) GetDecade() int32 { + if x != nil && x.Decade != nil { + return *x.Decade + } + return 0 +} + +type Artist struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Popularity *int32 `protobuf:"zigzag32,3,opt,name=popularity" json:"popularity,omitempty"` + TopTrack []*TopTracks `protobuf:"bytes,4,rep,name=top_track,json=topTrack" json:"top_track,omitempty"` + AlbumGroup []*AlbumGroup `protobuf:"bytes,5,rep,name=album_group,json=albumGroup" json:"album_group,omitempty"` + SingleGroup []*AlbumGroup `protobuf:"bytes,6,rep,name=single_group,json=singleGroup" json:"single_group,omitempty"` + CompilationGroup []*AlbumGroup `protobuf:"bytes,7,rep,name=compilation_group,json=compilationGroup" json:"compilation_group,omitempty"` + AppearsOnGroup []*AlbumGroup `protobuf:"bytes,8,rep,name=appears_on_group,json=appearsOnGroup" json:"appears_on_group,omitempty"` + Genre []string `protobuf:"bytes,9,rep,name=genre" json:"genre,omitempty"` + ExternalId []*ExternalId `protobuf:"bytes,10,rep,name=external_id,json=externalId" json:"external_id,omitempty"` + Portrait []*Image `protobuf:"bytes,11,rep,name=portrait" json:"portrait,omitempty"` + Biography []*Biography `protobuf:"bytes,12,rep,name=biography" json:"biography,omitempty"` + ActivityPeriod []*ActivityPeriod `protobuf:"bytes,13,rep,name=activity_period,json=activityPeriod" json:"activity_period,omitempty"` + Restriction []*Restriction `protobuf:"bytes,14,rep,name=restriction" json:"restriction,omitempty"` + Related []*Artist `protobuf:"bytes,15,rep,name=related" json:"related,omitempty"` + IsPortraitAlbumCover *bool `protobuf:"varint,16,opt,name=is_portrait_album_cover,json=isPortraitAlbumCover" json:"is_portrait_album_cover,omitempty"` + PortraitGroup *ImageGroup `protobuf:"bytes,17,opt,name=portrait_group,json=portraitGroup" json:"portrait_group,omitempty"` +} + +func (x *Artist) Reset() { + *x = Artist{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Artist) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Artist) ProtoMessage() {} + +func (x *Artist) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_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 Artist.ProtoReflect.Descriptor instead. +func (*Artist) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{2} +} + +func (x *Artist) GetGid() []byte { + if x != nil { + return x.Gid + } + return nil +} + +func (x *Artist) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *Artist) GetPopularity() int32 { + if x != nil && x.Popularity != nil { + return *x.Popularity + } + return 0 +} + +func (x *Artist) GetTopTrack() []*TopTracks { + if x != nil { + return x.TopTrack + } + return nil +} + +func (x *Artist) GetAlbumGroup() []*AlbumGroup { + if x != nil { + return x.AlbumGroup + } + return nil +} + +func (x *Artist) GetSingleGroup() []*AlbumGroup { + if x != nil { + return x.SingleGroup + } + return nil +} + +func (x *Artist) GetCompilationGroup() []*AlbumGroup { + if x != nil { + return x.CompilationGroup + } + return nil +} + +func (x *Artist) GetAppearsOnGroup() []*AlbumGroup { + if x != nil { + return x.AppearsOnGroup + } + return nil +} + +func (x *Artist) GetGenre() []string { + if x != nil { + return x.Genre + } + return nil +} + +func (x *Artist) GetExternalId() []*ExternalId { + if x != nil { + return x.ExternalId + } + return nil +} + +func (x *Artist) GetPortrait() []*Image { + if x != nil { + return x.Portrait + } + return nil +} + +func (x *Artist) GetBiography() []*Biography { + if x != nil { + return x.Biography + } + return nil +} + +func (x *Artist) GetActivityPeriod() []*ActivityPeriod { + if x != nil { + return x.ActivityPeriod + } + return nil +} + +func (x *Artist) GetRestriction() []*Restriction { + if x != nil { + return x.Restriction + } + return nil +} + +func (x *Artist) GetRelated() []*Artist { + if x != nil { + return x.Related + } + return nil +} + +func (x *Artist) GetIsPortraitAlbumCover() bool { + if x != nil && x.IsPortraitAlbumCover != nil { + return *x.IsPortraitAlbumCover + } + return false +} + +func (x *Artist) GetPortraitGroup() *ImageGroup { + if x != nil { + return x.PortraitGroup + } + return nil +} + +type AlbumGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Album []*Album `protobuf:"bytes,1,rep,name=album" json:"album,omitempty"` +} + +func (x *AlbumGroup) Reset() { + *x = AlbumGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AlbumGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AlbumGroup) ProtoMessage() {} + +func (x *AlbumGroup) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[3] + 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 AlbumGroup.ProtoReflect.Descriptor instead. +func (*AlbumGroup) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{3} +} + +func (x *AlbumGroup) GetAlbum() []*Album { + if x != nil { + return x.Album + } + return nil +} + +type Date struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Year *int32 `protobuf:"zigzag32,1,opt,name=year" json:"year,omitempty"` + Month *int32 `protobuf:"zigzag32,2,opt,name=month" json:"month,omitempty"` + Day *int32 `protobuf:"zigzag32,3,opt,name=day" json:"day,omitempty"` + Hour *int32 `protobuf:"zigzag32,4,opt,name=hour" json:"hour,omitempty"` + Minute *int32 `protobuf:"zigzag32,5,opt,name=minute" json:"minute,omitempty"` +} + +func (x *Date) Reset() { + *x = Date{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Date) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Date) ProtoMessage() {} + +func (x *Date) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[4] + 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 Date.ProtoReflect.Descriptor instead. +func (*Date) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{4} +} + +func (x *Date) GetYear() int32 { + if x != nil && x.Year != nil { + return *x.Year + } + return 0 +} + +func (x *Date) GetMonth() int32 { + if x != nil && x.Month != nil { + return *x.Month + } + return 0 +} + +func (x *Date) GetDay() int32 { + if x != nil && x.Day != nil { + return *x.Day + } + return 0 +} + +func (x *Date) GetHour() int32 { + if x != nil && x.Hour != nil { + return *x.Hour + } + return 0 +} + +func (x *Date) GetMinute() int32 { + if x != nil && x.Minute != nil { + return *x.Minute + } + return 0 +} + +type Album struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Artist []*Artist `protobuf:"bytes,3,rep,name=artist" json:"artist,omitempty"` + Typ *Album_Type `protobuf:"varint,4,opt,name=typ,enum=Album_Type" json:"typ,omitempty"` + Label *string `protobuf:"bytes,5,opt,name=label" json:"label,omitempty"` + Date *Date `protobuf:"bytes,6,opt,name=date" json:"date,omitempty"` + Popularity *int32 `protobuf:"zigzag32,7,opt,name=popularity" json:"popularity,omitempty"` + Genre []string `protobuf:"bytes,8,rep,name=genre" json:"genre,omitempty"` + Cover []*Image `protobuf:"bytes,9,rep,name=cover" json:"cover,omitempty"` + ExternalId []*ExternalId `protobuf:"bytes,10,rep,name=external_id,json=externalId" json:"external_id,omitempty"` + Disc []*Disc `protobuf:"bytes,11,rep,name=disc" json:"disc,omitempty"` + Review []string `protobuf:"bytes,12,rep,name=review" json:"review,omitempty"` + Copyright []*Copyright `protobuf:"bytes,13,rep,name=copyright" json:"copyright,omitempty"` + Restriction []*Restriction `protobuf:"bytes,14,rep,name=restriction" json:"restriction,omitempty"` + Related []*Album `protobuf:"bytes,15,rep,name=related" json:"related,omitempty"` + SalePeriod []*SalePeriod `protobuf:"bytes,16,rep,name=sale_period,json=salePeriod" json:"sale_period,omitempty"` + CoverGroup *ImageGroup `protobuf:"bytes,17,opt,name=cover_group,json=coverGroup" json:"cover_group,omitempty"` +} + +func (x *Album) Reset() { + *x = Album{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Album) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Album) ProtoMessage() {} + +func (x *Album) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[5] + 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 Album.ProtoReflect.Descriptor instead. +func (*Album) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{5} +} + +func (x *Album) GetGid() []byte { + if x != nil { + return x.Gid + } + return nil +} + +func (x *Album) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *Album) GetArtist() []*Artist { + if x != nil { + return x.Artist + } + return nil +} + +func (x *Album) GetTyp() Album_Type { + if x != nil && x.Typ != nil { + return *x.Typ + } + return Album_ALBUM +} + +func (x *Album) GetLabel() string { + if x != nil && x.Label != nil { + return *x.Label + } + return "" +} + +func (x *Album) GetDate() *Date { + if x != nil { + return x.Date + } + return nil +} + +func (x *Album) GetPopularity() int32 { + if x != nil && x.Popularity != nil { + return *x.Popularity + } + return 0 +} + +func (x *Album) GetGenre() []string { + if x != nil { + return x.Genre + } + return nil +} + +func (x *Album) GetCover() []*Image { + if x != nil { + return x.Cover + } + return nil +} + +func (x *Album) GetExternalId() []*ExternalId { + if x != nil { + return x.ExternalId + } + return nil +} + +func (x *Album) GetDisc() []*Disc { + if x != nil { + return x.Disc + } + return nil +} + +func (x *Album) GetReview() []string { + if x != nil { + return x.Review + } + return nil +} + +func (x *Album) GetCopyright() []*Copyright { + if x != nil { + return x.Copyright + } + return nil +} + +func (x *Album) GetRestriction() []*Restriction { + if x != nil { + return x.Restriction + } + return nil +} + +func (x *Album) GetRelated() []*Album { + if x != nil { + return x.Related + } + return nil +} + +func (x *Album) GetSalePeriod() []*SalePeriod { + if x != nil { + return x.SalePeriod + } + return nil +} + +func (x *Album) GetCoverGroup() *ImageGroup { + if x != nil { + return x.CoverGroup + } + return nil +} + +type Track struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Album *Album `protobuf:"bytes,3,opt,name=album" json:"album,omitempty"` + Artist []*Artist `protobuf:"bytes,4,rep,name=artist" json:"artist,omitempty"` + Number *int32 `protobuf:"zigzag32,5,opt,name=number" json:"number,omitempty"` + DiscNumber *int32 `protobuf:"zigzag32,6,opt,name=disc_number,json=discNumber" json:"disc_number,omitempty"` + Duration *int32 `protobuf:"zigzag32,7,opt,name=duration" json:"duration,omitempty"` + Popularity *int32 `protobuf:"zigzag32,8,opt,name=popularity" json:"popularity,omitempty"` + Explicit *bool `protobuf:"varint,9,opt,name=explicit" json:"explicit,omitempty"` + ExternalId []*ExternalId `protobuf:"bytes,10,rep,name=external_id,json=externalId" json:"external_id,omitempty"` + Restriction []*Restriction `protobuf:"bytes,11,rep,name=restriction" json:"restriction,omitempty"` + File []*AudioFile `protobuf:"bytes,12,rep,name=file" json:"file,omitempty"` + Alternative []*Track `protobuf:"bytes,13,rep,name=alternative" json:"alternative,omitempty"` + SalePeriod []*SalePeriod `protobuf:"bytes,14,rep,name=sale_period,json=salePeriod" json:"sale_period,omitempty"` + Preview []*AudioFile `protobuf:"bytes,15,rep,name=preview" json:"preview,omitempty"` +} + +func (x *Track) Reset() { + *x = Track{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Track) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Track) ProtoMessage() {} + +func (x *Track) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[6] + 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 Track.ProtoReflect.Descriptor instead. +func (*Track) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{6} +} + +func (x *Track) GetGid() []byte { + if x != nil { + return x.Gid + } + return nil +} + +func (x *Track) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *Track) GetAlbum() *Album { + if x != nil { + return x.Album + } + return nil +} + +func (x *Track) GetArtist() []*Artist { + if x != nil { + return x.Artist + } + return nil +} + +func (x *Track) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 +} + +func (x *Track) GetDiscNumber() int32 { + if x != nil && x.DiscNumber != nil { + return *x.DiscNumber + } + return 0 +} + +func (x *Track) GetDuration() int32 { + if x != nil && x.Duration != nil { + return *x.Duration + } + return 0 +} + +func (x *Track) GetPopularity() int32 { + if x != nil && x.Popularity != nil { + return *x.Popularity + } + return 0 +} + +func (x *Track) GetExplicit() bool { + if x != nil && x.Explicit != nil { + return *x.Explicit + } + return false +} + +func (x *Track) GetExternalId() []*ExternalId { + if x != nil { + return x.ExternalId + } + return nil +} + +func (x *Track) GetRestriction() []*Restriction { + if x != nil { + return x.Restriction + } + return nil +} + +func (x *Track) GetFile() []*AudioFile { + if x != nil { + return x.File + } + return nil +} + +func (x *Track) GetAlternative() []*Track { + if x != nil { + return x.Alternative + } + return nil +} + +func (x *Track) GetSalePeriod() []*SalePeriod { + if x != nil { + return x.SalePeriod + } + return nil +} + +func (x *Track) GetPreview() []*AudioFile { + if x != nil { + return x.Preview + } + return nil +} + +type Image struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileId []byte `protobuf:"bytes,1,opt,name=file_id,json=fileId" json:"file_id,omitempty"` + Size *Image_Size `protobuf:"varint,2,opt,name=size,enum=Image_Size" json:"size,omitempty"` + Width *int32 `protobuf:"zigzag32,3,opt,name=width" json:"width,omitempty"` + Height *int32 `protobuf:"zigzag32,4,opt,name=height" json:"height,omitempty"` +} + +func (x *Image) Reset() { + *x = Image{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Image) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Image) ProtoMessage() {} + +func (x *Image) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[7] + 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 Image.ProtoReflect.Descriptor instead. +func (*Image) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{7} +} + +func (x *Image) GetFileId() []byte { + if x != nil { + return x.FileId + } + return nil +} + +func (x *Image) GetSize() Image_Size { + if x != nil && x.Size != nil { + return *x.Size + } + return Image_DEFAULT +} + +func (x *Image) GetWidth() int32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *Image) GetHeight() int32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +type ImageGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Image []*Image `protobuf:"bytes,1,rep,name=image" json:"image,omitempty"` +} + +func (x *ImageGroup) Reset() { + *x = ImageGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageGroup) ProtoMessage() {} + +func (x *ImageGroup) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[8] + 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 ImageGroup.ProtoReflect.Descriptor instead. +func (*ImageGroup) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{8} +} + +func (x *ImageGroup) GetImage() []*Image { + if x != nil { + return x.Image + } + return nil +} + +type Biography struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + Portrait []*Image `protobuf:"bytes,2,rep,name=portrait" json:"portrait,omitempty"` + PortraitGroup []*ImageGroup `protobuf:"bytes,3,rep,name=portrait_group,json=portraitGroup" json:"portrait_group,omitempty"` +} + +func (x *Biography) Reset() { + *x = Biography{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Biography) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Biography) ProtoMessage() {} + +func (x *Biography) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[9] + 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 Biography.ProtoReflect.Descriptor instead. +func (*Biography) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{9} +} + +func (x *Biography) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *Biography) GetPortrait() []*Image { + if x != nil { + return x.Portrait + } + return nil +} + +func (x *Biography) GetPortraitGroup() []*ImageGroup { + if x != nil { + return x.PortraitGroup + } + return nil +} + +type Disc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Number *int32 `protobuf:"zigzag32,1,opt,name=number" json:"number,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Track []*Track `protobuf:"bytes,3,rep,name=track" json:"track,omitempty"` +} + +func (x *Disc) Reset() { + *x = Disc{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Disc) String() string { + return protoimpl.X.MessageStringOf(x) +} -const ( - Restriction_STREAMING Restriction_Type = 0 -) +func (*Disc) ProtoMessage() {} -var Restriction_Type_name = map[int32]string{ - 0: "STREAMING", +func (x *Disc) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[10] + 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) } -var Restriction_Type_value = map[string]int32{ - "STREAMING": 0, + +// Deprecated: Use Disc.ProtoReflect.Descriptor instead. +func (*Disc) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{10} } -func (x Restriction_Type) Enum() *Restriction_Type { - p := new(Restriction_Type) - *p = x - return p +func (x *Disc) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 } -func (x Restriction_Type) String() string { - return proto.EnumName(Restriction_Type_name, int32(x)) + +func (x *Disc) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" } -func (x *Restriction_Type) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Restriction_Type_value, data, "Restriction_Type") - if err != nil { - return err + +func (x *Disc) GetTrack() []*Track { + if x != nil { + return x.Track } - *x = Restriction_Type(value) return nil } -func (Restriction_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{12, 0} } -type AudioFile_Format int32 - -const ( - AudioFile_OGG_VORBIS_96 AudioFile_Format = 0 - AudioFile_OGG_VORBIS_160 AudioFile_Format = 1 - AudioFile_OGG_VORBIS_320 AudioFile_Format = 2 - AudioFile_MP3_256 AudioFile_Format = 3 - AudioFile_MP3_320 AudioFile_Format = 4 - AudioFile_MP3_160 AudioFile_Format = 5 - AudioFile_MP3_96 AudioFile_Format = 6 - AudioFile_MP3_160_ENC AudioFile_Format = 7 - AudioFile_OTHER2 AudioFile_Format = 8 - AudioFile_OTHER3 AudioFile_Format = 9 - AudioFile_AAC_160 AudioFile_Format = 10 - AudioFile_AAC_320 AudioFile_Format = 11 - AudioFile_OTHER4 AudioFile_Format = 12 - AudioFile_OTHER5 AudioFile_Format = 13 -) +type Copyright struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -var AudioFile_Format_name = map[int32]string{ - 0: "OGG_VORBIS_96", - 1: "OGG_VORBIS_160", - 2: "OGG_VORBIS_320", - 3: "MP3_256", - 4: "MP3_320", - 5: "MP3_160", - 6: "MP3_96", - 7: "MP3_160_ENC", - 8: "OTHER2", - 9: "OTHER3", - 10: "AAC_160", - 11: "AAC_320", - 12: "OTHER4", - 13: "OTHER5", -} -var AudioFile_Format_value = map[string]int32{ - "OGG_VORBIS_96": 0, - "OGG_VORBIS_160": 1, - "OGG_VORBIS_320": 2, - "MP3_256": 3, - "MP3_320": 4, - "MP3_160": 5, - "MP3_96": 6, - "MP3_160_ENC": 7, - "OTHER2": 8, - "OTHER3": 9, - "AAC_160": 10, - "AAC_320": 11, - "OTHER4": 12, - "OTHER5": 13, + Typ *Copyright_Type `protobuf:"varint,1,opt,name=typ,enum=Copyright_Type" json:"typ,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` } -func (x AudioFile_Format) Enum() *AudioFile_Format { - p := new(AudioFile_Format) - *p = x - return p -} -func (x AudioFile_Format) String() string { - return proto.EnumName(AudioFile_Format_name, int32(x)) -} -func (x *AudioFile_Format) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(AudioFile_Format_value, data, "AudioFile_Format") - if err != nil { - return err +func (x *Copyright) Reset() { + *x = Copyright{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - *x = AudioFile_Format(value) - return nil } -func (AudioFile_Format) EnumDescriptor() ([]byte, []int) { return fileDescriptor7, []int{15, 0} } -type TopTracks struct { - Country *string `protobuf:"bytes,1,opt,name=country" json:"country,omitempty"` - Track []*Track `protobuf:"bytes,2,rep,name=track" json:"track,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Copyright) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *TopTracks) Reset() { *m = TopTracks{} } -func (m *TopTracks) String() string { return proto.CompactTextString(m) } -func (*TopTracks) ProtoMessage() {} -func (*TopTracks) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } +func (*Copyright) ProtoMessage() {} -func (m *TopTracks) GetCountry() string { - if m != nil && m.Country != nil { - return *m.Country +func (x *Copyright) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) +} + +// Deprecated: Use Copyright.ProtoReflect.Descriptor instead. +func (*Copyright) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{11} } -func (m *TopTracks) GetTrack() []*Track { - if m != nil { - return m.Track +func (x *Copyright) GetTyp() Copyright_Type { + if x != nil && x.Typ != nil { + return *x.Typ } - return nil + return Copyright_P } -type ActivityPeriod struct { - StartYear *int32 `protobuf:"zigzag32,1,opt,name=start_year,json=startYear" json:"start_year,omitempty"` - EndYear *int32 `protobuf:"zigzag32,2,opt,name=end_year,json=endYear" json:"end_year,omitempty"` - Decade *int32 `protobuf:"zigzag32,3,opt,name=decade" json:"decade,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Copyright) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" } -func (m *ActivityPeriod) Reset() { *m = ActivityPeriod{} } -func (m *ActivityPeriod) String() string { return proto.CompactTextString(m) } -func (*ActivityPeriod) ProtoMessage() {} -func (*ActivityPeriod) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{1} } +type Restriction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ActivityPeriod) GetStartYear() int32 { - if m != nil && m.StartYear != nil { - return *m.StartYear - } - return 0 + Catalogue []Restriction_Catalogue `protobuf:"varint,1,rep,name=catalogue,enum=Restriction_Catalogue" json:"catalogue,omitempty"` + CountriesAllowed *string `protobuf:"bytes,2,opt,name=countries_allowed,json=countriesAllowed" json:"countries_allowed,omitempty"` + CountriesForbidden *string `protobuf:"bytes,3,opt,name=countries_forbidden,json=countriesForbidden" json:"countries_forbidden,omitempty"` + Typ *Restriction_Type `protobuf:"varint,4,opt,name=typ,enum=Restriction_Type" json:"typ,omitempty"` + CatalogueStr []string `protobuf:"bytes,5,rep,name=catalogue_str,json=catalogueStr" json:"catalogue_str,omitempty"` } -func (m *ActivityPeriod) GetEndYear() int32 { - if m != nil && m.EndYear != nil { - return *m.EndYear +func (x *Restriction) Reset() { + *x = Restriction{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *ActivityPeriod) GetDecade() int32 { - if m != nil && m.Decade != nil { - return *m.Decade - } - return 0 +func (x *Restriction) String() string { + return protoimpl.X.MessageStringOf(x) } -type Artist struct { - Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Popularity *int32 `protobuf:"zigzag32,3,opt,name=popularity" json:"popularity,omitempty"` - TopTrack []*TopTracks `protobuf:"bytes,4,rep,name=top_track,json=topTrack" json:"top_track,omitempty"` - AlbumGroup []*AlbumGroup `protobuf:"bytes,5,rep,name=album_group,json=albumGroup" json:"album_group,omitempty"` - SingleGroup []*AlbumGroup `protobuf:"bytes,6,rep,name=single_group,json=singleGroup" json:"single_group,omitempty"` - CompilationGroup []*AlbumGroup `protobuf:"bytes,7,rep,name=compilation_group,json=compilationGroup" json:"compilation_group,omitempty"` - AppearsOnGroup []*AlbumGroup `protobuf:"bytes,8,rep,name=appears_on_group,json=appearsOnGroup" json:"appears_on_group,omitempty"` - Genre []string `protobuf:"bytes,9,rep,name=genre" json:"genre,omitempty"` - ExternalId []*ExternalId `protobuf:"bytes,10,rep,name=external_id,json=externalId" json:"external_id,omitempty"` - Portrait []*Image `protobuf:"bytes,11,rep,name=portrait" json:"portrait,omitempty"` - Biography []*Biography `protobuf:"bytes,12,rep,name=biography" json:"biography,omitempty"` - ActivityPeriod []*ActivityPeriod `protobuf:"bytes,13,rep,name=activity_period,json=activityPeriod" json:"activity_period,omitempty"` - Restriction []*Restriction `protobuf:"bytes,14,rep,name=restriction" json:"restriction,omitempty"` - Related []*Artist `protobuf:"bytes,15,rep,name=related" json:"related,omitempty"` - IsPortraitAlbumCover *bool `protobuf:"varint,16,opt,name=is_portrait_album_cover,json=isPortraitAlbumCover" json:"is_portrait_album_cover,omitempty"` - PortraitGroup *ImageGroup `protobuf:"bytes,17,opt,name=portrait_group,json=portraitGroup" json:"portrait_group,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (*Restriction) ProtoMessage() {} + +func (x *Restriction) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[12] + 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) } -func (m *Artist) Reset() { *m = Artist{} } -func (m *Artist) String() string { return proto.CompactTextString(m) } -func (*Artist) ProtoMessage() {} -func (*Artist) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{2} } +// Deprecated: Use Restriction.ProtoReflect.Descriptor instead. +func (*Restriction) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{12} +} -func (m *Artist) GetGid() []byte { - if m != nil { - return m.Gid +func (x *Restriction) GetCatalogue() []Restriction_Catalogue { + if x != nil { + return x.Catalogue } return nil } -func (m *Artist) GetName() string { - if m != nil && m.Name != nil { - return *m.Name +func (x *Restriction) GetCountriesAllowed() string { + if x != nil && x.CountriesAllowed != nil { + return *x.CountriesAllowed } return "" } -func (m *Artist) GetPopularity() int32 { - if m != nil && m.Popularity != nil { - return *m.Popularity +func (x *Restriction) GetCountriesForbidden() string { + if x != nil && x.CountriesForbidden != nil { + return *x.CountriesForbidden } - return 0 + return "" } -func (m *Artist) GetTopTrack() []*TopTracks { - if m != nil { - return m.TopTrack +func (x *Restriction) GetTyp() Restriction_Type { + if x != nil && x.Typ != nil { + return *x.Typ } - return nil + return Restriction_STREAMING } -func (m *Artist) GetAlbumGroup() []*AlbumGroup { - if m != nil { - return m.AlbumGroup +func (x *Restriction) GetCatalogueStr() []string { + if x != nil { + return x.CatalogueStr } return nil } -func (m *Artist) GetSingleGroup() []*AlbumGroup { - if m != nil { - return m.SingleGroup - } - return nil +type Availability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CatalogueStr []string `protobuf:"bytes,1,rep,name=catalogue_str,json=catalogueStr" json:"catalogue_str,omitempty"` + Start *Date `protobuf:"bytes,2,opt,name=start" json:"start,omitempty"` } -func (m *Artist) GetCompilationGroup() []*AlbumGroup { - if m != nil { - return m.CompilationGroup +func (x *Availability) Reset() { + *x = Availability{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *Artist) GetAppearsOnGroup() []*AlbumGroup { - if m != nil { - return m.AppearsOnGroup - } - return nil +func (x *Availability) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Artist) GetGenre() []string { - if m != nil { - return m.Genre +func (*Availability) ProtoMessage() {} + +func (x *Availability) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *Artist) GetExternalId() []*ExternalId { - if m != nil { - return m.ExternalId - } - return nil +// Deprecated: Use Availability.ProtoReflect.Descriptor instead. +func (*Availability) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{13} } -func (m *Artist) GetPortrait() []*Image { - if m != nil { - return m.Portrait +func (x *Availability) GetCatalogueStr() []string { + if x != nil { + return x.CatalogueStr } return nil } -func (m *Artist) GetBiography() []*Biography { - if m != nil { - return m.Biography +func (x *Availability) GetStart() *Date { + if x != nil { + return x.Start } return nil } -func (m *Artist) GetActivityPeriod() []*ActivityPeriod { - if m != nil { - return m.ActivityPeriod +type SalePeriod struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Restriction []*Restriction `protobuf:"bytes,1,rep,name=restriction" json:"restriction,omitempty"` + Start *Date `protobuf:"bytes,2,opt,name=start" json:"start,omitempty"` + End *Date `protobuf:"bytes,3,opt,name=end" json:"end,omitempty"` +} + +func (x *SalePeriod) Reset() { + *x = SalePeriod{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *Artist) GetRestriction() []*Restriction { - if m != nil { - return m.Restriction +func (x *SalePeriod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SalePeriod) ProtoMessage() {} + +func (x *SalePeriod) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) +} + +// Deprecated: Use SalePeriod.ProtoReflect.Descriptor instead. +func (*SalePeriod) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{14} } -func (m *Artist) GetRelated() []*Artist { - if m != nil { - return m.Related +func (x *SalePeriod) GetRestriction() []*Restriction { + if x != nil { + return x.Restriction } return nil } -func (m *Artist) GetIsPortraitAlbumCover() bool { - if m != nil && m.IsPortraitAlbumCover != nil { - return *m.IsPortraitAlbumCover +func (x *SalePeriod) GetStart() *Date { + if x != nil { + return x.Start } - return false + return nil } -func (m *Artist) GetPortraitGroup() *ImageGroup { - if m != nil { - return m.PortraitGroup +func (x *SalePeriod) GetEnd() *Date { + if x != nil { + return x.End } return nil } -type AlbumGroup struct { - Album []*Album `protobuf:"bytes,1,rep,name=album" json:"album,omitempty"` - XXX_unrecognized []byte `json:"-"` -} +type ExternalId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *AlbumGroup) Reset() { *m = AlbumGroup{} } -func (m *AlbumGroup) String() string { return proto.CompactTextString(m) } -func (*AlbumGroup) ProtoMessage() {} -func (*AlbumGroup) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{3} } + Typ *string `protobuf:"bytes,1,opt,name=typ" json:"typ,omitempty"` + Id *string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` +} -func (m *AlbumGroup) GetAlbum() []*Album { - if m != nil { - return m.Album +func (x *ExternalId) Reset() { + *x = ExternalId{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type Date struct { - Year *int32 `protobuf:"zigzag32,1,opt,name=year" json:"year,omitempty"` - Month *int32 `protobuf:"zigzag32,2,opt,name=month" json:"month,omitempty"` - Day *int32 `protobuf:"zigzag32,3,opt,name=day" json:"day,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *ExternalId) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Date) Reset() { *m = Date{} } -func (m *Date) String() string { return proto.CompactTextString(m) } -func (*Date) ProtoMessage() {} -func (*Date) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{4} } +func (*ExternalId) ProtoMessage() {} -func (m *Date) GetYear() int32 { - if m != nil && m.Year != nil { - return *m.Year +func (x *ExternalId) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (m *Date) GetMonth() int32 { - if m != nil && m.Month != nil { - return *m.Month - } - return 0 +// Deprecated: Use ExternalId.ProtoReflect.Descriptor instead. +func (*ExternalId) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{15} } -func (m *Date) GetDay() int32 { - if m != nil && m.Day != nil { - return *m.Day +func (x *ExternalId) GetTyp() string { + if x != nil && x.Typ != nil { + return *x.Typ } - return 0 + return "" } -type Album struct { - Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Artist []*Artist `protobuf:"bytes,3,rep,name=artist" json:"artist,omitempty"` - Typ *Album_Type `protobuf:"varint,4,opt,name=typ,enum=Spotify.Album_Type" json:"typ,omitempty"` - Label *string `protobuf:"bytes,5,opt,name=label" json:"label,omitempty"` - Date *Date `protobuf:"bytes,6,opt,name=date" json:"date,omitempty"` - Popularity *int32 `protobuf:"zigzag32,7,opt,name=popularity" json:"popularity,omitempty"` - Genre []string `protobuf:"bytes,8,rep,name=genre" json:"genre,omitempty"` - Cover []*Image `protobuf:"bytes,9,rep,name=cover" json:"cover,omitempty"` - ExternalId []*ExternalId `protobuf:"bytes,10,rep,name=external_id,json=externalId" json:"external_id,omitempty"` - Disc []*Disc `protobuf:"bytes,11,rep,name=disc" json:"disc,omitempty"` - Review []string `protobuf:"bytes,12,rep,name=review" json:"review,omitempty"` - Copyright []*Copyright `protobuf:"bytes,13,rep,name=copyright" json:"copyright,omitempty"` - Restriction []*Restriction `protobuf:"bytes,14,rep,name=restriction" json:"restriction,omitempty"` - Related []*Album `protobuf:"bytes,15,rep,name=related" json:"related,omitempty"` - SalePeriod []*SalePeriod `protobuf:"bytes,16,rep,name=sale_period,json=salePeriod" json:"sale_period,omitempty"` - CoverGroup *ImageGroup `protobuf:"bytes,17,opt,name=cover_group,json=coverGroup" json:"cover_group,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Album) Reset() { *m = Album{} } -func (m *Album) String() string { return proto.CompactTextString(m) } -func (*Album) ProtoMessage() {} -func (*Album) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{5} } - -func (m *Album) GetGid() []byte { - if m != nil { - return m.Gid - } - return nil -} - -func (m *Album) GetName() string { - if m != nil && m.Name != nil { - return *m.Name +func (x *ExternalId) GetId() string { + if x != nil && x.Id != nil { + return *x.Id } return "" } -func (m *Album) GetArtist() []*Artist { - if m != nil { - return m.Artist - } - return nil +type AudioFile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileId []byte `protobuf:"bytes,1,opt,name=file_id,json=fileId" json:"file_id,omitempty"` + Format *AudioFile_Format `protobuf:"varint,2,opt,name=format,enum=AudioFile_Format" json:"format,omitempty"` } -func (m *Album) GetTyp() Album_Type { - if m != nil && m.Typ != nil { - return *m.Typ +func (x *AudioFile) Reset() { + *x = AudioFile{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return Album_ALBUM } -func (m *Album) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" +func (x *AudioFile) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Album) GetDate() *Date { - if m != nil { - return m.Date +func (*AudioFile) ProtoMessage() {} + +func (x *AudioFile) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *Album) GetPopularity() int32 { - if m != nil && m.Popularity != nil { - return *m.Popularity - } - return 0 +// Deprecated: Use AudioFile.ProtoReflect.Descriptor instead. +func (*AudioFile) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{16} } -func (m *Album) GetGenre() []string { - if m != nil { - return m.Genre +func (x *AudioFile) GetFileId() []byte { + if x != nil { + return x.FileId } return nil } -func (m *Album) GetCover() []*Image { - if m != nil { - return m.Cover +func (x *AudioFile) GetFormat() AudioFile_Format { + if x != nil && x.Format != nil { + return *x.Format } - return nil + return AudioFile_OGG_VORBIS_96 } -func (m *Album) GetExternalId() []*ExternalId { - if m != nil { - return m.ExternalId - } - return nil +type VideoFile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileId []byte `protobuf:"bytes,1,opt,name=file_id,json=fileId" json:"file_id,omitempty"` } -func (m *Album) GetDisc() []*Disc { - if m != nil { - return m.Disc +func (x *VideoFile) Reset() { + *x = VideoFile{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (m *Album) GetReview() []string { - if m != nil { - return m.Review - } - return nil +func (x *VideoFile) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Album) GetCopyright() []*Copyright { - if m != nil { - return m.Copyright +func (*VideoFile) ProtoMessage() {} + +func (x *VideoFile) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *Album) GetRestriction() []*Restriction { - if m != nil { - return m.Restriction - } - return nil +// Deprecated: Use VideoFile.ProtoReflect.Descriptor instead. +func (*VideoFile) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{17} } -func (m *Album) GetRelated() []*Album { - if m != nil { - return m.Related +func (x *VideoFile) GetFileId() []byte { + if x != nil { + return x.FileId } return nil } -func (m *Album) GetSalePeriod() []*SalePeriod { - if m != nil { - return m.SalePeriod - } - return nil +// Podcast Protos +type Show struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Description *string `protobuf:"bytes,64,opt,name=description" json:"description,omitempty"` + DeprecatedPopularity *int32 `protobuf:"zigzag32,65,opt,name=deprecated_popularity,json=deprecatedPopularity" json:"deprecated_popularity,omitempty"` + Publisher *string `protobuf:"bytes,66,opt,name=publisher" json:"publisher,omitempty"` + Language *string `protobuf:"bytes,67,opt,name=language" json:"language,omitempty"` + Explicit *bool `protobuf:"varint,68,opt,name=explicit" json:"explicit,omitempty"` + Covers *ImageGroup `protobuf:"bytes,69,opt,name=covers" json:"covers,omitempty"` + Episode []*Episode `protobuf:"bytes,70,rep,name=episode" json:"episode,omitempty"` + Copyright []*Copyright `protobuf:"bytes,71,rep,name=copyright" json:"copyright,omitempty"` + Restriction []*Restriction `protobuf:"bytes,72,rep,name=restriction" json:"restriction,omitempty"` + Keyword []string `protobuf:"bytes,73,rep,name=keyword" json:"keyword,omitempty"` + MediaType *Show_MediaType `protobuf:"varint,74,opt,name=media_type,json=mediaType,enum=Show_MediaType" json:"media_type,omitempty"` + ConsumptionOrder *Show_ConsumptionOrder `protobuf:"varint,75,opt,name=consumption_order,json=consumptionOrder,enum=Show_ConsumptionOrder" json:"consumption_order,omitempty"` + InterpretRestrictionUsingGeoip *bool `protobuf:"varint,76,opt,name=interpret_restriction_using_geoip,json=interpretRestrictionUsingGeoip" json:"interpret_restriction_using_geoip,omitempty"` + Availability []*Availability `protobuf:"bytes,78,rep,name=availability" json:"availability,omitempty"` + CountryOfOrigin *string `protobuf:"bytes,79,opt,name=country_of_origin,json=countryOfOrigin" json:"country_of_origin,omitempty"` + Categories []*Category `protobuf:"bytes,80,rep,name=categories" json:"categories,omitempty"` + Passthrough *Show_PassthroughEnum `protobuf:"varint,81,opt,name=passthrough,enum=Show_PassthroughEnum" json:"passthrough,omitempty"` } -func (m *Album) GetCoverGroup() *ImageGroup { - if m != nil { - return m.CoverGroup +func (x *Show) Reset() { + *x = Show{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type Track struct { - Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Album *Album `protobuf:"bytes,3,opt,name=album" json:"album,omitempty"` - Artist []*Artist `protobuf:"bytes,4,rep,name=artist" json:"artist,omitempty"` - Number *int32 `protobuf:"zigzag32,5,opt,name=number" json:"number,omitempty"` - DiscNumber *int32 `protobuf:"zigzag32,6,opt,name=disc_number,json=discNumber" json:"disc_number,omitempty"` - Duration *int32 `protobuf:"zigzag32,7,opt,name=duration" json:"duration,omitempty"` - Popularity *int32 `protobuf:"zigzag32,8,opt,name=popularity" json:"popularity,omitempty"` - Explicit *bool `protobuf:"varint,9,opt,name=explicit" json:"explicit,omitempty"` - ExternalId []*ExternalId `protobuf:"bytes,10,rep,name=external_id,json=externalId" json:"external_id,omitempty"` - Restriction []*Restriction `protobuf:"bytes,11,rep,name=restriction" json:"restriction,omitempty"` - File []*AudioFile `protobuf:"bytes,12,rep,name=file" json:"file,omitempty"` - Alternative []*Track `protobuf:"bytes,13,rep,name=alternative" json:"alternative,omitempty"` - SalePeriod []*SalePeriod `protobuf:"bytes,14,rep,name=sale_period,json=salePeriod" json:"sale_period,omitempty"` - Preview []*AudioFile `protobuf:"bytes,15,rep,name=preview" json:"preview,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Show) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Track) Reset() { *m = Track{} } -func (m *Track) String() string { return proto.CompactTextString(m) } -func (*Track) ProtoMessage() {} -func (*Track) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{6} } +func (*Show) ProtoMessage() {} -func (m *Track) GetGid() []byte { - if m != nil { - return m.Gid +func (x *Show) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *Track) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" +// Deprecated: Use Show.ProtoReflect.Descriptor instead. +func (*Show) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{18} } -func (m *Track) GetAlbum() *Album { - if m != nil { - return m.Album +func (x *Show) GetGid() []byte { + if x != nil { + return x.Gid } return nil } -func (m *Track) GetArtist() []*Artist { - if m != nil { - return m.Artist +func (x *Show) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } - return nil + return "" } -func (m *Track) GetNumber() int32 { - if m != nil && m.Number != nil { - return *m.Number +func (x *Show) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } - return 0 + return "" } -func (m *Track) GetDiscNumber() int32 { - if m != nil && m.DiscNumber != nil { - return *m.DiscNumber +func (x *Show) GetDeprecatedPopularity() int32 { + if x != nil && x.DeprecatedPopularity != nil { + return *x.DeprecatedPopularity } return 0 } -func (m *Track) GetDuration() int32 { - if m != nil && m.Duration != nil { - return *m.Duration +func (x *Show) GetPublisher() string { + if x != nil && x.Publisher != nil { + return *x.Publisher } - return 0 + return "" } -func (m *Track) GetPopularity() int32 { - if m != nil && m.Popularity != nil { - return *m.Popularity +func (x *Show) GetLanguage() string { + if x != nil && x.Language != nil { + return *x.Language } - return 0 + return "" } -func (m *Track) GetExplicit() bool { - if m != nil && m.Explicit != nil { - return *m.Explicit +func (x *Show) GetExplicit() bool { + if x != nil && x.Explicit != nil { + return *x.Explicit } return false } -func (m *Track) GetExternalId() []*ExternalId { - if m != nil { - return m.ExternalId +func (x *Show) GetCovers() *ImageGroup { + if x != nil { + return x.Covers } return nil } -func (m *Track) GetRestriction() []*Restriction { - if m != nil { - return m.Restriction +func (x *Show) GetEpisode() []*Episode { + if x != nil { + return x.Episode } return nil } -func (m *Track) GetFile() []*AudioFile { - if m != nil { - return m.File +func (x *Show) GetCopyright() []*Copyright { + if x != nil { + return x.Copyright } return nil } -func (m *Track) GetAlternative() []*Track { - if m != nil { - return m.Alternative +func (x *Show) GetRestriction() []*Restriction { + if x != nil { + return x.Restriction } return nil } -func (m *Track) GetSalePeriod() []*SalePeriod { - if m != nil { - return m.SalePeriod +func (x *Show) GetKeyword() []string { + if x != nil { + return x.Keyword } return nil } -func (m *Track) GetPreview() []*AudioFile { - if m != nil { - return m.Preview +func (x *Show) GetMediaType() Show_MediaType { + if x != nil && x.MediaType != nil { + return *x.MediaType } - return nil + return Show_MIXED } -type Image struct { - FileId []byte `protobuf:"bytes,1,opt,name=file_id,json=fileId" json:"file_id,omitempty"` - Size *Image_Size `protobuf:"varint,2,opt,name=size,enum=Spotify.Image_Size" json:"size,omitempty"` - Width *int32 `protobuf:"zigzag32,3,opt,name=width" json:"width,omitempty"` - Height *int32 `protobuf:"zigzag32,4,opt,name=height" json:"height,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Show) GetConsumptionOrder() Show_ConsumptionOrder { + if x != nil && x.ConsumptionOrder != nil { + return *x.ConsumptionOrder + } + return Show_SEQUENTIAL } -func (m *Image) Reset() { *m = Image{} } -func (m *Image) String() string { return proto.CompactTextString(m) } -func (*Image) ProtoMessage() {} -func (*Image) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{7} } +func (x *Show) GetInterpretRestrictionUsingGeoip() bool { + if x != nil && x.InterpretRestrictionUsingGeoip != nil { + return *x.InterpretRestrictionUsingGeoip + } + return false +} -func (m *Image) GetFileId() []byte { - if m != nil { - return m.FileId +func (x *Show) GetAvailability() []*Availability { + if x != nil { + return x.Availability } return nil } -func (m *Image) GetSize() Image_Size { - if m != nil && m.Size != nil { - return *m.Size +func (x *Show) GetCountryOfOrigin() string { + if x != nil && x.CountryOfOrigin != nil { + return *x.CountryOfOrigin } - return Image_DEFAULT + return "" } -func (m *Image) GetWidth() int32 { - if m != nil && m.Width != nil { - return *m.Width +func (x *Show) GetCategories() []*Category { + if x != nil { + return x.Categories } - return 0 + return nil } -func (m *Image) GetHeight() int32 { - if m != nil && m.Height != nil { - return *m.Height +func (x *Show) GetPassthrough() Show_PassthroughEnum { + if x != nil && x.Passthrough != nil { + return *x.Passthrough } - return 0 + return Show_UNKNOWN } -type ImageGroup struct { - Image []*Image `protobuf:"bytes,1,rep,name=image" json:"image,omitempty"` - XXX_unrecognized []byte `json:"-"` -} +type Episode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ImageGroup) Reset() { *m = ImageGroup{} } -func (m *ImageGroup) String() string { return proto.CompactTextString(m) } -func (*ImageGroup) ProtoMessage() {} -func (*ImageGroup) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{8} } + Gid []byte `protobuf:"bytes,1,opt,name=gid" json:"gid,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Duration *int32 `protobuf:"zigzag32,7,opt,name=duration" json:"duration,omitempty"` + Popularity *int32 `protobuf:"zigzag32,8,opt,name=popularity" json:"popularity,omitempty"` + File []*AudioFile `protobuf:"bytes,12,rep,name=file" json:"file,omitempty"` + Description *string `protobuf:"bytes,64,opt,name=description" json:"description,omitempty"` + Number *int32 `protobuf:"zigzag32,65,opt,name=number" json:"number,omitempty"` + PublishTime *Date `protobuf:"bytes,66,opt,name=publish_time,json=publishTime" json:"publish_time,omitempty"` + DeprecatedPopularity *int32 `protobuf:"zigzag32,67,opt,name=deprecated_popularity,json=deprecatedPopularity" json:"deprecated_popularity,omitempty"` + Covers *ImageGroup `protobuf:"bytes,68,opt,name=covers" json:"covers,omitempty"` + Language *string `protobuf:"bytes,69,opt,name=language" json:"language,omitempty"` + Explicit *bool `protobuf:"varint,70,opt,name=explicit" json:"explicit,omitempty"` + Show *Show `protobuf:"bytes,71,opt,name=show" json:"show,omitempty"` + Video []*VideoFile `protobuf:"bytes,72,rep,name=video" json:"video,omitempty"` + VideoPreview []*VideoFile `protobuf:"bytes,73,rep,name=video_preview,json=videoPreview" json:"video_preview,omitempty"` + AudioPreview []*AudioFile `protobuf:"bytes,74,rep,name=audio_preview,json=audioPreview" json:"audio_preview,omitempty"` + Restriction []*Restriction `protobuf:"bytes,75,rep,name=restriction" json:"restriction,omitempty"` + FreezeFrame *ImageGroup `protobuf:"bytes,76,opt,name=freeze_frame,json=freezeFrame" json:"freeze_frame,omitempty"` + Keyword []string `protobuf:"bytes,77,rep,name=keyword" json:"keyword,omitempty"` + // Order of these two flags might be wrong! + SuppressMonetization *bool `protobuf:"varint,78,opt,name=suppress_monetization,json=suppressMonetization" json:"suppress_monetization,omitempty"` + InterpretRestrictionUsingGeoip *bool `protobuf:"varint,79,opt,name=interpret_restriction_using_geoip,json=interpretRestrictionUsingGeoip" json:"interpret_restriction_using_geoip,omitempty"` + AllowBackgroundPlayback *bool `protobuf:"varint,81,opt,name=allow_background_playback,json=allowBackgroundPlayback" json:"allow_background_playback,omitempty"` + Availability []*Availability `protobuf:"bytes,82,rep,name=availability" json:"availability,omitempty"` + ExternalUrl *string `protobuf:"bytes,83,opt,name=external_url,json=externalUrl" json:"external_url,omitempty"` + OriginalAudio *OriginalAudio `protobuf:"bytes,84,opt,name=original_audio,json=originalAudio" json:"original_audio,omitempty"` +} -func (m *ImageGroup) GetImage() []*Image { - if m != nil { - return m.Image +func (x *Episode) Reset() { + *x = Episode{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type Biography struct { - Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` - Portrait []*Image `protobuf:"bytes,2,rep,name=portrait" json:"portrait,omitempty"` - PortraitGroup []*ImageGroup `protobuf:"bytes,3,rep,name=portrait_group,json=portraitGroup" json:"portrait_group,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Biography) Reset() { *m = Biography{} } -func (m *Biography) String() string { return proto.CompactTextString(m) } -func (*Biography) ProtoMessage() {} -func (*Biography) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{9} } +func (*Episode) ProtoMessage() {} -func (m *Biography) GetText() string { - if m != nil && m.Text != nil { - return *m.Text +func (x *Episode) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *Biography) GetPortrait() []*Image { - if m != nil { - return m.Portrait - } - return nil +// Deprecated: Use Episode.ProtoReflect.Descriptor instead. +func (*Episode) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{19} } -func (m *Biography) GetPortraitGroup() []*ImageGroup { - if m != nil { - return m.PortraitGroup +func (x *Episode) GetGid() []byte { + if x != nil { + return x.Gid } return nil } -type Disc struct { - Number *int32 `protobuf:"zigzag32,1,opt,name=number" json:"number,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Track []*Track `protobuf:"bytes,3,rep,name=track" json:"track,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" } -func (m *Disc) Reset() { *m = Disc{} } -func (m *Disc) String() string { return proto.CompactTextString(m) } -func (*Disc) ProtoMessage() {} -func (*Disc) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{10} } - -func (m *Disc) GetNumber() int32 { - if m != nil && m.Number != nil { - return *m.Number +func (x *Episode) GetDuration() int32 { + if x != nil && x.Duration != nil { + return *x.Duration } return 0 } -func (m *Disc) GetName() string { - if m != nil && m.Name != nil { - return *m.Name +func (x *Episode) GetPopularity() int32 { + if x != nil && x.Popularity != nil { + return *x.Popularity } - return "" + return 0 } -func (m *Disc) GetTrack() []*Track { - if m != nil { - return m.Track +func (x *Episode) GetFile() []*AudioFile { + if x != nil { + return x.File } return nil } -type Copyright struct { - Typ *Copyright_Type `protobuf:"varint,1,opt,name=typ,enum=Spotify.Copyright_Type" json:"typ,omitempty"` - Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" } -func (m *Copyright) Reset() { *m = Copyright{} } -func (m *Copyright) String() string { return proto.CompactTextString(m) } -func (*Copyright) ProtoMessage() {} -func (*Copyright) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{11} } - -func (m *Copyright) GetTyp() Copyright_Type { - if m != nil && m.Typ != nil { - return *m.Typ +func (x *Episode) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number } - return Copyright_P + return 0 } -func (m *Copyright) GetText() string { - if m != nil && m.Text != nil { - return *m.Text +func (x *Episode) GetPublishTime() *Date { + if x != nil { + return x.PublishTime } - return "" + return nil } -type Restriction struct { - CountriesAllowed *string `protobuf:"bytes,2,opt,name=countries_allowed,json=countriesAllowed" json:"countries_allowed,omitempty"` - CountriesForbidden *string `protobuf:"bytes,3,opt,name=countries_forbidden,json=countriesForbidden" json:"countries_forbidden,omitempty"` - Typ *Restriction_Type `protobuf:"varint,4,opt,name=typ,enum=Spotify.Restriction_Type" json:"typ,omitempty"` - CatalogueStr []string `protobuf:"bytes,5,rep,name=catalogue_str,json=catalogueStr" json:"catalogue_str,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) GetDeprecatedPopularity() int32 { + if x != nil && x.DeprecatedPopularity != nil { + return *x.DeprecatedPopularity + } + return 0 } -func (m *Restriction) Reset() { *m = Restriction{} } -func (m *Restriction) String() string { return proto.CompactTextString(m) } -func (*Restriction) ProtoMessage() {} -func (*Restriction) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{12} } +func (x *Episode) GetCovers() *ImageGroup { + if x != nil { + return x.Covers + } + return nil +} -func (m *Restriction) GetCountriesAllowed() string { - if m != nil && m.CountriesAllowed != nil { - return *m.CountriesAllowed +func (x *Episode) GetLanguage() string { + if x != nil && x.Language != nil { + return *x.Language } return "" } -func (m *Restriction) GetCountriesForbidden() string { - if m != nil && m.CountriesForbidden != nil { - return *m.CountriesForbidden +func (x *Episode) GetExplicit() bool { + if x != nil && x.Explicit != nil { + return *x.Explicit } - return "" + return false } -func (m *Restriction) GetTyp() Restriction_Type { - if m != nil && m.Typ != nil { - return *m.Typ +func (x *Episode) GetShow() *Show { + if x != nil { + return x.Show } - return Restriction_STREAMING + return nil } -func (m *Restriction) GetCatalogueStr() []string { - if m != nil { - return m.CatalogueStr +func (x *Episode) GetVideo() []*VideoFile { + if x != nil { + return x.Video } return nil } -type SalePeriod struct { - Restriction []*Restriction `protobuf:"bytes,1,rep,name=restriction" json:"restriction,omitempty"` - Start *Date `protobuf:"bytes,2,opt,name=start" json:"start,omitempty"` - End *Date `protobuf:"bytes,3,opt,name=end" json:"end,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) GetVideoPreview() []*VideoFile { + if x != nil { + return x.VideoPreview + } + return nil } -func (m *SalePeriod) Reset() { *m = SalePeriod{} } -func (m *SalePeriod) String() string { return proto.CompactTextString(m) } -func (*SalePeriod) ProtoMessage() {} -func (*SalePeriod) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{13} } +func (x *Episode) GetAudioPreview() []*AudioFile { + if x != nil { + return x.AudioPreview + } + return nil +} -func (m *SalePeriod) GetRestriction() []*Restriction { - if m != nil { - return m.Restriction +func (x *Episode) GetRestriction() []*Restriction { + if x != nil { + return x.Restriction } return nil } -func (m *SalePeriod) GetStart() *Date { - if m != nil { - return m.Start +func (x *Episode) GetFreezeFrame() *ImageGroup { + if x != nil { + return x.FreezeFrame } return nil } -func (m *SalePeriod) GetEnd() *Date { - if m != nil { - return m.End +func (x *Episode) GetKeyword() []string { + if x != nil { + return x.Keyword } return nil } -type ExternalId struct { - Typ *string `protobuf:"bytes,1,opt,name=typ" json:"typ,omitempty"` - Id *string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) GetSuppressMonetization() bool { + if x != nil && x.SuppressMonetization != nil { + return *x.SuppressMonetization + } + return false } -func (m *ExternalId) Reset() { *m = ExternalId{} } -func (m *ExternalId) String() string { return proto.CompactTextString(m) } -func (*ExternalId) ProtoMessage() {} -func (*ExternalId) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{14} } +func (x *Episode) GetInterpretRestrictionUsingGeoip() bool { + if x != nil && x.InterpretRestrictionUsingGeoip != nil { + return *x.InterpretRestrictionUsingGeoip + } + return false +} -func (m *ExternalId) GetTyp() string { - if m != nil && m.Typ != nil { - return *m.Typ +func (x *Episode) GetAllowBackgroundPlayback() bool { + if x != nil && x.AllowBackgroundPlayback != nil { + return *x.AllowBackgroundPlayback } - return "" + return false +} + +func (x *Episode) GetAvailability() []*Availability { + if x != nil { + return x.Availability + } + return nil } -func (m *ExternalId) GetId() string { - if m != nil && m.Id != nil { - return *m.Id +func (x *Episode) GetExternalUrl() string { + if x != nil && x.ExternalUrl != nil { + return *x.ExternalUrl } return "" } -type AudioFile struct { - FileId []byte `protobuf:"bytes,1,opt,name=file_id,json=fileId" json:"file_id,omitempty"` - Format *AudioFile_Format `protobuf:"varint,2,opt,name=format,enum=Spotify.AudioFile_Format" json:"format,omitempty"` - XXX_unrecognized []byte `json:"-"` +func (x *Episode) GetOriginalAudio() *OriginalAudio { + if x != nil { + return x.OriginalAudio + } + return nil +} + +type Category struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Subcategories []*Category `protobuf:"bytes,2,rep,name=subcategories" json:"subcategories,omitempty"` } -func (m *AudioFile) Reset() { *m = AudioFile{} } -func (m *AudioFile) String() string { return proto.CompactTextString(m) } -func (*AudioFile) ProtoMessage() {} -func (*AudioFile) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{15} } +func (x *Category) Reset() { + *x = Category{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Category) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Category) ProtoMessage() {} + +func (x *Category) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[20] + 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) +} -func (m *AudioFile) GetFileId() []byte { - if m != nil { - return m.FileId +// Deprecated: Use Category.ProtoReflect.Descriptor instead. +func (*Category) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{20} +} + +func (x *Category) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *Category) GetSubcategories() []*Category { + if x != nil { + return x.Subcategories } return nil } -func (m *AudioFile) GetFormat() AudioFile_Format { - if m != nil && m.Format != nil { - return *m.Format +type OriginalAudio struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid []byte `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` +} + +func (x *OriginalAudio) Reset() { + *x = OriginalAudio{} + if protoimpl.UnsafeEnabled { + mi := &file_Spotify_metadata_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return AudioFile_OGG_VORBIS_96 } -func init() { - proto.RegisterType((*TopTracks)(nil), "Spotify.TopTracks") - proto.RegisterType((*ActivityPeriod)(nil), "Spotify.ActivityPeriod") - proto.RegisterType((*Artist)(nil), "Spotify.Artist") - proto.RegisterType((*AlbumGroup)(nil), "Spotify.AlbumGroup") - proto.RegisterType((*Date)(nil), "Spotify.Date") - proto.RegisterType((*Album)(nil), "Spotify.Album") - proto.RegisterType((*Track)(nil), "Spotify.Track") - proto.RegisterType((*Image)(nil), "Spotify.Image") - proto.RegisterType((*ImageGroup)(nil), "Spotify.ImageGroup") - proto.RegisterType((*Biography)(nil), "Spotify.Biography") - proto.RegisterType((*Disc)(nil), "Spotify.Disc") - proto.RegisterType((*Copyright)(nil), "Spotify.Copyright") - proto.RegisterType((*Restriction)(nil), "Spotify.Restriction") - proto.RegisterType((*SalePeriod)(nil), "Spotify.SalePeriod") - proto.RegisterType((*ExternalId)(nil), "Spotify.ExternalId") - proto.RegisterType((*AudioFile)(nil), "Spotify.AudioFile") - proto.RegisterEnum("Spotify.Album_Type", Album_Type_name, Album_Type_value) - proto.RegisterEnum("Spotify.Image_Size", Image_Size_name, Image_Size_value) - proto.RegisterEnum("Spotify.Copyright_Type", Copyright_Type_name, Copyright_Type_value) - proto.RegisterEnum("Spotify.Restriction_Type", Restriction_Type_name, Restriction_Type_value) - proto.RegisterEnum("Spotify.AudioFile_Format", AudioFile_Format_name, AudioFile_Format_value) -} - -func init() { proto.RegisterFile("metadata.proto", fileDescriptor7) } - -var fileDescriptor7 = []byte{ - // 1430 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x6d, 0x6f, 0xdb, 0x36, - 0x10, 0x8e, 0x6c, 0x59, 0xb6, 0xce, 0x89, 0xa3, 0xb0, 0x59, 0xa3, 0x16, 0xd8, 0x9a, 0xa9, 0xdd, - 0x9a, 0xae, 0x43, 0x9a, 0xa6, 0x4d, 0x80, 0x0e, 0x18, 0x50, 0x27, 0x4d, 0x32, 0x63, 0x79, 0x03, - 0xed, 0x0e, 0xdd, 0x27, 0x8d, 0xb1, 0x18, 0x87, 0x98, 0x6c, 0x09, 0x12, 0x9d, 0xd6, 0xfd, 0x03, - 0x03, 0xf6, 0x57, 0x06, 0x0c, 0xfb, 0x3a, 0xec, 0x57, 0x0c, 0xd8, 0x0f, 0x1a, 0xf8, 0x22, 0xd9, - 0x91, 0xe3, 0x36, 0xe8, 0xa7, 0xf0, 0xf8, 0xdc, 0x9d, 0xc5, 0xe3, 0xf3, 0xdc, 0x31, 0xd0, 0xe8, - 0x53, 0x4e, 0x02, 0xc2, 0xc9, 0x7a, 0x9c, 0x44, 0x3c, 0x42, 0xd5, 0x76, 0x1c, 0x71, 0x76, 0x3e, - 0xf2, 0x7e, 0x04, 0xbb, 0x13, 0xc5, 0x9d, 0x84, 0x74, 0x7f, 0x4d, 0x91, 0x0b, 0xd5, 0x6e, 0x34, - 0x1c, 0xf0, 0x64, 0xe4, 0x1a, 0xab, 0xc6, 0x9a, 0x8d, 0x33, 0x13, 0x3d, 0x80, 0x0a, 0x17, 0x3e, - 0x6e, 0x69, 0xb5, 0xbc, 0x56, 0xdf, 0x6c, 0xac, 0xeb, 0xf8, 0x75, 0x19, 0x89, 0x15, 0xe8, 0x9d, - 0x41, 0xa3, 0xd9, 0xe5, 0xec, 0x92, 0xf1, 0xd1, 0x29, 0x4d, 0x58, 0x14, 0xa0, 0xcf, 0x01, 0x52, - 0x4e, 0x12, 0xee, 0x8f, 0x28, 0x49, 0x64, 0xd2, 0x25, 0x6c, 0xcb, 0x9d, 0x9f, 0x29, 0x49, 0xd0, - 0x1d, 0xa8, 0xd1, 0x41, 0xa0, 0xc0, 0x92, 0x04, 0xab, 0x74, 0x10, 0x48, 0xe8, 0x36, 0x58, 0x01, - 0xed, 0x92, 0x80, 0xba, 0x65, 0x09, 0x68, 0xcb, 0xfb, 0xcb, 0x02, 0xab, 0x99, 0x70, 0x96, 0x72, - 0xe4, 0x40, 0xb9, 0xc7, 0x02, 0x99, 0x75, 0x1e, 0x8b, 0x25, 0x42, 0x60, 0x0e, 0x48, 0x9f, 0xca, - 0x5c, 0x36, 0x96, 0x6b, 0xf4, 0x05, 0x40, 0x1c, 0xc5, 0xc3, 0x90, 0x24, 0x8c, 0x8f, 0x74, 0xb2, - 0x89, 0x1d, 0xf4, 0x04, 0x6c, 0x1e, 0xc5, 0xbe, 0x3a, 0x9e, 0x29, 0x8f, 0x87, 0xc6, 0xc7, 0xcb, - 0x6a, 0x83, 0x6b, 0x5c, 0x2f, 0xd1, 0x73, 0xa8, 0x93, 0xf0, 0x6c, 0xd8, 0xf7, 0x7b, 0x49, 0x34, - 0x8c, 0xdd, 0x8a, 0x0c, 0xb9, 0x95, 0x87, 0x34, 0x05, 0x76, 0x20, 0x20, 0x0c, 0x24, 0x5f, 0xa3, - 0x6d, 0x98, 0x4f, 0xd9, 0xa0, 0x17, 0x52, 0x1d, 0x66, 0xcd, 0x0e, 0xab, 0x2b, 0x47, 0x15, 0xf7, - 0x12, 0x96, 0xba, 0x51, 0x3f, 0x66, 0x21, 0xe1, 0x2c, 0x1a, 0xe8, 0xe0, 0xea, 0xec, 0x60, 0x67, - 0xc2, 0x5b, 0x65, 0xf8, 0x1e, 0x1c, 0x12, 0xc7, 0x94, 0x24, 0xa9, 0x9f, 0x27, 0xa8, 0xcd, 0x4e, - 0xd0, 0xd0, 0xce, 0x27, 0x3a, 0x7c, 0x19, 0x2a, 0x3d, 0x3a, 0x48, 0xa8, 0x6b, 0xaf, 0x96, 0xd7, - 0x6c, 0xac, 0x0c, 0x51, 0x04, 0xfa, 0x8e, 0xd3, 0x64, 0x40, 0x42, 0x9f, 0x05, 0x2e, 0x14, 0xf2, - 0xed, 0x69, 0xac, 0x15, 0x60, 0xa0, 0xf9, 0x1a, 0x7d, 0x03, 0xb5, 0x38, 0x4a, 0x78, 0x42, 0x18, - 0x77, 0xeb, 0x05, 0x26, 0xb5, 0xfa, 0xa4, 0x47, 0x71, 0x8e, 0xa3, 0x0d, 0xb0, 0xcf, 0x58, 0xd4, - 0x4b, 0x48, 0x7c, 0x31, 0x72, 0xe7, 0x0b, 0xf7, 0xb2, 0x93, 0x21, 0x78, 0xec, 0x84, 0x5e, 0xc2, - 0x22, 0xd1, 0xf4, 0xf3, 0x63, 0xc9, 0x3f, 0x77, 0x41, 0xc6, 0xad, 0x8c, 0xcf, 0x79, 0x85, 0x9e, - 0xb8, 0x41, 0xae, 0xd2, 0x75, 0x1b, 0xea, 0x09, 0x4d, 0x79, 0xc2, 0xba, 0xa2, 0x7c, 0x6e, 0x43, - 0x46, 0x2f, 0xe7, 0xd1, 0x78, 0x8c, 0xe1, 0x49, 0x47, 0xf4, 0x08, 0xaa, 0x09, 0x0d, 0x09, 0xa7, - 0x81, 0xbb, 0x28, 0x63, 0x16, 0xc7, 0xbf, 0x28, 0xb9, 0x8a, 0x33, 0x1c, 0x6d, 0xc1, 0x0a, 0x4b, - 0xfd, 0xec, 0x94, 0xbe, 0x62, 0x52, 0x37, 0xba, 0xa4, 0x89, 0xeb, 0xac, 0x1a, 0x6b, 0x35, 0xbc, - 0xcc, 0xd2, 0x53, 0x8d, 0xca, 0x5b, 0xd9, 0x15, 0x18, 0xfa, 0x0e, 0x1a, 0x79, 0x8c, 0xba, 0xc2, - 0xa5, 0x55, 0xe3, 0x4a, 0xc9, 0x65, 0xfd, 0xd4, 0x15, 0x2e, 0x64, 0xae, 0xd2, 0xf4, 0x36, 0x01, - 0xc6, 0xf7, 0x2b, 0xa4, 0x2c, 0x7f, 0xd4, 0x35, 0x0a, 0x17, 0x20, 0x7d, 0xb0, 0x02, 0xbd, 0x1d, - 0x30, 0x5f, 0x11, 0x4e, 0x85, 0xa2, 0x26, 0xa4, 0x2b, 0xd7, 0x82, 0x11, 0xfd, 0x68, 0xc0, 0x2f, - 0xb4, 0x64, 0x95, 0x21, 0xd4, 0x18, 0x90, 0x4c, 0x60, 0x62, 0xe9, 0xfd, 0x53, 0x81, 0x8a, 0x4c, - 0x7a, 0x43, 0xa5, 0x3e, 0x04, 0x8b, 0xc8, 0x6a, 0xb9, 0xe5, 0xeb, 0x8b, 0xa8, 0x61, 0xf4, 0x15, - 0x94, 0xf9, 0x28, 0x76, 0xcd, 0x55, 0x63, 0xad, 0x51, 0x24, 0xf1, 0x7a, 0x67, 0x14, 0x53, 0x2c, - 0x70, 0xf1, 0x9d, 0x21, 0x39, 0xa3, 0xa1, 0x5b, 0x91, 0x3f, 0xa2, 0x0c, 0xf4, 0x25, 0x98, 0x01, - 0xe1, 0xd4, 0xb5, 0x64, 0xfd, 0x16, 0xf2, 0x68, 0x71, 0x5c, 0x2c, 0xa1, 0x42, 0xcb, 0xa8, 0x4e, - 0xb5, 0x8c, 0x5c, 0x12, 0xb5, 0x49, 0x49, 0x3c, 0x80, 0x8a, 0xba, 0x47, 0xfb, 0x5a, 0x66, 0x2b, - 0xf0, 0x13, 0x85, 0x23, 0x3e, 0x9a, 0xa5, 0x5d, 0x2d, 0x9a, 0x89, 0x8f, 0x66, 0x69, 0x17, 0x4b, - 0x48, 0x34, 0xcc, 0x84, 0x5e, 0x32, 0xfa, 0x56, 0x8a, 0xc5, 0xc6, 0xda, 0x12, 0x3a, 0xea, 0x46, - 0xf1, 0x28, 0x61, 0xbd, 0x0b, 0xae, 0xf5, 0x30, 0xd6, 0xd1, 0x6e, 0x86, 0xe0, 0xb1, 0xd3, 0x27, - 0xab, 0x60, 0xad, 0xa8, 0x82, 0x22, 0xb7, 0x72, 0x11, 0x3c, 0x87, 0x7a, 0x4a, 0x42, 0x9a, 0xa9, - 0xd4, 0x29, 0x14, 0xa1, 0x4d, 0x42, 0xaa, 0x15, 0x0a, 0x69, 0xbe, 0x16, 0x51, 0xb2, 0x86, 0x1f, - 0x17, 0x00, 0x48, 0x3f, 0xc5, 0xfe, 0x6d, 0x30, 0x05, 0x25, 0x90, 0x0d, 0x95, 0xe6, 0xe1, 0xce, - 0xeb, 0x23, 0xc7, 0x40, 0x00, 0x56, 0xbb, 0x75, 0x7c, 0x70, 0xb8, 0xe7, 0x94, 0xd0, 0x22, 0xd4, - 0x77, 0x4f, 0x8e, 0x4e, 0x5b, 0x87, 0xcd, 0x4e, 0xeb, 0xe4, 0xd8, 0x29, 0x23, 0x0b, 0x4a, 0x7b, - 0xa7, 0x8e, 0xe9, 0xfd, 0x6d, 0x42, 0x45, 0x35, 0xfc, 0x9b, 0xb1, 0x37, 0xd7, 0x55, 0x59, 0x7e, - 0xd7, 0xf5, 0xba, 0x9a, 0xe0, 0xb8, 0xf9, 0x61, 0x8e, 0xdf, 0x06, 0x6b, 0x30, 0xec, 0x9f, 0xd1, - 0x44, 0xb2, 0x77, 0x09, 0x6b, 0x0b, 0xdd, 0x83, 0xba, 0xb8, 0x6e, 0x5f, 0x83, 0x96, 0x22, 0xa7, - 0xd8, 0x3a, 0x56, 0x0e, 0x77, 0xa1, 0x16, 0x0c, 0x13, 0xd9, 0xff, 0x35, 0x75, 0x73, 0xbb, 0x40, - 0xec, 0xda, 0x14, 0xb1, 0xef, 0x42, 0x8d, 0xbe, 0x8b, 0x43, 0xd6, 0x65, 0xdc, 0xb5, 0x65, 0x37, - 0xca, 0xed, 0x4f, 0x24, 0x6e, 0x81, 0x4b, 0xf5, 0x9b, 0x72, 0xe9, 0x6b, 0x30, 0xcf, 0x59, 0x48, - 0xa7, 0x1a, 0x7f, 0x73, 0x18, 0xb0, 0x68, 0x9f, 0x85, 0x14, 0x4b, 0x1c, 0x6d, 0x88, 0x61, 0x2c, - 0x7f, 0x8d, 0xb3, 0x4b, 0xaa, 0xf9, 0x5d, 0x7c, 0x9e, 0x4c, 0xba, 0x14, 0xb9, 0xd7, 0xb8, 0x19, - 0xf7, 0xbe, 0x85, 0x6a, 0xac, 0xe5, 0xb5, 0x38, 0xf3, 0x93, 0x32, 0x17, 0xef, 0x4f, 0x03, 0x2a, - 0x92, 0x8e, 0x68, 0x05, 0xaa, 0xe2, 0x3b, 0xfd, 0x9c, 0x3f, 0x96, 0x30, 0x5b, 0x01, 0x7a, 0x08, - 0x66, 0xca, 0xde, 0x2b, 0x0a, 0x35, 0x8a, 0x2c, 0x5e, 0x6f, 0xb3, 0xf7, 0x14, 0x4b, 0x07, 0xd1, - 0x6c, 0xde, 0xb2, 0x80, 0x5f, 0xe8, 0xce, 0xaa, 0x0c, 0x41, 0x8f, 0x0b, 0x2a, 0x25, 0x6d, 0x2a, - 0x7a, 0x28, 0xcb, 0xdb, 0x02, 0x53, 0xc4, 0xa2, 0x3a, 0x54, 0x5f, 0xed, 0xed, 0x37, 0x5f, 0x1f, - 0x76, 0x9c, 0x39, 0x41, 0xfd, 0xf6, 0x51, 0xf3, 0xf0, 0xd0, 0x31, 0xc4, 0xf2, 0xb0, 0x89, 0x0f, - 0x04, 0xf3, 0x01, 0xac, 0x37, 0x6a, 0x5d, 0x16, 0x23, 0x62, 0x2c, 0x1f, 0x41, 0x65, 0x26, 0xac, - 0xa9, 0x11, 0xa1, 0x3b, 0x99, 0x04, 0xbd, 0xdf, 0x0c, 0xb0, 0xf3, 0x39, 0x2c, 0x24, 0xc1, 0xe9, - 0x3b, 0xae, 0x1f, 0x8e, 0x72, 0x7d, 0x65, 0xdc, 0x97, 0x3e, 0x32, 0xee, 0xa7, 0x07, 0x5c, 0xb9, - 0x70, 0x33, 0xb3, 0x07, 0xdc, 0x1b, 0x30, 0x5f, 0xe9, 0x16, 0xa8, 0x65, 0x61, 0x5c, 0xd1, 0xcc, - 0x0c, 0xb9, 0xaa, 0x27, 0x5f, 0xf9, 0x43, 0x2f, 0xda, 0x5f, 0xc0, 0xce, 0x5b, 0x24, 0x7a, 0xa4, - 0xc6, 0x8e, 0x21, 0x6f, 0x6c, 0x65, 0xba, 0x87, 0x4e, 0x8c, 0x9e, 0xac, 0x1a, 0xa5, 0x71, 0x35, - 0xbc, 0x65, 0xdd, 0x88, 0x2a, 0x60, 0x9c, 0x3a, 0x73, 0xe2, 0xcf, 0xae, 0x63, 0x78, 0xff, 0x19, - 0x50, 0x9f, 0x50, 0x01, 0x7a, 0x2c, 0xde, 0x7b, 0xe2, 0xd1, 0xcd, 0x68, 0xea, 0x93, 0x30, 0x8c, - 0xde, 0xd2, 0x40, 0xa7, 0x71, 0x72, 0xa0, 0xa9, 0xf6, 0xd1, 0x13, 0xb8, 0x35, 0x76, 0x3e, 0x8f, - 0x92, 0x33, 0x16, 0x04, 0x74, 0x20, 0x99, 0x62, 0x63, 0x94, 0x43, 0xfb, 0x19, 0x82, 0x1e, 0x4f, - 0x4e, 0xce, 0x3b, 0xd7, 0xc9, 0x70, 0xe2, 0x10, 0xf7, 0x61, 0xa1, 0x4b, 0x38, 0x09, 0xa3, 0xde, - 0x90, 0xfa, 0x29, 0x4f, 0xe4, 0x53, 0xd7, 0xc6, 0xf3, 0xf9, 0x66, 0x9b, 0x27, 0xde, 0x67, 0xfa, - 0x54, 0x0b, 0x60, 0xb7, 0x3b, 0x78, 0xaf, 0x79, 0xd4, 0x3a, 0x3e, 0x70, 0xe6, 0xbc, 0xdf, 0x0d, - 0x80, 0xb1, 0x94, 0x8a, 0x6d, 0xc0, 0xb8, 0x69, 0x1b, 0xb8, 0x0f, 0x15, 0xf9, 0xdf, 0x82, 0xac, - 0xc0, 0xd4, 0xb4, 0x56, 0x18, 0xba, 0x07, 0x65, 0x3a, 0x08, 0x74, 0xdf, 0x2d, 0xb8, 0x08, 0xc4, - 0x5b, 0x07, 0x18, 0xb7, 0x27, 0xd1, 0xce, 0xb3, 0x6b, 0xb4, 0xd5, 0x41, 0x1b, 0x50, 0x62, 0x59, - 0x91, 0x4b, 0x2c, 0xf0, 0xfe, 0x28, 0x81, 0x9d, 0xab, 0x7a, 0xb6, 0x84, 0x9f, 0x82, 0x75, 0x1e, - 0x25, 0x7d, 0xc2, 0xb5, 0x88, 0xef, 0x4c, 0xb7, 0x84, 0xf5, 0x7d, 0xe9, 0x80, 0xb5, 0xa3, 0xf7, - 0xaf, 0x01, 0x96, 0xda, 0x42, 0x4b, 0xb0, 0x70, 0x72, 0x70, 0xe0, 0xff, 0x74, 0x82, 0x77, 0x5a, - 0x6d, 0xff, 0xc5, 0xb6, 0x33, 0x87, 0x10, 0x34, 0x26, 0xb6, 0x9e, 0x6e, 0x6f, 0x38, 0x46, 0x61, - 0xef, 0xd9, 0xe6, 0x86, 0x53, 0x12, 0xe2, 0x3e, 0x3a, 0x7d, 0xe6, 0x6f, 0x6e, 0x6d, 0x3b, 0xe5, - 0xcc, 0x10, 0x88, 0x99, 0x19, 0x22, 0xb4, 0x22, 0x04, 0x2e, 0x8c, 0x17, 0xdb, 0x8e, 0x25, 0xc6, - 0x9c, 0x06, 0xfc, 0xbd, 0xe3, 0x5d, 0xa7, 0x2a, 0xc0, 0x93, 0xce, 0x0f, 0x7b, 0x78, 0xd3, 0xa9, - 0xe5, 0xeb, 0x67, 0x8e, 0x2d, 0x32, 0x34, 0x9b, 0xbb, 0x32, 0x03, 0x64, 0x86, 0xc8, 0x5d, 0xcf, - 0xbd, 0x9e, 0x3b, 0xf3, 0xf9, 0x7a, 0xcb, 0x59, 0xf8, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x54, 0x99, - 0x9b, 0x70, 0x5c, 0x0e, 0x00, 0x00, +func (x *OriginalAudio) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OriginalAudio) ProtoMessage() {} + +func (x *OriginalAudio) ProtoReflect() protoreflect.Message { + mi := &file_Spotify_metadata_proto_msgTypes[21] + 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 OriginalAudio.ProtoReflect.Descriptor instead. +func (*OriginalAudio) Descriptor() ([]byte, []int) { + return file_Spotify_metadata_proto_rawDescGZIP(), []int{21} +} + +func (x *OriginalAudio) GetUuid() []byte { + if x != nil { + return x.Uuid + } + return nil +} + +var File_Spotify_metadata_proto protoreflect.FileDescriptor + +var file_Spotify_metadata_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x53, 0x70, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x43, 0x0a, 0x09, 0x54, 0x6f, 0x70, 0x54, + 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x1c, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, + 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x22, 0x62, 0x0a, + 0x0e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x79, 0x65, 0x61, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x11, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x59, 0x65, 0x61, 0x72, 0x12, 0x19, + 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x79, 0x65, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x07, 0x65, 0x6e, 0x64, 0x59, 0x65, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x63, + 0x61, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x64, 0x65, 0x63, 0x61, 0x64, + 0x65, 0x22, 0xd0, 0x05, 0x0a, 0x06, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0a, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x27, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x54, 0x6f, 0x70, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x73, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x0b, 0x61, + 0x6c, 0x62, 0x75, 0x6d, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x61, + 0x6c, 0x62, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2e, 0x0a, 0x0c, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0b, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x38, 0x0a, 0x11, 0x63, 0x6f, 0x6d, + 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x35, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x5f, 0x6f, + 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, + 0x61, 0x72, 0x73, 0x4f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, + 0x6e, 0x72, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x72, 0x65, + 0x12, 0x2c, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x49, 0x64, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x06, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, + 0x69, 0x74, 0x12, 0x28, 0x0a, 0x09, 0x62, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x42, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x79, 0x52, 0x09, 0x62, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x12, 0x38, 0x0a, 0x0f, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, + 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, + 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, + 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, + 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x5f, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x5f, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x50, 0x6f, + 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x43, 0x6f, 0x76, 0x65, 0x72, + 0x12, 0x32, 0x0a, 0x0e, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0d, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2a, 0x0a, 0x0a, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x05, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x06, 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x52, 0x05, 0x61, 0x6c, 0x62, 0x75, 0x6d, + 0x22, 0x6e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, + 0x03, 0x64, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x22, 0xe3, 0x04, 0x0a, 0x05, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x06, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x07, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x52, 0x06, 0x61, 0x72, 0x74, 0x69, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x03, 0x74, 0x79, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, + 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x74, 0x79, 0x70, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0a, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, 0x72, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x65, 0x6e, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x05, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x63, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x05, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x52, 0x04, 0x64, 0x69, 0x73, 0x63, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x28, 0x0a, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6f, 0x70, 0x79, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x20, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x06, 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x0b, 0x73, 0x61, 0x6c, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x61, 0x6c, 0x65, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x52, 0x0a, 0x73, 0x61, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x12, 0x2c, 0x0a, 0x0b, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x36, + 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x42, 0x55, 0x4d, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, + 0x0b, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x06, + 0x0a, 0x02, 0x45, 0x50, 0x10, 0x04, 0x22, 0xf9, 0x03, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x67, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x05, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x52, 0x05, 0x61, + 0x6c, 0x62, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x06, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x52, 0x06, 0x61, + 0x72, 0x74, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, + 0x0b, 0x64, 0x69, 0x73, 0x63, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x63, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, + 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0a, + 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, + 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, + 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, 0x73, 0x74, + 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x54, 0x72, 0x61, 0x63, + 0x6b, 0x52, 0x0b, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2c, + 0x0a, 0x0b, 0x73, 0x61, 0x6c, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x61, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x52, 0x0a, 0x73, 0x61, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x24, 0x0a, 0x07, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, + 0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x22, 0xa6, 0x01, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x69, 0x7a, 0x65, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x22, 0x35, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x4d, 0x41, + 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, 0x02, 0x12, + 0x0a, 0x0a, 0x06, 0x58, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, 0x03, 0x22, 0x2a, 0x0a, 0x0a, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x05, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x77, 0x0a, 0x09, 0x42, 0x69, 0x6f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x22, 0x0a, 0x08, 0x70, 0x6f, 0x72, 0x74, + 0x72, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x08, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x12, 0x32, 0x0a, 0x0e, + 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x0d, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x22, 0x50, 0x0a, 0x04, 0x44, 0x69, 0x73, 0x63, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x06, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x05, 0x74, 0x72, 0x61, + 0x63, 0x6b, 0x22, 0x58, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x21, 0x0a, 0x03, 0x74, 0x79, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x43, + 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x74, + 0x79, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x14, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x05, + 0x0a, 0x01, 0x50, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x43, 0x10, 0x01, 0x22, 0xd9, 0x02, 0x0a, + 0x0b, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x09, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, + 0x16, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x52, 0x09, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x75, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x5f, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, + 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x5f, 0x66, 0x6f, 0x72, + 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x12, 0x23, 0x0a, 0x03, 0x74, 0x79, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, + 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x03, 0x74, 0x79, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x75, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x53, 0x74, 0x72, 0x22, 0x55, 0x0a, 0x09, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x41, 0x44, 0x10, 0x00, 0x12, + 0x10, 0x0a, 0x0c, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, + 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x55, 0x45, 0x5f, 0x41, + 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x48, 0x55, 0x46, 0x46, 0x4c, 0x45, 0x10, + 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x52, 0x43, 0x49, 0x41, 0x4c, 0x10, + 0x04, 0x22, 0x15, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x52, + 0x45, 0x41, 0x4d, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x22, 0x50, 0x0a, 0x0c, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x53, 0x74, 0x72, 0x12, 0x1b, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x44, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x72, 0x0a, 0x0a, 0x53, 0x61, + 0x6c, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, + 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, + 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x2e, + 0x0a, 0x0a, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x74, 0x79, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x79, 0x70, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xaa, + 0x02, 0x0a, 0x09, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x69, 0x6c, + 0x65, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x22, 0xd8, 0x01, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x11, 0x0a, 0x0d, 0x4f, + 0x47, 0x47, 0x5f, 0x56, 0x4f, 0x52, 0x42, 0x49, 0x53, 0x5f, 0x39, 0x36, 0x10, 0x00, 0x12, 0x12, + 0x0a, 0x0e, 0x4f, 0x47, 0x47, 0x5f, 0x56, 0x4f, 0x52, 0x42, 0x49, 0x53, 0x5f, 0x31, 0x36, 0x30, + 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x47, 0x47, 0x5f, 0x56, 0x4f, 0x52, 0x42, 0x49, 0x53, + 0x5f, 0x33, 0x32, 0x30, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x50, 0x33, 0x5f, 0x32, 0x35, + 0x36, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x50, 0x33, 0x5f, 0x33, 0x32, 0x30, 0x10, 0x04, + 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x50, 0x33, 0x5f, 0x31, 0x36, 0x30, 0x10, 0x05, 0x12, 0x0a, 0x0a, + 0x06, 0x4d, 0x50, 0x33, 0x5f, 0x39, 0x36, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x50, 0x33, + 0x5f, 0x31, 0x36, 0x30, 0x5f, 0x45, 0x4e, 0x43, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x50, + 0x34, 0x5f, 0x31, 0x32, 0x38, 0x5f, 0x44, 0x55, 0x41, 0x4c, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, + 0x4f, 0x54, 0x48, 0x45, 0x52, 0x33, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x41, 0x43, 0x5f, + 0x31, 0x36, 0x30, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x41, 0x43, 0x5f, 0x33, 0x32, 0x30, + 0x10, 0x0b, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x50, 0x34, 0x5f, 0x31, 0x32, 0x38, 0x10, 0x0c, 0x12, + 0x0a, 0x0a, 0x06, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x35, 0x10, 0x0d, 0x22, 0x24, 0x0a, 0x09, 0x56, + 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, + 0x64, 0x22, 0xbc, 0x07, 0x0a, 0x04, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x03, 0x67, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x40, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x15, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, 0x41, 0x20, 0x01, 0x28, + 0x11, 0x52, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x70, + 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x65, 0x72, 0x18, 0x42, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x18, 0x44, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x12, 0x23, 0x0a, + 0x06, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x73, 0x12, 0x22, 0x0a, 0x07, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x18, 0x46, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x65, + 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6f, 0x70, 0x79, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x49, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x2e, 0x0a, 0x0a, 0x6d, 0x65, + 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, + 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x63, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, + 0x4b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x10, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x49, 0x0a, 0x21, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, + 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x67, + 0x65, 0x6f, 0x69, 0x70, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x70, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x73, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6f, 0x69, 0x70, 0x12, 0x31, 0x0a, 0x0c, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x4e, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, + 0x0c, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, + 0x11, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, + 0x79, 0x4f, 0x66, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x29, 0x0a, 0x0a, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, + 0x75, 0x67, 0x68, 0x18, 0x51, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x53, 0x68, 0x6f, 0x77, + 0x2e, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x2c, 0x0a, + 0x09, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x49, + 0x58, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x10, 0x02, 0x22, 0x3c, 0x0a, 0x10, 0x43, + 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, + 0x0c, 0x0a, 0x08, 0x45, 0x50, 0x49, 0x53, 0x4f, 0x44, 0x49, 0x43, 0x10, 0x02, 0x12, 0x0a, 0x0a, + 0x06, 0x52, 0x45, 0x43, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x22, 0x35, 0x0a, 0x0f, 0x50, 0x61, 0x73, + 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, + 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x10, 0x02, + 0x22, 0xe3, 0x07, 0x0a, 0x07, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x67, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x67, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x11, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x0a, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1e, + 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x41, + 0x75, 0x64, 0x69, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x40, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x41, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0c, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, + 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x18, 0x43, 0x20, 0x01, 0x28, + 0x11, 0x52, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x70, + 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x06, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x73, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x45, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x6c, + 0x69, 0x63, 0x69, 0x74, 0x18, 0x46, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6c, + 0x69, 0x63, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x47, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, + 0x20, 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x18, 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, + 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, + 0x6f, 0x12, 0x2f, 0x0a, 0x0d, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x18, 0x49, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, + 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0c, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x50, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x12, 0x2f, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x18, 0x4a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x41, 0x75, 0x64, 0x69, + 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0c, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x50, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x12, 0x2e, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x4b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x72, + 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x0c, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x5f, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0b, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x4d, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x33, 0x0a, + 0x15, 0x73, 0x75, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x6e, 0x65, 0x74, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x75, + 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x6e, 0x65, 0x74, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x21, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x5f, + 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x73, 0x69, 0x6e, + 0x67, 0x5f, 0x67, 0x65, 0x6f, 0x69, 0x70, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6f, 0x69, 0x70, 0x12, 0x3a, 0x0a, + 0x19, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x51, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, + 0x64, 0x50, 0x6c, 0x61, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x31, 0x0a, 0x0c, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x52, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x53, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x72, 0x6c, 0x12, + 0x35, 0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x64, 0x69, + 0x6f, 0x18, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, + 0x6c, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x22, 0x4f, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x23, 0x0a, 0x0d, 0x4f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, +} + +var ( + file_Spotify_metadata_proto_rawDescOnce sync.Once + file_Spotify_metadata_proto_rawDescData = file_Spotify_metadata_proto_rawDesc +) + +func file_Spotify_metadata_proto_rawDescGZIP() []byte { + file_Spotify_metadata_proto_rawDescOnce.Do(func() { + file_Spotify_metadata_proto_rawDescData = protoimpl.X.CompressGZIP(file_Spotify_metadata_proto_rawDescData) + }) + return file_Spotify_metadata_proto_rawDescData +} + +var file_Spotify_metadata_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_Spotify_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_Spotify_metadata_proto_goTypes = []interface{}{ + (Album_Type)(0), // 0: Album.Type + (Image_Size)(0), // 1: Image.Size + (Copyright_Type)(0), // 2: Copyright.Type + (Restriction_Catalogue)(0), // 3: Restriction.Catalogue + (Restriction_Type)(0), // 4: Restriction.Type + (AudioFile_Format)(0), // 5: AudioFile.Format + (Show_MediaType)(0), // 6: Show.MediaType + (Show_ConsumptionOrder)(0), // 7: Show.ConsumptionOrder + (Show_PassthroughEnum)(0), // 8: Show.PassthroughEnum + (*TopTracks)(nil), // 9: TopTracks + (*ActivityPeriod)(nil), // 10: ActivityPeriod + (*Artist)(nil), // 11: Artist + (*AlbumGroup)(nil), // 12: AlbumGroup + (*Date)(nil), // 13: Date + (*Album)(nil), // 14: Album + (*Track)(nil), // 15: Track + (*Image)(nil), // 16: Image + (*ImageGroup)(nil), // 17: ImageGroup + (*Biography)(nil), // 18: Biography + (*Disc)(nil), // 19: Disc + (*Copyright)(nil), // 20: Copyright + (*Restriction)(nil), // 21: Restriction + (*Availability)(nil), // 22: Availability + (*SalePeriod)(nil), // 23: SalePeriod + (*ExternalId)(nil), // 24: ExternalId + (*AudioFile)(nil), // 25: AudioFile + (*VideoFile)(nil), // 26: VideoFile + (*Show)(nil), // 27: Show + (*Episode)(nil), // 28: Episode + (*Category)(nil), // 29: Category + (*OriginalAudio)(nil), // 30: OriginalAudio +} +var file_Spotify_metadata_proto_depIdxs = []int32{ + 15, // 0: TopTracks.track:type_name -> Track + 9, // 1: Artist.top_track:type_name -> TopTracks + 12, // 2: Artist.album_group:type_name -> AlbumGroup + 12, // 3: Artist.single_group:type_name -> AlbumGroup + 12, // 4: Artist.compilation_group:type_name -> AlbumGroup + 12, // 5: Artist.appears_on_group:type_name -> AlbumGroup + 24, // 6: Artist.external_id:type_name -> ExternalId + 16, // 7: Artist.portrait:type_name -> Image + 18, // 8: Artist.biography:type_name -> Biography + 10, // 9: Artist.activity_period:type_name -> ActivityPeriod + 21, // 10: Artist.restriction:type_name -> Restriction + 11, // 11: Artist.related:type_name -> Artist + 17, // 12: Artist.portrait_group:type_name -> ImageGroup + 14, // 13: AlbumGroup.album:type_name -> Album + 11, // 14: Album.artist:type_name -> Artist + 0, // 15: Album.typ:type_name -> Album.Type + 13, // 16: Album.date:type_name -> Date + 16, // 17: Album.cover:type_name -> Image + 24, // 18: Album.external_id:type_name -> ExternalId + 19, // 19: Album.disc:type_name -> Disc + 20, // 20: Album.copyright:type_name -> Copyright + 21, // 21: Album.restriction:type_name -> Restriction + 14, // 22: Album.related:type_name -> Album + 23, // 23: Album.sale_period:type_name -> SalePeriod + 17, // 24: Album.cover_group:type_name -> ImageGroup + 14, // 25: Track.album:type_name -> Album + 11, // 26: Track.artist:type_name -> Artist + 24, // 27: Track.external_id:type_name -> ExternalId + 21, // 28: Track.restriction:type_name -> Restriction + 25, // 29: Track.file:type_name -> AudioFile + 15, // 30: Track.alternative:type_name -> Track + 23, // 31: Track.sale_period:type_name -> SalePeriod + 25, // 32: Track.preview:type_name -> AudioFile + 1, // 33: Image.size:type_name -> Image.Size + 16, // 34: ImageGroup.image:type_name -> Image + 16, // 35: Biography.portrait:type_name -> Image + 17, // 36: Biography.portrait_group:type_name -> ImageGroup + 15, // 37: Disc.track:type_name -> Track + 2, // 38: Copyright.typ:type_name -> Copyright.Type + 3, // 39: Restriction.catalogue:type_name -> Restriction.Catalogue + 4, // 40: Restriction.typ:type_name -> Restriction.Type + 13, // 41: Availability.start:type_name -> Date + 21, // 42: SalePeriod.restriction:type_name -> Restriction + 13, // 43: SalePeriod.start:type_name -> Date + 13, // 44: SalePeriod.end:type_name -> Date + 5, // 45: AudioFile.format:type_name -> AudioFile.Format + 17, // 46: Show.covers:type_name -> ImageGroup + 28, // 47: Show.episode:type_name -> Episode + 20, // 48: Show.copyright:type_name -> Copyright + 21, // 49: Show.restriction:type_name -> Restriction + 6, // 50: Show.media_type:type_name -> Show.MediaType + 7, // 51: Show.consumption_order:type_name -> Show.ConsumptionOrder + 22, // 52: Show.availability:type_name -> Availability + 29, // 53: Show.categories:type_name -> Category + 8, // 54: Show.passthrough:type_name -> Show.PassthroughEnum + 25, // 55: Episode.file:type_name -> AudioFile + 13, // 56: Episode.publish_time:type_name -> Date + 17, // 57: Episode.covers:type_name -> ImageGroup + 27, // 58: Episode.show:type_name -> Show + 26, // 59: Episode.video:type_name -> VideoFile + 26, // 60: Episode.video_preview:type_name -> VideoFile + 25, // 61: Episode.audio_preview:type_name -> AudioFile + 21, // 62: Episode.restriction:type_name -> Restriction + 17, // 63: Episode.freeze_frame:type_name -> ImageGroup + 22, // 64: Episode.availability:type_name -> Availability + 30, // 65: Episode.original_audio:type_name -> OriginalAudio + 29, // 66: Category.subcategories:type_name -> Category + 67, // [67:67] is the sub-list for method output_type + 67, // [67:67] is the sub-list for method input_type + 67, // [67:67] is the sub-list for extension type_name + 67, // [67:67] is the sub-list for extension extendee + 0, // [0:67] is the sub-list for field type_name +} + +func init() { file_Spotify_metadata_proto_init() } +func file_Spotify_metadata_proto_init() { + if File_Spotify_metadata_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_Spotify_metadata_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TopTracks); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActivityPeriod); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Artist); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AlbumGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Date); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Album); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Track); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Image); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Biography); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Disc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Copyright); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Restriction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Availability); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SalePeriod); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExternalId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AudioFile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VideoFile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Show); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Episode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Category); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Spotify_metadata_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OriginalAudio); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_Spotify_metadata_proto_rawDesc, + NumEnums: 9, + NumMessages: 22, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_Spotify_metadata_proto_goTypes, + DependencyIndexes: file_Spotify_metadata_proto_depIdxs, + EnumInfos: file_Spotify_metadata_proto_enumTypes, + MessageInfos: file_Spotify_metadata_proto_msgTypes, + }.Build() + File_Spotify_metadata_proto = out.File + file_Spotify_metadata_proto_rawDesc = nil + file_Spotify_metadata_proto_goTypes = nil + file_Spotify_metadata_proto_depIdxs = nil } diff --git a/Spotify/metadata.proto b/Spotify/metadata.proto index 2434ca3..3812f94 100644 --- a/Spotify/metadata.proto +++ b/Spotify/metadata.proto @@ -1,4 +1,4 @@ -package Spotify; +syntax = "proto2"; message TopTracks { optional string country = 0x1; @@ -39,6 +39,8 @@ message Date { optional sint32 year = 0x1; optional sint32 month = 0x2; optional sint32 day = 0x3; + optional sint32 hour = 0x4; + optional sint32 minute = 0x5; } message Album { @@ -124,15 +126,29 @@ message Copyright { } message Restriction { - optional string countries_allowed = 0x2; - optional string countries_forbidden = 0x3; - optional Type typ = 0x4; + enum Catalogue { + AD = 0; + SUBSCRIPTION = 1; + CATALOGUE_ALL = 2; + SHUFFLE = 3; + COMMERCIAL = 4; + } enum Type { STREAMING = 0x0; } + repeated Catalogue catalogue = 0x1; + optional string countries_allowed = 0x2; + optional string countries_forbidden = 0x3; + optional Type typ = 0x4; + repeated string catalogue_str = 0x5; } +message Availability { + repeated string catalogue_str = 0x1; + optional Date start = 0x2; +} + message SalePeriod { repeated Restriction restriction = 0x1; optional Date start = 0x2; @@ -156,12 +172,95 @@ message AudioFile { MP3_160 = 0x5; MP3_96 = 0x6; MP3_160_ENC = 0x7; - OTHER2 = 0x8; + // v4 + // AAC_24 = 0x8; + // AAC_48 = 0x9; + MP4_128_DUAL = 0x8; OTHER3 = 0x9; AAC_160 = 0xa; AAC_320 = 0xb; - OTHER4 = 0xc; + MP4_128 = 0xc; OTHER5 = 0xd; } } +message VideoFile { + optional bytes file_id = 1; +} + +// Podcast Protos +message Show { + enum MediaType { + MIXED = 0; + AUDIO = 1; + VIDEO = 2; + } + enum ConsumptionOrder { + SEQUENTIAL = 1; + EPISODIC = 2; + RECENT = 3; + } + enum PassthroughEnum { + UNKNOWN = 0; + NONE = 1; + ALLOWED = 2; + } + optional bytes gid = 0x1; + optional string name = 0x2; + optional string description = 0x40; + optional sint32 deprecated_popularity = 0x41; + optional string publisher = 0x42; + optional string language = 0x43; + optional bool explicit = 0x44; + optional ImageGroup covers = 0x45; + repeated Episode episode = 0x46; + repeated Copyright copyright = 0x47; + repeated Restriction restriction = 0x48; + repeated string keyword = 0x49; + optional MediaType media_type = 0x4A; + optional ConsumptionOrder consumption_order = 0x4B; + optional bool interpret_restriction_using_geoip = 0x4C; + repeated Availability availability = 0x4E; + optional string country_of_origin = 0x4F; + repeated Category categories = 0x50; + optional PassthroughEnum passthrough = 0x51; +} + +message Episode { + optional bytes gid = 0x1; + optional string name = 0x2; + optional sint32 duration = 0x7; + optional sint32 popularity = 0x8; + repeated AudioFile file = 0xc; + optional string description = 0x40; + optional sint32 number = 0x41; + optional Date publish_time = 0x42; + optional sint32 deprecated_popularity = 0x43; + optional ImageGroup covers = 0x44; + optional string language = 0x45; + optional bool explicit = 0x46; + optional Show show = 0x47; + repeated VideoFile video = 0x48; + repeated VideoFile video_preview = 0x49; + repeated AudioFile audio_preview = 0x4A; + repeated Restriction restriction = 0x4B; + optional ImageGroup freeze_frame = 0x4C; + repeated string keyword = 0x4D; + // Order of these two flags might be wrong! + optional bool suppress_monetization = 0x4E; + optional bool interpret_restriction_using_geoip = 0x4F; + + optional bool allow_background_playback = 0x51; + repeated Availability availability = 0x52; + optional string external_url = 0x53; + optional OriginalAudio original_audio = 0x54; +} + +message Category { + optional string name = 0x1; + repeated Category subcategories = 0x2; +} + +message OriginalAudio { + optional bytes uuid = 0x1; +} diff --git a/go.mod b/go.mod index aea0ad8..02ee948 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,16 @@ module github.com/librespot-org/librespot-golang +go 1.16 + require ( github.com/badfortrains/mdns v0.0.0-20160325001438-447166384f51 - github.com/golang/protobuf v1.3.1 + github.com/golang/protobuf v1.5.0 github.com/miekg/dns v1.1.8 // indirect github.com/stretchr/testify v1.3.0 github.com/xlab/portaudio-go v0.0.0-20170905165025-132d041879db github.com/xlab/vorbis-go v0.0.0-20190125051917-087364aef51d golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 golang.org/x/net v0.0.0-20190420063019-afa5a82059c6 // indirect + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 669dd5e..736c54b 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,17 @@ github.com/badfortrains/mdns v0.0.0-20160325001438-447166384f51 h1:b6+GdpGhuzxPETrVLwY77iq0L/BqLpcPRmaLNW+SoRY= github.com/badfortrains/mdns v0.0.0-20160325001438-447166384f51/go.mod h1:qHRkxMBkkpAWD2poeBYQt6O5IS4dE6w1Cr4Z8Q3feXI= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/miekg/dns v1.1.8 h1:1QYRAKU3lN5cRfLCkPU08hwvLJFhvjP6MqNMmQz6ZVI= github.com/miekg/dns v1.1.8/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/xlab/portaudio-go v0.0.0-20170905165025-132d041879db h1:sSIQlvfIWUHLDhEWUL2K2CeYv9CDksC00VxuxPUe4lw= github.com/xlab/portaudio-go v0.0.0-20170905165025-132d041879db/go.mod h1:r57mRacDQMS6Fz8ubv1nE8zZ0DbQ/sY0NkCmdxeUXmY= @@ -17,7 +22,14 @@ golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 h1:O5YqonU5IWby+w98jVUG9h golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/net v0.0.0-20190420063019-afa5a82059c6 h1:HdqqaWmYAUI7/dmByKKEw+yxDksGSo+9GjkUc9Zp34E= golang.org/x/net v0.0.0-20190420063019-afa5a82059c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e h1:nFYrTHrdrAOpShe27kaFHjsqYSEQ0KWqdWLu3xuZJts= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/librespot/mercury/api.go b/librespot/mercury/api.go index 9e0e3b3..767b5df 100644 --- a/librespot/mercury/api.go +++ b/librespot/mercury/api.go @@ -3,10 +3,11 @@ package mercury import ( "encoding/json" "fmt" + "net/url" + "github.com/golang/protobuf/proto" "github.com/librespot-org/librespot-golang/Spotify" "github.com/librespot-org/librespot-golang/librespot/metadata" - "net/url" ) func (m *Client) mercuryGet(url string) []byte { @@ -107,6 +108,20 @@ func (m *Client) GetAlbum(id string) (*Spotify.Album, error) { return result, err } +func (m *Client) GetEpisode(id string) (*Spotify.Episode, error) { + uri := "hm://metadata/3/episode/" + id + result := &Spotify.Episode{} + err := m.mercuryGetProto(uri, result) + return result, err +} + +func (m *Client) GetShow(id string) (*Spotify.Show, error) { + uri := "hm://metadata/3/show/" + id + result := &Spotify.Show{} + err := m.mercuryGetProto(uri, result) + return result, err +} + func parseSuggest(body []byte) (*metadata.SuggestResult, error) { result := &metadata.SuggestResult{} err := json.Unmarshal(body, result)