mirror of
				https://github.com/owntone/owntone-server.git
				synced 2025-10-30 00:05:05 -04:00 
			
		
		
		
	Merge branch 'master' of github.com:owntone/owntone-server
This commit is contained in:
		
						commit
						2dd693c0f2
					
				| @ -103,6 +103,9 @@ AC_SEARCH_LIBS([copy_file_range], [c], | |||||||
| AC_SEARCH_LIBS([fcopyfile], [c], | AC_SEARCH_LIBS([fcopyfile], [c], | ||||||
| 	[AC_DEFINE([HAVE_FCOPYFILE], 1, | 	[AC_DEFINE([HAVE_FCOPYFILE], 1, | ||||||
| 		[Define to 1 if you have fcopyfile])]) | 		[Define to 1 if you have fcopyfile])]) | ||||||
|  | AC_SEARCH_LIBS([mnt_new_monitor], [mount], | ||||||
|  | 	[AC_DEFINE([HAVE_LIBMOUNT], 1, | ||||||
|  | 		[Define to 1 if you have libmount])]) | ||||||
| 
 | 
 | ||||||
| AC_SEARCH_LIBS([log10], [m]) | AC_SEARCH_LIBS([log10], [m]) | ||||||
| AC_SEARCH_LIBS([lrint], [m]) | AC_SEARCH_LIBS([lrint], [m]) | ||||||
| @ -192,6 +195,9 @@ PKG_CHECK_EXISTS([libplist], | |||||||
| 	[OWNTONE_MODULES_CHECK([OWNTONE], [LIBPLIST], [libplist-2.0], | 	[OWNTONE_MODULES_CHECK([OWNTONE], [LIBPLIST], [libplist-2.0], | ||||||
| 		[plist_dict_get_item], [plist/plist.h])]) | 		[plist_dict_get_item], [plist/plist.h])]) | ||||||
| 
 | 
 | ||||||
|  | dnl AC_SEARCH_LIBS does not find plist_get_unix_date_val() on MacOS | ||||||
|  | OWNTONE_CHECK_DECLS([plist_get_unix_date_val], [plist/plist.h]) | ||||||
|  | 
 | ||||||
| AM_PATH_LIBGCRYPT([1:1.7.0]) | AM_PATH_LIBGCRYPT([1:1.7.0]) | ||||||
| OWNTONE_FUNC_REQUIRE([OWNTONE], [GNU Crypt Library], [LIBGCRYPT], [gcrypt], | OWNTONE_FUNC_REQUIRE([OWNTONE], [GNU Crypt Library], [LIBGCRYPT], [gcrypt], | ||||||
| 	[gcry_control], [gcrypt.h]) | 	[gcry_control], [gcrypt.h]) | ||||||
|  | |||||||
| @ -63,6 +63,9 @@ Valid operands include: | |||||||
| 
 | 
 | ||||||
| * "string value" (string) | * "string value" (string) | ||||||
| * integer (int) | * integer (int) | ||||||
|  | * `empty` | ||||||
|  | 
 | ||||||
|  | The `empty` operand is only valid with the `is` operator and matches items with no value for the given field-name e.g. `comment` | ||||||
| 
 | 
 | ||||||
| Valid operands for the enumeration `data_kind` are: | Valid operands for the enumeration `data_kind` are: | ||||||
| 
 | 
 | ||||||
| @ -155,6 +158,17 @@ This would match the last 10 music files added to the library. | |||||||
| 
 | 
 | ||||||
| This generates a random set of, maximum of 10, rated Pop music tracks every time the playlist is queried. | This generates a random set of, maximum of 10, rated Pop music tracks every time the playlist is queried. | ||||||
| 
 | 
 | ||||||
