gitextract_cwkohdkk/ ├── .devcontainer/ │ ├── Dockerfile │ ├── Dockerfile.alpine │ └── devcontainer.json ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── dependabot.yml │ ├── example/ │ │ └── prepare-release.event │ ├── scripts/ │ │ └── bump-versions.sh │ └── workflows/ │ ├── build.yml │ ├── cross-compile.yml │ ├── prepare-release.yml │ ├── quality.yml │ └── release.yml ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── COMPILING.md ├── CONTRIBUTING.md ├── Cargo.toml ├── Cross.toml ├── LICENSE ├── PUBLISHING.md ├── README.md ├── SECURITY.md ├── audio/ │ ├── Cargo.toml │ └── src/ │ ├── decrypt.rs │ ├── fetch/ │ │ ├── mod.rs │ │ └── receive.rs │ ├── lib.rs │ └── range_set.rs ├── cache/ │ └── .gitignore ├── connect/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ ├── context_resolver.rs │ ├── lib.rs │ ├── model.rs │ ├── shuffle_vec.rs │ ├── spirc.rs │ ├── state/ │ │ ├── context.rs │ │ ├── handle.rs │ │ ├── metadata.rs │ │ ├── options.rs │ │ ├── provider.rs │ │ ├── restrictions.rs │ │ ├── tracks.rs │ │ └── transfer.rs │ └── state.rs ├── contrib/ │ ├── Dockerfile │ ├── Dockerfile.Rpi │ ├── cross-compile-armv6hf/ │ │ ├── Dockerfile │ │ └── docker-build.sh │ ├── docker-build.sh │ ├── event_handler_example.py │ ├── librespot.service │ └── librespot.user.service ├── core/ │ ├── Cargo.toml │ ├── build.rs │ ├── src/ │ │ ├── apresolve.rs │ │ ├── audio_key.rs │ │ ├── authentication.rs │ │ ├── cache.rs │ │ ├── cdn_url.rs │ │ ├── channel.rs │ │ ├── component.rs │ │ ├── config.rs │ │ ├── connection/ │ │ │ ├── codec.rs │ │ │ ├── handshake.rs │ │ │ └── mod.rs │ │ ├── date.rs │ │ ├── dealer/ │ │ │ ├── manager.rs │ │ │ ├── maps.rs │ │ │ ├── mod.rs │ │ │ ├── protocol/ │ │ │ │ └── request.rs │ │ │ └── protocol.rs │ │ ├── deserialize_with.rs │ │ ├── diffie_hellman.rs │ │ ├── error.rs │ │ ├── file_id.rs │ │ ├── http_client.rs │ │ ├── lib.rs │ │ ├── login5.rs │ │ ├── mercury/ │ │ │ ├── mod.rs │ │ │ ├── sender.rs │ │ │ └── types.rs │ │ ├── packet.rs │ │ ├── proxytunnel.rs │ │ ├── session.rs │ │ ├── socket.rs │ │ ├── spclient.rs │ │ ├── spotify_id.rs │ │ ├── spotify_uri.rs │ │ ├── token.rs │ │ ├── util.rs │ │ └── version.rs │ └── tests/ │ └── connect.rs ├── discovery/ │ ├── Cargo.toml │ ├── examples/ │ │ ├── discovery.rs │ │ └── discovery_group.rs │ └── src/ │ ├── avahi.rs │ ├── lib.rs │ └── server.rs ├── docs/ │ ├── authentication.md │ ├── connection.md │ └── dealer.md ├── examples/ │ ├── README.md │ ├── get_token.rs │ ├── play.rs │ ├── play_connect.rs │ └── playlist_tracks.rs ├── metadata/ │ ├── Cargo.toml │ └── src/ │ ├── album.rs │ ├── artist.rs │ ├── audio/ │ │ ├── file.rs │ │ ├── item.rs │ │ └── mod.rs │ ├── availability.rs │ ├── content_rating.rs │ ├── copyright.rs │ ├── episode.rs │ ├── error.rs │ ├── external_id.rs │ ├── image.rs │ ├── lib.rs │ ├── lyrics.rs │ ├── playlist/ │ │ ├── annotation.rs │ │ ├── attribute.rs │ │ ├── diff.rs │ │ ├── item.rs │ │ ├── list.rs │ │ ├── mod.rs │ │ ├── operation.rs │ │ └── permission.rs │ ├── request.rs │ ├── restriction.rs │ ├── sale_period.rs │ ├── show.rs │ ├── track.rs │ ├── util.rs │ └── video.rs ├── oauth/ │ ├── Cargo.toml │ ├── examples/ │ │ ├── oauth_async.rs │ │ └── oauth_sync.rs │ └── src/ │ └── lib.rs ├── playback/ │ ├── Cargo.toml │ └── src/ │ ├── audio_backend/ │ │ ├── alsa.rs │ │ ├── gstreamer.rs │ │ ├── jackaudio.rs │ │ ├── mod.rs │ │ ├── pipe.rs │ │ ├── portaudio.rs │ │ ├── pulseaudio.rs │ │ ├── rodio.rs │ │ ├── sdl.rs │ │ └── subprocess.rs │ ├── config.rs │ ├── convert.rs │ ├── decoder/ │ │ ├── mod.rs │ │ ├── passthrough_decoder.rs │ │ └── symphonia_decoder.rs │ ├── dither.rs │ ├── lib.rs │ ├── local_file.rs │ ├── mixer/ │ │ ├── alsamixer.rs │ │ ├── mappings.rs │ │ ├── mod.rs │ │ └── softmixer.rs │ ├── player.rs │ └── symphonia_util.rs ├── protocol/ │ ├── Cargo.toml │ ├── build.rs │ ├── proto/ │ │ ├── AdContext.proto │ │ ├── AdDecisionEvent.proto │ │ ├── AdError.proto │ │ ├── AdEvent.proto │ │ ├── AdRequestEvent.proto │ │ ├── AdSlotEvent.proto │ │ ├── AmazonWakeUpTime.proto │ │ ├── AudioDriverError.proto │ │ ├── AudioDriverInfo.proto │ │ ├── AudioFileSelection.proto │ │ ├── AudioOffliningSettingsReport.proto │ │ ├── AudioRateLimit.proto │ │ ├── AudioSessionEvent.proto │ │ ├── AudioSettingsReport.proto │ │ ├── AudioStreamingSettingsReport.proto │ │ ├── BoomboxPlaybackInstrumentation.proto │ │ ├── BrokenObject.proto │ │ ├── CacheError.proto │ │ ├── CachePruningReport.proto │ │ ├── CacheRealmPruningReport.proto │ │ ├── CacheRealmReport.proto │ │ ├── CacheReport.proto │ │ ├── ClientLocale.proto │ │ ├── ColdStartupSequence.proto │ │ ├── CollectionLevelDbInfo.proto │ │ ├── CollectionOfflineControllerEmptyTrackList.proto │ │ ├── ConfigurationApplied.proto │ │ ├── ConfigurationFetched.proto │ │ ├── ConfigurationFetchedNonAuth.proto │ │ ├── ConnectCredentialsRequest.proto │ │ ├── ConnectDeviceDiscovered.proto │ │ ├── ConnectDialError.proto │ │ ├── ConnectMdnsPacketParseError.proto │ │ ├── ConnectPullFailure.proto │ │ ├── ConnectTransferResult.proto │ │ ├── ConnectionError.proto │ │ ├── ConnectionInfo.proto │ │ ├── ConnectionStateChange.proto │ │ ├── DefaultConfigurationApplied.proto │ │ ├── DesktopAuthenticationFailureNonAuth.proto │ │ ├── DesktopAuthenticationSuccess.proto │ │ ├── DesktopDeviceInformation.proto │ │ ├── DesktopGPUAccelerationInfo.proto │ │ ├── DesktopHighMemoryUsage.proto │ │ ├── DesktopPerformanceIssue.proto │ │ ├── DesktopUpdateDownloadComplete.proto │ │ ├── DesktopUpdateDownloadError.proto │ │ ├── DesktopUpdateMessageAction.proto │ │ ├── DesktopUpdateMessageProcessed.proto │ │ ├── DesktopUpdateResponse.proto │ │ ├── Download.proto │ │ ├── DrmRequestFailure.proto │ │ ├── EndAd.proto │ │ ├── EventSenderInternalErrorNonAuth.proto │ │ ├── EventSenderStats.proto │ │ ├── EventSenderStats2NonAuth.proto │ │ ├── ExternalDeviceInfo.proto │ │ ├── GetInfoFailures.proto │ │ ├── HeadFileDownload.proto │ │ ├── LegacyEndSong.proto │ │ ├── LocalFileSyncError.proto │ │ ├── LocalFilesError.proto │ │ ├── LocalFilesImport.proto │ │ ├── LocalFilesReport.proto │ │ ├── LocalFilesSourceReport.proto │ │ ├── MdnsLoginFailures.proto │ │ ├── MetadataExtensionClientStatistic.proto │ │ ├── Offline2ClientError.proto │ │ ├── Offline2ClientEvent.proto │ │ ├── OfflineError.proto │ │ ├── OfflineEvent.proto │ │ ├── OfflineReport.proto │ │ ├── PlaybackError.proto │ │ ├── PlaybackRetry.proto │ │ ├── PlaybackSegments.proto │ │ ├── PlayerStateRestore.proto │ │ ├── PlaylistSyncEvent.proto │ │ ├── PodcastAdSegmentReceived.proto │ │ ├── Prefetch.proto │ │ ├── PrefetchError.proto │ │ ├── ProductStateUcsVerification.proto │ │ ├── PubSubCountPerIdent.proto │ │ ├── RawCoreStream.proto │ │ ├── ReachabilityChanged.proto │ │ ├── RejectedClientEventNonAuth.proto │ │ ├── RemainingSkips.proto │ │ ├── RequestAccounting.proto │ │ ├── RequestTime.proto │ │ ├── StartTrack.proto │ │ ├── Stutter.proto │ │ ├── TierFeatureFlags.proto │ │ ├── TrackNotPlayed.proto │ │ ├── TrackStuck.proto │ │ ├── WindowSize.proto │ │ ├── apiv1.proto │ │ ├── app_state.proto │ │ ├── audio_files_extension.proto │ │ ├── audio_format.proto │ │ ├── authentication.proto │ │ ├── autodownload_backend_service.proto │ │ ├── autodownload_config_common.proto │ │ ├── autodownload_config_get_request.proto │ │ ├── autodownload_config_set_request.proto │ │ ├── automix_mode.proto │ │ ├── autoplay_context_request.proto │ │ ├── autoplay_node.proto │ │ ├── canvas.proto │ │ ├── canvas_storage.proto │ │ ├── canvaz-meta.proto │ │ ├── canvaz.proto │ │ ├── capping_data.proto │ │ ├── claas.proto │ │ ├── client-tts.proto │ │ ├── client_config.proto │ │ ├── client_update.proto │ │ ├── clips_cover.proto │ │ ├── collection/ │ │ │ ├── album_collection_state.proto │ │ │ ├── artist_collection_state.proto │ │ │ ├── episode_collection_state.proto │ │ │ ├── show_collection_state.proto │ │ │ └── track_collection_state.proto │ │ ├── collection2v2.proto │ │ ├── collection_add_remove_items_request.proto │ │ ├── collection_ban_request.proto │ │ ├── collection_decoration_policy.proto │ │ ├── collection_get_bans_request.proto │ │ ├── collection_index.proto │ │ ├── collection_item.proto │ │ ├── collection_platform_items.proto │ │ ├── collection_platform_requests.proto │ │ ├── collection_platform_responses.proto │ │ ├── concat_cosmos.proto │ │ ├── connect.proto │ │ ├── connectivity.proto │ │ ├── contains_request.proto │ │ ├── content_access_token_cosmos.proto │ │ ├── context.proto │ │ ├── context_application_desktop.proto │ │ ├── context_client_id.proto │ │ ├── context_device_desktop.proto │ │ ├── context_index.proto │ │ ├── context_installation_id.proto │ │ ├── context_monotonic_clock.proto │ │ ├── context_node.proto │ │ ├── context_page.proto │ │ ├── context_player_options.proto │ │ ├── context_processor.proto │ │ ├── context_sdk.proto │ │ ├── context_time.proto │ │ ├── context_track.proto │ │ ├── context_view.proto │ │ ├── context_view_cyclic_list.proto │ │ ├── context_view_entry.proto │ │ ├── context_view_entry_key.proto │ │ ├── cosmos_changes_request.proto │ │ ├── cosmos_decorate_request.proto │ │ ├── cosmos_get_album_list_request.proto │ │ ├── cosmos_get_artist_list_request.proto │ │ ├── cosmos_get_episode_list_request.proto │ │ ├── cosmos_get_show_list_request.proto │ │ ├── cosmos_get_tags_info_request.proto │ │ ├── cosmos_get_track_list_metadata_request.proto │ │ ├── cosmos_get_track_list_request.proto │ │ ├── cosmos_get_unplayed_episodes_request.proto │ │ ├── cuepoints.proto │ │ ├── decorate_request.proto │ │ ├── devices.proto │ │ ├── display_segments.proto │ │ ├── display_segments_extension.proto │ │ ├── entity_extension_data.proto │ │ ├── es_add_to_queue_request.proto │ │ ├── es_command_options.proto │ │ ├── es_context.proto │ │ ├── es_context_page.proto │ │ ├── es_context_player_error.proto │ │ ├── es_context_player_options.proto │ │ ├── es_context_player_state.proto │ │ ├── es_context_track.proto │ │ ├── es_delete_session.proto │ │ ├── es_get_error_request.proto │ │ ├── es_get_play_history.proto │ │ ├── es_get_position_state.proto │ │ ├── es_get_queue_request.proto │ │ ├── es_get_state_request.proto │ │ ├── es_ident.proto │ │ ├── es_ident_filter.proto │ │ ├── es_logging_params.proto │ │ ├── es_optional.proto │ │ ├── es_pause.proto │ │ ├── es_pauseresume_origin.proto │ │ ├── es_play.proto │ │ ├── es_play_options.proto │ │ ├── es_play_origin.proto │ │ ├── es_prefs.proto │ │ ├── es_prepare_play.proto │ │ ├── es_prepare_play_options.proto │ │ ├── es_provided_track.proto │ │ ├── es_pushed_message.proto │ │ ├── es_queue.proto │ │ ├── es_remote_config.proto │ │ ├── es_request_info.proto │ │ ├── es_response_with_reasons.proto │ │ ├── es_restrictions.proto │ │ ├── es_resume.proto │ │ ├── es_seek_to.proto │ │ ├── es_session_response.proto │ │ ├── es_set_options.proto │ │ ├── es_set_queue_request.proto │ │ ├── es_set_repeating_context.proto │ │ ├── es_set_repeating_track.proto │ │ ├── es_set_shuffling_context.proto │ │ ├── es_skip_next.proto │ │ ├── es_skip_prev.proto │ │ ├── es_skip_to_track.proto │ │ ├── es_stop.proto │ │ ├── es_storage.proto │ │ ├── es_update.proto │ │ ├── esperanto_options.proto │ │ ├── event_entity.proto │ │ ├── explicit_content_pubsub.proto │ │ ├── extended_metadata.proto │ │ ├── extension_descriptor_type.proto │ │ ├── extension_kind.proto │ │ ├── extracted_colors.proto │ │ ├── follow_request.proto │ │ ├── followed_users_request.proto │ │ ├── frecency.proto │ │ ├── frecency_storage.proto │ │ ├── gabito.proto │ │ ├── global_node.proto │ │ ├── google/ │ │ │ └── protobuf/ │ │ │ ├── any.proto │ │ │ ├── descriptor.proto │ │ │ ├── duration.proto │ │ │ ├── empty.proto │ │ │ ├── field_mask.proto │ │ │ ├── source_context.proto │ │ │ ├── timestamp.proto │ │ │ ├── type.proto │ │ │ └── wrappers.proto │ │ ├── greenroom_extension.proto │ │ ├── identity.proto │ │ ├── image-resolve.proto │ │ ├── installation_data.proto │ │ ├── instrumentation_params.proto │ │ ├── keyexchange.proto │ │ ├── lens-model.proto │ │ ├── lfs_secret_provider.proto │ │ ├── liked_songs_tags_sync_state.proto │ │ ├── listen_later_cosmos_response.proto │ │ ├── local_bans_storage.proto │ │ ├── local_sync_cosmos.proto │ │ ├── local_sync_state.proto │ │ ├── logging_params.proto │ │ ├── mdata.proto │ │ ├── mdata_cosmos.proto │ │ ├── mdata_storage.proto │ │ ├── media.proto │ │ ├── media_format.proto │ │ ├── media_manifest.proto │ │ ├── media_type.proto │ │ ├── media_type_node.proto │ │ ├── members_request.proto │ │ ├── members_response.proto │ │ ├── mercury.proto │ │ ├── messages/ │ │ │ └── discovery/ │ │ │ ├── force_discover.proto │ │ │ └── start_discovery.proto │ │ ├── metadata/ │ │ │ ├── album_metadata.proto │ │ │ ├── artist_metadata.proto │ │ │ ├── episode_metadata.proto │ │ │ ├── extension.proto │ │ │ ├── image_group.proto │ │ │ ├── show_metadata.proto │ │ │ └── track_metadata.proto │ │ ├── metadata.proto │ │ ├── metadata_cosmos.proto │ │ ├── metadata_esperanto.proto │ │ ├── mod.rs │ │ ├── modification_request.proto │ │ ├── net-fortune.proto │ │ ├── offline.proto │ │ ├── offline_playlists_containing.proto │ │ ├── on_demand_in_free_reason.proto │ │ ├── on_demand_set_cosmos_request.proto │ │ ├── on_demand_set_cosmos_response.proto │ │ ├── on_demand_set_response.proto │ │ ├── pause_resume_origin.proto │ │ ├── pending_event_entity.proto │ │ ├── perf_metrics_service.proto │ │ ├── pin_request.proto │ │ ├── play_history.proto │ │ ├── play_origin.proto │ │ ├── play_queue_node.proto │ │ ├── play_reason.proto │ │ ├── playback.proto │ │ ├── playback_cosmos.proto │ │ ├── playback_esperanto.proto │ │ ├── playback_platform.proto │ │ ├── playback_segments.proto │ │ ├── playback_stack.proto │ │ ├── playback_stack_v2.proto │ │ ├── playback_state.proto │ │ ├── played_state/ │ │ │ ├── episode_played_state.proto │ │ │ ├── playability_restriction.proto │ │ │ ├── show_played_state.proto │ │ │ └── track_played_state.proto │ │ ├── played_state.proto │ │ ├── playedstate.proto │ │ ├── player.proto │ │ ├── player_license.proto │ │ ├── player_model.proto │ │ ├── playlist4_external.proto │ │ ├── playlist_annotate3.proto │ │ ├── playlist_contains_request.proto │ │ ├── playlist_folder_state.proto │ │ ├── playlist_get_request.proto │ │ ├── playlist_members_request.proto │ │ ├── playlist_modification_request.proto │ │ ├── playlist_offline_request.proto │ │ ├── playlist_permission.proto │ │ ├── playlist_play_request.proto │ │ ├── playlist_playback_request.proto │ │ ├── playlist_playlist_state.proto │ │ ├── playlist_query.proto │ │ ├── playlist_request.proto │ │ ├── playlist_set_base_permission_request.proto │ │ ├── playlist_set_member_permission_request.proto │ │ ├── playlist_set_permission_request.proto │ │ ├── playlist_track_state.proto │ │ ├── playlist_user_state.proto │ │ ├── plugin.proto │ │ ├── podcast_ad_segments.proto │ │ ├── podcast_cta_cards.proto │ │ ├── podcast_paywalls_cosmos.proto │ │ ├── podcast_poll.proto │ │ ├── podcast_qna.proto │ │ ├── podcast_ratings.proto │ │ ├── podcast_segments.proto │ │ ├── podcast_segments_cosmos_request.proto │ │ ├── podcast_segments_cosmos_response.proto │ │ ├── podcast_subscription.proto │ │ ├── podcast_virality.proto │ │ ├── podcastextensions.proto │ │ ├── policy/ │ │ │ ├── album_decoration_policy.proto │ │ │ ├── artist_decoration_policy.proto │ │ │ ├── episode_decoration_policy.proto │ │ │ ├── folder_decoration_policy.proto │ │ │ ├── playlist_album_decoration_policy.proto │ │ │ ├── playlist_decoration_policy.proto │ │ │ ├── playlist_episode_decoration_policy.proto │ │ │ ├── playlist_request_decoration_policy.proto │ │ │ ├── playlist_track_decoration_policy.proto │ │ │ ├── rootlist_folder_decoration_policy.proto │ │ │ ├── rootlist_playlist_decoration_policy.proto │ │ │ ├── rootlist_request_decoration_policy.proto │ │ │ ├── show_decoration_policy.proto │ │ │ ├── supported_link_types_in_playlists.proto │ │ │ ├── track_decoration_policy.proto │ │ │ └── user_decoration_policy.proto │ │ ├── popcount2_external.proto │ │ ├── prepare_play_options.proto │ │ ├── profile_cosmos.proto │ │ ├── profile_service.proto │ │ ├── property_definition.proto │ │ ├── protobuf_delta.proto │ │ ├── pubsub.proto │ │ ├── queue.proto │ │ ├── rate_limited_events.proto │ │ ├── rcs.proto │ │ ├── recently_played.proto │ │ ├── recently_played_backend.proto │ │ ├── record_id.proto │ │ ├── remote.proto │ │ ├── repeating_track_node.proto │ │ ├── request_failure.proto │ │ ├── resolve.proto │ │ ├── resource_type.proto │ │ ├── response_status.proto │ │ ├── restrictions.proto │ │ ├── resume_points_node.proto │ │ ├── rootlist_request.proto │ │ ├── seek_to_position.proto │ │ ├── sequence_number_entity.proto │ │ ├── session.proto │ │ ├── set_member_permission_request.proto │ │ ├── show_access.proto │ │ ├── show_episode_state.proto │ │ ├── show_offline_state.proto │ │ ├── show_request.proto │ │ ├── show_show_state.proto │ │ ├── signal-model.proto │ │ ├── skip_to_track.proto │ │ ├── social_connect_v2.proto │ │ ├── social_service.proto │ │ ├── socialgraph_response_status.proto │ │ ├── socialgraphv2.proto │ │ ├── spirc.proto │ │ ├── spotify/ │ │ │ ├── audiobookcashier/ │ │ │ │ └── v1/ │ │ │ │ └── audiobook_price.proto │ │ │ ├── clienttoken/ │ │ │ │ └── v0/ │ │ │ │ └── clienttoken_http.proto │ │ │ └── login5/ │ │ │ └── v3/ │ │ │ ├── challenges/ │ │ │ │ ├── code.proto │ │ │ │ └── hashcash.proto │ │ │ ├── client_info.proto │ │ │ ├── credentials/ │ │ │ │ └── credentials.proto │ │ │ ├── identifiers/ │ │ │ │ └── identifiers.proto │ │ │ ├── login5.proto │ │ │ └── user_info.proto │ │ ├── state_restore/ │ │ │ ├── ads_rules_inject_tracks.proto │ │ │ ├── automix_rules.proto │ │ │ ├── automix_talk_rules.proto │ │ │ ├── behavior_metadata_rules.proto │ │ │ ├── circuit_breaker_rules.proto │ │ │ ├── context_loader.proto │ │ │ ├── context_player_restorable.proto │ │ │ ├── context_player_rules.proto │ │ │ ├── context_player_rules_base.proto │ │ │ ├── context_player_state.proto │ │ │ ├── explicit_content_rules.proto │ │ │ ├── explicit_request_rules.proto │ │ │ ├── kitteh_box_rules.proto │ │ │ ├── mft_context_history.proto │ │ │ ├── mft_context_switch_rules.proto │ │ │ ├── mft_fallback_page_history.proto │ │ │ ├── mft_rules.proto │ │ │ ├── mft_rules_core.proto │ │ │ ├── mft_rules_inject_filler_tracks.proto │ │ │ ├── mft_state.proto │ │ │ ├── mod_interruption_state.proto │ │ │ ├── mod_rules_interruptions.proto │ │ │ ├── music_injection_rules.proto │ │ │ ├── playback_state.proto │ │ │ ├── player_model.proto │ │ │ ├── player_session.proto │ │ │ ├── player_session_fake.proto │ │ │ ├── player_session_queue.proto │ │ │ ├── provided_track.proto │ │ │ ├── random_source.proto │ │ │ ├── remove_banned_tracks_rules.proto │ │ │ ├── resume_points_rules.proto │ │ │ └── track_error_rules.proto │ │ ├── status.proto │ │ ├── status_code.proto │ │ ├── status_response.proto │ │ ├── storage-resolve.proto │ │ ├── storage_cosmos.proto │ │ ├── storylines.proto │ │ ├── stream_end_request.proto │ │ ├── stream_handle.proto │ │ ├── stream_progress_request.proto │ │ ├── stream_seek_request.proto │ │ ├── stream_start_request.proto │ │ ├── stream_start_response.proto │ │ ├── streaming_rule.proto │ │ ├── suppressions.proto │ │ ├── sync/ │ │ │ ├── album_sync_state.proto │ │ │ ├── artist_sync_state.proto │ │ │ ├── episode_sync_state.proto │ │ │ └── track_sync_state.proto │ │ ├── sync_request.proto │ │ ├── techu_core_exercise_cosmos.proto │ │ ├── track_instance.proto │ │ ├── track_instantiator.proto │ │ ├── transcripts.proto │ │ ├── transfer_node.proto │ │ ├── transfer_state.proto │ │ ├── tts-resolve.proto │ │ ├── ucs.proto │ │ ├── unfinished_episodes_request.proto │ │ ├── user_attributes.proto │ │ ├── useraccount.proto │ │ ├── your_library_config.proto │ │ ├── your_library_contains_request.proto │ │ ├── your_library_contains_response.proto │ │ ├── your_library_decorate_request.proto │ │ ├── your_library_decorate_response.proto │ │ ├── your_library_decorated_entity.proto │ │ ├── your_library_entity.proto │ │ ├── your_library_index.proto │ │ ├── your_library_pseudo_playlist_config.proto │ │ ├── your_library_request.proto │ │ └── your_library_response.proto │ └── src/ │ ├── impl_trait/ │ │ ├── context.rs │ │ └── player.rs │ ├── impl_trait.rs │ └── lib.rs ├── rust-toolchain.toml ├── rustfmt.toml ├── src/ │ ├── lib.rs │ ├── main.rs │ └── player_event_handler.rs └── test.sh