Refactor the proto

This commit is contained in:
Alexander
2026-05-07 17:02:46 +02:00
parent 3d111f9008
commit 54d94b939e
5 changed files with 371 additions and 248 deletions
+6 -6
View File
@@ -39,7 +39,7 @@ func (s *MetadataServer) getService(ctx context.Context, p metadatav1.Provider)
return svc, nil
}
func (s *MetadataServer) GetArtist(ctx context.Context, req *metadatav1.GetArtistRequest) (*metadatav1.Artist, error) {
func (s *MetadataServer) GetArtist(ctx context.Context, req *metadatav1.GetArtistRequest) (*metadatav1.GetArtistResponse, error) {
log := zerolog.Ctx(ctx)
svc, err := s.getService(ctx, req.Provider)
@@ -66,7 +66,7 @@ func (s *MetadataServer) GetArtist(ctx context.Context, req *metadatav1.GetArtis
}
log.Trace().Str("artist_id", artist.ID).Str("name", artist.Name).Msg("artist found")
return toProtoArtist(artist), nil
return &metadatav1.GetArtistResponse{Artist: toProtoArtist(artist)}, nil
}
func (s *MetadataServer) SearchArtists(ctx context.Context, req *metadatav1.SearchArtistsRequest) (*metadatav1.SearchArtistsResponse, error) {
@@ -133,7 +133,7 @@ func (s *MetadataServer) SearchAlbums(ctx context.Context, req *metadatav1.Searc
return resp, nil
}
func (s *MetadataServer) GetAlbum(ctx context.Context, req *metadatav1.GetAlbumRequest) (*metadatav1.Album, error) {
func (s *MetadataServer) GetAlbum(ctx context.Context, req *metadatav1.GetAlbumRequest) (*metadatav1.GetAlbumResponse, error) {
log := zerolog.Ctx(ctx)
svc, err := s.getService(ctx, req.Provider)
@@ -160,7 +160,7 @@ func (s *MetadataServer) GetAlbum(ctx context.Context, req *metadatav1.GetAlbumR
}
log.Trace().Str("album_id", album.ID).Str("title", album.Title).Msg("album found")
return toProtoAlbum(album), nil
return &metadatav1.GetAlbumResponse{Album: toProtoAlbum(album)}, nil
}
func (s *MetadataServer) GetArtistAlbums(ctx context.Context, req *metadatav1.GetArtistAlbumsRequest) (*metadatav1.GetArtistAlbumsResponse, error) {
@@ -195,7 +195,7 @@ func (s *MetadataServer) GetArtistAlbums(ctx context.Context, req *metadatav1.Ge
return resp, nil
}
func (s *MetadataServer) GetTrack(ctx context.Context, req *metadatav1.GetTrackRequest) (*metadatav1.Track, error) {
func (s *MetadataServer) GetTrack(ctx context.Context, req *metadatav1.GetTrackRequest) (*metadatav1.GetTrackResponse, error) {
log := zerolog.Ctx(ctx)
svc, err := s.getService(ctx, req.Provider)
@@ -236,7 +236,7 @@ func (s *MetadataServer) GetTrack(ctx context.Context, req *metadatav1.GetTrackR
}
log.Trace().Str("track_id", track.Id).Str("title", track.Title).Msg("track found")
return track, nil
return &metadatav1.GetTrackResponse{Track: track}, nil
}
func (s *MetadataServer) GetAlbumTracks(ctx context.Context, req *metadatav1.GetAlbumTracksRequest) (*metadatav1.GetAlbumTracksResponse, error) {
+313 -169
View File
@@ -74,7 +74,7 @@ type GetArtistRequest struct {
// *GetArtistRequest_Id
// *GetArtistRequest_External
Identifier isGetArtistRequest_Identifier `protobuf_oneof:"identifier"`
Provider Provider `protobuf:"varint,3,opt,name=provider,proto3,enum=metadata.v1.Provider" json:"provider,omitempty"` // UNSPECIFIED = query all providers
Provider Provider `protobuf:"varint,3,opt,name=provider,proto3,enum=metadata.v1.Provider" json:"provider,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -146,11 +146,11 @@ type isGetArtistRequest_Identifier interface {
}
type GetArtistRequest_Id struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Internal UUID
Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
}
type GetArtistRequest_External struct {
External *ExternalID `protobuf:"bytes,2,opt,name=external,proto3,oneof"` // External source ID (e.g., musicbrainz MBID)
External *ExternalID `protobuf:"bytes,2,opt,name=external,proto3,oneof"`
}
func (*GetArtistRequest_Id) isGetArtistRequest_Identifier() {}
@@ -617,58 +617,6 @@ func (x *SearchAlbumsRequest) GetProvider() Provider {
return Provider_PROVIDER_UNSPECIFIED
}
type SearchAlbumsResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Albums []*Album `protobuf:"bytes,1,rep,name=albums,proto3" json:"albums,omitempty"`
Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SearchAlbumsResponse) Reset() {
*x = SearchAlbumsResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SearchAlbumsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchAlbumsResponse) ProtoMessage() {}
func (x *SearchAlbumsResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchAlbumsResponse.ProtoReflect.Descriptor instead.
func (*SearchAlbumsResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{7}
}
func (x *SearchAlbumsResponse) GetAlbums() []*Album {
if x != nil {
return x.Albums
}
return nil
}
func (x *SearchAlbumsResponse) GetTotal() int32 {
if x != nil {
return x.Total
}
return 0
}
type SyncArtistRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
// Types that are valid to be assigned to Target:
@@ -683,7 +631,7 @@ type SyncArtistRequest struct {
func (x *SyncArtistRequest) Reset() {
*x = SyncArtistRequest{}
mi := &file_metadata_v1_metadata_proto_msgTypes[8]
mi := &file_metadata_v1_metadata_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -695,7 +643,7 @@ func (x *SyncArtistRequest) String() string {
func (*SyncArtistRequest) ProtoMessage() {}
func (x *SyncArtistRequest) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[8]
mi := &file_metadata_v1_metadata_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -708,7 +656,7 @@ func (x *SyncArtistRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SyncArtistRequest.ProtoReflect.Descriptor instead.
func (*SyncArtistRequest) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{8}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{7}
}
func (x *SyncArtistRequest) GetTarget() isSyncArtistRequest_Target {
@@ -759,6 +707,50 @@ func (*SyncArtistRequest_Name) isSyncArtistRequest_Target() {}
func (*SyncArtistRequest_External) isSyncArtistRequest_Target() {}
type GetArtistResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Artist *Artist `protobuf:"bytes,1,opt,name=artist,proto3" json:"artist,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetArtistResponse) Reset() {
*x = GetArtistResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetArtistResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetArtistResponse) ProtoMessage() {}
func (x *GetArtistResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetArtistResponse.ProtoReflect.Descriptor instead.
func (*GetArtistResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{8}
}
func (x *GetArtistResponse) GetArtist() *Artist {
if x != nil {
return x.Artist
}
return nil
}
type SearchArtistsResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Artists []*Artist `protobuf:"bytes,1,rep,name=artists,proto3" json:"artists,omitempty"`
@@ -811,6 +803,50 @@ func (x *SearchArtistsResponse) GetTotal() int32 {
return 0
}
type GetAlbumResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Album *Album `protobuf:"bytes,1,opt,name=album,proto3" json:"album,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetAlbumResponse) Reset() {
*x = GetAlbumResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetAlbumResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetAlbumResponse) ProtoMessage() {}
func (x *GetAlbumResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[10]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetAlbumResponse.ProtoReflect.Descriptor instead.
func (*GetAlbumResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{10}
}
func (x *GetAlbumResponse) GetAlbum() *Album {
if x != nil {
return x.Album
}
return nil
}
type GetArtistAlbumsResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Albums []*Album `protobuf:"bytes,1,rep,name=albums,proto3" json:"albums,omitempty"`
@@ -821,7 +857,7 @@ type GetArtistAlbumsResponse struct {
func (x *GetArtistAlbumsResponse) Reset() {
*x = GetArtistAlbumsResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[10]
mi := &file_metadata_v1_metadata_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -833,7 +869,7 @@ func (x *GetArtistAlbumsResponse) String() string {
func (*GetArtistAlbumsResponse) ProtoMessage() {}
func (x *GetArtistAlbumsResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[10]
mi := &file_metadata_v1_metadata_proto_msgTypes[11]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -846,7 +882,7 @@ func (x *GetArtistAlbumsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetArtistAlbumsResponse.ProtoReflect.Descriptor instead.
func (*GetArtistAlbumsResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{10}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{11}
}
func (x *GetArtistAlbumsResponse) GetAlbums() []*Album {
@@ -863,6 +899,50 @@ func (x *GetArtistAlbumsResponse) GetTotal() int32 {
return 0
}
type GetTrackResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Track *Track `protobuf:"bytes,1,opt,name=track,proto3" json:"track,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetTrackResponse) Reset() {
*x = GetTrackResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetTrackResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetTrackResponse) ProtoMessage() {}
func (x *GetTrackResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[12]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetTrackResponse.ProtoReflect.Descriptor instead.
func (*GetTrackResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{12}
}
func (x *GetTrackResponse) GetTrack() *Track {
if x != nil {
return x.Track
}
return nil
}
type GetAlbumTracksResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Tracks []*Track `protobuf:"bytes,1,rep,name=tracks,proto3" json:"tracks,omitempty"`
@@ -872,7 +952,7 @@ type GetAlbumTracksResponse struct {
func (x *GetAlbumTracksResponse) Reset() {
*x = GetAlbumTracksResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[11]
mi := &file_metadata_v1_metadata_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -884,7 +964,7 @@ func (x *GetAlbumTracksResponse) String() string {
func (*GetAlbumTracksResponse) ProtoMessage() {}
func (x *GetAlbumTracksResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[11]
mi := &file_metadata_v1_metadata_proto_msgTypes[13]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -897,7 +977,7 @@ func (x *GetAlbumTracksResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetAlbumTracksResponse.ProtoReflect.Descriptor instead.
func (*GetAlbumTracksResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{11}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{13}
}
func (x *GetAlbumTracksResponse) GetTracks() []*Track {
@@ -907,6 +987,58 @@ func (x *GetAlbumTracksResponse) GetTracks() []*Track {
return nil
}
type SearchAlbumsResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Albums []*Album `protobuf:"bytes,1,rep,name=albums,proto3" json:"albums,omitempty"`
Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SearchAlbumsResponse) Reset() {
*x = SearchAlbumsResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SearchAlbumsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchAlbumsResponse) ProtoMessage() {}
func (x *SearchAlbumsResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[14]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchAlbumsResponse.ProtoReflect.Descriptor instead.
func (*SearchAlbumsResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{14}
}
func (x *SearchAlbumsResponse) GetAlbums() []*Album {
if x != nil {
return x.Albums
}
return nil
}
func (x *SearchAlbumsResponse) GetTotal() int32 {
if x != nil {
return x.Total
}
return 0
}
type SyncArtistResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Artist *Artist `protobuf:"bytes,1,opt,name=artist,proto3" json:"artist,omitempty"`
@@ -918,7 +1050,7 @@ type SyncArtistResponse struct {
func (x *SyncArtistResponse) Reset() {
*x = SyncArtistResponse{}
mi := &file_metadata_v1_metadata_proto_msgTypes[12]
mi := &file_metadata_v1_metadata_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -930,7 +1062,7 @@ func (x *SyncArtistResponse) String() string {
func (*SyncArtistResponse) ProtoMessage() {}
func (x *SyncArtistResponse) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[12]
mi := &file_metadata_v1_metadata_proto_msgTypes[15]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -943,7 +1075,7 @@ func (x *SyncArtistResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SyncArtistResponse.ProtoReflect.Descriptor instead.
func (*SyncArtistResponse) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{12}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{15}
}
func (x *SyncArtistResponse) GetArtist() *Artist {
@@ -972,7 +1104,7 @@ type Artist struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
SortName string `protobuf:"bytes,3,opt,name=sort_name,json=sortName,proto3" json:"sort_name,omitempty"`
ArtistType string `protobuf:"bytes,4,opt,name=artist_type,json=artistType,proto3" json:"artist_type,omitempty"` // person, group, orchestra, etc.
ArtistType string `protobuf:"bytes,4,opt,name=artist_type,json=artistType,proto3" json:"artist_type,omitempty"`
Country string `protobuf:"bytes,5,opt,name=country,proto3" json:"country,omitempty"`
FormedDate string `protobuf:"bytes,6,opt,name=formed_date,json=formedDate,proto3" json:"formed_date,omitempty"`
DisbandedDate string `protobuf:"bytes,7,opt,name=disbanded_date,json=disbandedDate,proto3" json:"disbanded_date,omitempty"`
@@ -986,7 +1118,7 @@ type Artist struct {
func (x *Artist) Reset() {
*x = Artist{}
mi := &file_metadata_v1_metadata_proto_msgTypes[13]
mi := &file_metadata_v1_metadata_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -998,7 +1130,7 @@ func (x *Artist) String() string {
func (*Artist) ProtoMessage() {}
func (x *Artist) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[13]
mi := &file_metadata_v1_metadata_proto_msgTypes[16]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1011,7 +1143,7 @@ func (x *Artist) ProtoReflect() protoreflect.Message {
// Deprecated: Use Artist.ProtoReflect.Descriptor instead.
func (*Artist) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{13}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{16}
}
func (x *Artist) GetId() string {
@@ -1095,7 +1227,7 @@ type Album struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
AlbumType string `protobuf:"bytes,3,opt,name=album_type,json=albumType,proto3" json:"album_type,omitempty"` // album, ep, single, compilation
AlbumType string `protobuf:"bytes,3,opt,name=album_type,json=albumType,proto3" json:"album_type,omitempty"`
ReleaseDate string `protobuf:"bytes,4,opt,name=release_date,json=releaseDate,proto3" json:"release_date,omitempty"`
Upc string `protobuf:"bytes,5,opt,name=upc,proto3" json:"upc,omitempty"`
TotalTracks int32 `protobuf:"varint,6,opt,name=total_tracks,json=totalTracks,proto3" json:"total_tracks,omitempty"`
@@ -1111,7 +1243,7 @@ type Album struct {
func (x *Album) Reset() {
*x = Album{}
mi := &file_metadata_v1_metadata_proto_msgTypes[14]
mi := &file_metadata_v1_metadata_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1123,7 +1255,7 @@ func (x *Album) String() string {
func (*Album) ProtoMessage() {}
func (x *Album) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[14]
mi := &file_metadata_v1_metadata_proto_msgTypes[17]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1136,7 +1268,7 @@ func (x *Album) ProtoReflect() protoreflect.Message {
// Deprecated: Use Album.ProtoReflect.Descriptor instead.
func (*Album) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{14}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{17}
}
func (x *Album) GetId() string {
@@ -1241,7 +1373,7 @@ type Track struct {
func (x *Track) Reset() {
*x = Track{}
mi := &file_metadata_v1_metadata_proto_msgTypes[15]
mi := &file_metadata_v1_metadata_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1253,7 +1385,7 @@ func (x *Track) String() string {
func (*Track) ProtoMessage() {}
func (x *Track) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[15]
mi := &file_metadata_v1_metadata_proto_msgTypes[18]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1266,7 +1398,7 @@ func (x *Track) ProtoReflect() protoreflect.Message {
// Deprecated: Use Track.ProtoReflect.Descriptor instead.
func (*Track) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{15}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{18}
}
func (x *Track) GetId() string {
@@ -1352,7 +1484,7 @@ type Work struct {
func (x *Work) Reset() {
*x = Work{}
mi := &file_metadata_v1_metadata_proto_msgTypes[16]
mi := &file_metadata_v1_metadata_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1364,7 +1496,7 @@ func (x *Work) String() string {
func (*Work) ProtoMessage() {}
func (x *Work) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[16]
mi := &file_metadata_v1_metadata_proto_msgTypes[19]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1377,7 +1509,7 @@ func (x *Work) ProtoReflect() protoreflect.Message {
// Deprecated: Use Work.ProtoReflect.Descriptor instead.
func (*Work) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{16}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{19}
}
func (x *Work) GetId() string {
@@ -1426,7 +1558,7 @@ type Label struct {
func (x *Label) Reset() {
*x = Label{}
mi := &file_metadata_v1_metadata_proto_msgTypes[17]
mi := &file_metadata_v1_metadata_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1438,7 +1570,7 @@ func (x *Label) String() string {
func (*Label) ProtoMessage() {}
func (x *Label) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[17]
mi := &file_metadata_v1_metadata_proto_msgTypes[20]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1451,7 +1583,7 @@ func (x *Label) ProtoReflect() protoreflect.Message {
// Deprecated: Use Label.ProtoReflect.Descriptor instead.
func (*Label) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{17}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{20}
}
func (x *Label) GetId() string {
@@ -1485,7 +1617,7 @@ type Genre struct {
func (x *Genre) Reset() {
*x = Genre{}
mi := &file_metadata_v1_metadata_proto_msgTypes[18]
mi := &file_metadata_v1_metadata_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1497,7 +1629,7 @@ func (x *Genre) String() string {
func (*Genre) ProtoMessage() {}
func (x *Genre) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[18]
mi := &file_metadata_v1_metadata_proto_msgTypes[21]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1510,7 +1642,7 @@ func (x *Genre) ProtoReflect() protoreflect.Message {
// Deprecated: Use Genre.ProtoReflect.Descriptor instead.
func (*Genre) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{18}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{21}
}
func (x *Genre) GetId() string {
@@ -1530,16 +1662,16 @@ func (x *Genre) GetName() string {
type ArtistCredit struct {
state protoimpl.MessageState `protogen:"open.v1"`
Artist *Artist `protobuf:"bytes,1,opt,name=artist,proto3" json:"artist,omitempty"`
Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` // primary, featured, remixer, producer
Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"`
Position int32 `protobuf:"varint,3,opt,name=position,proto3" json:"position,omitempty"`
JoinPhrase string `protobuf:"bytes,4,opt,name=join_phrase,json=joinPhrase,proto3" json:"join_phrase,omitempty"` // " & ", " feat. ", etc.
JoinPhrase string `protobuf:"bytes,4,opt,name=join_phrase,json=joinPhrase,proto3" json:"join_phrase,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ArtistCredit) Reset() {
*x = ArtistCredit{}
mi := &file_metadata_v1_metadata_proto_msgTypes[19]
mi := &file_metadata_v1_metadata_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1551,7 +1683,7 @@ func (x *ArtistCredit) String() string {
func (*ArtistCredit) ProtoMessage() {}
func (x *ArtistCredit) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[19]
mi := &file_metadata_v1_metadata_proto_msgTypes[22]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1564,7 +1696,7 @@ func (x *ArtistCredit) ProtoReflect() protoreflect.Message {
// Deprecated: Use ArtistCredit.ProtoReflect.Descriptor instead.
func (*ArtistCredit) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{19}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{22}
}
func (x *ArtistCredit) GetArtist() *Artist {
@@ -1597,7 +1729,7 @@ func (x *ArtistCredit) GetJoinPhrase() string {
type ExternalID struct {
state protoimpl.MessageState `protogen:"open.v1"`
Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // musicbrainz, spotify, discogs, etc.
Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"`
SourceId string `protobuf:"bytes,2,opt,name=source_id,json=sourceId,proto3" json:"source_id,omitempty"`
Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
unknownFields protoimpl.UnknownFields
@@ -1606,7 +1738,7 @@ type ExternalID struct {
func (x *ExternalID) Reset() {
*x = ExternalID{}
mi := &file_metadata_v1_metadata_proto_msgTypes[20]
mi := &file_metadata_v1_metadata_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1618,7 +1750,7 @@ func (x *ExternalID) String() string {
func (*ExternalID) ProtoMessage() {}
func (x *ExternalID) ProtoReflect() protoreflect.Message {
mi := &file_metadata_v1_metadata_proto_msgTypes[20]
mi := &file_metadata_v1_metadata_proto_msgTypes[23]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1631,7 +1763,7 @@ func (x *ExternalID) ProtoReflect() protoreflect.Message {
// Deprecated: Use ExternalID.ProtoReflect.Descriptor instead.
func (*ExternalID) Descriptor() ([]byte, []int) {
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{20}
return file_metadata_v1_metadata_proto_rawDescGZIP(), []int{23}
}
func (x *ExternalID) GetSource() string {
@@ -1697,23 +1829,29 @@ const file_metadata_v1_metadata_proto_rawDesc = "" +
"\x06artist\x18\x02 \x01(\tR\x06artist\x12\x14\n" +
"\x05limit\x18\x03 \x01(\x05R\x05limit\x12\x16\n" +
"\x06offset\x18\x04 \x01(\x05R\x06offset\x121\n" +
"\bprovider\x18\x05 \x01(\x0e2\x15.metadata.v1.ProviderR\bprovider\"X\n" +
"\x14SearchAlbumsResponse\x12*\n" +
"\x06albums\x18\x01 \x03(\v2\x12.metadata.v1.AlbumR\x06albums\x12\x14\n" +
"\x05total\x18\x02 \x01(\x05R\x05total\"\x9d\x01\n" +
"\bprovider\x18\x05 \x01(\x0e2\x15.metadata.v1.ProviderR\bprovider\"\x9d\x01\n" +
"\x11SyncArtistRequest\x12\x14\n" +
"\x04name\x18\x01 \x01(\tH\x00R\x04name\x125\n" +
"\bexternal\x18\x02 \x01(\v2\x17.metadata.v1.ExternalIDH\x00R\bexternal\x121\n" +
"\bprovider\x18\x03 \x01(\x0e2\x15.metadata.v1.ProviderR\bproviderB\b\n" +
"\x06target\"\\\n" +
"\x06target\"@\n" +
"\x11GetArtistResponse\x12+\n" +
"\x06artist\x18\x01 \x01(\v2\x13.metadata.v1.ArtistR\x06artist\"\\\n" +
"\x15SearchArtistsResponse\x12-\n" +
"\aartists\x18\x01 \x03(\v2\x13.metadata.v1.ArtistR\aartists\x12\x14\n" +
"\x05total\x18\x02 \x01(\x05R\x05total\"[\n" +
"\x05total\x18\x02 \x01(\x05R\x05total\"<\n" +
"\x10GetAlbumResponse\x12(\n" +
"\x05album\x18\x01 \x01(\v2\x12.metadata.v1.AlbumR\x05album\"[\n" +
"\x17GetArtistAlbumsResponse\x12*\n" +
"\x06albums\x18\x01 \x03(\v2\x12.metadata.v1.AlbumR\x06albums\x12\x14\n" +
"\x05total\x18\x02 \x01(\x05R\x05total\"D\n" +
"\x05total\x18\x02 \x01(\x05R\x05total\"<\n" +
"\x10GetTrackResponse\x12(\n" +
"\x05track\x18\x01 \x01(\v2\x12.metadata.v1.TrackR\x05track\"D\n" +
"\x16GetAlbumTracksResponse\x12*\n" +
"\x06tracks\x18\x01 \x03(\v2\x12.metadata.v1.TrackR\x06tracks\"\x8b\x01\n" +
"\x06tracks\x18\x01 \x03(\v2\x12.metadata.v1.TrackR\x06tracks\"X\n" +
"\x14SearchAlbumsResponse\x12*\n" +
"\x06albums\x18\x01 \x03(\v2\x12.metadata.v1.AlbumR\x06albums\x12\x14\n" +
"\x05total\x18\x02 \x01(\x05R\x05total\"\x8b\x01\n" +
"\x12SyncArtistResponse\x12+\n" +
"\x06artist\x18\x01 \x01(\v2\x13.metadata.v1.ArtistR\x06artist\x12#\n" +
"\ralbums_synced\x18\x02 \x01(\x05R\falbumsSynced\x12#\n" +
@@ -1789,13 +1927,13 @@ const file_metadata_v1_metadata_proto_rawDesc = "" +
"\x03url\x18\x03 \x01(\tR\x03url*>\n" +
"\bProvider\x12\x18\n" +
"\x14PROVIDER_UNSPECIFIED\x10\x00\x12\x18\n" +
"\x14PROVIDER_MUSICBRAINZ\x10\x012\x83\x05\n" +
"\x0fMetadataService\x12?\n" +
"\tGetArtist\x12\x1d.metadata.v1.GetArtistRequest\x1a\x13.metadata.v1.Artist\x12V\n" +
"\rSearchArtists\x12!.metadata.v1.SearchArtistsRequest\x1a\".metadata.v1.SearchArtistsResponse\x12<\n" +
"\bGetAlbum\x12\x1c.metadata.v1.GetAlbumRequest\x1a\x12.metadata.v1.Album\x12\\\n" +
"\x0fGetArtistAlbums\x12#.metadata.v1.GetArtistAlbumsRequest\x1a$.metadata.v1.GetArtistAlbumsResponse\x12<\n" +
"\bGetTrack\x12\x1c.metadata.v1.GetTrackRequest\x1a\x12.metadata.v1.Track\x12Y\n" +
"\x14PROVIDER_MUSICBRAINZ\x10\x012\xa4\x05\n" +
"\x0fMetadataService\x12J\n" +
"\tGetArtist\x12\x1d.metadata.v1.GetArtistRequest\x1a\x1e.metadata.v1.GetArtistResponse\x12V\n" +
"\rSearchArtists\x12!.metadata.v1.SearchArtistsRequest\x1a\".metadata.v1.SearchArtistsResponse\x12G\n" +
"\bGetAlbum\x12\x1c.metadata.v1.GetAlbumRequest\x1a\x1d.metadata.v1.GetAlbumResponse\x12\\\n" +
"\x0fGetArtistAlbums\x12#.metadata.v1.GetArtistAlbumsRequest\x1a$.metadata.v1.GetArtistAlbumsResponse\x12G\n" +
"\bGetTrack\x12\x1c.metadata.v1.GetTrackRequest\x1a\x1d.metadata.v1.GetTrackResponse\x12Y\n" +
"\x0eGetAlbumTracks\x12\".metadata.v1.GetAlbumTracksRequest\x1a#.metadata.v1.GetAlbumTracksResponse\x12S\n" +
"\fSearchAlbums\x12 .metadata.v1.SearchAlbumsRequest\x1a!.metadata.v1.SearchAlbumsResponse\x12M\n" +
"\n" +
@@ -1815,7 +1953,7 @@ func file_metadata_v1_metadata_proto_rawDescGZIP() []byte {
}
var file_metadata_v1_metadata_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_metadata_v1_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
var file_metadata_v1_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 24)
var file_metadata_v1_metadata_proto_goTypes = []any{
(Provider)(0), // 0: metadata.v1.Provider
(*GetArtistRequest)(nil), // 1: metadata.v1.GetArtistRequest
@@ -1825,71 +1963,77 @@ var file_metadata_v1_metadata_proto_goTypes = []any{
(*GetTrackRequest)(nil), // 5: metadata.v1.GetTrackRequest
(*GetAlbumTracksRequest)(nil), // 6: metadata.v1.GetAlbumTracksRequest
(*SearchAlbumsRequest)(nil), // 7: metadata.v1.SearchAlbumsRequest
(*SearchAlbumsResponse)(nil), // 8: metadata.v1.SearchAlbumsResponse
(*SyncArtistRequest)(nil), // 9: metadata.v1.SyncArtistRequest
(*SyncArtistRequest)(nil), // 8: metadata.v1.SyncArtistRequest
(*GetArtistResponse)(nil), // 9: metadata.v1.GetArtistResponse
(*SearchArtistsResponse)(nil), // 10: metadata.v1.SearchArtistsResponse
(*GetArtistAlbumsResponse)(nil), // 11: metadata.v1.GetArtistAlbumsResponse
(*GetAlbumTracksResponse)(nil), // 12: metadata.v1.GetAlbumTracksResponse
(*SyncArtistResponse)(nil), // 13: metadata.v1.SyncArtistResponse
(*Artist)(nil), // 14: metadata.v1.Artist
(*Album)(nil), // 15: metadata.v1.Album
(*Track)(nil), // 16: metadata.v1.Track
(*Work)(nil), // 17: metadata.v1.Work
(*Label)(nil), // 18: metadata.v1.Label
(*Genre)(nil), // 19: metadata.v1.Genre
(*ArtistCredit)(nil), // 20: metadata.v1.ArtistCredit
(*ExternalID)(nil), // 21: metadata.v1.ExternalID
(*GetAlbumResponse)(nil), // 11: metadata.v1.GetAlbumResponse
(*GetArtistAlbumsResponse)(nil), // 12: metadata.v1.GetArtistAlbumsResponse
(*GetTrackResponse)(nil), // 13: metadata.v1.GetTrackResponse
(*GetAlbumTracksResponse)(nil), // 14: metadata.v1.GetAlbumTracksResponse
(*SearchAlbumsResponse)(nil), // 15: metadata.v1.SearchAlbumsResponse
(*SyncArtistResponse)(nil), // 16: metadata.v1.SyncArtistResponse
(*Artist)(nil), // 17: metadata.v1.Artist
(*Album)(nil), // 18: metadata.v1.Album
(*Track)(nil), // 19: metadata.v1.Track
(*Work)(nil), // 20: metadata.v1.Work
(*Label)(nil), // 21: metadata.v1.Label
(*Genre)(nil), // 22: metadata.v1.Genre
(*ArtistCredit)(nil), // 23: metadata.v1.ArtistCredit
(*ExternalID)(nil), // 24: metadata.v1.ExternalID
}
var file_metadata_v1_metadata_proto_depIdxs = []int32{
21, // 0: metadata.v1.GetArtistRequest.external:type_name -> metadata.v1.ExternalID
24, // 0: metadata.v1.GetArtistRequest.external:type_name -> metadata.v1.ExternalID
0, // 1: metadata.v1.GetArtistRequest.provider:type_name -> metadata.v1.Provider
0, // 2: metadata.v1.SearchArtistsRequest.provider:type_name -> metadata.v1.Provider
21, // 3: metadata.v1.GetAlbumRequest.external:type_name -> metadata.v1.ExternalID
24, // 3: metadata.v1.GetAlbumRequest.external:type_name -> metadata.v1.ExternalID
0, // 4: metadata.v1.GetAlbumRequest.provider:type_name -> metadata.v1.Provider
0, // 5: metadata.v1.GetArtistAlbumsRequest.provider:type_name -> metadata.v1.Provider
21, // 6: metadata.v1.GetTrackRequest.external:type_name -> metadata.v1.ExternalID
24, // 6: metadata.v1.GetTrackRequest.external:type_name -> metadata.v1.ExternalID
0, // 7: metadata.v1.GetTrackRequest.provider:type_name -> metadata.v1.Provider
0, // 8: metadata.v1.GetAlbumTracksRequest.provider:type_name -> metadata.v1.Provider
0, // 9: metadata.v1.SearchAlbumsRequest.provider:type_name -> metadata.v1.Provider
15, // 10: metadata.v1.SearchAlbumsResponse.albums:type_name -> metadata.v1.Album
21, // 11: metadata.v1.SyncArtistRequest.external:type_name -> metadata.v1.ExternalID
0, // 12: metadata.v1.SyncArtistRequest.provider:type_name -> metadata.v1.Provider
14, // 13: metadata.v1.SearchArtistsResponse.artists:type_name -> metadata.v1.Artist
15, // 14: metadata.v1.GetArtistAlbumsResponse.albums:type_name -> metadata.v1.Album
16, // 15: metadata.v1.GetAlbumTracksResponse.tracks:type_name -> metadata.v1.Track
14, // 16: metadata.v1.SyncArtistResponse.artist:type_name -> metadata.v1.Artist
19, // 17: metadata.v1.Artist.genres:type_name -> metadata.v1.Genre
21, // 18: metadata.v1.Artist.external_ids:type_name -> metadata.v1.ExternalID
20, // 19: metadata.v1.Album.artists:type_name -> metadata.v1.ArtistCredit
18, // 20: metadata.v1.Album.label:type_name -> metadata.v1.Label
19, // 21: metadata.v1.Album.genres:type_name -> metadata.v1.Genre
21, // 22: metadata.v1.Album.external_ids:type_name -> metadata.v1.ExternalID
20, // 23: metadata.v1.Track.artists:type_name -> metadata.v1.ArtistCredit
17, // 24: metadata.v1.Track.work:type_name -> metadata.v1.Work
21, // 25: metadata.v1.Track.external_ids:type_name -> metadata.v1.ExternalID
20, // 26: metadata.v1.Work.composers:type_name -> metadata.v1.ArtistCredit
14, // 27: metadata.v1.ArtistCredit.artist:type_name -> metadata.v1.Artist
1, // 28: metadata.v1.MetadataService.GetArtist:input_type -> metadata.v1.GetArtistRequest
2, // 29: metadata.v1.MetadataService.SearchArtists:input_type -> metadata.v1.SearchArtistsRequest
3, // 30: metadata.v1.MetadataService.GetAlbum:input_type -> metadata.v1.GetAlbumRequest
4, // 31: metadata.v1.MetadataService.GetArtistAlbums:input_type -> metadata.v1.GetArtistAlbumsRequest
5, // 32: metadata.v1.MetadataService.GetTrack:input_type -> metadata.v1.GetTrackRequest
6, // 33: metadata.v1.MetadataService.GetAlbumTracks:input_type -> metadata.v1.GetAlbumTracksRequest
7, // 34: metadata.v1.MetadataService.SearchAlbums:input_type -> metadata.v1.SearchAlbumsRequest
9, // 35: metadata.v1.MetadataService.SyncArtist:input_type -> metadata.v1.SyncArtistRequest
14, // 36: metadata.v1.MetadataService.GetArtist:output_type -> metadata.v1.Artist
10, // 37: metadata.v1.MetadataService.SearchArtists:output_type -> metadata.v1.SearchArtistsResponse
15, // 38: metadata.v1.MetadataService.GetAlbum:output_type -> metadata.v1.Album
11, // 39: metadata.v1.MetadataService.GetArtistAlbums:output_type -> metadata.v1.GetArtistAlbumsResponse
16, // 40: metadata.v1.MetadataService.GetTrack:output_type -> metadata.v1.Track
12, // 41: metadata.v1.MetadataService.GetAlbumTracks:output_type -> metadata.v1.GetAlbumTracksResponse
8, // 42: metadata.v1.MetadataService.SearchAlbums:output_type -> metadata.v1.SearchAlbumsResponse
13, // 43: metadata.v1.MetadataService.SyncArtist:output_type -> metadata.v1.SyncArtistResponse
36, // [36:44] is the sub-list for method output_type
28, // [28:36] is the sub-list for method input_type
28, // [28:28] is the sub-list for extension type_name
28, // [28:28] is the sub-list for extension extendee
0, // [0:28] is the sub-list for field type_name
24, // 10: metadata.v1.SyncArtistRequest.external:type_name -> metadata.v1.ExternalID
0, // 11: metadata.v1.SyncArtistRequest.provider:type_name -> metadata.v1.Provider
17, // 12: metadata.v1.GetArtistResponse.artist:type_name -> metadata.v1.Artist
17, // 13: metadata.v1.SearchArtistsResponse.artists:type_name -> metadata.v1.Artist
18, // 14: metadata.v1.GetAlbumResponse.album:type_name -> metadata.v1.Album
18, // 15: metadata.v1.GetArtistAlbumsResponse.albums:type_name -> metadata.v1.Album
19, // 16: metadata.v1.GetTrackResponse.track:type_name -> metadata.v1.Track
19, // 17: metadata.v1.GetAlbumTracksResponse.tracks:type_name -> metadata.v1.Track
18, // 18: metadata.v1.SearchAlbumsResponse.albums:type_name -> metadata.v1.Album
17, // 19: metadata.v1.SyncArtistResponse.artist:type_name -> metadata.v1.Artist
22, // 20: metadata.v1.Artist.genres:type_name -> metadata.v1.Genre
24, // 21: metadata.v1.Artist.external_ids:type_name -> metadata.v1.ExternalID
23, // 22: metadata.v1.Album.artists:type_name -> metadata.v1.ArtistCredit
21, // 23: metadata.v1.Album.label:type_name -> metadata.v1.Label
22, // 24: metadata.v1.Album.genres:type_name -> metadata.v1.Genre
24, // 25: metadata.v1.Album.external_ids:type_name -> metadata.v1.ExternalID
23, // 26: metadata.v1.Track.artists:type_name -> metadata.v1.ArtistCredit
20, // 27: metadata.v1.Track.work:type_name -> metadata.v1.Work
24, // 28: metadata.v1.Track.external_ids:type_name -> metadata.v1.ExternalID
23, // 29: metadata.v1.Work.composers:type_name -> metadata.v1.ArtistCredit
17, // 30: metadata.v1.ArtistCredit.artist:type_name -> metadata.v1.Artist
1, // 31: metadata.v1.MetadataService.GetArtist:input_type -> metadata.v1.GetArtistRequest
2, // 32: metadata.v1.MetadataService.SearchArtists:input_type -> metadata.v1.SearchArtistsRequest
3, // 33: metadata.v1.MetadataService.GetAlbum:input_type -> metadata.v1.GetAlbumRequest
4, // 34: metadata.v1.MetadataService.GetArtistAlbums:input_type -> metadata.v1.GetArtistAlbumsRequest
5, // 35: metadata.v1.MetadataService.GetTrack:input_type -> metadata.v1.GetTrackRequest
6, // 36: metadata.v1.MetadataService.GetAlbumTracks:input_type -> metadata.v1.GetAlbumTracksRequest
7, // 37: metadata.v1.MetadataService.SearchAlbums:input_type -> metadata.v1.SearchAlbumsRequest
8, // 38: metadata.v1.MetadataService.SyncArtist:input_type -> metadata.v1.SyncArtistRequest
9, // 39: metadata.v1.MetadataService.GetArtist:output_type -> metadata.v1.GetArtistResponse
10, // 40: metadata.v1.MetadataService.SearchArtists:output_type -> metadata.v1.SearchArtistsResponse
11, // 41: metadata.v1.MetadataService.GetAlbum:output_type -> metadata.v1.GetAlbumResponse
12, // 42: metadata.v1.MetadataService.GetArtistAlbums:output_type -> metadata.v1.GetArtistAlbumsResponse
13, // 43: metadata.v1.MetadataService.GetTrack:output_type -> metadata.v1.GetTrackResponse
14, // 44: metadata.v1.MetadataService.GetAlbumTracks:output_type -> metadata.v1.GetAlbumTracksResponse
15, // 45: metadata.v1.MetadataService.SearchAlbums:output_type -> metadata.v1.SearchAlbumsResponse
16, // 46: metadata.v1.MetadataService.SyncArtist:output_type -> metadata.v1.SyncArtistResponse
39, // [39:47] is the sub-list for method output_type
31, // [31:39] is the sub-list for method input_type
31, // [31:31] is the sub-list for extension type_name
31, // [31:31] is the sub-list for extension extendee
0, // [0:31] is the sub-list for field type_name
}
func init() { file_metadata_v1_metadata_proto_init() }
@@ -1910,7 +2054,7 @@ func file_metadata_v1_metadata_proto_init() {
(*GetTrackRequest_External)(nil),
(*GetTrackRequest_Isrc)(nil),
}
file_metadata_v1_metadata_proto_msgTypes[8].OneofWrappers = []any{
file_metadata_v1_metadata_proto_msgTypes[7].OneofWrappers = []any{
(*SyncArtistRequest_Name)(nil),
(*SyncArtistRequest_External)(nil),
}
@@ -1920,7 +2064,7 @@ func file_metadata_v1_metadata_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_metadata_v1_metadata_proto_rawDesc), len(file_metadata_v1_metadata_proto_rawDesc)),
NumEnums: 1,
NumMessages: 21,
NumMessages: 24,
NumExtensions: 0,
NumServices: 1,
},
+15 -35
View File
@@ -32,24 +32,14 @@ const (
// MetadataServiceClient is the client API for MetadataService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
//
// MetadataService provides music metadata aggregation.
type MetadataServiceClient interface {
// GetArtist retrieves an artist by ID or external source ID.
GetArtist(ctx context.Context, in *GetArtistRequest, opts ...grpc.CallOption) (*Artist, error)
// SearchArtists searches for artists by name.
GetArtist(ctx context.Context, in *GetArtistRequest, opts ...grpc.CallOption) (*GetArtistResponse, error)
SearchArtists(ctx context.Context, in *SearchArtistsRequest, opts ...grpc.CallOption) (*SearchArtistsResponse, error)
// GetAlbum retrieves an album by ID.
GetAlbum(ctx context.Context, in *GetAlbumRequest, opts ...grpc.CallOption) (*Album, error)
// GetArtistAlbums retrieves all albums by an artist.
GetAlbum(ctx context.Context, in *GetAlbumRequest, opts ...grpc.CallOption) (*GetAlbumResponse, error)
GetArtistAlbums(ctx context.Context, in *GetArtistAlbumsRequest, opts ...grpc.CallOption) (*GetArtistAlbumsResponse, error)
// GetTrack retrieves a track by ID.
GetTrack(ctx context.Context, in *GetTrackRequest, opts ...grpc.CallOption) (*Track, error)
// GetAlbumTracks retrieves all tracks on an album.
GetTrack(ctx context.Context, in *GetTrackRequest, opts ...grpc.CallOption) (*GetTrackResponse, error)
GetAlbumTracks(ctx context.Context, in *GetAlbumTracksRequest, opts ...grpc.CallOption) (*GetAlbumTracksResponse, error)
// SearchAlbums searches for albums by name, optionally filtered by artist.
SearchAlbums(ctx context.Context, in *SearchAlbumsRequest, opts ...grpc.CallOption) (*SearchAlbumsResponse, error)
// SyncArtist triggers ingestion of an artist from external sources.
SyncArtist(ctx context.Context, in *SyncArtistRequest, opts ...grpc.CallOption) (*SyncArtistResponse, error)
}
@@ -61,9 +51,9 @@ func NewMetadataServiceClient(cc grpc.ClientConnInterface) MetadataServiceClient
return &metadataServiceClient{cc}
}
func (c *metadataServiceClient) GetArtist(ctx context.Context, in *GetArtistRequest, opts ...grpc.CallOption) (*Artist, error) {
func (c *metadataServiceClient) GetArtist(ctx context.Context, in *GetArtistRequest, opts ...grpc.CallOption) (*GetArtistResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(Artist)
out := new(GetArtistResponse)
err := c.cc.Invoke(ctx, MetadataService_GetArtist_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
@@ -81,9 +71,9 @@ func (c *metadataServiceClient) SearchArtists(ctx context.Context, in *SearchArt
return out, nil
}
func (c *metadataServiceClient) GetAlbum(ctx context.Context, in *GetAlbumRequest, opts ...grpc.CallOption) (*Album, error) {
func (c *metadataServiceClient) GetAlbum(ctx context.Context, in *GetAlbumRequest, opts ...grpc.CallOption) (*GetAlbumResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(Album)
out := new(GetAlbumResponse)
err := c.cc.Invoke(ctx, MetadataService_GetAlbum_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
@@ -101,9 +91,9 @@ func (c *metadataServiceClient) GetArtistAlbums(ctx context.Context, in *GetArti
return out, nil
}
func (c *metadataServiceClient) GetTrack(ctx context.Context, in *GetTrackRequest, opts ...grpc.CallOption) (*Track, error) {
func (c *metadataServiceClient) GetTrack(ctx context.Context, in *GetTrackRequest, opts ...grpc.CallOption) (*GetTrackResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(Track)
out := new(GetTrackResponse)
err := c.cc.Invoke(ctx, MetadataService_GetTrack_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
@@ -144,24 +134,14 @@ func (c *metadataServiceClient) SyncArtist(ctx context.Context, in *SyncArtistRe
// MetadataServiceServer is the server API for MetadataService service.
// All implementations must embed UnimplementedMetadataServiceServer
// for forward compatibility.
//
// MetadataService provides music metadata aggregation.
type MetadataServiceServer interface {
// GetArtist retrieves an artist by ID or external source ID.
GetArtist(context.Context, *GetArtistRequest) (*Artist, error)
// SearchArtists searches for artists by name.
GetArtist(context.Context, *GetArtistRequest) (*GetArtistResponse, error)
SearchArtists(context.Context, *SearchArtistsRequest) (*SearchArtistsResponse, error)
// GetAlbum retrieves an album by ID.
GetAlbum(context.Context, *GetAlbumRequest) (*Album, error)
// GetArtistAlbums retrieves all albums by an artist.
GetAlbum(context.Context, *GetAlbumRequest) (*GetAlbumResponse, error)
GetArtistAlbums(context.Context, *GetArtistAlbumsRequest) (*GetArtistAlbumsResponse, error)
// GetTrack retrieves a track by ID.
GetTrack(context.Context, *GetTrackRequest) (*Track, error)
// GetAlbumTracks retrieves all tracks on an album.
GetTrack(context.Context, *GetTrackRequest) (*GetTrackResponse, error)
GetAlbumTracks(context.Context, *GetAlbumTracksRequest) (*GetAlbumTracksResponse, error)
// SearchAlbums searches for albums by name, optionally filtered by artist.
SearchAlbums(context.Context, *SearchAlbumsRequest) (*SearchAlbumsResponse, error)
// SyncArtist triggers ingestion of an artist from external sources.
SyncArtist(context.Context, *SyncArtistRequest) (*SyncArtistResponse, error)
mustEmbedUnimplementedMetadataServiceServer()
}
@@ -173,19 +153,19 @@ type MetadataServiceServer interface {
// pointer dereference when methods are called.
type UnimplementedMetadataServiceServer struct{}
func (UnimplementedMetadataServiceServer) GetArtist(context.Context, *GetArtistRequest) (*Artist, error) {
func (UnimplementedMetadataServiceServer) GetArtist(context.Context, *GetArtistRequest) (*GetArtistResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetArtist not implemented")
}
func (UnimplementedMetadataServiceServer) SearchArtists(context.Context, *SearchArtistsRequest) (*SearchArtistsResponse, error) {
return nil, status.Error(codes.Unimplemented, "method SearchArtists not implemented")
}
func (UnimplementedMetadataServiceServer) GetAlbum(context.Context, *GetAlbumRequest) (*Album, error) {
func (UnimplementedMetadataServiceServer) GetAlbum(context.Context, *GetAlbumRequest) (*GetAlbumResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetAlbum not implemented")
}
func (UnimplementedMetadataServiceServer) GetArtistAlbums(context.Context, *GetArtistAlbumsRequest) (*GetArtistAlbumsResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetArtistAlbums not implemented")
}
func (UnimplementedMetadataServiceServer) GetTrack(context.Context, *GetTrackRequest) (*Track, error) {
func (UnimplementedMetadataServiceServer) GetTrack(context.Context, *GetTrackRequest) (*GetTrackResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetTrack not implemented")
}
func (UnimplementedMetadataServiceServer) GetAlbumTracks(context.Context, *GetAlbumTracksRequest) (*GetAlbumTracksResponse, error) {
+28 -32
View File
@@ -9,30 +9,14 @@ enum Provider {
PROVIDER_MUSICBRAINZ = 1;
}
// MetadataService provides music metadata aggregation.
service MetadataService {
// GetArtist retrieves an artist by ID or external source ID.
rpc GetArtist(GetArtistRequest) returns (Artist);
// SearchArtists searches for artists by name.
rpc GetArtist(GetArtistRequest) returns (GetArtistResponse);
rpc SearchArtists(SearchArtistsRequest) returns (SearchArtistsResponse);
// GetAlbum retrieves an album by ID.
rpc GetAlbum(GetAlbumRequest) returns (Album);
// GetArtistAlbums retrieves all albums by an artist.
rpc GetAlbum(GetAlbumRequest) returns (GetAlbumResponse);
rpc GetArtistAlbums(GetArtistAlbumsRequest) returns (GetArtistAlbumsResponse);
// GetTrack retrieves a track by ID.
rpc GetTrack(GetTrackRequest) returns (Track);
// GetAlbumTracks retrieves all tracks on an album.
rpc GetTrack(GetTrackRequest) returns (GetTrackResponse);
rpc GetAlbumTracks(GetAlbumTracksRequest) returns (GetAlbumTracksResponse);
// SearchAlbums searches for albums by name, optionally filtered by artist.
rpc SearchAlbums(SearchAlbumsRequest) returns (SearchAlbumsResponse);
// SyncArtist triggers ingestion of an artist from external sources.
rpc SyncArtist(SyncArtistRequest) returns (SyncArtistResponse);
}
@@ -40,10 +24,10 @@ service MetadataService {
message GetArtistRequest {
oneof identifier {
string id = 1; // Internal UUID
ExternalID external = 2; // External source ID (e.g., musicbrainz MBID)
string id = 1;
ExternalID external = 2;
}
Provider provider = 3; // UNSPECIFIED = query all providers
Provider provider = 3;
}
message SearchArtistsRequest {
@@ -90,11 +74,6 @@ message SearchAlbumsRequest {
Provider provider = 5;
}
message SearchAlbumsResponse {
repeated Album albums = 1;
int32 total = 2;
}
message SyncArtistRequest {
oneof target {
string name = 1;
@@ -105,20 +84,37 @@ message SyncArtistRequest {
// Responses
message GetArtistResponse {
Artist artist = 1;
}
message SearchArtistsResponse {
repeated Artist artists = 1;
int32 total = 2;
}
message GetAlbumResponse {
Album album = 1;
}
message GetArtistAlbumsResponse {
repeated Album albums = 1;
int32 total = 2;
}
message GetTrackResponse {
Track track = 1;
}
message GetAlbumTracksResponse {
repeated Track tracks = 1;
}
message SearchAlbumsResponse {
repeated Album albums = 1;
int32 total = 2;
}
message SyncArtistResponse {
Artist artist = 1;
int32 albums_synced = 2;
@@ -131,7 +127,7 @@ message Artist {
string id = 1;
string name = 2;
string sort_name = 3;
string artist_type = 4; // person, group, orchestra, etc.
string artist_type = 4;
string country = 5;
string formed_date = 6;
string disbanded_date = 7;
@@ -144,7 +140,7 @@ message Artist {
message Album {
string id = 1;
string title = 2;
string album_type = 3; // album, ep, single, compilation
string album_type = 3;
string release_date = 4;
string upc = 5;
int32 total_tracks = 6;
@@ -190,13 +186,13 @@ message Genre {
message ArtistCredit {
Artist artist = 1;
string role = 2; // primary, featured, remixer, producer
string role = 2;
int32 position = 3;
string join_phrase = 4; // " & ", " feat. ", etc.
string join_phrase = 4;
}
message ExternalID {
string source = 1; // musicbrainz, spotify, discogs, etc.
string source = 1;
string source_id = 2;
string url = 3;
}
+9 -6
View File
@@ -130,13 +130,14 @@ func TestGetArtist(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
artist, err := client.GetArtist(ctx, &metadatav1.GetArtistRequest{
resp, err := client.GetArtist(ctx, &metadatav1.GetArtistRequest{
Identifier: &metadatav1.GetArtistRequest_Id{Id: radioheadMBID},
})
if err != nil {
t.Fatalf("GetArtist failed: %v", err)
}
artist := resp.Artist
if artist.Id != radioheadMBID {
t.Errorf("expected ID %q, got %q", radioheadMBID, artist.Id)
}
@@ -234,13 +235,14 @@ func TestGetAlbum(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
album, err := client.GetAlbum(ctx, &metadatav1.GetAlbumRequest{
albumResp, err := client.GetAlbum(ctx, &metadatav1.GetAlbumRequest{
Identifier: &metadatav1.GetAlbumRequest_Id{Id: okComputerMBID},
})
if err != nil {
t.Fatalf("GetAlbum failed: %v", err)
}
album := albumResp.Album
if album.Id != okComputerMBID {
t.Errorf("expected ID %q, got %q", okComputerMBID, album.Id)
}
@@ -335,13 +337,14 @@ func TestGetTrack(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
track, err := client.GetTrack(ctx, &metadatav1.GetTrackRequest{
trackResp, err := client.GetTrack(ctx, &metadatav1.GetTrackRequest{
Identifier: &metadatav1.GetTrackRequest_Id{Id: paranoidAndroid},
})
if err != nil {
t.Fatalf("GetTrack failed: %v", err)
}
track := trackResp.Track
if track.Id != paranoidAndroid {
t.Errorf("expected ID %q, got %q", paranoidAndroid, track.Id)
}
@@ -375,15 +378,15 @@ func TestGetTrackByISRC(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
track, err := client.GetTrack(ctx, &metadatav1.GetTrackRequest{
isrcResp, err := client.GetTrack(ctx, &metadatav1.GetTrackRequest{
Identifier: &metadatav1.GetTrackRequest_Isrc{Isrc: "GBAYE9701376"},
})
if err != nil {
t.Fatalf("GetTrack by ISRC failed: %v", err)
}
if track.Title != "Paranoid Android" {
t.Errorf("expected title 'Paranoid Android', got %q", track.Title)
if isrcResp.Track.Title != "Paranoid Android" {
t.Errorf("expected title 'Paranoid Android', got %q", isrcResp.Track.Title)
}
}