|  | ``` | ||||||
|  | "All Jazz, No Foo" { | ||||||
|  |   media_kind is music and | ||||||
|  |   genre is "jazz" and | ||||||
|  |   (not comment includes "foo" or | ||||||
|  |   comment is empty) | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | This matches both the songs with comments that do not include "foo", but also the songs with no comment. | ||||||
|  | 
 | ||||||
| ## Date Operand Syntax | ## Date Operand Syntax | ||||||
| 
 | 
 | ||||||
| One example of a valid date is a date in yyyy-mm-dd format: | One example of a valid date is a date in yyyy-mm-dd format: | ||||||
|  | |||||||
| @ -88,6 +88,7 @@ owntone_SOURCES = main.c \ | |||||||
| 	library/filescanner.c library/filescanner.h \
 | 	library/filescanner.c library/filescanner.h \
 | ||||||
| 	library/filescanner_ffmpeg.c library/filescanner_playlist.c \
 | 	library/filescanner_ffmpeg.c library/filescanner_playlist.c \
 | ||||||
| 	library/filescanner_smartpl.c library/filescanner_itunes.c \
 | 	library/filescanner_smartpl.c library/filescanner_itunes.c \
 | ||||||
|  | 	library/filescanner_mountwatch.c \
 | ||||||
| 	library/rssscanner.c \
 | 	library/rssscanner.c \
 | ||||||
| 	library.c library.h \
 | 	library.c library.h \
 | ||||||
| 	$(MDNS_SRC) mdns.h \
 | 	$(MDNS_SRC) mdns.h \
 | ||||||
|  | |||||||
| @ -22,7 +22,12 @@ HTTP_PROTO_SRC = \ | |||||||
| 	src/proto/login5_challenges_hashcash.pb-c.h src/proto/login5_challenges_hashcash.pb-c.c \
 | 	src/proto/login5_challenges_hashcash.pb-c.h src/proto/login5_challenges_hashcash.pb-c.c \
 | ||||||
| 	src/proto/login5_challenges_code.pb-c.h src/proto/login5_challenges_code.pb-c.c \
 | 	src/proto/login5_challenges_code.pb-c.h src/proto/login5_challenges_code.pb-c.c \
 | ||||||
| 	src/proto/google_duration.pb-c.h src/proto/google_duration.pb-c.c \
 | 	src/proto/google_duration.pb-c.h src/proto/google_duration.pb-c.c \
 | ||||||
| 	src/proto/storage_resolve.pb-c.h src/proto/storage_resolve.pb-c.c | 	src/proto/storage_resolve.pb-c.h src/proto/storage_resolve.pb-c.c \
 | ||||||
|  | 	src/proto/extended_metadata.pb-c.h src/proto/extended_metadata.pb-c.c \
 | ||||||
|  | 	src/proto/extension_kind.pb-c.h src/proto/extension_kind.pb-c.c \
 | ||||||
|  | 	src/proto/entity_extension_data.pb-c.h src/proto/entity_extension_data.pb-c.c \
 | ||||||
|  | 	src/proto/google_any.pb-c.h src/proto/google_any.pb-c.c | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| CORE_SRC = \
 | CORE_SRC = \
 | ||||||
| 	src/librespot-c.c src/connection.c src/channel.c src/crypto.c src/commands.c \
 | 	src/librespot-c.c src/connection.c src/channel.c src/crypto.c src/commands.c \
 | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ | |||||||
| #include <pthread.h> | #include <pthread.h> | ||||||
| 
 | 
 | ||||||
| #define LIBRESPOT_C_VERSION_MAJOR 0 | #define LIBRESPOT_C_VERSION_MAJOR 0 | ||||||
| #define LIBRESPOT_C_VERSION_MINOR 6 | #define LIBRESPOT_C_VERSION_MINOR 7 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| struct sp_session; | struct sp_session; | ||||||
|  | |||||||
| @ -1049,6 +1049,8 @@ handle_login5(struct sp_message *msg, struct sp_session *session) | |||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // If we don't get a proper response we fall back to requesting extended
 | ||||||
|  | // metadata, thus this function fails since that would abort the sequence
 | ||||||
| static enum sp_error | static enum sp_error | ||||||
| handle_metadata_get(struct sp_message *msg, struct sp_session *session) | handle_metadata_get(struct sp_message *msg, struct sp_session *session) | ||||||
| { | { | ||||||
| @ -1058,22 +1060,89 @@ handle_metadata_get(struct sp_message *msg, struct sp_session *session) | |||||||
|   int ret; |   int ret; | ||||||
| 
 | 
 | ||||||
|   if (hres->code != HTTP_OK) |   if (hres->code != HTTP_OK) | ||||||
|     RETURN_ERROR(SP_ERR_INVALID, "Request for metadata returned an error"); |     goto fallback; | ||||||
| 
 | 
 | ||||||
|   // FIXME Use Episode object for file.media_type == SP_MEDIA_EPISODE
 |   // Also works for Episode response
 | ||||||
|   response = track__unpack(NULL, hres->body_len, hres->body); |   response = track__unpack(NULL, hres->body_len, hres->body); | ||||||
|   if (!response) |   if (!response) | ||||||
|     RETURN_ERROR(SP_ERR_INVALID, "Could not parse metadata response"); |     goto fallback; | ||||||
| 
 | 
 | ||||||
|   ret = file_select(channel->file.id, sizeof(channel->file.id), response, session->bitrate_preferred); |   ret = file_select(channel->file.id, sizeof(channel->file.id), response, session->bitrate_preferred); | ||||||
|   if (ret < 0) |   if (ret < 0) | ||||||
|     RETURN_ERROR(SP_ERR_INVALID, "Could not find track data"); |     goto fallback; | ||||||
| 
 | 
 | ||||||
|   track__free_unpacked(response, NULL); |   track__free_unpacked(response, NULL); | ||||||
|   return SP_OK_DONE; |   return SP_OK_DONE; | ||||||
| 
 | 
 | ||||||
|  error: |  fallback: | ||||||
|  |   sp_cb.logmsg("Couldn't find file id in metadata response, will request extended metadata\n"); | ||||||
|  | 
 | ||||||
|   track__free_unpacked(response, NULL); |   track__free_unpacked(response, NULL); | ||||||
|  |   return SP_OK_DONE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // We need to find the file.id (necessary to get the audio key) which is buried
 | ||||||
|  | // deep in the extended metadata response. Originally, it was also included in
 | ||||||
|  | // a metadata request, but that was broken by Spotify in spclient responses,
 | ||||||
|  | // except, weirdly, when requesting spclient.wg.spotify.com. The below method
 | ||||||
|  | // should match what go-librespot does.
 | ||||||
|  | static enum sp_error | ||||||
|  | handle_extended_metadata_get(struct sp_message *msg, struct sp_session *session) | ||||||
|  | { | ||||||
|  |   struct http_response *hres = &msg->payload.hres; | ||||||
|  |   struct sp_channel *channel = session->now_streaming_channel; | ||||||
|  |   Spotify__Extendedmetadata__BatchedExtensionResponse *response = NULL; | ||||||
|  |   Spotify__Extendedmetadata__EntityExtensionData *entity_extension_data = NULL; | ||||||
|  |   Track *track = NULL; | ||||||
|  |   int i, j; | ||||||
|  |   int ret; | ||||||
|  | 
 | ||||||
|  |   if (hres->code != HTTP_OK) | ||||||
|  |     RETURN_ERROR(SP_ERR_INVALID, "Request for extended metadata returned a http error"); | ||||||
|  | 
 | ||||||
|  |   response = spotify__extendedmetadata__batched_extension_response__unpack(NULL, hres->body_len, hres->body); | ||||||
|  |   if (!response) | ||||||
|  |     RETURN_ERROR(SP_ERR_INVALID, "Could not parse extended metadata response"); | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < response->n_extended_metadata && !entity_extension_data; i++) | ||||||
|  |     { | ||||||
|  |       for (j = 0; j < response->extended_metadata[i]->n_extension_data && !entity_extension_data; j++) | ||||||
|  | 	{ | ||||||
|  | 	  entity_extension_data = response->extended_metadata[i]->extension_data[j]; | ||||||
|  | 	  if (!entity_extension_data) | ||||||
|  | 	    continue; | ||||||
|  | 	  else if (!entity_extension_data->entity_uri || strcmp(entity_extension_data->entity_uri, channel->file.path) != 0) | ||||||
|  | 	    entity_extension_data = NULL; | ||||||
|  | 	  else if (!entity_extension_data->header || entity_extension_data->header->status_code != HTTP_OK) | ||||||
|  | 	    entity_extension_data = NULL; | ||||||
|  | 	  else if (!entity_extension_data->extension_data || !entity_extension_data->extension_data->type_url) | ||||||
|  | 	    entity_extension_data = NULL; | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   if (!entity_extension_data) | ||||||
|  |     RETURN_ERROR(SP_ERR_INVALID, "Could not extract entity extension data from extended metadata response"); | ||||||
|  | 
 | ||||||
|  |   // Like go-librespot, we don't check entity_extension_data->extension_data->type_url,
 | ||||||
|  |   // which should be either type.googleapis.com/spotify.metadata.Track or
 | ||||||
|  |   // .Episode. If we get something else we will fail later anyway.
 | ||||||
|  | 
 | ||||||
|  |   // This also works for episodes
 | ||||||
|  |   track = track__unpack(NULL, entity_extension_data->extension_data->value.len, entity_extension_data->extension_data->value.data); | ||||||
|  |   if (!track) | ||||||
|  |     RETURN_ERROR(SP_ERR_INVALID, "Could not parse track data in extended metadata response"); | ||||||
|  | 
 | ||||||
|  |   ret = file_select(channel->file.id, sizeof(channel->file.id), track, session->bitrate_preferred); | ||||||
|  |   if (ret < 0) | ||||||
|  |     RETURN_ERROR(SP_ERR_INVALID, "Could not find track data in extended metadata response"); | ||||||
|  | 
 | ||||||
|  |   spotify__extendedmetadata__batched_extension_response__free_unpacked(response, NULL); | ||||||
|  |   track__free_unpacked(track, NULL); | ||||||
|  |   return SP_OK_DONE; | ||||||
|  | 
 | ||||||
|  |  error: | ||||||
|  |   spotify__extendedmetadata__batched_extension_response__free_unpacked(response, NULL); | ||||||
|  |   track__free_unpacked(track, NULL); | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1980,7 +2049,6 @@ msg_make_login5_challenges(struct sp_message *msg, struct sp_session *session) | |||||||
|   return msg_make_login5(msg, session); |   return msg_make_login5(msg, session); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Ref. spclient/spclient.go
 |  | ||||||
| static int | static int | ||||||
| msg_make_metadata_get(struct sp_message *msg, struct sp_session *session) | msg_make_metadata_get(struct sp_message *msg, struct sp_session *session) | ||||||
| { | { | ||||||
| @ -2013,6 +2081,53 @@ msg_make_metadata_get(struct sp_message *msg, struct sp_session *session) | |||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Ref. spclient/spclient.go
 | ||||||
|  | static int | ||||||
|  | msg_make_extended_metadata_get(struct sp_message *msg, struct sp_session *session) | ||||||
|  | { | ||||||
|  |   struct http_request *hreq = &msg->payload.hreq; | ||||||
|  |   struct sp_server *server = &session->spclient; | ||||||
|  |   Spotify__Extendedmetadata__BatchedEntityRequest req = SPOTIFY__EXTENDEDMETADATA__BATCHED_ENTITY_REQUEST__INIT; | ||||||
|  |   Spotify__Extendedmetadata__EntityRequest entity_request = SPOTIFY__EXTENDEDMETADATA__ENTITY_REQUEST__INIT; | ||||||
|  |   Spotify__Extendedmetadata__EntityRequest *entity_requests; | ||||||
|  |   Spotify__Extendedmetadata__ExtensionQuery query = SPOTIFY__EXTENDEDMETADATA__EXTENSION_QUERY__INIT; | ||||||
|  |   Spotify__Extendedmetadata__ExtensionQuery *queries; | ||||||
|  |   struct sp_channel *channel = session->now_streaming_channel; | ||||||
|  |   struct sp_file zerofile = { 0 }; | ||||||
|  | 
 | ||||||
|  |   if (memcmp(channel->file.id, zerofile.id, sizeof(channel->file.id)) != 0) | ||||||
|  |     return 1; // Skip this request, we got the file id from metadata_get
 | ||||||
|  | 
 | ||||||
|  |   if (channel->file.media_type == SP_MEDIA_TRACK) | ||||||
|  |     query.extension_kind = SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_V4; | ||||||
|  |   else if (channel->file.media_type == SP_MEDIA_EPISODE) | ||||||
|  |     query.extension_kind = SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_V4; | ||||||
|  |   else | ||||||
|  |     return -1; | ||||||
|  | 
 | ||||||
|  |   queries = &query; | ||||||
|  |   entity_request.query = &queries; | ||||||
|  |   entity_request.n_query = 1; | ||||||
|  |   entity_request.entity_uri = channel->file.path; | ||||||
|  | 
 | ||||||
|  |   entity_requests = &entity_request; | ||||||
|  |   req.entity_request = &entity_requests; | ||||||
|  |   req.n_entity_request = 1; | ||||||
|  | 
 | ||||||
|  |   hreq->body_len = spotify__extendedmetadata__batched_entity_request__get_packed_size(&req); | ||||||
|  |   hreq->body = malloc(hreq->body_len); | ||||||
|  | 
 | ||||||
|  |   spotify__extendedmetadata__batched_entity_request__pack(&req, hreq->body); | ||||||
|  | 
 | ||||||
|  |   hreq->url = asprintf_or_die("https://%s:%d/extended-metadata/v0/extended-metadata", server->address, server->port); | ||||||
|  | 
 | ||||||
|  |   hreq->headers[0] = asprintf_or_die("Accept: application/x-protobuf"); | ||||||
|  |   hreq->headers[1] = asprintf_or_die("Client-Token: %s", session->http_clienttoken.value); | ||||||
|  |   hreq->headers[2] = asprintf_or_die("Authorization: Bearer %s", session->http_accesstoken.value); | ||||||
|  | 
 | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Resolve storage, this will just be a GET request
 | // Resolve storage, this will just be a GET request
 | ||||||
| // Ref. spclient/spclient.go
 | // Ref. spclient/spclient.go
 | ||||||
| static int | static int | ||||||
| @ -2064,7 +2179,7 @@ msg_make_media_get(struct sp_message *msg, struct sp_session *session) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Must be large enough to also include null terminating elements
 | // Must be large enough to also include null terminating elements
 | ||||||
| static struct sp_seq_request seq_requests[][7] = | static struct sp_seq_request seq_requests[][15] = | ||||||
| { | { | ||||||
|   { |   { | ||||||
|     // Just a dummy so that the array is aligned with the enum
 |     // Just a dummy so that the array is aligned with the enum
 | ||||||
| @ -2083,6 +2198,7 @@ static struct sp_seq_request seq_requests[][7] = | |||||||
|     { SP_SEQ_MEDIA_OPEN, "LOGIN5", SP_PROTO_HTTP, msg_make_login5, NULL, handle_login5, }, |     { SP_SEQ_MEDIA_OPEN, "LOGIN5", SP_PROTO_HTTP, msg_make_login5, NULL, handle_login5, }, | ||||||
|     { SP_SEQ_MEDIA_OPEN, "LOGIN5_CHALLENGES", SP_PROTO_HTTP, msg_make_login5_challenges, NULL, handle_login5, }, |     { SP_SEQ_MEDIA_OPEN, "LOGIN5_CHALLENGES", SP_PROTO_HTTP, msg_make_login5_challenges, NULL, handle_login5, }, | ||||||
|     { SP_SEQ_MEDIA_OPEN, "METADATA_GET", SP_PROTO_HTTP, msg_make_metadata_get, NULL, handle_metadata_get, }, |     { SP_SEQ_MEDIA_OPEN, "METADATA_GET", SP_PROTO_HTTP, msg_make_metadata_get, NULL, handle_metadata_get, }, | ||||||
|  |     { SP_SEQ_MEDIA_OPEN, "EXTENDED_METADATA_GET", SP_PROTO_HTTP, msg_make_extended_metadata_get, NULL, handle_extended_metadata_get, }, | ||||||
|     { SP_SEQ_MEDIA_OPEN, "AUDIO_KEY_GET", SP_PROTO_TCP, msg_make_audio_key_get, prepare_tcp, handle_tcp_generic, }, |     { SP_SEQ_MEDIA_OPEN, "AUDIO_KEY_GET", SP_PROTO_TCP, msg_make_audio_key_get, prepare_tcp, handle_tcp_generic, }, | ||||||
|     { SP_SEQ_MEDIA_OPEN, "STORAGE_RESOLVE", SP_PROTO_HTTP, msg_make_storage_resolve, NULL, handle_storage_resolve, }, |     { SP_SEQ_MEDIA_OPEN, "STORAGE_RESOLVE", SP_PROTO_HTTP, msg_make_storage_resolve, NULL, handle_storage_resolve, }, | ||||||
|     { SP_SEQ_MEDIA_OPEN, "MEDIA_PREFETCH", SP_PROTO_HTTP, msg_make_media_get, NULL, handle_media_get, }, |     { SP_SEQ_MEDIA_OPEN, "MEDIA_PREFETCH", SP_PROTO_HTTP, msg_make_media_get, NULL, handle_media_get, }, | ||||||
|  | |||||||
| @ -37,6 +37,7 @@ | |||||||
| #include "proto/authentication.pb-c.h" | #include "proto/authentication.pb-c.h" | ||||||
| #include "proto/mercury.pb-c.h" | #include "proto/mercury.pb-c.h" | ||||||
| #include "proto/metadata.pb-c.h" | #include "proto/metadata.pb-c.h" | ||||||
|  | #include "proto/extended_metadata.pb-c.h" | ||||||
| #include "proto/clienttoken.pb-c.h" | #include "proto/clienttoken.pb-c.h" | ||||||
| #include "proto/login5.pb-c.h" | #include "proto/login5.pb-c.h" | ||||||
| #include "proto/storage_resolve.pb-c.h" | #include "proto/storage_resolve.pb-c.h" | ||||||
|  | |||||||
							
								
								
									
										495
									
								
								src/inputs/librespot-c/src/proto/entity_extension_data.pb-c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										495
									
								
								src/inputs/librespot-c/src/proto/entity_extension_data.pb-c.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,495 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: entity_extension_data.proto */ | ||||||
|  | 
 | ||||||
|  | /* Do not generate deprecated warnings for self */ | ||||||
|  | #ifndef PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #define PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "entity_extension_data.pb-c.h" | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataHeader         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__EntityExtensionDataHeader init_value = SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA_HEADER__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataHeader *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_header__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataHeader *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataHeader *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionDataHeader * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__EntityExtensionDataHeader *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__entity_extension_data_header__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_header__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionData         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__EntityExtensionData init_value = SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionData *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionData *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionData *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionData * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__EntityExtensionData *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__entity_extension_data__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionData *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__plain_list_assoc__init | ||||||
|  |                      (Spotify__Extendedmetadata__PlainListAssoc         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__PlainListAssoc init_value = SPOTIFY__EXTENDEDMETADATA__PLAIN_LIST_ASSOC__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__plain_list_assoc__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__PlainListAssoc *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__plain_list_assoc__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__plain_list_assoc__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__PlainListAssoc *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__plain_list_assoc__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__plain_list_assoc__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__PlainListAssoc *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__plain_list_assoc__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__PlainListAssoc * | ||||||
|  |        spotify__extendedmetadata__plain_list_assoc__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__PlainListAssoc *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__plain_list_assoc__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__plain_list_assoc__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__PlainListAssoc *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__plain_list_assoc__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__assoc_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__AssocHeader         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__AssocHeader init_value = SPOTIFY__EXTENDEDMETADATA__ASSOC_HEADER__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__assoc_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__AssocHeader *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc_header__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__assoc_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__AssocHeader *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__assoc_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__AssocHeader *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__AssocHeader * | ||||||
|  |        spotify__extendedmetadata__assoc_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__AssocHeader *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__assoc_header__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__assoc_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__AssocHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc_header__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__assoc__init | ||||||
|  |                      (Spotify__Extendedmetadata__Assoc         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__Assoc init_value = SPOTIFY__EXTENDEDMETADATA__ASSOC__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__assoc__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__Assoc *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__assoc__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__Assoc *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__assoc__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__Assoc *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__Assoc * | ||||||
|  |        spotify__extendedmetadata__assoc__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__Assoc *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__assoc__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__assoc__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__Assoc *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__assoc__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__entity_extension_data_header__field_descriptors[5] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "status_code", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_INT32, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataHeader, status_code), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "etag", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataHeader, etag), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "locale", | ||||||
|  |     3, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataHeader, locale), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "cache_ttl_in_seconds", | ||||||
|  |     4, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_INT64, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataHeader, cache_ttl_in_seconds), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "offline_ttl_in_seconds", | ||||||
|  |     5, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_INT64, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataHeader, offline_ttl_in_seconds), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__entity_extension_data_header__field_indices_by_name[] = { | ||||||
|  |   3,   /* field[3] = cache_ttl_in_seconds */ | ||||||
|  |   1,   /* field[1] = etag */ | ||||||
|  |   2,   /* field[2] = locale */ | ||||||
|  |   4,   /* field[4] = offline_ttl_in_seconds */ | ||||||
|  |   0,   /* field[0] = status_code */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__entity_extension_data_header__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 5 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data_header__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.EntityExtensionDataHeader", | ||||||
|  |   "EntityExtensionDataHeader", | ||||||
|  |   "Spotify__Extendedmetadata__EntityExtensionDataHeader", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__EntityExtensionDataHeader), | ||||||
|  |   5, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data_header__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data_header__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__entity_extension_data_header__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__entity_extension_data_header__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__entity_extension_data__field_descriptors[3] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "header", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionData, header), | ||||||
|  |     &spotify__extendedmetadata__entity_extension_data_header__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "entity_uri", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionData, entity_uri), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "extension_data", | ||||||
|  |     3, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionData, extension_data), | ||||||
|  |     &google__protobuf__any__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__entity_extension_data__field_indices_by_name[] = { | ||||||
|  |   1,   /* field[1] = entity_uri */ | ||||||
|  |   2,   /* field[2] = extension_data */ | ||||||
|  |   0,   /* field[0] = header */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__entity_extension_data__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 3 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.EntityExtensionData", | ||||||
|  |   "EntityExtensionData", | ||||||
|  |   "Spotify__Extendedmetadata__EntityExtensionData", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__EntityExtensionData), | ||||||
|  |   3, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__entity_extension_data__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__entity_extension_data__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__plain_list_assoc__field_descriptors[1] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "entity_uri", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_REPEATED, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     offsetof(Spotify__Extendedmetadata__PlainListAssoc, n_entity_uri), | ||||||
|  |     offsetof(Spotify__Extendedmetadata__PlainListAssoc, entity_uri), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__plain_list_assoc__field_indices_by_name[] = { | ||||||
|  |   0,   /* field[0] = entity_uri */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__plain_list_assoc__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 1 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__plain_list_assoc__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.PlainListAssoc", | ||||||
|  |   "PlainListAssoc", | ||||||
|  |   "Spotify__Extendedmetadata__PlainListAssoc", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__PlainListAssoc), | ||||||
|  |   1, | ||||||
|  |   spotify__extendedmetadata__plain_list_assoc__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__plain_list_assoc__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__plain_list_assoc__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__plain_list_assoc__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | #define spotify__extendedmetadata__assoc_header__field_descriptors NULL | ||||||
|  | #define spotify__extendedmetadata__assoc_header__field_indices_by_name NULL | ||||||
|  | #define spotify__extendedmetadata__assoc_header__number_ranges NULL | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__assoc_header__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.AssocHeader", | ||||||
|  |   "AssocHeader", | ||||||
|  |   "Spotify__Extendedmetadata__AssocHeader", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__AssocHeader), | ||||||
|  |   0, | ||||||
|  |   spotify__extendedmetadata__assoc_header__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__assoc_header__field_indices_by_name, | ||||||
|  |   0,  spotify__extendedmetadata__assoc_header__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__assoc_header__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__assoc__field_descriptors[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "header", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__Assoc, header), | ||||||
|  |     &spotify__extendedmetadata__assoc_header__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "plain_list", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__Assoc, plain_list), | ||||||
|  |     &spotify__extendedmetadata__plain_list_assoc__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__assoc__field_indices_by_name[] = { | ||||||
|  |   0,   /* field[0] = header */ | ||||||
|  |   1,   /* field[1] = plain_list */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__assoc__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 2 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__assoc__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.Assoc", | ||||||
|  |   "Assoc", | ||||||
|  |   "Spotify__Extendedmetadata__Assoc", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__Assoc), | ||||||
|  |   2, | ||||||
|  |   spotify__extendedmetadata__assoc__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__assoc__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__assoc__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__assoc__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
							
								
								
									
										215
									
								
								src/inputs/librespot-c/src/proto/entity_extension_data.pb-c.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								src/inputs/librespot-c/src/proto/entity_extension_data.pb-c.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,215 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: entity_extension_data.proto */ | ||||||
|  | 
 | ||||||
|  | #ifndef PROTOBUF_C_entity_5fextension_5fdata_2eproto__INCLUDED | ||||||
|  | #define PROTOBUF_C_entity_5fextension_5fdata_2eproto__INCLUDED | ||||||
|  | 
 | ||||||
|  | #include <protobuf-c/protobuf-c.h> | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__BEGIN_DECLS | ||||||
|  | 
 | ||||||
|  | #if PROTOBUF_C_VERSION_NUMBER < 1003000 | ||||||
|  | # error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. | ||||||
|  | #elif 1004001 < PROTOBUF_C_MIN_COMPILER_VERSION | ||||||
|  | # error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "google_any.pb-c.h" | ||||||
|  | 
 | ||||||
|  | typedef struct Spotify__Extendedmetadata__EntityExtensionDataHeader Spotify__Extendedmetadata__EntityExtensionDataHeader; | ||||||
|  | typedef struct Spotify__Extendedmetadata__EntityExtensionData Spotify__Extendedmetadata__EntityExtensionData; | ||||||
|  | typedef struct Spotify__Extendedmetadata__PlainListAssoc Spotify__Extendedmetadata__PlainListAssoc; | ||||||
|  | typedef struct Spotify__Extendedmetadata__AssocHeader Spotify__Extendedmetadata__AssocHeader; | ||||||
|  | typedef struct Spotify__Extendedmetadata__Assoc Spotify__Extendedmetadata__Assoc; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- enums --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- messages --- */ | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__EntityExtensionDataHeader | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   int32_t status_code; | ||||||
|  |   char *etag; | ||||||
|  |   char *locale; | ||||||
|  |   int64_t cache_ttl_in_seconds; | ||||||
|  |   int64_t offline_ttl_in_seconds; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA_HEADER__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__entity_extension_data_header__descriptor) \ | ||||||
|  |     , 0, (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, 0, 0 } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__EntityExtensionData | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   Spotify__Extendedmetadata__EntityExtensionDataHeader *header; | ||||||
|  |   char *entity_uri; | ||||||
|  |   Google__Protobuf__Any *extension_data; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__entity_extension_data__descriptor) \ | ||||||
|  |     , NULL, (char *)protobuf_c_empty_string, NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__PlainListAssoc | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   size_t n_entity_uri; | ||||||
|  |   char **entity_uri; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__PLAIN_LIST_ASSOC__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__plain_list_assoc__descriptor) \ | ||||||
|  |     , 0,NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__AssocHeader | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ASSOC_HEADER__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__assoc_header__descriptor) \ | ||||||
|  |      } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__Assoc | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   Spotify__Extendedmetadata__AssocHeader *header; | ||||||
|  |   Spotify__Extendedmetadata__PlainListAssoc *plain_list; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ASSOC__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__assoc__descriptor) \ | ||||||
|  |     , NULL, NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Spotify__Extendedmetadata__EntityExtensionDataHeader methods */ | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataHeader         *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataHeader   *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataHeader   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataHeader   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionDataHeader * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__EntityExtensionData methods */ | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionData         *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionData   *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionData   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionData   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionData * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionData *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__PlainListAssoc methods */ | ||||||
|  | void   spotify__extendedmetadata__plain_list_assoc__init | ||||||
|  |                      (Spotify__Extendedmetadata__PlainListAssoc         *message); | ||||||
|  | size_t spotify__extendedmetadata__plain_list_assoc__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__PlainListAssoc   *message); | ||||||
|  | size_t spotify__extendedmetadata__plain_list_assoc__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__PlainListAssoc   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__plain_list_assoc__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__PlainListAssoc   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__PlainListAssoc * | ||||||
|  |        spotify__extendedmetadata__plain_list_assoc__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__plain_list_assoc__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__PlainListAssoc *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__AssocHeader methods */ | ||||||
|  | void   spotify__extendedmetadata__assoc_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__AssocHeader         *message); | ||||||
|  | size_t spotify__extendedmetadata__assoc_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__AssocHeader   *message); | ||||||
|  | size_t spotify__extendedmetadata__assoc_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__AssocHeader   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__assoc_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__AssocHeader   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__AssocHeader * | ||||||
|  |        spotify__extendedmetadata__assoc_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__assoc_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__AssocHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__Assoc methods */ | ||||||
|  | void   spotify__extendedmetadata__assoc__init | ||||||
|  |                      (Spotify__Extendedmetadata__Assoc         *message); | ||||||
|  | size_t spotify__extendedmetadata__assoc__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__Assoc   *message); | ||||||
|  | size_t spotify__extendedmetadata__assoc__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__Assoc   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__assoc__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__Assoc   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__Assoc * | ||||||
|  |        spotify__extendedmetadata__assoc__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__assoc__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__Assoc *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* --- per-message closures --- */ | ||||||
|  | 
 | ||||||
|  | typedef void (*Spotify__Extendedmetadata__EntityExtensionDataHeader_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__EntityExtensionDataHeader *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__EntityExtensionData_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__EntityExtensionData *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__PlainListAssoc_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__PlainListAssoc *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__AssocHeader_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__AssocHeader *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__Assoc_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__Assoc *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | 
 | ||||||
|  | /* --- services --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- descriptors --- */ | ||||||
|  | 
 | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data_header__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__plain_list_assoc__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__assoc_header__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__assoc__descriptor; | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__END_DECLS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif  /* PROTOBUF_C_entity_5fextension_5fdata_2eproto__INCLUDED */ | ||||||
							
								
								
									
										30
									
								
								src/inputs/librespot-c/src/proto/entity_extension_data.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/inputs/librespot-c/src/proto/entity_extension_data.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | syntax = "proto3"; | ||||||
|  | 
 | ||||||
|  | package spotify.extendedmetadata; | ||||||
|  | 
 | ||||||
|  | import "google_any.proto"; | ||||||
|  | 
 | ||||||
|  | message EntityExtensionDataHeader { | ||||||
|  |   int32 status_code = 1; | ||||||
|  |   string etag = 2; | ||||||
|  |   string locale = 3; | ||||||
|  |   int64 cache_ttl_in_seconds = 4; | ||||||
|  |   int64 offline_ttl_in_seconds = 5; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message EntityExtensionData { | ||||||
|  |   EntityExtensionDataHeader header = 1; | ||||||
|  |   string entity_uri = 2; | ||||||
|  |   google.protobuf.Any extension_data = 3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message PlainListAssoc { | ||||||
|  |   repeated string entity_uri = 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message AssocHeader {} | ||||||
|  | 
 | ||||||
|  | message Assoc { | ||||||
|  |   AssocHeader header = 1; | ||||||
|  |   PlainListAssoc plain_list = 2; | ||||||
|  | } | ||||||
							
								
								
									
										826
									
								
								src/inputs/librespot-c/src/proto/extended_metadata.pb-c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										826
									
								
								src/inputs/librespot-c/src/proto/extended_metadata.pb-c.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,826 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: extended_metadata.proto */ | ||||||
|  | 
 | ||||||
|  | /* Do not generate deprecated warnings for self */ | ||||||
|  | #ifndef PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #define PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "extended_metadata.pb-c.h" | ||||||
|  | void   spotify__extendedmetadata__extension_query__init | ||||||
|  |                      (Spotify__Extendedmetadata__ExtensionQuery         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__ExtensionQuery init_value = SPOTIFY__EXTENDEDMETADATA__EXTENSION_QUERY__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__extension_query__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__ExtensionQuery *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__extension_query__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__extension_query__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__ExtensionQuery *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__extension_query__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__extension_query__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__ExtensionQuery *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__extension_query__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__ExtensionQuery * | ||||||
|  |        spotify__extendedmetadata__extension_query__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__ExtensionQuery *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__extension_query__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__extension_query__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__ExtensionQuery *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__extension_query__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_request__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityRequest         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__EntityRequest init_value = SPOTIFY__EXTENDEDMETADATA__ENTITY_REQUEST__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_request__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityRequest *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_request__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_request__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityRequest *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_request__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_request__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityRequest *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_request__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__EntityRequest * | ||||||
|  |        spotify__extendedmetadata__entity_request__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__EntityRequest *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__entity_request__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_request__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityRequest *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_request__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequestHeader         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__BatchedEntityRequestHeader init_value = SPOTIFY__EXTENDEDMETADATA__BATCHED_ENTITY_REQUEST_HEADER__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequestHeader *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request_header__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequestHeader *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequestHeader *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__BatchedEntityRequestHeader * | ||||||
|  |        spotify__extendedmetadata__batched_entity_request_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__BatchedEntityRequestHeader *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__batched_entity_request_header__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequestHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request_header__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequest         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__BatchedEntityRequest init_value = SPOTIFY__EXTENDEDMETADATA__BATCHED_ENTITY_REQUEST__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequest *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequest *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequest *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__BatchedEntityRequest * | ||||||
|  |        spotify__extendedmetadata__batched_entity_request__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__BatchedEntityRequest *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__batched_entity_request__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequest *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_entity_request__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArrayHeader         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader init_value = SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA_ARRAY_HEADER__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array_header__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionDataArrayHeader * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data_array_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__entity_extension_data_array_header__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array_header__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArray         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__EntityExtensionDataArray init_value = SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA_ARRAY__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArray *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArray *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArray *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionDataArray * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data_array__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__EntityExtensionDataArray *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__entity_extension_data_array__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArray *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__entity_extension_data_array__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponseHeader         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__BatchedExtensionResponseHeader init_value = SPOTIFY__EXTENDEDMETADATA__BATCHED_EXTENSION_RESPONSE_HEADER__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response_header__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response_header__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__BatchedExtensionResponseHeader * | ||||||
|  |        spotify__extendedmetadata__batched_extension_response_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__BatchedExtensionResponseHeader *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__batched_extension_response_header__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponseHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response_header__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponse         *message) | ||||||
|  | { | ||||||
|  |   static const Spotify__Extendedmetadata__BatchedExtensionResponse init_value = SPOTIFY__EXTENDEDMETADATA__BATCHED_EXTENSION_RESPONSE__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponse *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponse *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponse *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Spotify__Extendedmetadata__BatchedExtensionResponse * | ||||||
|  |        spotify__extendedmetadata__batched_extension_response__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Spotify__Extendedmetadata__BatchedExtensionResponse *) | ||||||
|  |      protobuf_c_message_unpack (&spotify__extendedmetadata__batched_extension_response__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponse *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &spotify__extendedmetadata__batched_extension_response__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__extension_query__field_descriptors[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "extension_kind", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_ENUM, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__ExtensionQuery, extension_kind), | ||||||
|  |     &spotify__extendedmetadata__extension_kind__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "etag", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__ExtensionQuery, etag), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__extension_query__field_indices_by_name[] = { | ||||||
|  |   1,   /* field[1] = etag */ | ||||||
|  |   0,   /* field[0] = extension_kind */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__extension_query__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 2 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__extension_query__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.ExtensionQuery", | ||||||
|  |   "ExtensionQuery", | ||||||
|  |   "Spotify__Extendedmetadata__ExtensionQuery", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__ExtensionQuery), | ||||||
|  |   2, | ||||||
|  |   spotify__extendedmetadata__extension_query__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__extension_query__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__extension_query__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__extension_query__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__entity_request__field_descriptors[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "entity_uri", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityRequest, entity_uri), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "query", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_REPEATED, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityRequest, n_query), | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityRequest, query), | ||||||
|  |     &spotify__extendedmetadata__extension_query__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__entity_request__field_indices_by_name[] = { | ||||||
|  |   0,   /* field[0] = entity_uri */ | ||||||
|  |   1,   /* field[1] = query */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__entity_request__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 2 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_request__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.EntityRequest", | ||||||
|  |   "EntityRequest", | ||||||
|  |   "Spotify__Extendedmetadata__EntityRequest", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__EntityRequest), | ||||||
|  |   2, | ||||||
|  |   spotify__extendedmetadata__entity_request__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__entity_request__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__entity_request__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__entity_request__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__batched_entity_request_header__field_descriptors[3] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "country", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedEntityRequestHeader, country), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "catalogue", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedEntityRequestHeader, catalogue), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "task_id", | ||||||
|  |     3, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_BYTES, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedEntityRequestHeader, task_id), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__batched_entity_request_header__field_indices_by_name[] = { | ||||||
|  |   1,   /* field[1] = catalogue */ | ||||||
|  |   0,   /* field[0] = country */ | ||||||
|  |   2,   /* field[2] = task_id */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__batched_entity_request_header__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 3 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_entity_request_header__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.BatchedEntityRequestHeader", | ||||||
|  |   "BatchedEntityRequestHeader", | ||||||
|  |   "Spotify__Extendedmetadata__BatchedEntityRequestHeader", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__BatchedEntityRequestHeader), | ||||||
|  |   3, | ||||||
|  |   spotify__extendedmetadata__batched_entity_request_header__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__batched_entity_request_header__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__batched_entity_request_header__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__batched_entity_request_header__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__batched_entity_request__field_descriptors[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "header", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedEntityRequest, header), | ||||||
|  |     &spotify__extendedmetadata__batched_entity_request_header__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "entity_request", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_REPEATED, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedEntityRequest, n_entity_request), | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedEntityRequest, entity_request), | ||||||
|  |     &spotify__extendedmetadata__entity_request__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__batched_entity_request__field_indices_by_name[] = { | ||||||
|  |   1,   /* field[1] = entity_request */ | ||||||
|  |   0,   /* field[0] = header */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__batched_entity_request__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 2 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_entity_request__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.BatchedEntityRequest", | ||||||
|  |   "BatchedEntityRequest", | ||||||
|  |   "Spotify__Extendedmetadata__BatchedEntityRequest", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__BatchedEntityRequest), | ||||||
|  |   2, | ||||||
|  |   spotify__extendedmetadata__batched_entity_request__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__batched_entity_request__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__batched_entity_request__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__batched_entity_request__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__entity_extension_data_array_header__field_descriptors[4] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "provider_error_status", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_INT32, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArrayHeader, provider_error_status), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "cache_ttl_in_seconds", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_INT64, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArrayHeader, cache_ttl_in_seconds), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "offline_ttl_in_seconds", | ||||||
|  |     3, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_INT64, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArrayHeader, offline_ttl_in_seconds), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "extension_type", | ||||||
|  |     4, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_ENUM, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArrayHeader, extension_type), | ||||||
|  |     &spotify__extendedmetadata__extension_type__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__entity_extension_data_array_header__field_indices_by_name[] = { | ||||||
|  |   1,   /* field[1] = cache_ttl_in_seconds */ | ||||||
|  |   3,   /* field[3] = extension_type */ | ||||||
|  |   2,   /* field[2] = offline_ttl_in_seconds */ | ||||||
|  |   0,   /* field[0] = provider_error_status */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__entity_extension_data_array_header__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 4 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data_array_header__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.EntityExtensionDataArrayHeader", | ||||||
|  |   "EntityExtensionDataArrayHeader", | ||||||
|  |   "Spotify__Extendedmetadata__EntityExtensionDataArrayHeader", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__EntityExtensionDataArrayHeader), | ||||||
|  |   4, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data_array_header__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data_array_header__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__entity_extension_data_array_header__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__entity_extension_data_array_header__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__entity_extension_data_array__field_descriptors[3] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "header", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArray, header), | ||||||
|  |     &spotify__extendedmetadata__entity_extension_data_array_header__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "extension_kind", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_ENUM, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArray, extension_kind), | ||||||
|  |     &spotify__extendedmetadata__extension_kind__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "extension_data", | ||||||
|  |     3, | ||||||
|  |     PROTOBUF_C_LABEL_REPEATED, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArray, n_extension_data), | ||||||
|  |     offsetof(Spotify__Extendedmetadata__EntityExtensionDataArray, extension_data), | ||||||
|  |     &spotify__extendedmetadata__entity_extension_data__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__entity_extension_data_array__field_indices_by_name[] = { | ||||||
|  |   2,   /* field[2] = extension_data */ | ||||||
|  |   1,   /* field[1] = extension_kind */ | ||||||
|  |   0,   /* field[0] = header */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__entity_extension_data_array__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 3 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data_array__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.EntityExtensionDataArray", | ||||||
|  |   "EntityExtensionDataArray", | ||||||
|  |   "Spotify__Extendedmetadata__EntityExtensionDataArray", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__EntityExtensionDataArray), | ||||||
|  |   3, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data_array__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__entity_extension_data_array__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__entity_extension_data_array__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__entity_extension_data_array__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | #define spotify__extendedmetadata__batched_extension_response_header__field_descriptors NULL | ||||||
|  | #define spotify__extendedmetadata__batched_extension_response_header__field_indices_by_name NULL | ||||||
|  | #define spotify__extendedmetadata__batched_extension_response_header__number_ranges NULL | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_extension_response_header__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.BatchedExtensionResponseHeader", | ||||||
|  |   "BatchedExtensionResponseHeader", | ||||||
|  |   "Spotify__Extendedmetadata__BatchedExtensionResponseHeader", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__BatchedExtensionResponseHeader), | ||||||
|  |   0, | ||||||
|  |   spotify__extendedmetadata__batched_extension_response_header__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__batched_extension_response_header__field_indices_by_name, | ||||||
|  |   0,  spotify__extendedmetadata__batched_extension_response_header__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__batched_extension_response_header__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCFieldDescriptor spotify__extendedmetadata__batched_extension_response__field_descriptors[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "header", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedExtensionResponse, header), | ||||||
|  |     &spotify__extendedmetadata__batched_extension_response_header__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "extended_metadata", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_REPEATED, | ||||||
|  |     PROTOBUF_C_TYPE_MESSAGE, | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedExtensionResponse, n_extended_metadata), | ||||||
|  |     offsetof(Spotify__Extendedmetadata__BatchedExtensionResponse, extended_metadata), | ||||||
|  |     &spotify__extendedmetadata__entity_extension_data_array__descriptor, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned spotify__extendedmetadata__batched_extension_response__field_indices_by_name[] = { | ||||||
|  |   1,   /* field[1] = extended_metadata */ | ||||||
|  |   0,   /* field[0] = header */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__batched_extension_response__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 2 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_extension_response__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.BatchedExtensionResponse", | ||||||
|  |   "BatchedExtensionResponse", | ||||||
|  |   "Spotify__Extendedmetadata__BatchedExtensionResponse", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   sizeof(Spotify__Extendedmetadata__BatchedExtensionResponse), | ||||||
|  |   2, | ||||||
|  |   spotify__extendedmetadata__batched_extension_response__field_descriptors, | ||||||
|  |   spotify__extendedmetadata__batched_extension_response__field_indices_by_name, | ||||||
|  |   1,  spotify__extendedmetadata__batched_extension_response__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) spotify__extendedmetadata__batched_extension_response__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCEnumValue spotify__extendedmetadata__extension_type__enum_values_by_number[3] = | ||||||
|  | { | ||||||
|  |   { "UNKNOWN", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__UNKNOWN", 0 }, | ||||||
|  |   { "GENERIC", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__GENERIC", 1 }, | ||||||
|  |   { "ASSOC", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__ASSOC", 2 }, | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__extension_type__value_ranges[] = { | ||||||
|  | {0, 0},{0, 3} | ||||||
|  | }; | ||||||
|  | static const ProtobufCEnumValueIndex spotify__extendedmetadata__extension_type__enum_values_by_name[3] = | ||||||
|  | { | ||||||
|  |   { "ASSOC", 2 }, | ||||||
|  |   { "GENERIC", 1 }, | ||||||
|  |   { "UNKNOWN", 0 }, | ||||||
|  | }; | ||||||
|  | const ProtobufCEnumDescriptor spotify__extendedmetadata__extension_type__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.ExtensionType", | ||||||
|  |   "ExtensionType", | ||||||
|  |   "Spotify__Extendedmetadata__ExtensionType", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   3, | ||||||
|  |   spotify__extendedmetadata__extension_type__enum_values_by_number, | ||||||
|  |   3, | ||||||
|  |   spotify__extendedmetadata__extension_type__enum_values_by_name, | ||||||
|  |   1, | ||||||
|  |   spotify__extendedmetadata__extension_type__value_ranges, | ||||||
|  |   NULL,NULL,NULL,NULL   /* reserved[1234] */ | ||||||
|  | }; | ||||||
							
								
								
									
										332
									
								
								src/inputs/librespot-c/src/proto/extended_metadata.pb-c.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										332
									
								
								src/inputs/librespot-c/src/proto/extended_metadata.pb-c.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,332 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: extended_metadata.proto */ | ||||||
|  | 
 | ||||||
|  | #ifndef PROTOBUF_C_extended_5fmetadata_2eproto__INCLUDED | ||||||
|  | #define PROTOBUF_C_extended_5fmetadata_2eproto__INCLUDED | ||||||
|  | 
 | ||||||
|  | #include <protobuf-c/protobuf-c.h> | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__BEGIN_DECLS | ||||||
|  | 
 | ||||||
|  | #if PROTOBUF_C_VERSION_NUMBER < 1003000 | ||||||
|  | # error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. | ||||||
|  | #elif 1004001 < PROTOBUF_C_MIN_COMPILER_VERSION | ||||||
|  | # error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "entity_extension_data.pb-c.h" | ||||||
|  | #include "extension_kind.pb-c.h" | ||||||
|  | 
 | ||||||
|  | typedef struct Spotify__Extendedmetadata__ExtensionQuery Spotify__Extendedmetadata__ExtensionQuery; | ||||||
|  | typedef struct Spotify__Extendedmetadata__EntityRequest Spotify__Extendedmetadata__EntityRequest; | ||||||
|  | typedef struct Spotify__Extendedmetadata__BatchedEntityRequestHeader Spotify__Extendedmetadata__BatchedEntityRequestHeader; | ||||||
|  | typedef struct Spotify__Extendedmetadata__BatchedEntityRequest Spotify__Extendedmetadata__BatchedEntityRequest; | ||||||
|  | typedef struct Spotify__Extendedmetadata__EntityExtensionDataArrayHeader Spotify__Extendedmetadata__EntityExtensionDataArrayHeader; | ||||||
|  | typedef struct Spotify__Extendedmetadata__EntityExtensionDataArray Spotify__Extendedmetadata__EntityExtensionDataArray; | ||||||
|  | typedef struct Spotify__Extendedmetadata__BatchedExtensionResponseHeader Spotify__Extendedmetadata__BatchedExtensionResponseHeader; | ||||||
|  | typedef struct Spotify__Extendedmetadata__BatchedExtensionResponse Spotify__Extendedmetadata__BatchedExtensionResponse; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- enums --- */ | ||||||
|  | 
 | ||||||
|  | typedef enum _Spotify__Extendedmetadata__ExtensionType { | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__UNKNOWN = 0, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__GENERIC = 1, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__ASSOC = 2 | ||||||
|  |     PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE) | ||||||
|  | } Spotify__Extendedmetadata__ExtensionType; | ||||||
|  | 
 | ||||||
|  | /* --- messages --- */ | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__ExtensionQuery | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   Spotify__Extendedmetadata__ExtensionKind extension_kind; | ||||||
|  |   char *etag; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__EXTENSION_QUERY__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__extension_query__descriptor) \ | ||||||
|  |     , SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__UNKNOWN_EXTENSION, (char *)protobuf_c_empty_string } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__EntityRequest | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   char *entity_uri; | ||||||
|  |   size_t n_query; | ||||||
|  |   Spotify__Extendedmetadata__ExtensionQuery **query; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ENTITY_REQUEST__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__entity_request__descriptor) \ | ||||||
|  |     , (char *)protobuf_c_empty_string, 0,NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__BatchedEntityRequestHeader | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   char *country; | ||||||
|  |   char *catalogue; | ||||||
|  |   ProtobufCBinaryData task_id; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__BATCHED_ENTITY_REQUEST_HEADER__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__batched_entity_request_header__descriptor) \ | ||||||
|  |     , (char *)protobuf_c_empty_string, (char *)protobuf_c_empty_string, {0,NULL} } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__BatchedEntityRequest | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   Spotify__Extendedmetadata__BatchedEntityRequestHeader *header; | ||||||
|  |   size_t n_entity_request; | ||||||
|  |   Spotify__Extendedmetadata__EntityRequest **entity_request; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__BATCHED_ENTITY_REQUEST__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__batched_entity_request__descriptor) \ | ||||||
|  |     , NULL, 0,NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__EntityExtensionDataArrayHeader | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   int32_t provider_error_status; | ||||||
|  |   int64_t cache_ttl_in_seconds; | ||||||
|  |   int64_t offline_ttl_in_seconds; | ||||||
|  |   Spotify__Extendedmetadata__ExtensionType extension_type; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA_ARRAY_HEADER__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__entity_extension_data_array_header__descriptor) \ | ||||||
|  |     , 0, 0, 0, SPOTIFY__EXTENDEDMETADATA__EXTENSION_TYPE__UNKNOWN } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__EntityExtensionDataArray | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *header; | ||||||
|  |   Spotify__Extendedmetadata__ExtensionKind extension_kind; | ||||||
|  |   size_t n_extension_data; | ||||||
|  |   Spotify__Extendedmetadata__EntityExtensionData **extension_data; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__ENTITY_EXTENSION_DATA_ARRAY__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__entity_extension_data_array__descriptor) \ | ||||||
|  |     , NULL, SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__UNKNOWN_EXTENSION, 0,NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__BatchedExtensionResponseHeader | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__BATCHED_EXTENSION_RESPONSE_HEADER__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__batched_extension_response_header__descriptor) \ | ||||||
|  |      } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | struct  Spotify__Extendedmetadata__BatchedExtensionResponse | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   Spotify__Extendedmetadata__BatchedExtensionResponseHeader *header; | ||||||
|  |   size_t n_extended_metadata; | ||||||
|  |   Spotify__Extendedmetadata__EntityExtensionDataArray **extended_metadata; | ||||||
|  | }; | ||||||
|  | #define SPOTIFY__EXTENDEDMETADATA__BATCHED_EXTENSION_RESPONSE__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&spotify__extendedmetadata__batched_extension_response__descriptor) \ | ||||||
|  |     , NULL, 0,NULL } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Spotify__Extendedmetadata__ExtensionQuery methods */ | ||||||
|  | void   spotify__extendedmetadata__extension_query__init | ||||||
|  |                      (Spotify__Extendedmetadata__ExtensionQuery         *message); | ||||||
|  | size_t spotify__extendedmetadata__extension_query__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__ExtensionQuery   *message); | ||||||
|  | size_t spotify__extendedmetadata__extension_query__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__ExtensionQuery   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__extension_query__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__ExtensionQuery   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__ExtensionQuery * | ||||||
|  |        spotify__extendedmetadata__extension_query__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__extension_query__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__ExtensionQuery *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__EntityRequest methods */ | ||||||
|  | void   spotify__extendedmetadata__entity_request__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityRequest         *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_request__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityRequest   *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_request__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityRequest   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__entity_request__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityRequest   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__EntityRequest * | ||||||
|  |        spotify__extendedmetadata__entity_request__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__entity_request__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityRequest *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__BatchedEntityRequestHeader methods */ | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequestHeader         *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequestHeader   *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequestHeader   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequestHeader   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__BatchedEntityRequestHeader * | ||||||
|  |        spotify__extendedmetadata__batched_entity_request_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequestHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__BatchedEntityRequest methods */ | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequest         *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequest   *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequest   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__batched_entity_request__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedEntityRequest   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__BatchedEntityRequest * | ||||||
|  |        spotify__extendedmetadata__batched_entity_request__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__batched_entity_request__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedEntityRequest *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__EntityExtensionDataArrayHeader methods */ | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArrayHeader         *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader   *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionDataArrayHeader * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data_array_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__EntityExtensionDataArray methods */ | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array__init | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArray         *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArray   *message); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArray   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__entity_extension_data_array__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__EntityExtensionDataArray   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__EntityExtensionDataArray * | ||||||
|  |        spotify__extendedmetadata__entity_extension_data_array__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__entity_extension_data_array__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__EntityExtensionDataArray *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__BatchedExtensionResponseHeader methods */ | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response_header__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponseHeader         *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response_header__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader   *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response_header__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response_header__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__BatchedExtensionResponseHeader * | ||||||
|  |        spotify__extendedmetadata__batched_extension_response_header__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response_header__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponseHeader *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* Spotify__Extendedmetadata__BatchedExtensionResponse methods */ | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response__init | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponse         *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response__get_packed_size | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponse   *message); | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response__pack | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponse   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t spotify__extendedmetadata__batched_extension_response__pack_to_buffer | ||||||
|  |                      (const Spotify__Extendedmetadata__BatchedExtensionResponse   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Spotify__Extendedmetadata__BatchedExtensionResponse * | ||||||
|  |        spotify__extendedmetadata__batched_extension_response__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   spotify__extendedmetadata__batched_extension_response__free_unpacked | ||||||
|  |                      (Spotify__Extendedmetadata__BatchedExtensionResponse *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* --- per-message closures --- */ | ||||||
|  | 
 | ||||||
|  | typedef void (*Spotify__Extendedmetadata__ExtensionQuery_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__ExtensionQuery *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__EntityRequest_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__EntityRequest *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__BatchedEntityRequestHeader_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__BatchedEntityRequestHeader *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__BatchedEntityRequest_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__BatchedEntityRequest *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__EntityExtensionDataArrayHeader_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__EntityExtensionDataArrayHeader *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__EntityExtensionDataArray_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__EntityExtensionDataArray *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__BatchedExtensionResponseHeader_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__BatchedExtensionResponseHeader *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | typedef void (*Spotify__Extendedmetadata__BatchedExtensionResponse_Closure) | ||||||
|  |                  (const Spotify__Extendedmetadata__BatchedExtensionResponse *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | 
 | ||||||
|  | /* --- services --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- descriptors --- */ | ||||||
|  | 
 | ||||||
|  | extern const ProtobufCEnumDescriptor    spotify__extendedmetadata__extension_type__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__extension_query__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_request__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_entity_request_header__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_entity_request__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data_array_header__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__entity_extension_data_array__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_extension_response_header__descriptor; | ||||||
|  | extern const ProtobufCMessageDescriptor spotify__extendedmetadata__batched_extension_response__descriptor; | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__END_DECLS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif  /* PROTOBUF_C_extended_5fmetadata_2eproto__INCLUDED */ | ||||||
							
								
								
									
										53
									
								
								src/inputs/librespot-c/src/proto/extended_metadata.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/inputs/librespot-c/src/proto/extended_metadata.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | syntax = "proto3"; | ||||||
|  | 
 | ||||||
|  | package spotify.extendedmetadata; | ||||||
|  | 
 | ||||||
|  | import "entity_extension_data.proto"; | ||||||
|  | import "extension_kind.proto"; | ||||||
|  | 
 | ||||||
|  | message ExtensionQuery { | ||||||
|  |   ExtensionKind extension_kind = 1; | ||||||
|  |   string etag = 2; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message EntityRequest { | ||||||
|  |   string entity_uri = 1; | ||||||
|  |   repeated ExtensionQuery query = 2; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message BatchedEntityRequestHeader { | ||||||
|  |   string country = 1; | ||||||
|  |   string catalogue = 2; | ||||||
|  |   bytes task_id = 3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message BatchedEntityRequest { | ||||||
|  |   BatchedEntityRequestHeader header = 1; | ||||||
|  |   repeated EntityRequest entity_request = 2; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message EntityExtensionDataArrayHeader { | ||||||
|  |   int32 provider_error_status = 1; | ||||||
|  |   int64 cache_ttl_in_seconds = 2; | ||||||
|  |   int64 offline_ttl_in_seconds = 3; | ||||||
|  |   ExtensionType extension_type = 4; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message EntityExtensionDataArray { | ||||||
|  |   EntityExtensionDataArrayHeader header = 1; | ||||||
|  |   ExtensionKind extension_kind = 2; | ||||||
|  |   repeated EntityExtensionData extension_data = 3; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | message BatchedExtensionResponseHeader {} | ||||||
|  | 
 | ||||||
|  | message BatchedExtensionResponse { | ||||||
|  |   BatchedExtensionResponseHeader header = 1; | ||||||
|  |   repeated EntityExtensionDataArray extended_metadata = 2; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum ExtensionType { | ||||||
|  |   UNKNOWN = 0; | ||||||
|  |   GENERIC = 1; | ||||||
|  |   ASSOC = 2; | ||||||
|  | } | ||||||
							
								
								
									
										411
									
								
								src/inputs/librespot-c/src/proto/extension_kind.pb-c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										411
									
								
								src/inputs/librespot-c/src/proto/extension_kind.pb-c.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,411 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: extension_kind.proto */ | ||||||
|  | 
 | ||||||
|  | /* Do not generate deprecated warnings for self */ | ||||||
|  | #ifndef PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #define PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "extension_kind.pb-c.h" | ||||||
|  | static const ProtobufCEnumValue spotify__extendedmetadata__extension_kind__enum_values_by_number[189] = | ||||||
|  | { | ||||||
|  |   { "UNKNOWN_EXTENSION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__UNKNOWN_EXTENSION", 0 }, | ||||||
|  |   { "CANVAZ", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CANVAZ", 1 }, | ||||||
|  |   { "STORYLINES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__STORYLINES", 2 }, | ||||||
|  |   { "PODCAST_TOPICS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_TOPICS", 3 }, | ||||||
|  |   { "PODCAST_SEGMENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_SEGMENTS", 4 }, | ||||||
|  |   { "AUDIO_FILES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_FILES", 5 }, | ||||||
|  |   { "TRACK_DESCRIPTOR", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_DESCRIPTOR", 6 }, | ||||||
|  |   { "PODCAST_COUNTER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_COUNTER", 7 }, | ||||||
|  |   { "ARTIST_V4", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_V4", 8 }, | ||||||
|  |   { "ALBUM_V4", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ALBUM_V4", 9 }, | ||||||
|  |   { "TRACK_V4", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_V4", 10 }, | ||||||
|  |   { "SHOW_V4", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V4", 11 }, | ||||||
|  |   { "EPISODE_V4", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_V4", 12 }, | ||||||
|  |   { "PODCAST_HTML_DESCRIPTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_HTML_DESCRIPTION", 13 }, | ||||||
|  |   { "PODCAST_QUOTES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_QUOTES", 14 }, | ||||||
|  |   { "USER_PROFILE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__USER_PROFILE", 15 }, | ||||||
|  |   { "CANVAS_V1", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CANVAS_V1", 16 }, | ||||||
|  |   { "SHOW_V4_BASE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V4_BASE", 17 }, | ||||||
|  |   { "SHOW_V4_EPISODES_ASSOC", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V4_EPISODES_ASSOC", 18 }, | ||||||
|  |   { "TRACK_DESCRIPTOR_SIGNATURES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_DESCRIPTOR_SIGNATURES", 19 }, | ||||||
|  |   { "PODCAST_AD_SEGMENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_AD_SEGMENTS", 20 }, | ||||||
|  |   { "EPISODE_TRANSCRIPTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_TRANSCRIPTS", 21 }, | ||||||
|  |   { "PODCAST_SUBSCRIPTIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_SUBSCRIPTIONS", 22 }, | ||||||
|  |   { "EXTRACTED_COLOR", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EXTRACTED_COLOR", 23 }, | ||||||
|  |   { "PODCAST_VIRALITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_VIRALITY", 24 }, | ||||||
|  |   { "IMAGE_SPARKLES_HACK", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__IMAGE_SPARKLES_HACK", 25 }, | ||||||
|  |   { "PODCAST_POPULARITY_HACK", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_POPULARITY_HACK", 26 }, | ||||||
|  |   { "AUTOMIX_MODE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUTOMIX_MODE", 27 }, | ||||||
|  |   { "CUEPOINTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CUEPOINTS", 28 }, | ||||||
|  |   { "PODCAST_POLL", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_POLL", 29 }, | ||||||
|  |   { "EPISODE_ACCESS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_ACCESS", 30 }, | ||||||
|  |   { "SHOW_ACCESS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_ACCESS", 31 }, | ||||||
|  |   { "PODCAST_QNA", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_QNA", 32 }, | ||||||
|  |   { "CLIPS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CLIPS", 33 }, | ||||||
|  |   { "SHOW_V5", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V5", 34 }, | ||||||
|  |   { "EPISODE_V5", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_V5", 35 }, | ||||||
|  |   { "PODCAST_CTA_CARDS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_CTA_CARDS", 36 }, | ||||||
|  |   { "PODCAST_RATING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_RATING", 37 }, | ||||||
|  |   { "DISPLAY_SEGMENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DISPLAY_SEGMENTS", 38 }, | ||||||
|  |   { "GREENROOM", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__GREENROOM", 39 }, | ||||||
|  |   { "USER_CREATED", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__USER_CREATED", 40 }, | ||||||
|  |   { "SHOW_DESCRIPTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_DESCRIPTION", 41 }, | ||||||
|  |   { "SHOW_HTML_DESCRIPTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_HTML_DESCRIPTION", 42 }, | ||||||
|  |   { "SHOW_PLAYABILITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_PLAYABILITY", 43 }, | ||||||
|  |   { "EPISODE_DESCRIPTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_DESCRIPTION", 44 }, | ||||||
|  |   { "EPISODE_HTML_DESCRIPTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_HTML_DESCRIPTION", 45 }, | ||||||
|  |   { "EPISODE_PLAYABILITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_PLAYABILITY", 46 }, | ||||||
|  |   { "SHOW_EPISODES_ASSOC", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_EPISODES_ASSOC", 47 }, | ||||||
|  |   { "CLIENT_CONFIG", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CLIENT_CONFIG", 48 }, | ||||||
|  |   { "PLAYLISTABILITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLISTABILITY", 49 }, | ||||||
|  |   { "AUDIOBOOK_V5", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_V5", 50 }, | ||||||
|  |   { "CHAPTER_V5", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CHAPTER_V5", 51 }, | ||||||
|  |   { "AUDIOBOOK_SPECIFICS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_SPECIFICS", 52 }, | ||||||
|  |   { "EPISODE_RANKING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_RANKING", 53 }, | ||||||
|  |   { "HTML_DESCRIPTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HTML_DESCRIPTION", 54 }, | ||||||
|  |   { "CREATOR_CHANNEL", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREATOR_CHANNEL", 55 }, | ||||||
|  |   { "AUDIOBOOK_PROVIDERS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_PROVIDERS", 56 }, | ||||||
|  |   { "PLAY_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAY_TRAIT", 57 }, | ||||||
|  |   { "CONTENT_WARNING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_WARNING", 58 }, | ||||||
|  |   { "IMAGE_CUE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__IMAGE_CUE", 59 }, | ||||||
|  |   { "STREAM_COUNT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__STREAM_COUNT", 60 }, | ||||||
|  |   { "AUDIO_ATTRIBUTES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_ATTRIBUTES", 61 }, | ||||||
|  |   { "NAVIGABLE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__NAVIGABLE_TRAIT", 62 }, | ||||||
|  |   { "NEXT_BEST_EPISODE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__NEXT_BEST_EPISODE", 63 }, | ||||||
|  |   { "AUDIOBOOK_PRICE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_PRICE", 64 }, | ||||||
|  |   { "EXPRESSIVE_PLAYLISTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EXPRESSIVE_PLAYLISTS", 65 }, | ||||||
|  |   { "DYNAMIC_SHOW_EPISODE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DYNAMIC_SHOW_EPISODE", 66 }, | ||||||
|  |   { "LIVE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIVE", 67 }, | ||||||
|  |   { "SKIP_PLAYED", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SKIP_PLAYED", 68 }, | ||||||
|  |   { "AD_BREAK_FREE_PODCASTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AD_BREAK_FREE_PODCASTS", 69 }, | ||||||
|  |   { "ASSOCIATIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ASSOCIATIONS", 70 }, | ||||||
|  |   { "PLAYLIST_EVALUATION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLIST_EVALUATION", 71 }, | ||||||
|  |   { "CACHE_INVALIDATIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CACHE_INVALIDATIONS", 72 }, | ||||||
|  |   { "LIVESTREAM_ENTITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIVESTREAM_ENTITY", 73 }, | ||||||
|  |   { "SINGLE_TAP_REACTIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SINGLE_TAP_REACTIONS", 74 }, | ||||||
|  |   { "USER_COMMENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__USER_COMMENTS", 75 }, | ||||||
|  |   { "CLIENT_RESTRICTIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CLIENT_RESTRICTIONS", 76 }, | ||||||
|  |   { "PODCAST_GUEST", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_GUEST", 77 }, | ||||||
|  |   { "PLAYABILITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYABILITY", 78 }, | ||||||
|  |   { "COVER_IMAGE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COVER_IMAGE", 79 }, | ||||||
|  |   { "SHARE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHARE_TRAIT", 80 }, | ||||||
|  |   { "INSTANCE_SHARING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__INSTANCE_SHARING", 81 }, | ||||||
|  |   { "ARTIST_TOUR", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_TOUR", 82 }, | ||||||
|  |   { "AUDIOBOOK_GENRE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_GENRE", 83 }, | ||||||
|  |   { "CONCEPT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCEPT", 84 }, | ||||||
|  |   { "ORIGINAL_VIDEO", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ORIGINAL_VIDEO", 85 }, | ||||||
|  |   { "SMART_SHUFFLE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SMART_SHUFFLE", 86 }, | ||||||
|  |   { "LIVE_EVENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIVE_EVENTS", 87 }, | ||||||
|  |   { "AUDIOBOOK_RELATIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_RELATIONS", 88 }, | ||||||
|  |   { "HOME_POC_BASECARD", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HOME_POC_BASECARD", 89 }, | ||||||
|  |   { "AUDIOBOOK_SUPPLEMENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_SUPPLEMENTS", 90 }, | ||||||
|  |   { "PAID_PODCAST_BANNER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PAID_PODCAST_BANNER", 91 }, | ||||||
|  |   { "FEWER_ADS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__FEWER_ADS", 92 }, | ||||||
|  |   { "WATCH_FEED_SHOW_EXPLORER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__WATCH_FEED_SHOW_EXPLORER", 93 }, | ||||||
|  |   { "TRACK_EXTRA_DESCRIPTORS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_EXTRA_DESCRIPTORS", 94 }, | ||||||
|  |   { "TRACK_EXTRA_AUDIO_ATTRIBUTES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_EXTRA_AUDIO_ATTRIBUTES", 95 }, | ||||||
|  |   { "TRACK_EXTENDED_CREDITS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_EXTENDED_CREDITS", 96 }, | ||||||
|  |   { "SIMPLE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SIMPLE_TRAIT", 97 }, | ||||||
|  |   { "AUDIO_ASSOCIATIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_ASSOCIATIONS", 98 }, | ||||||
|  |   { "VIDEO_ASSOCIATIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_ASSOCIATIONS", 99 }, | ||||||
|  |   { "PLAYLIST_TUNER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLIST_TUNER", 100 }, | ||||||
|  |   { "ARTIST_VIDEOS_ENTRYPOINT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_VIDEOS_ENTRYPOINT", 101 }, | ||||||
|  |   { "ALBUM_PRERELEASE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ALBUM_PRERELEASE", 102 }, | ||||||
|  |   { "CONTENT_ALTERNATIVES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_ALTERNATIVES", 103 }, | ||||||
|  |   { "SNAPSHOT_SHARING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SNAPSHOT_SHARING", 105 }, | ||||||
|  |   { "DISPLAY_SEGMENTS_COUNT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DISPLAY_SEGMENTS_COUNT", 106 }, | ||||||
|  |   { "PODCAST_FEATURED_EPISODE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_FEATURED_EPISODE", 107 }, | ||||||
|  |   { "PODCAST_SPONSORED_CONTENT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_SPONSORED_CONTENT", 108 }, | ||||||
|  |   { "PODCAST_EPISODE_TOPICS_LLM", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_EPISODE_TOPICS_LLM", 109 }, | ||||||
|  |   { "PODCAST_EPISODE_TOPICS_KG", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_EPISODE_TOPICS_KG", 110 }, | ||||||
|  |   { "EPISODE_RANKING_POPULARITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_RANKING_POPULARITY", 111 }, | ||||||
|  |   { "MERCH", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__MERCH", 112 }, | ||||||
|  |   { "COMPANION_CONTENT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COMPANION_CONTENT", 113 }, | ||||||
|  |   { "WATCH_FEED_ENTITY_EXPLORER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__WATCH_FEED_ENTITY_EXPLORER", 114 }, | ||||||
|  |   { "ANCHOR_CARD_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ANCHOR_CARD_TRAIT", 115 }, | ||||||
|  |   { "AUDIO_PREVIEW_PLAYBACK_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_PREVIEW_PLAYBACK_TRAIT", 116 }, | ||||||
|  |   { "VIDEO_PREVIEW_STILL_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_PREVIEW_STILL_TRAIT", 117 }, | ||||||
|  |   { "PREVIEW_CARD_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PREVIEW_CARD_TRAIT", 118 }, | ||||||
|  |   { "SHORTCUTS_CARD_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHORTCUTS_CARD_TRAIT", 119 }, | ||||||
|  |   { "VIDEO_PREVIEW_PLAYBACK_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_PREVIEW_PLAYBACK_TRAIT", 120 }, | ||||||
|  |   { "COURSE_SPECIFICS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COURSE_SPECIFICS", 121 }, | ||||||
|  |   { "CONCERT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT", 122 }, | ||||||
|  |   { "CONCERT_LOCATION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_LOCATION", 123 }, | ||||||
|  |   { "CONCERT_MARKETING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_MARKETING", 124 }, | ||||||
|  |   { "CONCERT_PERFORMERS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_PERFORMERS", 125 }, | ||||||
|  |   { "TRACK_PAIR_TRANSITION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_PAIR_TRANSITION", 126 }, | ||||||
|  |   { "CONTENT_TYPE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_TYPE_TRAIT", 127 }, | ||||||
|  |   { "NAME_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__NAME_TRAIT", 128 }, | ||||||
|  |   { "ARTWORK_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTWORK_TRAIT", 129 }, | ||||||
|  |   { "RELEASE_DATE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELEASE_DATE_TRAIT", 130 }, | ||||||
|  |   { "CREDITS_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREDITS_TRAIT", 131 }, | ||||||
|  |   { "RELEASE_URI_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELEASE_URI_TRAIT", 132 }, | ||||||
|  |   { "ENTITY_CAPPING", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ENTITY_CAPPING", 133 }, | ||||||
|  |   { "LESSON_SPECIFICS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LESSON_SPECIFICS", 134 }, | ||||||
|  |   { "CONCERT_OFFERS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_OFFERS", 135 }, | ||||||
|  |   { "TRANSITION_MAPS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRANSITION_MAPS", 136 }, | ||||||
|  |   { "ARTIST_HAS_CONCERTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_HAS_CONCERTS", 137 }, | ||||||
|  |   { "PRERELEASE", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PRERELEASE", 138 }, | ||||||
|  |   { "PLAYLIST_ATTRIBUTES_V2", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLIST_ATTRIBUTES_V2", 139 }, | ||||||
|  |   { "LIST_ATTRIBUTES_V2", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_ATTRIBUTES_V2", 140 }, | ||||||
|  |   { "LIST_METADATA", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_METADATA", 141 }, | ||||||
|  |   { "LIST_TUNER_AUDIO_ANALYSIS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_TUNER_AUDIO_ANALYSIS", 142 }, | ||||||
|  |   { "LIST_TUNER_CUEPOINTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_TUNER_CUEPOINTS", 143 }, | ||||||
|  |   { "CONTENT_RATING_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_RATING_TRAIT", 144 }, | ||||||
|  |   { "COPYRIGHT_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COPYRIGHT_TRAIT", 145 }, | ||||||
|  |   { "SUPPORTED_BADGES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SUPPORTED_BADGES", 146 }, | ||||||
|  |   { "BADGES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__BADGES", 147 }, | ||||||
|  |   { "PREVIEW_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PREVIEW_TRAIT", 148 }, | ||||||
|  |   { "ROOTLISTABILITY_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ROOTLISTABILITY_TRAIT", 149 }, | ||||||
|  |   { "LOCAL_CONCERTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LOCAL_CONCERTS", 150 }, | ||||||
|  |   { "RECOMMENDED_PLAYLISTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RECOMMENDED_PLAYLISTS", 151 }, | ||||||
|  |   { "POPULAR_RELEASES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__POPULAR_RELEASES", 152 }, | ||||||
|  |   { "RELATED_RELEASES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELATED_RELEASES", 153 }, | ||||||
|  |   { "SHARE_RESTRICTIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHARE_RESTRICTIONS", 154 }, | ||||||
|  |   { "CONCERT_OFFER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_OFFER", 155 }, | ||||||
|  |   { "CONCERT_OFFER_PROVIDER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_OFFER_PROVIDER", 156 }, | ||||||
|  |   { "ENTITY_BOOKMARKS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ENTITY_BOOKMARKS", 157 }, | ||||||
|  |   { "PRIVACY_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PRIVACY_TRAIT", 158 }, | ||||||
|  |   { "DUPLICATE_ITEMS_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DUPLICATE_ITEMS_TRAIT", 159 }, | ||||||
|  |   { "REORDERING_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__REORDERING_TRAIT", 160 }, | ||||||
|  |   { "PODCAST_RESUMPTION_SEGMENTS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_RESUMPTION_SEGMENTS", 161 }, | ||||||
|  |   { "ARTIST_EXPRESSION_VIDEO", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_EXPRESSION_VIDEO", 162 }, | ||||||
|  |   { "PRERELEASE_VIDEO", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PRERELEASE_VIDEO", 163 }, | ||||||
|  |   { "GATED_ENTITY_RELATIONS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__GATED_ENTITY_RELATIONS", 164 }, | ||||||
|  |   { "RELATED_CREATORS_SECTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELATED_CREATORS_SECTION", 165 }, | ||||||
|  |   { "CREATORS_APPEARS_ON_SECTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREATORS_APPEARS_ON_SECTION", 166 }, | ||||||
|  |   { "PROMO_V1_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PROMO_V1_TRAIT", 167 }, | ||||||
|  |   { "SPEECHLESS_SHARE_CARD", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SPEECHLESS_SHARE_CARD", 168 }, | ||||||
|  |   { "TOP_PLAYABLES_SECTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TOP_PLAYABLES_SECTION", 169 }, | ||||||
|  |   { "AUTO_LENS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUTO_LENS", 170 }, | ||||||
|  |   { "PROMO_V3_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PROMO_V3_TRAIT", 171 }, | ||||||
|  |   { "TRACK_CONTENT_FILTER", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_CONTENT_FILTER", 172 }, | ||||||
|  |   { "HIGHLIGHTABILITY", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HIGHLIGHTABILITY", 173 }, | ||||||
|  |   { "LINK_CARD_WITH_IMAGE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LINK_CARD_WITH_IMAGE_TRAIT", 174 }, | ||||||
|  |   { "TRACK_CLOUD_SECTION", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_CLOUD_SECTION", 175 }, | ||||||
|  |   { "EPISODE_TOPICS", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_TOPICS", 176 }, | ||||||
|  |   { "VIDEO_THUMBNAIL", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_THUMBNAIL", 177 }, | ||||||
|  |   { "IDENTITY_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__IDENTITY_TRAIT", 178 }, | ||||||
|  |   { "VISUAL_IDENTITY_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VISUAL_IDENTITY_TRAIT", 179 }, | ||||||
|  |   { "CONTENT_TYPE_V2_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_TYPE_V2_TRAIT", 180 }, | ||||||
|  |   { "PREVIEW_PLAYBACK_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PREVIEW_PLAYBACK_TRAIT", 181 }, | ||||||
|  |   { "CONSUMPTION_EXPERIENCE_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONSUMPTION_EXPERIENCE_TRAIT", 182 }, | ||||||
|  |   { "PUBLISHING_METADATA_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PUBLISHING_METADATA_TRAIT", 183 }, | ||||||
|  |   { "DETAILED_EVALUATION_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DETAILED_EVALUATION_TRAIT", 184 }, | ||||||
|  |   { "ON_PLATFORM_REPUTATION_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ON_PLATFORM_REPUTATION_TRAIT", 185 }, | ||||||
|  |   { "CREDITS_V2_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREDITS_V2_TRAIT", 186 }, | ||||||
|  |   { "HIGHLIGHT_PLAYABILITY_TRAIT", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HIGHLIGHT_PLAYABILITY_TRAIT", 187 }, | ||||||
|  |   { "SHOW_EPISODE_LIST", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_EPISODE_LIST", 188 }, | ||||||
|  |   { "AVAILABLE_RELEASES", "SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AVAILABLE_RELEASES", 189 }, | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange spotify__extendedmetadata__extension_kind__value_ranges[] = { | ||||||
|  | {0, 0},{105, 104},{0, 189} | ||||||
|  | }; | ||||||
|  | static const ProtobufCEnumValueIndex spotify__extendedmetadata__extension_kind__enum_values_by_name[189] = | ||||||
|  | { | ||||||
|  |   { "AD_BREAK_FREE_PODCASTS", 69 }, | ||||||
|  |   { "ALBUM_PRERELEASE", 102 }, | ||||||
|  |   { "ALBUM_V4", 9 }, | ||||||
|  |   { "ANCHOR_CARD_TRAIT", 114 }, | ||||||
|  |   { "ARTIST_EXPRESSION_VIDEO", 161 }, | ||||||
|  |   { "ARTIST_HAS_CONCERTS", 136 }, | ||||||
|  |   { "ARTIST_TOUR", 82 }, | ||||||
|  |   { "ARTIST_V4", 8 }, | ||||||
|  |   { "ARTIST_VIDEOS_ENTRYPOINT", 101 }, | ||||||
|  |   { "ARTWORK_TRAIT", 128 }, | ||||||
|  |   { "ASSOCIATIONS", 70 }, | ||||||
|  |   { "AUDIOBOOK_GENRE", 83 }, | ||||||
|  |   { "AUDIOBOOK_PRICE", 64 }, | ||||||
|  |   { "AUDIOBOOK_PROVIDERS", 56 }, | ||||||
|  |   { "AUDIOBOOK_RELATIONS", 88 }, | ||||||
|  |   { "AUDIOBOOK_SPECIFICS", 52 }, | ||||||
|  |   { "AUDIOBOOK_SUPPLEMENTS", 90 }, | ||||||
|  |   { "AUDIOBOOK_V5", 50 }, | ||||||
|  |   { "AUDIO_ASSOCIATIONS", 98 }, | ||||||
|  |   { "AUDIO_ATTRIBUTES", 61 }, | ||||||
|  |   { "AUDIO_FILES", 5 }, | ||||||
|  |   { "AUDIO_PREVIEW_PLAYBACK_TRAIT", 115 }, | ||||||
|  |   { "AUTOMIX_MODE", 27 }, | ||||||
|  |   { "AUTO_LENS", 169 }, | ||||||
|  |   { "AVAILABLE_RELEASES", 188 }, | ||||||
|  |   { "BADGES", 146 }, | ||||||
|  |   { "CACHE_INVALIDATIONS", 72 }, | ||||||
|  |   { "CANVAS_V1", 16 }, | ||||||
|  |   { "CANVAZ", 1 }, | ||||||
|  |   { "CHAPTER_V5", 51 }, | ||||||
|  |   { "CLIENT_CONFIG", 48 }, | ||||||
|  |   { "CLIENT_RESTRICTIONS", 76 }, | ||||||
|  |   { "CLIPS", 33 }, | ||||||
|  |   { "COMPANION_CONTENT", 112 }, | ||||||
|  |   { "CONCEPT", 84 }, | ||||||
|  |   { "CONCERT", 121 }, | ||||||
|  |   { "CONCERT_LOCATION", 122 }, | ||||||
|  |   { "CONCERT_MARKETING", 123 }, | ||||||
|  |   { "CONCERT_OFFER", 154 }, | ||||||
|  |   { "CONCERT_OFFERS", 134 }, | ||||||
|  |   { "CONCERT_OFFER_PROVIDER", 155 }, | ||||||
|  |   { "CONCERT_PERFORMERS", 124 }, | ||||||
|  |   { "CONSUMPTION_EXPERIENCE_TRAIT", 181 }, | ||||||
|  |   { "CONTENT_ALTERNATIVES", 103 }, | ||||||
|  |   { "CONTENT_RATING_TRAIT", 143 }, | ||||||
|  |   { "CONTENT_TYPE_TRAIT", 126 }, | ||||||
|  |   { "CONTENT_TYPE_V2_TRAIT", 179 }, | ||||||
|  |   { "CONTENT_WARNING", 58 }, | ||||||
|  |   { "COPYRIGHT_TRAIT", 144 }, | ||||||
|  |   { "COURSE_SPECIFICS", 120 }, | ||||||
|  |   { "COVER_IMAGE", 79 }, | ||||||
|  |   { "CREATORS_APPEARS_ON_SECTION", 165 }, | ||||||
|  |   { "CREATOR_CHANNEL", 55 }, | ||||||
|  |   { "CREDITS_TRAIT", 130 }, | ||||||
|  |   { "CREDITS_V2_TRAIT", 185 }, | ||||||
|  |   { "CUEPOINTS", 28 }, | ||||||
|  |   { "DETAILED_EVALUATION_TRAIT", 183 }, | ||||||
|  |   { "DISPLAY_SEGMENTS", 38 }, | ||||||
|  |   { "DISPLAY_SEGMENTS_COUNT", 105 }, | ||||||
|  |   { "DUPLICATE_ITEMS_TRAIT", 158 }, | ||||||
|  |   { "DYNAMIC_SHOW_EPISODE", 66 }, | ||||||
|  |   { "ENTITY_BOOKMARKS", 156 }, | ||||||
|  |   { "ENTITY_CAPPING", 132 }, | ||||||
|  |   { "EPISODE_ACCESS", 30 }, | ||||||
|  |   { "EPISODE_DESCRIPTION", 44 }, | ||||||
|  |   { "EPISODE_HTML_DESCRIPTION", 45 }, | ||||||
|  |   { "EPISODE_PLAYABILITY", 46 }, | ||||||
|  |   { "EPISODE_RANKING", 53 }, | ||||||
|  |   { "EPISODE_RANKING_POPULARITY", 110 }, | ||||||
|  |   { "EPISODE_TOPICS", 175 }, | ||||||
|  |   { "EPISODE_TRANSCRIPTS", 21 }, | ||||||
|  |   { "EPISODE_V4", 12 }, | ||||||
|  |   { "EPISODE_V5", 35 }, | ||||||
|  |   { "EXPRESSIVE_PLAYLISTS", 65 }, | ||||||
|  |   { "EXTRACTED_COLOR", 23 }, | ||||||
|  |   { "FEWER_ADS", 92 }, | ||||||
|  |   { "GATED_ENTITY_RELATIONS", 163 }, | ||||||
|  |   { "GREENROOM", 39 }, | ||||||
|  |   { "HIGHLIGHTABILITY", 172 }, | ||||||
|  |   { "HIGHLIGHT_PLAYABILITY_TRAIT", 186 }, | ||||||
|  |   { "HOME_POC_BASECARD", 89 }, | ||||||
|  |   { "HTML_DESCRIPTION", 54 }, | ||||||
|  |   { "IDENTITY_TRAIT", 177 }, | ||||||
|  |   { "IMAGE_CUE", 59 }, | ||||||
|  |   { "IMAGE_SPARKLES_HACK", 25 }, | ||||||
|  |   { "INSTANCE_SHARING", 81 }, | ||||||
|  |   { "LESSON_SPECIFICS", 133 }, | ||||||
|  |   { "LINK_CARD_WITH_IMAGE_TRAIT", 173 }, | ||||||
|  |   { "LIST_ATTRIBUTES_V2", 139 }, | ||||||
|  |   { "LIST_METADATA", 140 }, | ||||||
|  |   { "LIST_TUNER_AUDIO_ANALYSIS", 141 }, | ||||||
|  |   { "LIST_TUNER_CUEPOINTS", 142 }, | ||||||
|  |   { "LIVE", 67 }, | ||||||
|  |   { "LIVESTREAM_ENTITY", 73 }, | ||||||
|  |   { "LIVE_EVENTS", 87 }, | ||||||
|  |   { "LOCAL_CONCERTS", 149 }, | ||||||
|  |   { "MERCH", 111 }, | ||||||
|  |   { "NAME_TRAIT", 127 }, | ||||||
|  |   { "NAVIGABLE_TRAIT", 62 }, | ||||||
|  |   { "NEXT_BEST_EPISODE", 63 }, | ||||||
|  |   { "ON_PLATFORM_REPUTATION_TRAIT", 184 }, | ||||||
|  |   { "ORIGINAL_VIDEO", 85 }, | ||||||
|  |   { "PAID_PODCAST_BANNER", 91 }, | ||||||
|  |   { "PLAYABILITY", 78 }, | ||||||
|  |   { "PLAYLISTABILITY", 49 }, | ||||||
|  |   { "PLAYLIST_ATTRIBUTES_V2", 138 }, | ||||||
|  |   { "PLAYLIST_EVALUATION", 71 }, | ||||||
|  |   { "PLAYLIST_TUNER", 100 }, | ||||||
|  |   { "PLAY_TRAIT", 57 }, | ||||||
|  |   { "PODCAST_AD_SEGMENTS", 20 }, | ||||||
|  |   { "PODCAST_COUNTER", 7 }, | ||||||
|  |   { "PODCAST_CTA_CARDS", 36 }, | ||||||
|  |   { "PODCAST_EPISODE_TOPICS_KG", 109 }, | ||||||
|  |   { "PODCAST_EPISODE_TOPICS_LLM", 108 }, | ||||||
|  |   { "PODCAST_FEATURED_EPISODE", 106 }, | ||||||
|  |   { "PODCAST_GUEST", 77 }, | ||||||
|  |   { "PODCAST_HTML_DESCRIPTION", 13 }, | ||||||
|  |   { "PODCAST_POLL", 29 }, | ||||||
|  |   { "PODCAST_POPULARITY_HACK", 26 }, | ||||||
|  |   { "PODCAST_QNA", 32 }, | ||||||
|  |   { "PODCAST_QUOTES", 14 }, | ||||||
|  |   { "PODCAST_RATING", 37 }, | ||||||
|  |   { "PODCAST_RESUMPTION_SEGMENTS", 160 }, | ||||||
|  |   { "PODCAST_SEGMENTS", 4 }, | ||||||
|  |   { "PODCAST_SPONSORED_CONTENT", 107 }, | ||||||
|  |   { "PODCAST_SUBSCRIPTIONS", 22 }, | ||||||
|  |   { "PODCAST_TOPICS", 3 }, | ||||||
|  |   { "PODCAST_VIRALITY", 24 }, | ||||||
|  |   { "POPULAR_RELEASES", 151 }, | ||||||
|  |   { "PRERELEASE", 137 }, | ||||||
|  |   { "PRERELEASE_VIDEO", 162 }, | ||||||
|  |   { "PREVIEW_CARD_TRAIT", 117 }, | ||||||
|  |   { "PREVIEW_PLAYBACK_TRAIT", 180 }, | ||||||
|  |   { "PREVIEW_TRAIT", 147 }, | ||||||
|  |   { "PRIVACY_TRAIT", 157 }, | ||||||
|  |   { "PROMO_V1_TRAIT", 166 }, | ||||||
|  |   { "PROMO_V3_TRAIT", 170 }, | ||||||
|  |   { "PUBLISHING_METADATA_TRAIT", 182 }, | ||||||
|  |   { "RECOMMENDED_PLAYLISTS", 150 }, | ||||||
|  |   { "RELATED_CREATORS_SECTION", 164 }, | ||||||
|  |   { "RELATED_RELEASES", 152 }, | ||||||
|  |   { "RELEASE_DATE_TRAIT", 129 }, | ||||||
|  |   { "RELEASE_URI_TRAIT", 131 }, | ||||||
|  |   { "REORDERING_TRAIT", 159 }, | ||||||
|  |   { "ROOTLISTABILITY_TRAIT", 148 }, | ||||||
|  |   { "SHARE_RESTRICTIONS", 153 }, | ||||||
|  |   { "SHARE_TRAIT", 80 }, | ||||||
|  |   { "SHORTCUTS_CARD_TRAIT", 118 }, | ||||||
|  |   { "SHOW_ACCESS", 31 }, | ||||||
|  |   { "SHOW_DESCRIPTION", 41 }, | ||||||
|  |   { "SHOW_EPISODES_ASSOC", 47 }, | ||||||
|  |   { "SHOW_EPISODE_LIST", 187 }, | ||||||
|  |   { "SHOW_HTML_DESCRIPTION", 42 }, | ||||||
|  |   { "SHOW_PLAYABILITY", 43 }, | ||||||
|  |   { "SHOW_V4", 11 }, | ||||||
|  |   { "SHOW_V4_BASE", 17 }, | ||||||
|  |   { "SHOW_V4_EPISODES_ASSOC", 18 }, | ||||||
|  |   { "SHOW_V5", 34 }, | ||||||
|  |   { "SIMPLE_TRAIT", 97 }, | ||||||
|  |   { "SINGLE_TAP_REACTIONS", 74 }, | ||||||
|  |   { "SKIP_PLAYED", 68 }, | ||||||
|  |   { "SMART_SHUFFLE", 86 }, | ||||||
|  |   { "SNAPSHOT_SHARING", 104 }, | ||||||
|  |   { "SPEECHLESS_SHARE_CARD", 167 }, | ||||||
|  |   { "STORYLINES", 2 }, | ||||||
|  |   { "STREAM_COUNT", 60 }, | ||||||
|  |   { "SUPPORTED_BADGES", 145 }, | ||||||
|  |   { "TOP_PLAYABLES_SECTION", 168 }, | ||||||
|  |   { "TRACK_CLOUD_SECTION", 174 }, | ||||||
|  |   { "TRACK_CONTENT_FILTER", 171 }, | ||||||
|  |   { "TRACK_DESCRIPTOR", 6 }, | ||||||
|  |   { "TRACK_DESCRIPTOR_SIGNATURES", 19 }, | ||||||
|  |   { "TRACK_EXTENDED_CREDITS", 96 }, | ||||||
|  |   { "TRACK_EXTRA_AUDIO_ATTRIBUTES", 95 }, | ||||||
|  |   { "TRACK_EXTRA_DESCRIPTORS", 94 }, | ||||||
|  |   { "TRACK_PAIR_TRANSITION", 125 }, | ||||||
|  |   { "TRACK_V4", 10 }, | ||||||
|  |   { "TRANSITION_MAPS", 135 }, | ||||||
|  |   { "UNKNOWN_EXTENSION", 0 }, | ||||||
|  |   { "USER_COMMENTS", 75 }, | ||||||
|  |   { "USER_CREATED", 40 }, | ||||||
|  |   { "USER_PROFILE", 15 }, | ||||||
|  |   { "VIDEO_ASSOCIATIONS", 99 }, | ||||||
|  |   { "VIDEO_PREVIEW_PLAYBACK_TRAIT", 119 }, | ||||||
|  |   { "VIDEO_PREVIEW_STILL_TRAIT", 116 }, | ||||||
|  |   { "VIDEO_THUMBNAIL", 176 }, | ||||||
|  |   { "VISUAL_IDENTITY_TRAIT", 178 }, | ||||||
|  |   { "WATCH_FEED_ENTITY_EXPLORER", 113 }, | ||||||
|  |   { "WATCH_FEED_SHOW_EXPLORER", 93 }, | ||||||
|  | }; | ||||||
|  | const ProtobufCEnumDescriptor spotify__extendedmetadata__extension_kind__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC, | ||||||
|  |   "spotify.extendedmetadata.ExtensionKind", | ||||||
|  |   "ExtensionKind", | ||||||
|  |   "Spotify__Extendedmetadata__ExtensionKind", | ||||||
|  |   "spotify.extendedmetadata", | ||||||
|  |   189, | ||||||
|  |   spotify__extendedmetadata__extension_kind__enum_values_by_number, | ||||||
|  |   189, | ||||||
|  |   spotify__extendedmetadata__extension_kind__enum_values_by_name, | ||||||
|  |   2, | ||||||
|  |   spotify__extendedmetadata__extension_kind__value_ranges, | ||||||
|  |   NULL,NULL,NULL,NULL   /* reserved[1234] */ | ||||||
|  | }; | ||||||
							
								
								
									
										230
									
								
								src/inputs/librespot-c/src/proto/extension_kind.pb-c.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								src/inputs/librespot-c/src/proto/extension_kind.pb-c.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,230 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: extension_kind.proto */ | ||||||
|  | 
 | ||||||
|  | #ifndef PROTOBUF_C_extension_5fkind_2eproto__INCLUDED | ||||||
|  | #define PROTOBUF_C_extension_5fkind_2eproto__INCLUDED | ||||||
|  | 
 | ||||||
|  | #include <protobuf-c/protobuf-c.h> | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__BEGIN_DECLS | ||||||
|  | 
 | ||||||
|  | #if PROTOBUF_C_VERSION_NUMBER < 1003000 | ||||||
|  | # error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. | ||||||
|  | #elif 1004001 < PROTOBUF_C_MIN_COMPILER_VERSION | ||||||
|  | # error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- enums --- */ | ||||||
|  | 
 | ||||||
|  | typedef enum _Spotify__Extendedmetadata__ExtensionKind { | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__UNKNOWN_EXTENSION = 0, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CANVAZ = 1, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__STORYLINES = 2, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_TOPICS = 3, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_SEGMENTS = 4, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_FILES = 5, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_DESCRIPTOR = 6, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_COUNTER = 7, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_V4 = 8, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ALBUM_V4 = 9, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_V4 = 10, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V4 = 11, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_V4 = 12, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_HTML_DESCRIPTION = 13, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_QUOTES = 14, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__USER_PROFILE = 15, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CANVAS_V1 = 16, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V4_BASE = 17, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V4_EPISODES_ASSOC = 18, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_DESCRIPTOR_SIGNATURES = 19, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_AD_SEGMENTS = 20, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_TRANSCRIPTS = 21, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_SUBSCRIPTIONS = 22, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EXTRACTED_COLOR = 23, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_VIRALITY = 24, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__IMAGE_SPARKLES_HACK = 25, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_POPULARITY_HACK = 26, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUTOMIX_MODE = 27, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CUEPOINTS = 28, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_POLL = 29, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_ACCESS = 30, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_ACCESS = 31, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_QNA = 32, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CLIPS = 33, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_V5 = 34, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_V5 = 35, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_CTA_CARDS = 36, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_RATING = 37, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DISPLAY_SEGMENTS = 38, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__GREENROOM = 39, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__USER_CREATED = 40, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_DESCRIPTION = 41, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_HTML_DESCRIPTION = 42, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_PLAYABILITY = 43, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_DESCRIPTION = 44, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_HTML_DESCRIPTION = 45, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_PLAYABILITY = 46, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_EPISODES_ASSOC = 47, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CLIENT_CONFIG = 48, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLISTABILITY = 49, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_V5 = 50, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CHAPTER_V5 = 51, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_SPECIFICS = 52, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_RANKING = 53, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HTML_DESCRIPTION = 54, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREATOR_CHANNEL = 55, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_PROVIDERS = 56, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAY_TRAIT = 57, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_WARNING = 58, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__IMAGE_CUE = 59, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__STREAM_COUNT = 60, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_ATTRIBUTES = 61, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__NAVIGABLE_TRAIT = 62, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__NEXT_BEST_EPISODE = 63, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_PRICE = 64, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EXPRESSIVE_PLAYLISTS = 65, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DYNAMIC_SHOW_EPISODE = 66, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIVE = 67, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SKIP_PLAYED = 68, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AD_BREAK_FREE_PODCASTS = 69, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ASSOCIATIONS = 70, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLIST_EVALUATION = 71, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CACHE_INVALIDATIONS = 72, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIVESTREAM_ENTITY = 73, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SINGLE_TAP_REACTIONS = 74, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__USER_COMMENTS = 75, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CLIENT_RESTRICTIONS = 76, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_GUEST = 77, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYABILITY = 78, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COVER_IMAGE = 79, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHARE_TRAIT = 80, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__INSTANCE_SHARING = 81, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_TOUR = 82, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_GENRE = 83, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCEPT = 84, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ORIGINAL_VIDEO = 85, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SMART_SHUFFLE = 86, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIVE_EVENTS = 87, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_RELATIONS = 88, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HOME_POC_BASECARD = 89, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIOBOOK_SUPPLEMENTS = 90, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PAID_PODCAST_BANNER = 91, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__FEWER_ADS = 92, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__WATCH_FEED_SHOW_EXPLORER = 93, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_EXTRA_DESCRIPTORS = 94, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_EXTRA_AUDIO_ATTRIBUTES = 95, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_EXTENDED_CREDITS = 96, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SIMPLE_TRAIT = 97, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_ASSOCIATIONS = 98, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_ASSOCIATIONS = 99, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLIST_TUNER = 100, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_VIDEOS_ENTRYPOINT = 101, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ALBUM_PRERELEASE = 102, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_ALTERNATIVES = 103, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SNAPSHOT_SHARING = 105, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DISPLAY_SEGMENTS_COUNT = 106, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_FEATURED_EPISODE = 107, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_SPONSORED_CONTENT = 108, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_EPISODE_TOPICS_LLM = 109, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_EPISODE_TOPICS_KG = 110, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_RANKING_POPULARITY = 111, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__MERCH = 112, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COMPANION_CONTENT = 113, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__WATCH_FEED_ENTITY_EXPLORER = 114, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ANCHOR_CARD_TRAIT = 115, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUDIO_PREVIEW_PLAYBACK_TRAIT = 116, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_PREVIEW_STILL_TRAIT = 117, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PREVIEW_CARD_TRAIT = 118, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHORTCUTS_CARD_TRAIT = 119, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_PREVIEW_PLAYBACK_TRAIT = 120, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COURSE_SPECIFICS = 121, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT = 122, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_LOCATION = 123, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_MARKETING = 124, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_PERFORMERS = 125, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_PAIR_TRANSITION = 126, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_TYPE_TRAIT = 127, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__NAME_TRAIT = 128, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTWORK_TRAIT = 129, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELEASE_DATE_TRAIT = 130, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREDITS_TRAIT = 131, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELEASE_URI_TRAIT = 132, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ENTITY_CAPPING = 133, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LESSON_SPECIFICS = 134, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_OFFERS = 135, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRANSITION_MAPS = 136, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_HAS_CONCERTS = 137, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PRERELEASE = 138, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PLAYLIST_ATTRIBUTES_V2 = 139, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_ATTRIBUTES_V2 = 140, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_METADATA = 141, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_TUNER_AUDIO_ANALYSIS = 142, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LIST_TUNER_CUEPOINTS = 143, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_RATING_TRAIT = 144, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__COPYRIGHT_TRAIT = 145, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SUPPORTED_BADGES = 146, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__BADGES = 147, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PREVIEW_TRAIT = 148, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ROOTLISTABILITY_TRAIT = 149, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LOCAL_CONCERTS = 150, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RECOMMENDED_PLAYLISTS = 151, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__POPULAR_RELEASES = 152, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELATED_RELEASES = 153, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHARE_RESTRICTIONS = 154, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_OFFER = 155, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONCERT_OFFER_PROVIDER = 156, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ENTITY_BOOKMARKS = 157, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PRIVACY_TRAIT = 158, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DUPLICATE_ITEMS_TRAIT = 159, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__REORDERING_TRAIT = 160, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PODCAST_RESUMPTION_SEGMENTS = 161, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ARTIST_EXPRESSION_VIDEO = 162, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PRERELEASE_VIDEO = 163, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__GATED_ENTITY_RELATIONS = 164, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__RELATED_CREATORS_SECTION = 165, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREATORS_APPEARS_ON_SECTION = 166, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PROMO_V1_TRAIT = 167, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SPEECHLESS_SHARE_CARD = 168, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TOP_PLAYABLES_SECTION = 169, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AUTO_LENS = 170, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PROMO_V3_TRAIT = 171, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_CONTENT_FILTER = 172, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HIGHLIGHTABILITY = 173, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__LINK_CARD_WITH_IMAGE_TRAIT = 174, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__TRACK_CLOUD_SECTION = 175, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__EPISODE_TOPICS = 176, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VIDEO_THUMBNAIL = 177, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__IDENTITY_TRAIT = 178, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__VISUAL_IDENTITY_TRAIT = 179, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONTENT_TYPE_V2_TRAIT = 180, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PREVIEW_PLAYBACK_TRAIT = 181, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CONSUMPTION_EXPERIENCE_TRAIT = 182, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__PUBLISHING_METADATA_TRAIT = 183, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__DETAILED_EVALUATION_TRAIT = 184, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__ON_PLATFORM_REPUTATION_TRAIT = 185, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__CREDITS_V2_TRAIT = 186, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__HIGHLIGHT_PLAYABILITY_TRAIT = 187, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__SHOW_EPISODE_LIST = 188, | ||||||
|  |   SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND__AVAILABLE_RELEASES = 189 | ||||||
|  |     PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(SPOTIFY__EXTENDEDMETADATA__EXTENSION_KIND) | ||||||
|  | } Spotify__Extendedmetadata__ExtensionKind; | ||||||
|  | 
 | ||||||
|  | /* --- messages --- */ | ||||||
|  | 
 | ||||||
|  | /* --- per-message closures --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- services --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- descriptors --- */ | ||||||
|  | 
 | ||||||
|  | extern const ProtobufCEnumDescriptor    spotify__extendedmetadata__extension_kind__descriptor; | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__END_DECLS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif  /* PROTOBUF_C_extension_5fkind_2eproto__INCLUDED */ | ||||||
							
								
								
									
										195
									
								
								src/inputs/librespot-c/src/proto/extension_kind.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								src/inputs/librespot-c/src/proto/extension_kind.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,195 @@ | |||||||
|  | syntax = "proto3"; | ||||||
|  | 
 | ||||||
|  | package spotify.extendedmetadata; | ||||||
|  | 
 | ||||||
|  | enum ExtensionKind { | ||||||
|  |   UNKNOWN_EXTENSION = 0; | ||||||
|  |   CANVAZ = 1; | ||||||
|  |   STORYLINES = 2; | ||||||
|  |   PODCAST_TOPICS = 3; | ||||||
|  |   PODCAST_SEGMENTS = 4; | ||||||
|  |   AUDIO_FILES = 5; | ||||||
|  |   TRACK_DESCRIPTOR = 6; | ||||||
|  |   PODCAST_COUNTER = 7; | ||||||
|  |   ARTIST_V4 = 8; | ||||||
|  |   ALBUM_V4 = 9; | ||||||
|  |   TRACK_V4 = 10; | ||||||
|  |   SHOW_V4 = 11; | ||||||
|  |   EPISODE_V4 = 12; | ||||||
|  |   PODCAST_HTML_DESCRIPTION = 13; | ||||||
|  |   PODCAST_QUOTES = 14; | ||||||
|  |   USER_PROFILE = 15; | ||||||
|  |   CANVAS_V1 = 16; | ||||||
|  |   SHOW_V4_BASE = 17; | ||||||
|  |   SHOW_V4_EPISODES_ASSOC = 18; | ||||||
|  |   TRACK_DESCRIPTOR_SIGNATURES = 19; | ||||||
|  |   PODCAST_AD_SEGMENTS = 20; | ||||||
|  |   EPISODE_TRANSCRIPTS = 21; | ||||||
|  |   PODCAST_SUBSCRIPTIONS = 22; | ||||||
|  |   EXTRACTED_COLOR = 23; | ||||||
|  |   PODCAST_VIRALITY = 24; | ||||||
|  |   IMAGE_SPARKLES_HACK = 25; | ||||||
|  |   PODCAST_POPULARITY_HACK = 26; | ||||||
|  |   AUTOMIX_MODE = 27; | ||||||
|  |   CUEPOINTS = 28; | ||||||
|  |   PODCAST_POLL = 29; | ||||||
|  |   EPISODE_ACCESS = 30; | ||||||
|  |   SHOW_ACCESS = 31; | ||||||
|  |   PODCAST_QNA = 32; | ||||||
|  |   CLIPS = 33; | ||||||
|  |   SHOW_V5 = 34; | ||||||
|  |   EPISODE_V5 = 35; | ||||||
|  |   PODCAST_CTA_CARDS = 36; | ||||||
|  |   PODCAST_RATING = 37; | ||||||
|  |   DISPLAY_SEGMENTS = 38; | ||||||
|  |   GREENROOM = 39; | ||||||
|  |   USER_CREATED = 40; | ||||||
|  |   SHOW_DESCRIPTION = 41; | ||||||
|  |   SHOW_HTML_DESCRIPTION = 42; | ||||||
|  |   SHOW_PLAYABILITY = 43; | ||||||
|  |   EPISODE_DESCRIPTION = 44; | ||||||
|  |   EPISODE_HTML_DESCRIPTION = 45; | ||||||
|  |   EPISODE_PLAYABILITY = 46; | ||||||
|  |   SHOW_EPISODES_ASSOC = 47; | ||||||
|  |   CLIENT_CONFIG = 48; | ||||||
|  |   PLAYLISTABILITY = 49; | ||||||
|  |   AUDIOBOOK_V5 = 50; | ||||||
|  |   CHAPTER_V5 = 51; | ||||||
|  |   AUDIOBOOK_SPECIFICS = 52; | ||||||
|  |   EPISODE_RANKING = 53; | ||||||
|  |   HTML_DESCRIPTION = 54; | ||||||
|  |   CREATOR_CHANNEL = 55; | ||||||
|  |   AUDIOBOOK_PROVIDERS = 56; | ||||||
|  |   PLAY_TRAIT = 57; | ||||||
|  |   CONTENT_WARNING = 58; | ||||||
|  |   IMAGE_CUE = 59; | ||||||
|  |   STREAM_COUNT = 60; | ||||||
|  |   AUDIO_ATTRIBUTES = 61; | ||||||
|  |   NAVIGABLE_TRAIT = 62; | ||||||
|  |   NEXT_BEST_EPISODE = 63; | ||||||
|  |   AUDIOBOOK_PRICE = 64; | ||||||
|  |   EXPRESSIVE_PLAYLISTS = 65; | ||||||
|  |   DYNAMIC_SHOW_EPISODE = 66; | ||||||
|  |   LIVE = 67; | ||||||
|  |   SKIP_PLAYED = 68; | ||||||
|  |   AD_BREAK_FREE_PODCASTS = 69; | ||||||
|  |   ASSOCIATIONS = 70; | ||||||
|  |   PLAYLIST_EVALUATION = 71; | ||||||
|  |   CACHE_INVALIDATIONS = 72; | ||||||
|  |   LIVESTREAM_ENTITY = 73; | ||||||
|  |   SINGLE_TAP_REACTIONS = 74; | ||||||
|  |   USER_COMMENTS = 75; | ||||||
|  |   CLIENT_RESTRICTIONS = 76; | ||||||
|  |   PODCAST_GUEST = 77; | ||||||
|  |   PLAYABILITY = 78; | ||||||
|  |   COVER_IMAGE = 79; | ||||||
|  |   SHARE_TRAIT = 80; | ||||||
|  |   INSTANCE_SHARING = 81; | ||||||
|  |   ARTIST_TOUR = 82; | ||||||
|  |   AUDIOBOOK_GENRE = 83; | ||||||
|  |   CONCEPT = 84; | ||||||
|  |   ORIGINAL_VIDEO = 85; | ||||||
|  |   SMART_SHUFFLE = 86; | ||||||
|  |   LIVE_EVENTS = 87; | ||||||
|  |   AUDIOBOOK_RELATIONS = 88; | ||||||
|  |   HOME_POC_BASECARD = 89; | ||||||
|  |   AUDIOBOOK_SUPPLEMENTS = 90; | ||||||
|  |   PAID_PODCAST_BANNER = 91; | ||||||
|  |   FEWER_ADS = 92; | ||||||
|  |   WATCH_FEED_SHOW_EXPLORER = 93; | ||||||
|  |   TRACK_EXTRA_DESCRIPTORS = 94; | ||||||
|  |   TRACK_EXTRA_AUDIO_ATTRIBUTES = 95; | ||||||
|  |   TRACK_EXTENDED_CREDITS = 96; | ||||||
|  |   SIMPLE_TRAIT = 97; | ||||||
|  |   AUDIO_ASSOCIATIONS = 98; | ||||||
|  |   VIDEO_ASSOCIATIONS = 99; | ||||||
|  |   PLAYLIST_TUNER = 100; | ||||||
|  |   ARTIST_VIDEOS_ENTRYPOINT = 101; | ||||||
|  |   ALBUM_PRERELEASE = 102; | ||||||
|  |   CONTENT_ALTERNATIVES = 103; | ||||||
|  |   SNAPSHOT_SHARING = 105; | ||||||
|  |   DISPLAY_SEGMENTS_COUNT = 106; | ||||||
|  |   PODCAST_FEATURED_EPISODE = 107; | ||||||
|  |   PODCAST_SPONSORED_CONTENT = 108; | ||||||
|  |   PODCAST_EPISODE_TOPICS_LLM = 109; | ||||||
|  |   PODCAST_EPISODE_TOPICS_KG = 110; | ||||||
|  |   EPISODE_RANKING_POPULARITY = 111; | ||||||
|  |   MERCH = 112; | ||||||
|  |   COMPANION_CONTENT = 113; | ||||||
|  |   WATCH_FEED_ENTITY_EXPLORER = 114; | ||||||
|  |   ANCHOR_CARD_TRAIT = 115; | ||||||
|  |   AUDIO_PREVIEW_PLAYBACK_TRAIT = 116; | ||||||
|  |   VIDEO_PREVIEW_STILL_TRAIT = 117; | ||||||
|  |   PREVIEW_CARD_TRAIT = 118; | ||||||
|  |   SHORTCUTS_CARD_TRAIT = 119; | ||||||
|  |   VIDEO_PREVIEW_PLAYBACK_TRAIT = 120; | ||||||
|  |   COURSE_SPECIFICS = 121; | ||||||
|  |   CONCERT = 122; | ||||||
|  |   CONCERT_LOCATION = 123; | ||||||
|  |   CONCERT_MARKETING = 124; | ||||||
|  |   CONCERT_PERFORMERS = 125; | ||||||
|  |   TRACK_PAIR_TRANSITION = 126; | ||||||
|  |   CONTENT_TYPE_TRAIT = 127; | ||||||
|  |   NAME_TRAIT = 128; | ||||||
|  |   ARTWORK_TRAIT = 129; | ||||||
|  |   RELEASE_DATE_TRAIT = 130; | ||||||
|  |   CREDITS_TRAIT = 131; | ||||||
|  |   RELEASE_URI_TRAIT = 132; | ||||||
|  |   ENTITY_CAPPING = 133; | ||||||
|  |   LESSON_SPECIFICS = 134; | ||||||
|  |   CONCERT_OFFERS = 135; | ||||||
|  |   TRANSITION_MAPS = 136; | ||||||
|  |   ARTIST_HAS_CONCERTS = 137; | ||||||
|  |   PRERELEASE = 138; | ||||||
|  |   PLAYLIST_ATTRIBUTES_V2 = 139; | ||||||
|  |   LIST_ATTRIBUTES_V2 = 140; | ||||||
|  |   LIST_METADATA = 141; | ||||||
|  |   LIST_TUNER_AUDIO_ANALYSIS = 142; | ||||||
|  |   LIST_TUNER_CUEPOINTS = 143; | ||||||
|  |   CONTENT_RATING_TRAIT = 144; | ||||||
|  |   COPYRIGHT_TRAIT = 145; | ||||||
|  |   SUPPORTED_BADGES = 146; | ||||||
|  |   BADGES = 147; | ||||||
|  |   PREVIEW_TRAIT = 148; | ||||||
|  |   ROOTLISTABILITY_TRAIT = 149; | ||||||
|  |   LOCAL_CONCERTS = 150; | ||||||
|  |   RECOMMENDED_PLAYLISTS = 151; | ||||||
|  |   POPULAR_RELEASES = 152; | ||||||
|  |   RELATED_RELEASES = 153; | ||||||
|  |   SHARE_RESTRICTIONS = 154; | ||||||
|  |   CONCERT_OFFER = 155; | ||||||
|  |   CONCERT_OFFER_PROVIDER = 156; | ||||||
|  |   ENTITY_BOOKMARKS = 157; | ||||||
|  |   PRIVACY_TRAIT = 158; | ||||||
|  |   DUPLICATE_ITEMS_TRAIT = 159; | ||||||
|  |   REORDERING_TRAIT = 160; | ||||||
|  |   PODCAST_RESUMPTION_SEGMENTS = 161; | ||||||
|  |   ARTIST_EXPRESSION_VIDEO = 162; | ||||||
|  |   PRERELEASE_VIDEO = 163; | ||||||
|  |   GATED_ENTITY_RELATIONS = 164; | ||||||
|  |   RELATED_CREATORS_SECTION = 165; | ||||||
|  |   CREATORS_APPEARS_ON_SECTION = 166; | ||||||
|  |   PROMO_V1_TRAIT = 167; | ||||||
|  |   SPEECHLESS_SHARE_CARD = 168; | ||||||
|  |   TOP_PLAYABLES_SECTION = 169; | ||||||
|  |   AUTO_LENS = 170; | ||||||
|  |   PROMO_V3_TRAIT = 171; | ||||||
|  |   TRACK_CONTENT_FILTER = 172; | ||||||
|  |   HIGHLIGHTABILITY = 173; | ||||||
|  |   LINK_CARD_WITH_IMAGE_TRAIT = 174; | ||||||
|  |   TRACK_CLOUD_SECTION = 175; | ||||||
|  |   EPISODE_TOPICS = 176; | ||||||
|  |   VIDEO_THUMBNAIL = 177; | ||||||
|  |   IDENTITY_TRAIT = 178; | ||||||
|  |   VISUAL_IDENTITY_TRAIT = 179; | ||||||
|  |   CONTENT_TYPE_V2_TRAIT = 180; | ||||||
|  |   PREVIEW_PLAYBACK_TRAIT = 181; | ||||||
|  |   CONSUMPTION_EXPERIENCE_TRAIT = 182; | ||||||
|  |   PUBLISHING_METADATA_TRAIT = 183; | ||||||
|  |   DETAILED_EVALUATION_TRAIT = 184; | ||||||
|  |   ON_PLATFORM_REPUTATION_TRAIT = 185; | ||||||
|  |   CREDITS_V2_TRAIT = 186; | ||||||
|  |   HIGHLIGHT_PLAYABILITY_TRAIT = 187; | ||||||
|  |   SHOW_EPISODE_LIST = 188; | ||||||
|  |   AVAILABLE_RELEASES = 189; | ||||||
|  | } | ||||||
							
								
								
									
										105
									
								
								src/inputs/librespot-c/src/proto/google_any.pb-c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								src/inputs/librespot-c/src/proto/google_any.pb-c.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: google_any.proto */ | ||||||
|  | 
 | ||||||
|  | /* Do not generate deprecated warnings for self */ | ||||||
|  | #ifndef PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #define PROTOBUF_C__NO_DEPRECATED | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "google_any.pb-c.h" | ||||||
|  | void   google__protobuf__any__init | ||||||
|  |                      (Google__Protobuf__Any         *message) | ||||||
|  | { | ||||||
|  |   static const Google__Protobuf__Any init_value = GOOGLE__PROTOBUF__ANY__INIT; | ||||||
|  |   *message = init_value; | ||||||
|  | } | ||||||
|  | size_t google__protobuf__any__get_packed_size | ||||||
|  |                      (const Google__Protobuf__Any *message) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &google__protobuf__any__descriptor); | ||||||
|  |   return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); | ||||||
|  | } | ||||||
|  | size_t google__protobuf__any__pack | ||||||
|  |                      (const Google__Protobuf__Any *message, | ||||||
|  |                       uint8_t       *out) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &google__protobuf__any__descriptor); | ||||||
|  |   return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); | ||||||
|  | } | ||||||
|  | size_t google__protobuf__any__pack_to_buffer | ||||||
|  |                      (const Google__Protobuf__Any *message, | ||||||
|  |                       ProtobufCBuffer *buffer) | ||||||
|  | { | ||||||
|  |   assert(message->base.descriptor == &google__protobuf__any__descriptor); | ||||||
|  |   return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); | ||||||
|  | } | ||||||
|  | Google__Protobuf__Any * | ||||||
|  |        google__protobuf__any__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data) | ||||||
|  | { | ||||||
|  |   return (Google__Protobuf__Any *) | ||||||
|  |      protobuf_c_message_unpack (&google__protobuf__any__descriptor, | ||||||
|  |                                 allocator, len, data); | ||||||
|  | } | ||||||
|  | void   google__protobuf__any__free_unpacked | ||||||
|  |                      (Google__Protobuf__Any *message, | ||||||
|  |                       ProtobufCAllocator *allocator) | ||||||
|  | { | ||||||
|  |   if(!message) | ||||||
|  |     return; | ||||||
|  |   assert(message->base.descriptor == &google__protobuf__any__descriptor); | ||||||
|  |   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); | ||||||
|  | } | ||||||
|  | static const ProtobufCFieldDescriptor google__protobuf__any__field_descriptors[2] = | ||||||
|  | { | ||||||
|  |   { | ||||||
|  |     "type_url", | ||||||
|  |     1, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_STRING, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Google__Protobuf__Any, type_url), | ||||||
|  |     NULL, | ||||||
|  |     &protobuf_c_empty_string, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "value", | ||||||
|  |     2, | ||||||
|  |     PROTOBUF_C_LABEL_NONE, | ||||||
|  |     PROTOBUF_C_TYPE_BYTES, | ||||||
|  |     0,   /* quantifier_offset */ | ||||||
|  |     offsetof(Google__Protobuf__Any, value), | ||||||
|  |     NULL, | ||||||
|  |     NULL, | ||||||
|  |     0,             /* flags */ | ||||||
|  |     0,NULL,NULL    /* reserved1,reserved2, etc */ | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | static const unsigned google__protobuf__any__field_indices_by_name[] = { | ||||||
|  |   0,   /* field[0] = type_url */ | ||||||
|  |   1,   /* field[1] = value */ | ||||||
|  | }; | ||||||
|  | static const ProtobufCIntRange google__protobuf__any__number_ranges[1 + 1] = | ||||||
|  | { | ||||||
|  |   { 1, 0 }, | ||||||
|  |   { 0, 2 } | ||||||
|  | }; | ||||||
|  | const ProtobufCMessageDescriptor google__protobuf__any__descriptor = | ||||||
|  | { | ||||||
|  |   PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, | ||||||
|  |   "google.protobuf.Any", | ||||||
|  |   "Any", | ||||||
|  |   "Google__Protobuf__Any", | ||||||
|  |   "google.protobuf", | ||||||
|  |   sizeof(Google__Protobuf__Any), | ||||||
|  |   2, | ||||||
|  |   google__protobuf__any__field_descriptors, | ||||||
|  |   google__protobuf__any__field_indices_by_name, | ||||||
|  |   1,  google__protobuf__any__number_ranges, | ||||||
|  |   (ProtobufCMessageInit) google__protobuf__any__init, | ||||||
|  |   NULL,NULL,NULL    /* reserved[123] */ | ||||||
|  | }; | ||||||
							
								
								
									
										72
									
								
								src/inputs/librespot-c/src/proto/google_any.pb-c.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/inputs/librespot-c/src/proto/google_any.pb-c.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | /* Generated by the protocol buffer compiler.  DO NOT EDIT! */ | ||||||
|  | /* Generated from: google_any.proto */ | ||||||
|  | 
 | ||||||
|  | #ifndef PROTOBUF_C_google_5fany_2eproto__INCLUDED | ||||||
|  | #define PROTOBUF_C_google_5fany_2eproto__INCLUDED | ||||||
|  | 
 | ||||||
|  | #include <protobuf-c/protobuf-c.h> | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__BEGIN_DECLS | ||||||
|  | 
 | ||||||
|  | #if PROTOBUF_C_VERSION_NUMBER < 1003000 | ||||||
|  | # error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. | ||||||
|  | #elif 1004001 < PROTOBUF_C_MIN_COMPILER_VERSION | ||||||
|  | # error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | typedef struct Google__Protobuf__Any Google__Protobuf__Any; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- enums --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- messages --- */ | ||||||
|  | 
 | ||||||
|  | struct  Google__Protobuf__Any | ||||||
|  | { | ||||||
|  |   ProtobufCMessage base; | ||||||
|  |   char *type_url; | ||||||
|  |   ProtobufCBinaryData value; | ||||||
|  | }; | ||||||
|  | #define GOOGLE__PROTOBUF__ANY__INIT \ | ||||||
|  |  { PROTOBUF_C_MESSAGE_INIT (&google__protobuf__any__descriptor) \ | ||||||
|  |     , (char *)protobuf_c_empty_string, {0,NULL} } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Google__Protobuf__Any methods */ | ||||||
|  | void   google__protobuf__any__init | ||||||
|  |                      (Google__Protobuf__Any         *message); | ||||||
|  | size_t google__protobuf__any__get_packed_size | ||||||
|  |                      (const Google__Protobuf__Any   *message); | ||||||
|  | size_t google__protobuf__any__pack | ||||||
|  |                      (const Google__Protobuf__Any   *message, | ||||||
|  |                       uint8_t             *out); | ||||||
|  | size_t google__protobuf__any__pack_to_buffer | ||||||
|  |                      (const Google__Protobuf__Any   *message, | ||||||
|  |                       ProtobufCBuffer     *buffer); | ||||||
|  | Google__Protobuf__Any * | ||||||
|  |        google__protobuf__any__unpack | ||||||
|  |                      (ProtobufCAllocator  *allocator, | ||||||
|  |                       size_t               len, | ||||||
|  |                       const uint8_t       *data); | ||||||
|  | void   google__protobuf__any__free_unpacked | ||||||
|  |                      (Google__Protobuf__Any *message, | ||||||
|  |                       ProtobufCAllocator *allocator); | ||||||
|  | /* --- per-message closures --- */ | ||||||
|  | 
 | ||||||
|  | typedef void (*Google__Protobuf__Any_Closure) | ||||||
|  |                  (const Google__Protobuf__Any *message, | ||||||
|  |                   void *closure_data); | ||||||
|  | 
 | ||||||
|  | /* --- services --- */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* --- descriptors --- */ | ||||||
|  | 
 | ||||||
|  | extern const ProtobufCMessageDescriptor google__protobuf__any__descriptor; | ||||||
|  | 
 | ||||||
|  | PROTOBUF_C__END_DECLS | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif  /* PROTOBUF_C_google_5fany_2eproto__INCLUDED */ | ||||||
							
								
								
									
										15
									
								
								src/inputs/librespot-c/src/proto/google_any.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/inputs/librespot-c/src/proto/google_any.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | syntax = "proto3"; | ||||||
|  | 
 | ||||||
|  | package google.protobuf; | ||||||
|  | 
 | ||||||
|  | option csharp_namespace = "Google.Protobuf.WellKnownTypes"; | ||||||
|  | option objc_class_prefix = "GPB"; | ||||||
|  | option go_package = "google.golang.org/protobuf/types/known/anypb"; | ||||||
|  | option java_multiple_files = true; | ||||||
|  | option java_outer_classname = "AnyProto"; | ||||||
|  | option java_package = "com.google.protobuf"; | ||||||
|  | 
 | ||||||
|  | message Any { | ||||||
|  |     string type_url = 1; | ||||||
|  |     bytes value = 2; | ||||||
|  | } | ||||||
| @ -115,6 +115,7 @@ struct stacked_dir { | |||||||
| 
 | 
 | ||||||
| static int inofd; | static int inofd; | ||||||
| static struct event *inoev; | static struct event *inoev; | ||||||
|  | static struct event *mntev; | ||||||
| static struct deferred_pl *playlists; | static struct deferred_pl *playlists; | ||||||
| static struct stacked_dir *dirstack; | static struct stacked_dir *dirstack; | ||||||
| 
 | 
 | ||||||
| @ -1130,13 +1131,6 @@ process_inotify_dir(struct watch_info *wi, char *path, struct inotify_event *ie) | |||||||
| 
 | 
 | ||||||
|   DPRINTF(E_DBG, L_SCAN, "Directory event: 0x%08x, cookie 0x%08x, wd %d\n", ie->mask, ie->cookie, wi->wd); |   DPRINTF(E_DBG, L_SCAN, "Directory event: 0x%08x, cookie 0x%08x, wd %d\n", ie->mask, ie->cookie, wi->wd); | ||||||
| 
 | 
 | ||||||
|   if (ie->mask & IN_UNMOUNT) |  | ||||||
|     { |  | ||||||
|       db_file_disable_bymatch(path, STRIP_NONE, 0); |  | ||||||
|       db_pl_disable_bymatch(path, STRIP_NONE, 0); |  | ||||||
|       db_directory_disable_bymatch(path, STRIP_NONE, 0); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|   if (ie->mask & IN_MOVE_SELF) |   if (ie->mask & IN_MOVE_SELF) | ||||||
|     { |     { | ||||||
|       /* A directory we know about, that got moved from a place
 |       /* A directory we know about, that got moved from a place
 | ||||||
| @ -1508,6 +1502,7 @@ inotify_cb(int fd, short event, void *arg) | |||||||
| { | { | ||||||
|   struct inotify_event *ie; |   struct inotify_event *ie; | ||||||
|   struct watch_info wi; |   struct watch_info wi; | ||||||
|  |   struct stat sb; | ||||||
|   uint8_t *buf; |   uint8_t *buf; | ||||||
|   uint8_t *ptr; |   uint8_t *ptr; | ||||||
|   char path[PATH_MAX]; |   char path[PATH_MAX]; | ||||||
| @ -1565,8 +1560,16 @@ inotify_cb(int fd, short event, void *arg) | |||||||
| 	  DPRINTF(E_DBG, L_SCAN, "%s deleted or backing filesystem unmounted!\n", wi.path); | 	  DPRINTF(E_DBG, L_SCAN, "%s deleted or backing filesystem unmounted!\n", wi.path); | ||||||
| 
 | 
 | ||||||
| 	  db_watch_delete_bywd(ie->wd); | 	  db_watch_delete_bywd(ie->wd); | ||||||
| 	  free_wi(&wi, 1); | 
 | ||||||
| 	  continue; | 	  // Is the directory gone?
 | ||||||
|  | 	  if (! (lstat(wi.path, &sb) == 0 && S_ISDIR(sb.st_mode))) | ||||||
|  | 	    { | ||||||
|  | 	      free_wi(&wi, 1); | ||||||
|  | 	      continue; | ||||||
|  | 	    } | ||||||
|  | 
 | ||||||
|  | 	  // After an unmount event the mount point is a regular dir that we must process
 | ||||||
|  | 	  ie->mask |= IN_CREATE; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|       path[0] = '\0'; |       path[0] = '\0'; | ||||||
| @ -1614,28 +1617,77 @@ inotify_cb(int fd, short event, void *arg) | |||||||
|   event_add(inoev, NULL); |   event_add(inoev, NULL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void | ||||||
|  | mount_cb(int fd, short event, void *arg) | ||||||
|  | { | ||||||
|  |   struct watch_info wi = { 0 }; | ||||||
|  |   char *path = NULL; | ||||||
|  |   enum mountwatch_event mev; | ||||||
|  |   int parent_id; | ||||||
|  |   int ret; | ||||||
|  | 
 | ||||||
|  |   mev = mountwatch_event_get(&path); | ||||||
|  |   if (mev == MOUNTWATCH_ERR || mev == MOUNTWATCH_NONE) | ||||||
|  |     goto readd; | ||||||
|  | 
 | ||||||
|  |   // Check if this is a location we are watching
 | ||||||
|  |   ret = db_watch_get_bypath(&wi, path); | ||||||
|  |   if (ret < 0) | ||||||
|  |     goto readd; | ||||||
|  | 
 | ||||||
|  |   if (mev == MOUNTWATCH_MOUNT) | ||||||
|  |     { | ||||||
|  |       DPRINTF(E_DBG, L_SCAN, "MNT_MOUNT path %s\n", path); | ||||||
|  | 
 | ||||||
|  |       // After a mount, the inotify watch we had on the mount point will no
 | ||||||
|  |       // longer be working, so remove.
 | ||||||
|  |       inotify_rm_watch(inofd, wi.wd); | ||||||
|  |       db_watch_delete_bywd(wi.wd); | ||||||
|  | 
 | ||||||
|  |       // Adds watches, scans and sets disabled = 0
 | ||||||
|  |       parent_id = get_parent_dir_id(path); | ||||||
|  |       process_directories(path, parent_id, 0); | ||||||
|  |     } | ||||||
|  |   else if (mev == MOUNTWATCH_UNMOUNT) | ||||||
|  |     { | ||||||
|  |       DPRINTF(E_DBG, L_SCAN, "MNT_UNMOUNT path %s\n", path); | ||||||
|  | 
 | ||||||
|  |       db_file_disable_bymatch(path, STRIP_NONE, 0); | ||||||
|  |       db_pl_disable_bymatch(path, STRIP_NONE, 0); | ||||||
|  |       db_directory_disable_bymatch(path, STRIP_NONE, 0); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |  readd: | ||||||
|  |   free_wi(&wi, 1); | ||||||
|  |   free(path); | ||||||
|  |   event_add(mntev, NULL); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Thread: main & scan */ | /* Thread: main & scan */ | ||||||
| static int | static int | ||||||
| inofd_event_set(void) | inofd_event_set(void) | ||||||
| { | { | ||||||
|  |   int mntfd; | ||||||
|  | 
 | ||||||
|   inofd = inotify_init1(IN_CLOEXEC); |   inofd = inotify_init1(IN_CLOEXEC); | ||||||
|   if (inofd < 0) |   if (inofd < 0) | ||||||
|     { |     { | ||||||
|       DPRINTF(E_FATAL, L_SCAN, "Could not create inotify fd: %s\n", strerror(errno)); |       DPRINTF(E_FATAL, L_SCAN, "Could not create inotify fd: %s\n", strerror(errno)); | ||||||
| 
 |  | ||||||
|       return -1; |       return -1; | ||||||
|     } |     } | ||||||
|  |   else | ||||||
|  |     CHECK_NULL(L_SCAN, inoev = event_new(evbase_lib, inofd, EV_READ, inotify_cb, NULL)); | ||||||
| 
 | 
 | ||||||
|   inoev = event_new(evbase_lib, inofd, EV_READ, inotify_cb, NULL); |   // If mountwatch cannot be initialized we create mntev as a timer (that will
 | ||||||
|  |   // never trigger), so that all the event_add() don't need a "if (mntev)" test.
 | ||||||
|  |   mntfd = mountwatch_init(); | ||||||
|  |   if (mntfd >= 0) | ||||||
|  |     CHECK_NULL(L_SCAN, mntev = event_new(evbase_lib, mntfd, EV_READ, mount_cb, NULL)); | ||||||
|  |   else | ||||||
|  |     CHECK_NULL(L_SCAN, mntev = evtimer_new(evbase_lib, mount_cb, NULL)); | ||||||
| 
 | 
 | ||||||
| #ifndef __linux__ | #ifndef __linux__ | ||||||
|   deferred_inoev = evtimer_new(evbase_lib, inotify_deferred_cb, NULL); |   CHECK_NULL(L_SCAN, deferred_inoev = evtimer_new(evbase_lib, inotify_deferred_cb, NULL)); | ||||||
|   if (!deferred_inoev) |  | ||||||
|     { |  | ||||||
|       DPRINTF(E_LOG, L_SCAN, "Could not create deferred inotify event\n"); |  | ||||||
| 
 |  | ||||||
|       return -1; |  | ||||||
|     } |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|   return 0; |   return 0; | ||||||
| @ -1648,6 +1700,9 @@ inofd_event_unset(void) | |||||||
| #ifndef __linux__ | #ifndef __linux__ | ||||||
|   event_free(deferred_inoev); |   event_free(deferred_inoev); | ||||||
| #endif | #endif | ||||||
|  |   event_free(mntev); | ||||||
|  |   mountwatch_deinit(); | ||||||
|  | 
 | ||||||
|   event_free(inoev); |   event_free(inoev); | ||||||
|   close(inofd); |   close(inofd); | ||||||
| } | } | ||||||
| @ -1674,6 +1729,7 @@ filescanner_initscan() | |||||||
|     { |     { | ||||||
|       /* Enable inotify */ |       /* Enable inotify */ | ||||||
|       event_add(inoev, NULL); |       event_add(inoev, NULL); | ||||||
|  |       event_add(mntev, NULL); | ||||||
|     } |     } | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @ -1692,6 +1748,7 @@ filescanner_rescan() | |||||||
|     { |     { | ||||||
|       /* Enable inotify */ |       /* Enable inotify */ | ||||||
|       event_add(inoev, NULL); |       event_add(inoev, NULL); | ||||||
|  |       event_add(mntev, NULL); | ||||||
|     } |     } | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @ -1710,6 +1767,7 @@ filescanner_metarescan() | |||||||
|     { |     { | ||||||
|       /* Enable inotify */ |       /* Enable inotify */ | ||||||
|       event_add(inoev, NULL); |       event_add(inoev, NULL); | ||||||
|  |       event_add(mntev, NULL); | ||||||
|     } |     } | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @ -1727,6 +1785,7 @@ filescanner_fullrescan() | |||||||
|     { |     { | ||||||
|       /* Enable inotify */ |       /* Enable inotify */ | ||||||
|       event_add(inoev, NULL); |       event_add(inoev, NULL); | ||||||
|  |       event_add(mntev, NULL); | ||||||
|     } |     } | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @ -2210,9 +2269,7 @@ filescanner_init(void) | |||||||
| 
 | 
 | ||||||
|   ret = inofd_event_set(); |   ret = inofd_event_set(); | ||||||
|   if (ret < 0) |   if (ret < 0) | ||||||
|     { |     return -1; | ||||||
|       return -1; |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,6 +4,13 @@ | |||||||
| 
 | 
 | ||||||
| #include "db.h" | #include "db.h" | ||||||
| 
 | 
 | ||||||
|  | enum mountwatch_event | ||||||
|  | { | ||||||
|  |   MOUNTWATCH_ERR = -1, | ||||||
|  |   MOUNTWATCH_NONE = 0, | ||||||
|  |   MOUNTWATCH_MOUNT = 1, | ||||||
|  |   MOUNTWATCH_UNMOUNT = 2, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| /* --------------------------- Actual scanners ---------------------------- */ | /* --------------------------- Actual scanners ---------------------------- */ | ||||||
| 
 | 
 | ||||||
| @ -84,4 +91,13 @@ playlist_add(const char *path); | |||||||
| int | int | ||||||
| write_metadata_ffmpeg(const struct media_file_info *mfi); | write_metadata_ffmpeg(const struct media_file_info *mfi); | ||||||
| 
 | 
 | ||||||
|  | int | ||||||
|  | mountwatch_event_get(char **path); | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | mountwatch_deinit(void); | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | mountwatch_init(void); | ||||||
|  | 
 | ||||||
| #endif /* !__FILESCANNER_H__ */ | #endif /* !__FILESCANNER_H__ */ | ||||||
|  | |||||||
| @ -219,8 +219,6 @@ static int | |||||||
| get_dictval_date_from_key(plist_t dict, const char *key, uint32_t *val) | get_dictval_date_from_key(plist_t dict, const char *key, uint32_t *val) | ||||||
| { | { | ||||||
|   plist_t node; |   plist_t node; | ||||||
|   int32_t secs; |  | ||||||
|   int32_t dummy; |  | ||||||
| 
 | 
 | ||||||
|   node = plist_dict_get_item(dict, key); |   node = plist_dict_get_item(dict, key); | ||||||
| 
 | 
 | ||||||
| @ -230,11 +228,22 @@ get_dictval_date_from_key(plist_t dict, const char *key, uint32_t *val) | |||||||
|   if (plist_get_node_type(node) != PLIST_DATE) |   if (plist_get_node_type(node) != PLIST_DATE) | ||||||
|     return -1; |     return -1; | ||||||
| 
 | 
 | ||||||
|  | #if HAVE_DECL_PLIST_GET_UNIX_DATE_VAL | ||||||
|  |   int64_t secs; | ||||||
|  | 
 | ||||||
|  |   plist_get_unix_date_val(node, &secs); | ||||||
|  | 
 | ||||||
|  |   *val = (uint32_t) secs; | ||||||
|  | #else | ||||||
|  |   int32_t secs; | ||||||
|  |   int32_t dummy; | ||||||
|  | 
 | ||||||
|   // secs will be number of seconds since 01/01/2001
 |   // secs will be number of seconds since 01/01/2001
 | ||||||
|   plist_get_date_val(node, &secs, &dummy); |   plist_get_date_val(node, &secs, &dummy); | ||||||
| 
 | 
 | ||||||
|   // make it a Unix Timestamp by adding seconds from 1/1/1970 to 1/1/2001
 |   // make it a Unix Timestamp by adding seconds from 1/1/1970 to 1/1/2001
 | ||||||
|   *val = (uint32_t) (secs + 978307200); |   *val = (uint32_t) (secs + 978307200); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										162
									
								
								src/library/filescanner_mountwatch.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								src/library/filescanner_mountwatch.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,162 @@ | |||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <errno.h> | ||||||
|  | 
 | ||||||
|  | #ifdef HAVE_CONFIG_H | ||||||
|  | # include <config.h> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include "filescanner.h" | ||||||
|  | #include "config.h" | ||||||
|  | #include "misc.h" | ||||||
|  | #include "logger.h" | ||||||
|  | 
 | ||||||
|  | #ifdef HAVE_LIBMOUNT | ||||||
|  | #include <libmount/libmount.h> | ||||||
|  | 
 | ||||||
|  | static struct libmnt_monitor *mountwatch_monitor; | ||||||
|  | static struct libmnt_table *mountwatch_table; | ||||||
|  | 
 | ||||||
|  | // path is allocated if a change is found
 | ||||||
|  | static int | ||||||
|  | compare_tables(char **path, struct libmnt_table *old_tab, struct libmnt_table *new_tab) | ||||||
|  | { | ||||||
|  |   struct libmnt_iter *iter; | ||||||
|  |   struct libmnt_fs *fs; | ||||||
|  |   const char *target; | ||||||
|  | 
 | ||||||
|  |   *path = NULL; | ||||||
|  | 
 | ||||||
|  |   CHECK_NULL(L_SCAN, iter = mnt_new_iter(MNT_ITER_FORWARD)); | ||||||
|  | 
 | ||||||
|  |   // Find new mounts (in new_tab but not in old_tab)
 | ||||||
|  |   mnt_reset_iter(iter, MNT_ITER_FORWARD); | ||||||
|  |   while (mnt_table_next_fs(new_tab, iter, &fs) == 0) | ||||||
|  |     { | ||||||
|  |       target = mnt_fs_get_target(fs); | ||||||
|  |       if (!target || mnt_table_find_target(old_tab, target, MNT_ITER_FORWARD)) | ||||||
|  | 	continue; | ||||||
|  | 
 | ||||||
|  |       *path = strdup(target); | ||||||
|  |       return MOUNTWATCH_MOUNT; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   // Find removed mounts (in old_tab but not in new_tab)
 | ||||||
|  |   mnt_reset_iter(iter, MNT_ITER_FORWARD); | ||||||
|  |   while (mnt_table_next_fs(old_tab, iter, &fs) == 0) | ||||||
|  |     { | ||||||
|  |       target = mnt_fs_get_target(fs); | ||||||
|  |       if (!target || mnt_table_find_target(new_tab, target, MNT_ITER_FORWARD)) | ||||||
|  | 	continue; | ||||||
|  | 
 | ||||||
|  |       *path = strdup(target); | ||||||
|  |       return MOUNTWATCH_UNMOUNT; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   mnt_free_iter(iter); | ||||||
|  |   return MOUNTWATCH_NONE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | mountwatch_event_get(char **path) | ||||||
|  | { | ||||||
|  |   struct libmnt_table *newtable = NULL; | ||||||
|  |   enum mountwatch_event event; | ||||||
|  |   int ret; | ||||||
|  | 
 | ||||||
|  |   *path = NULL; | ||||||
|  | 
 | ||||||
|  |   ret = mnt_monitor_event_cleanup(mountwatch_monitor); | ||||||
|  |   if (ret < 0) | ||||||
|  |     { | ||||||
|  |       DPRINTF(E_WARN, L_SCAN, "Monitor cleanup failed: %s\n", strerror(-ret)); | ||||||
|  |       goto error; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   CHECK_NULL(L_SCAN, newtable = mnt_new_table()); | ||||||
|  | 
 | ||||||
|  |   ret = mnt_table_parse_mtab(newtable, NULL); | ||||||
|  |   if (ret < 0) | ||||||
|  |     { | ||||||
|  |       DPRINTF(E_WARN, L_SCAN, "Failed to reload mount table: %s\n", strerror(-ret)); | ||||||
|  |       goto error; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   event = compare_tables(path, mountwatch_table, newtable); | ||||||
|  | 
 | ||||||
|  |   mnt_unref_table(mountwatch_table); | ||||||
|  |   mountwatch_table = newtable; | ||||||
|  | 
 | ||||||
|  |   return event; | ||||||
|  | 
 | ||||||
|  |  error: | ||||||
|  |   if (newtable) | ||||||
|  |     mnt_unref_table(newtable); | ||||||
|  | 
 | ||||||
|  |   return MOUNTWATCH_ERR; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | mountwatch_deinit(void) | ||||||
|  | { | ||||||
|  |   mnt_unref_table(mountwatch_table); | ||||||
|  |   mountwatch_table = NULL; | ||||||
|  | 
 | ||||||
|  |   mnt_unref_monitor(mountwatch_monitor); | ||||||
|  |   mountwatch_monitor = NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | mountwatch_init(void) | ||||||
|  | { | ||||||
|  |   int ret, fd; | ||||||
|  | 
 | ||||||
|  |   CHECK_NULL(L_SCAN, mountwatch_monitor = mnt_new_monitor()); | ||||||
|  | 
 | ||||||
|  |   ret = mnt_monitor_enable_kernel(mountwatch_monitor, 1); | ||||||
|  |   if (ret < 0) | ||||||
|  |     goto error; | ||||||
|  | 
 | ||||||
|  |   fd = mnt_monitor_get_fd(mountwatch_monitor); | ||||||
|  |   if (fd < 0) | ||||||
|  |     goto error; | ||||||
|  | 
 | ||||||
|  |   mountwatch_table = mnt_new_table(); | ||||||
|  |   if (!mountwatch_table) | ||||||
|  |     goto error; | ||||||
|  | 
 | ||||||
|  |   ret = mnt_table_parse_mtab(mountwatch_table, NULL); | ||||||
|  |   if (ret < 0) | ||||||
|  |     goto error; | ||||||
|  | 
 | ||||||
|  |   return fd; | ||||||
|  | 
 | ||||||
|  |  error: | ||||||
|  |   DPRINTF(E_LOG, L_SCAN, "Error initializing libmount, mount/unmount events won't be detected\n"); | ||||||
|  |   mountwatch_deinit(); | ||||||
|  |   errno = -ret; //TODO
 | ||||||
|  |   return -1; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | int | ||||||
|  | mountwatch_event_get(char **path) | ||||||
|  | { | ||||||
|  |   *path = NULL; | ||||||
|  |   return MOUNTWATCH_NONE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | mountwatch_deinit(void) | ||||||
|  | { | ||||||
|  |   return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | mountwatch_init(void) | ||||||
|  | { | ||||||
|  |   DPRINTF(E_LOG, L_SCAN, "No libmount on this platform, mount/unmount events won't be detected\n"); | ||||||
|  |   return -1; | ||||||
|  | } | ||||||
|  | #endif | ||||||
							
								
								
									
										134
									
								
								src/misc.c
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								src/misc.c
									
									
									
									
									
								
							| @ -49,6 +49,7 @@ | |||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
|  | #include <poll.h> | ||||||
| #include <netdb.h> | #include <netdb.h> | ||||||
| #include <arpa/inet.h> | #include <arpa/inet.h> | ||||||
| #include <ifaddrs.h> // getifaddrs | #include <ifaddrs.h> // getifaddrs | ||||||
| @ -321,14 +322,102 @@ net_if_get(char *ifname, size_t ifname_len, const char *addr) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int | static int | ||||||
| net_connect_impl(const char *addr, unsigned short port, int type, const char *log_service_name, bool set_nonblock) | net_connect_addrinfo(struct addrinfo *ai, int timeout_ms, bool set_nonblock, const char **errmsg) | ||||||
|  | { | ||||||
|  |   int fd = -1; | ||||||
|  |   int flags; | ||||||
|  |   struct pollfd pollfd; | ||||||
|  |   socklen_t len; | ||||||
|  |   int error; | ||||||
|  |   int ret; | ||||||
|  | 
 | ||||||
|  |   fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); | ||||||
|  |   if (fd < 0) | ||||||
|  |     { | ||||||
|  |       *errmsg = strerror(errno); | ||||||
|  |       goto error; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   // For Linux we could just give SOCK_CLOEXEC to socket(), but that won't work
 | ||||||
|  |   // with MacOS, so we have to use fcntl()
 | ||||||
|  |   flags = fcntl(fd, F_GETFL, 0); | ||||||
|  |   if (flags < 0) | ||||||
|  |     { | ||||||
|  |       *errmsg = "fcntl() with F_GETFL returned an error"; | ||||||
|  |       goto error; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   ret = fcntl(fd, F_SETFL, flags | O_NONBLOCK | O_CLOEXEC); | ||||||
|  |   if (ret < 0) | ||||||
|  |     { | ||||||
|  |       *errmsg = "fcntl() with F_SETFL non-block returned an error"; | ||||||
|  |       goto error; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   // We often need to wait for the connection. On Linux this seems always to be
 | ||||||
|  |   // the case, but FreeBSD connect() sometimes returns immediate success.
 | ||||||
|  |   ret = connect(fd, ai->ai_addr, ai->ai_addrlen); | ||||||
|  |   if (ret < 0 && errno != EINPROGRESS) // EINPROGRESS in case of nonblock
 | ||||||
|  |     { | ||||||
|  |       *errmsg = strerror(errno); | ||||||
|  |       goto error; | ||||||
|  |     } | ||||||
|  |   else if (ret != 0) | ||||||
|  |     { | ||||||
|  |       // Use poll here since select requires using fdset that would be
 | ||||||
|  |       // overflowed in FreeBSD
 | ||||||
|  |       pollfd.fd = fd; | ||||||
|  |       pollfd.events = POLLOUT; | ||||||
|  | 
 | ||||||
|  |       ret = poll(&pollfd, 1, timeout_ms); | ||||||
|  |       if (ret < 0) | ||||||
|  | 	{ | ||||||
|  | 	  *errmsg = strerror(errno); | ||||||
|  | 	  goto error; | ||||||
|  | 	} | ||||||
|  |       else if (ret == 0) | ||||||
|  | 	{ | ||||||
|  | 	  *errmsg = "Timed out trying to connect"; | ||||||
|  | 	  goto error; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  |       len = sizeof(error); | ||||||
|  |       ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len); | ||||||
|  |       if (ret < 0 || error) | ||||||
|  | 	{ | ||||||
|  | 	  *errmsg = error ? strerror(error) : strerror(errno); | ||||||
|  | 	  goto error; | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   if (!set_nonblock) | ||||||
|  |     { | ||||||
|  |       ret = fcntl(fd, F_SETFL, flags | O_CLOEXEC); | ||||||
|  |       if (ret < 0) | ||||||
|  | 	{ | ||||||
|  | 	  *errmsg = "fcntl() with F_SETFL block returned an error"; | ||||||
|  | 	  goto error; | ||||||
|  | 	} | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   return fd; | ||||||
|  | 
 | ||||||
|  |  error: | ||||||
|  |   if (fd >= 0) | ||||||
|  |     close(fd); | ||||||
|  | 
 | ||||||
|  |   return -1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int | ||||||
|  | net_connect_impl(const char *addr, unsigned short port, int type, const char *log_service_name, int timeout_ms, bool set_nonblock) | ||||||
| { | { | ||||||
|   struct addrinfo hints = { 0 }; |   struct addrinfo hints = { 0 }; | ||||||
|   struct addrinfo *servinfo; |   struct addrinfo *servinfo; | ||||||
|   struct addrinfo *ptr; |   struct addrinfo *ai; | ||||||
|   char strport[8]; |   char strport[8]; | ||||||
|   int flags; |   const char *errmsg = NULL; | ||||||
|   int fd; |   int fd = -1; | ||||||
|   int ret; |   int ret; | ||||||
| 
 | 
 | ||||||
|   DPRINTF(E_DBG, L_MISC, "Connecting to '%s' at %s (port %u)\n", log_service_name, addr, port); |   DPRINTF(E_DBG, L_MISC, "Connecting to '%s' at %s (port %u)\n", log_service_name, addr, port); | ||||||
| @ -344,45 +433,20 @@ net_connect_impl(const char *addr, unsigned short port, int type, const char *lo | |||||||
|       return -1; |       return -1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   for (ptr = servinfo; ptr; ptr = ptr->ai_next) |   for (ai = servinfo; ai && fd < 0; ai = ai->ai_next) | ||||||
|     { |     { | ||||||
|       fd = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); |       fd = net_connect_addrinfo(ai, timeout_ms, set_nonblock, &errmsg); | ||||||
|       if (fd < 0) |  | ||||||
| 	{ |  | ||||||
| 	  continue; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|       // For Linux we could just give SOCK_CLOEXEC to socket(), but that won't
 |  | ||||||
|       // work with MacOS, so we have to use fcntl()
 |  | ||||||
|       flags = fcntl(fd, F_GETFL, 0); |  | ||||||
|       if (flags < 0) |  | ||||||
| 	continue; |  | ||||||
|       if (set_nonblock) |  | ||||||
| 	ret = fcntl(fd, F_SETFL, flags | O_NONBLOCK | O_CLOEXEC); |  | ||||||
|       else |  | ||||||
| 	ret = fcntl(fd, F_SETFL, flags | O_CLOEXEC); |  | ||||||
|       if (ret < 0) |  | ||||||
| 	continue; |  | ||||||
| 
 |  | ||||||
|       ret = connect(fd, ptr->ai_addr, ptr->ai_addrlen); |  | ||||||
|       if (ret < 0 && errno != EINPROGRESS) // EINPROGRESS in case of nonblock
 |  | ||||||
| 	{ |  | ||||||
| 	  close(fd); |  | ||||||
| 	  continue; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|       break; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   freeaddrinfo(servinfo); |   freeaddrinfo(servinfo); | ||||||
| 
 | 
 | ||||||
|   if (!ptr) |   if (fd < 0) | ||||||
|     { |     { | ||||||
|       DPRINTF(E_LOG, L_MISC, "Could not connect to '%s' at %s (port %u): %s\n", log_service_name, addr, port, strerror(errno)); |       DPRINTF(E_LOG, L_MISC, "Could not connect to '%s' at %s (port %u): %s\n", log_service_name, addr, port, errmsg); | ||||||
|       return -1; |       return -1; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   // net_address_get(ipaddr, sizeof(ipaddr), (union net_sockaddr *)ptr->ai-addr);
 |   // net_address_get(ipaddr, sizeof(ipaddr), (union net_sockaddr *)ai->ai-addr);
 | ||||||
| 
 | 
 | ||||||
|   return fd; |   return fd; | ||||||
| } | } | ||||||
| @ -390,7 +454,7 @@ net_connect_impl(const char *addr, unsigned short port, int type, const char *lo | |||||||
| int | int | ||||||
| net_connect(const char *addr, unsigned short port, int type, const char *log_service_name) | net_connect(const char *addr, unsigned short port, int type, const char *log_service_name) | ||||||
| { | { | ||||||
|   return net_connect_impl(addr, port, type, log_service_name, false); |   return net_connect_impl(addr, port, type, log_service_name, NET_CONNECT_TIMEOUT_MS, false); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // If *port is 0 then a random port will be assigned, and *port will be updated
 | // If *port is 0 then a random port will be assigned, and *port will be updated
 | ||||||
|  | |||||||
| @ -15,6 +15,8 @@ | |||||||
| #include <sys/socket.h> | #include <sys/socket.h> | ||||||
| #include <netinet/in.h> | #include <netinet/in.h> | ||||||
| 
 | 
 | ||||||
|  | #define NET_CONNECT_TIMEOUT_MS 3000 | ||||||
|  | 
 | ||||||
| union net_sockaddr | union net_sockaddr | ||||||
| { | { | ||||||
|   struct sockaddr_in sin; |   struct sockaddr_in sin; | ||||||
|  | |||||||
| @ -61,6 +61,7 @@ char * | |||||||
| xml_to_string(xml_node *top, const char *xml_declaration) | xml_to_string(xml_node *top, const char *xml_declaration) | ||||||
| { | { | ||||||
|   xmlBuffer *buf; |   xmlBuffer *buf; | ||||||
|  |   const xmlChar *xml_string; | ||||||
|   char *s; |   char *s; | ||||||
| 
 | 
 | ||||||
|   buf = xmlBufferCreate(); |   buf = xmlBufferCreate(); | ||||||
| @ -72,7 +73,9 @@ xml_to_string(xml_node *top, const char *xml_declaration) | |||||||
| 
 | 
 | ||||||
|   xmlNodeDump(buf, top->doc, top, 0, 0); |   xmlNodeDump(buf, top->doc, top, 0, 0); | ||||||
| 
 | 
 | ||||||
|   s = strdup((char *)buf->content); |   xml_string = xmlBufferContent(buf); | ||||||
|  | 
 | ||||||
|  |   s = xml_string ? strdup((char *)xml_string) : NULL; | ||||||
| 
 | 
 | ||||||
|   xmlBufferFree(buf); |   xmlBufferFree(buf); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -150,6 +150,7 @@ ends\ with     { return (yylval->ival = SMARTPL_T_ENDSWITH); } | |||||||
| or             { return SMARTPL_T_OR; } | or             { return SMARTPL_T_OR; } | ||||||
| and            { return SMARTPL_T_AND; } | and            { return SMARTPL_T_AND; } | ||||||
| not            { return SMARTPL_T_NOT; } | not            { return SMARTPL_T_NOT; } | ||||||
|  | empty          { return SMARTPL_T_EMPTY; } | ||||||
| 
 | 
 | ||||||
| {quoted}       { yylval->str=strdup(yytext+1); | {quoted}       { yylval->str=strdup(yytext+1); | ||||||
|                  if(yylval->str[strlen(yylval->str)-1] == '"') |                  if(yylval->str[strlen(yylval->str)-1] == '"') | ||||||
|  | |||||||
| @ -229,6 +229,7 @@ enum sql_append_type { | |||||||
|   SQL_APPEND_FIELD, |   SQL_APPEND_FIELD, | ||||||
|   SQL_APPEND_STR, |   SQL_APPEND_STR, | ||||||
|   SQL_APPEND_INT, |   SQL_APPEND_INT, | ||||||
|  |   SQL_APPEND_NULL, | ||||||
|   SQL_APPEND_ORDER, |   SQL_APPEND_ORDER, | ||||||
|   SQL_APPEND_PARENS, |   SQL_APPEND_PARENS, | ||||||
|   SQL_APPEND_DATE_STRFTIME, |   SQL_APPEND_DATE_STRFTIME, | ||||||
| @ -339,6 +340,11 @@ static void sql_append_recursive(struct smartpl_result *result, struct result_pa | |||||||
|       assert(a->r == NULL); |       assert(a->r == NULL); | ||||||
|       sql_append(result, part, "%d", a->ival); |       sql_append(result, part, "%d", a->ival); | ||||||
|       break; |       break; | ||||||
|  |     case SQL_APPEND_NULL: | ||||||
|  |       assert(a->l == NULL); | ||||||
|  |       assert(a->r == NULL); | ||||||
|  |       sql_append(result, part, "NULL", NULL); | ||||||
|  |       break; | ||||||
|     case SQL_APPEND_ORDER: |     case SQL_APPEND_ORDER: | ||||||
|       assert(a->l == NULL); |       assert(a->l == NULL); | ||||||
|       assert(a->r == NULL); |       assert(a->r == NULL); | ||||||
| @ -397,6 +403,8 @@ static void sql_from_ast(struct smartpl_result *result, struct result_part *part | |||||||
|       sql_append_recursive(result, part, a, ">=", "<", is_not, SQL_APPEND_OPERATOR); break; |       sql_append_recursive(result, part, a, ">=", "<", is_not, SQL_APPEND_OPERATOR); break; | ||||||
|     case SMARTPL_T_IS: |     case SMARTPL_T_IS: | ||||||
|       sql_append_recursive(result, part, a, "=", "!=", is_not, SQL_APPEND_OPERATOR_STR); break; |       sql_append_recursive(result, part, a, "=", "!=", is_not, SQL_APPEND_OPERATOR_STR); break; | ||||||
|  |     case SMARTPL_T_IS_OPERATOR: | ||||||
|  |       sql_append_recursive(result, part, a, "IS", "IS NOT", is_not, SQL_APPEND_OPERATOR); break; | ||||||
|     case SMARTPL_T_INCLUDES: |     case SMARTPL_T_INCLUDES: | ||||||
|     case SMARTPL_T_STARTSWITH: |     case SMARTPL_T_STARTSWITH: | ||||||
|     case SMARTPL_T_ENDSWITH: |     case SMARTPL_T_ENDSWITH: | ||||||
| @ -437,6 +445,8 @@ static void sql_from_ast(struct smartpl_result *result, struct result_part *part | |||||||
|       sql_append_recursive(result, part, a, NULL, NULL, 0, SQL_APPEND_FIELD); break; |       sql_append_recursive(result, part, a, NULL, NULL, 0, SQL_APPEND_FIELD); break; | ||||||
|     case SMARTPL_T_NUM: |     case SMARTPL_T_NUM: | ||||||
|       sql_append_recursive(result, part, a, NULL, NULL, 0, SQL_APPEND_INT); break; |       sql_append_recursive(result, part, a, NULL, NULL, 0, SQL_APPEND_INT); break; | ||||||
|  |     case SMARTPL_T_NULL: | ||||||
|  |       sql_append_recursive(result, part, a, NULL, NULL, 0, SQL_APPEND_NULL); break; | ||||||
|     case SMARTPL_T_ORDERBY: |     case SMARTPL_T_ORDERBY: | ||||||
|       sql_append_recursive(result, part, a, "ASC", "DESC", is_not, SQL_APPEND_ORDER); break; |       sql_append_recursive(result, part, a, "ASC", "DESC", is_not, SQL_APPEND_ORDER); break; | ||||||
|     case SMARTPL_T_RANDOM: |     case SMARTPL_T_RANDOM: | ||||||
| @ -518,6 +528,9 @@ static int result_set(struct smartpl_result *result, char *title, struct ast *cr | |||||||
| %token SMARTPL_T_OR | %token SMARTPL_T_OR | ||||||
| %token SMARTPL_T_AND | %token SMARTPL_T_AND | ||||||
| %token SMARTPL_T_NOT | %token SMARTPL_T_NOT | ||||||
|  | %token SMARTPL_T_EMPTY | ||||||
|  | %token SMARTPL_T_NULL | ||||||
|  | %token SMARTPL_T_IS_OPERATOR | ||||||
| 
 | 
 | ||||||
| %token SMARTPL_T_DAYS | %token SMARTPL_T_DAYS | ||||||
| %token SMARTPL_T_WEEKS | %token SMARTPL_T_WEEKS | ||||||
| @ -590,6 +603,7 @@ criteria: criteria SMARTPL_T_AND criteria                   { $$ = ast_new(SMART | |||||||
| predicate: SMARTPL_T_STRTAG strbool SMARTPL_T_STRING        { $$ = ast_new($2, ast_data(SMARTPL_T_STRTAG, $1), ast_data(SMARTPL_T_STRING, $3)); } | predicate: SMARTPL_T_STRTAG strbool SMARTPL_T_STRING        { $$ = ast_new($2, ast_data(SMARTPL_T_STRTAG, $1), ast_data(SMARTPL_T_STRING, $3)); } | ||||||
| | SMARTPL_T_INTTAG intbool SMARTPL_T_NUM                    { $$ = ast_new($2, ast_data(SMARTPL_T_INTTAG, $1), ast_int(SMARTPL_T_NUM, $3)); } | | SMARTPL_T_INTTAG intbool SMARTPL_T_NUM                    { $$ = ast_new($2, ast_data(SMARTPL_T_INTTAG, $1), ast_int(SMARTPL_T_NUM, $3)); } | ||||||
| | SMARTPL_T_DATETAG datebool dateexpr                       { $$ = ast_new($2, ast_data(SMARTPL_T_DATETAG, $1), $3); } | | SMARTPL_T_DATETAG datebool dateexpr                       { $$ = ast_new($2, ast_data(SMARTPL_T_DATETAG, $1), $3); } | ||||||
|  | | SMARTPL_T_STRTAG SMARTPL_T_IS SMARTPL_T_EMPTY             { $$ = ast_new(SMARTPL_T_IS_OPERATOR, ast_data(SMARTPL_T_STRTAG, $1), ast_data(SMARTPL_T_NULL, NULL)); } | ||||||
| | enumexpr | | enumexpr | ||||||
| ; | ; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -48,6 +48,8 @@ | |||||||
| #define USE_NO_CLEAR_AVFMT_NOFILE (LIBAVFORMAT_VERSION_MAJOR > 59) || ((LIBAVFORMAT_VERSION_MAJOR == 59) && (LIBAVFORMAT_VERSION_MINOR > 15)) | #define USE_NO_CLEAR_AVFMT_NOFILE (LIBAVFORMAT_VERSION_MAJOR > 59) || ((LIBAVFORMAT_VERSION_MAJOR == 59) && (LIBAVFORMAT_VERSION_MINOR > 15)) | ||||||
| #define USE_CH_LAYOUT (LIBAVCODEC_VERSION_MAJOR > 59) || ((LIBAVCODEC_VERSION_MAJOR == 59) && (LIBAVCODEC_VERSION_MINOR > 24)) | #define USE_CH_LAYOUT (LIBAVCODEC_VERSION_MAJOR > 59) || ((LIBAVCODEC_VERSION_MAJOR == 59) && (LIBAVCODEC_VERSION_MINOR > 24)) | ||||||
| #define USE_CONST_AVIO_WRITE_PACKET (LIBAVFORMAT_VERSION_MAJOR > 61) || ((LIBAVFORMAT_VERSION_MAJOR == 61) && (LIBAVFORMAT_VERSION_MINOR > 0)) | #define USE_CONST_AVIO_WRITE_PACKET (LIBAVFORMAT_VERSION_MAJOR > 61) || ((LIBAVFORMAT_VERSION_MAJOR == 61) && (LIBAVFORMAT_VERSION_MINOR > 0)) | ||||||
|  | #define USE_AVCODEC_GET_SUPPORTED_CONFIG (LIBAVCODEC_VERSION_MAJOR > 61) || ((LIBAVCODEC_VERSION_MAJOR == 61) && (LIBAVCODEC_VERSION_MINOR > 13)) | ||||||
|  | #define USE_INJECT_GLOBAL_SIDE_DATA (LIBAVFORMAT_VERSION_MAJOR < 61) || ((LIBAVFORMAT_VERSION_MAJOR == 61) && (LIBAVFORMAT_VERSION_MINOR < 8)) | ||||||
| 
 | 
 | ||||||
| // Interval between ICY metadata checks for streams, in seconds
 | // Interval between ICY metadata checks for streams, in seconds
 | ||||||
| #define METADATA_ICY_INTERVAL 5 | #define METADATA_ICY_INTERVAL 5 | ||||||
| @ -621,6 +623,7 @@ stream_add(struct encode_ctx *ctx, struct stream_ctx *s, enum AVCodecID codec_id | |||||||
|   AVCodec *encoder; |   AVCodec *encoder; | ||||||
| #endif | #endif | ||||||
|   AVDictionary *options = NULL; |   AVDictionary *options = NULL; | ||||||
|  |   const enum AVPixelFormat *pix_fmts = NULL; | ||||||
|   int ret; |   int ret; | ||||||
| 
 | 
 | ||||||
|   codec_desc = avcodec_descriptor_get(codec_id); |   codec_desc = avcodec_descriptor_get(codec_id); | ||||||
| @ -646,7 +649,12 @@ stream_add(struct encode_ctx *ctx, struct stream_ctx *s, enum AVCodecID codec_id | |||||||
| 
 | 
 | ||||||
|   if (!s->codec->pix_fmt) |   if (!s->codec->pix_fmt) | ||||||
|     { |     { | ||||||
|       s->codec->pix_fmt = avcodec_default_get_format(s->codec, encoder->pix_fmts); | #if USE_AVCODEC_GET_SUPPORTED_CONFIG | ||||||
|  |       avcodec_get_supported_config(s->codec, NULL, AV_CODEC_CONFIG_PIX_FORMAT, 0, (const void **)&pix_fmts, NULL); | ||||||
|  | #else | ||||||
|  |       pix_fmts = encoder->pix_fmts; | ||||||
|  | #endif | ||||||
|  |       s->codec->pix_fmt = pix_fmts ? avcodec_default_get_format(s->codec, pix_fmts) : AV_PIX_FMT_NONE; | ||||||
|       DPRINTF(E_DBG, L_XCODE, "Pixel format set to %s (encoder is %s)\n", av_get_pix_fmt_name(s->codec->pix_fmt), codec_desc->name); |       DPRINTF(E_DBG, L_XCODE, "Pixel format set to %s (encoder is %s)\n", av_get_pix_fmt_name(s->codec->pix_fmt), codec_desc->name); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -1438,11 +1446,13 @@ open_input(struct decode_ctx *ctx, const char *path, struct transcode_evbuf_io * | |||||||
|       goto out_fail; |       goto out_fail; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | #if USE_INJECT_GLOBAL_SIDE_DATA | ||||||
|   // If the source has REPLAYGAIN_TRACK_GAIN metadata, this will inject the
 |   // If the source has REPLAYGAIN_TRACK_GAIN metadata, this will inject the
 | ||||||
|   // values into the the next packet's side data (as AV_FRAME_DATA_REPLAYGAIN),
 |   // values into the the next packet's side data (as AV_FRAME_DATA_REPLAYGAIN),
 | ||||||
|   // which has the effect that a volume replaygain filter works. Note that
 |   // which has the effect that a volume replaygain filter works. Note that
 | ||||||
|   // ffmpeg itself uses another method in process_input() in ffmpeg.c.
 |   // ffmpeg itself uses another method in process_input() in ffmpeg.c.
 | ||||||
|   av_format_inject_global_side_data(ctx->ifmt_ctx); |   av_format_inject_global_side_data(ctx->ifmt_ctx); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
|   ret = avformat_find_stream_info(ctx->ifmt_ctx, NULL); |   ret = avformat_find_stream_info(ctx->ifmt_ctx, NULL); | ||||||
|   if (ret < 0) |   if (ret < 0) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user