SYMBOL INDEX (1637 symbols across 112 files) FILE: psst-cli/src/main.rs function main (line 16) | fn main() { function start (line 35) | fn start(track_id: &str, session: SessionService) -> Result<(), Error> { function play_item (line 50) | fn play_item( FILE: psst-core/build.rs function main (line 5) | fn main() { FILE: psst-core/src/actor.rs type Act (line 11) | pub enum Act { type Actor (line 20) | pub trait Actor: Sized { method handle (line 24) | fn handle(&mut self, msg: Self::Message) -> Result, Self::Er... method process (line 26) | fn process(mut self, recv: Receiver) { method spawn (line 60) | fn spawn(cap: Capacity, name: &str, factory: F) -> ActorHandle(name: &str, factory: F) -> ActorHandle { function sender (line 90) | pub fn sender(&self) -> Sender { function join (line 94) | pub fn join(self) { function send (line 98) | pub fn send(&self, msg: M) -> Result<(), SendError> { function try_send (line 102) | pub fn try_send(&self, msg: M) -> Result<(), TrySendError> { type Capacity (line 107) | pub enum Capacity { method to_channel (line 114) | pub fn to_channel(&self) -> (Sender, Receiver) { FILE: psst-core/src/audio/decode.rs type AudioCodecFormat (line 21) | pub enum AudioCodecFormat { method format_reader (line 27) | fn format_reader( method decoder (line 43) | fn decoder(&self, codec_params: &CodecParameters) -> Result(input: T, codec: AudioCodecFormat) -> Result method codec_params (line 83) | pub fn codec_params(&self) -> &CodecParameters { method signal_spec (line 87) | pub fn signal_spec(&self) -> SignalSpec { method seek (line 94) | pub fn seek(&mut self, time: Duration) -> Result { method read_packet (line 107) | pub fn read_packet(&mut self, samples: &mut SampleBuffer) -> Opt... method is_seekable (line 161) | fn is_seekable(&self) -> bool { method byte_len (line 165) | fn byte_len(&self) -> Option { method from (line 171) | fn from(err: SymphoniaError) -> Error { FILE: psst-core/src/audio/decrypt.rs constant AUDIO_AESIV (line 9) | const AUDIO_AESIV: [u8; 16] = [ type AudioKey (line 14) | pub struct AudioKey(pub [u8; 16]); method from_raw (line 17) | pub fn from_raw(data: &[u8]) -> Option { type AudioDecrypt (line 22) | pub struct AudioDecrypt { function new (line 28) | pub fn new(key: AudioKey, reader: T) -> AudioDecrypt { function read (line 38) | fn read(&mut self, output: &mut [u8]) -> io::Result { function seek (line 48) | fn seek(&mut self, pos: io::SeekFrom) -> io::Result { FILE: psst-core/src/audio/normalize.rs type NormalizationLevel (line 9) | pub enum NormalizationLevel { type NormalizationData (line 16) | pub struct NormalizationData { method parse (line 24) | pub fn parse(mut file: impl Read + Seek) -> io::Result { method factor_for_level (line 42) | pub fn factor_for_level(&self, level: NormalizationLevel, pregain: f32... method factor (line 50) | fn factor(pregain: f32, gain: f32, peak: f32) -> f32 { FILE: psst-core/src/audio/output/cpal.rs type CpalOutput (line 14) | pub struct CpalOutput { method open (line 20) | pub fn open() -> Result { method preferred_output_config (line 54) | fn preferred_output_config( type Sink (line 76) | type Sink = CpalSink; method sink (line 78) | fn sink(&self) -> Self::Sink { type CpalSink (line 84) | pub struct CpalSink { method send_to_callback (line 92) | fn send_to_callback(&self, msg: CallbackMsg) { method send_to_stream (line 98) | fn send_to_stream(&self, msg: StreamMsg) { method channel_count (line 106) | fn channel_count(&self) -> usize { method sample_rate (line 110) | fn sample_rate(&self) -> u32 { method set_volume (line 114) | fn set_volume(&self, volume: f32) { method play (line 118) | fn play(&self, source: impl AudioSource) { method pause (line 122) | fn pause(&self) { method resume (line 127) | fn resume(&self) { method stop (line 132) | fn stop(&self) { method close (line 137) | fn close(&self) { type Stream (line 142) | struct Stream { method open (line 148) | fn open( type Message (line 182) | type Message = StreamMsg; type Error (line 183) | type Error = Error; method handle (line 185) | fn handle(&mut self, msg: Self::Message) -> Result, Self::Erro... type StreamMsg (line 210) | enum StreamMsg { type CallbackMsg (line 216) | enum CallbackMsg { type CallbackState (line 223) | enum CallbackState { type StreamCallback (line 228) | struct StreamCallback { method write_samples (line 238) | fn write_samples(&mut self, output: &mut [f32]) { method from (line 279) | fn from(err: cpal::DefaultStreamConfigError) -> Error { method from (line 285) | fn from(err: cpal::SupportedStreamConfigsError) -> Error { method from (line 291) | fn from(err: cpal::BuildStreamError) -> Error { method from (line 297) | fn from(err: cpal::PlayStreamError) -> Error { method from (line 303) | fn from(err: cpal::PauseStreamError) -> Error { FILE: psst-core/src/audio/output/cubeb.rs type CubebOutput (line 14) | pub struct CubebOutput { method open (line 21) | pub fn open() -> Result { type Sink (line 37) | type Sink = CubebSink; method sink (line 39) | fn sink(&self) -> Self::Sink { type Frame (line 44) | type Frame = cubeb::StereoFrame; constant STREAM_CHANNELS (line 46) | const STREAM_CHANNELS: usize = 2; constant SAMPLE_RATE (line 47) | const SAMPLE_RATE: u32 = 44_100; constant STREAM_LATENCY (line 48) | const STREAM_LATENCY: u32 = 0x1000; type Stream (line 50) | struct Stream { method open (line 57) | fn open(callback_recv: Receiver) -> Result { type StreamMsg (line 102) | enum StreamMsg { type Message (line 110) | type Message = StreamMsg; type Error (line 111) | type Error = Error; method handle (line 113) | fn handle(&mut self, msg: Self::Message) -> Result, Self::Erro... type CubebSink (line 146) | pub struct CubebSink { method channel_count (line 152) | fn channel_count(&self) -> usize { method sample_rate (line 156) | fn sample_rate(&self) -> u32 { method set_volume (line 160) | fn set_volume(&self, volume: f32) { method play (line 164) | fn play(&self, source: impl AudioSource) { method pause (line 170) | fn pause(&self) { method resume (line 175) | fn resume(&self) { method stop (line 180) | fn stop(&self) { method close (line 184) | fn close(&self) { type CallbackMsg (line 189) | enum CallbackMsg { type CallbackState (line 195) | enum CallbackState { type StreamCallback (line 200) | struct StreamCallback { method write_samples (line 208) | fn write_samples(&mut self, output: &mut [Frame]) { method from (line 255) | fn from(err: cubeb::Error) -> Self { FILE: psst-core/src/audio/output/mod.rs type DefaultAudioOutput (line 9) | pub type DefaultAudioOutput = cubeb::CubebOutput; type DefaultAudioOutput (line 11) | pub type DefaultAudioOutput = cpal::CpalOutput; type DefaultAudioSink (line 13) | pub type DefaultAudioSink = ::Sink; type AudioOutput (line 15) | pub trait AudioOutput { method sink (line 18) | fn sink(&self) -> Self::Sink; type AudioSink (line 21) | pub trait AudioSink { method channel_count (line 22) | fn channel_count(&self) -> usize; method sample_rate (line 23) | fn sample_rate(&self) -> u32; method set_volume (line 24) | fn set_volume(&self, volume: f32); method play (line 25) | fn play(&self, source: impl AudioSource); method pause (line 26) | fn pause(&self); method resume (line 27) | fn resume(&self); method stop (line 28) | fn stop(&self); method close (line 29) | fn close(&self); FILE: psst-core/src/audio/probe.rs type TrackProbe (line 14) | pub struct TrackProbe { method new (line 33) | pub fn new(path: &PathBuf) -> Result { FILE: psst-core/src/audio/resample.rs type ResamplingQuality (line 4) | pub enum ResamplingQuality { type ResamplingSpec (line 13) | pub struct ResamplingSpec { method output_size (line 20) | pub fn output_size(&self, input_size: usize) -> usize { method input_size (line 24) | pub fn input_size(&self, output_size: usize) -> usize { method ratio (line 28) | pub fn ratio(&self) -> f64 { type AudioResampler (line 33) | pub struct AudioResampler { method new (line 39) | pub fn new(quality: ResamplingQuality, spec: ResamplingSpec) -> Result... method process (line 55) | pub fn process(&mut self, input: &[f32], output: &mut [f32]) -> Result... method drop (line 84) | fn drop(&mut self) { FILE: psst-core/src/audio/source.rs type AudioSource (line 7) | pub trait AudioSource: Send + 'static { method write (line 11) | fn write(&mut self, output: &mut [f32]) -> usize; method channel_count (line 12) | fn channel_count(&self) -> usize; method sample_rate (line 13) | fn sample_rate(&self) -> u32; method write (line 20) | fn write(&mut self, _output: &mut [f32]) -> usize { method channel_count (line 24) | fn channel_count(&self) -> usize { method sample_rate (line 28) | fn sample_rate(&self) -> u32 { method write (line 61) | fn write(&mut self, output: &mut [f32]) -> usize { method channel_count (line 76) | fn channel_count(&self) -> usize { method sample_rate (line 80) | fn sample_rate(&self) -> u32 { method write (line 127) | fn write(&mut self, output: &mut [f32]) -> usize { method channel_count (line 157) | fn channel_count(&self) -> usize { method sample_rate (line 161) | fn sample_rate(&self) -> u32 { type Empty (line 17) | pub struct Empty; type StereoMappedSource (line 33) | pub struct StereoMappedSource { function new (line 44) | pub fn new(source: S, output_channels: usize) -> Self { type ResampledSource (line 85) | pub struct ResampledSource { function new (line 93) | pub fn new(source: S, output_sample_rate: u32, quality: ResamplingQualit... type Buf (line 166) | struct Buf { method get (line 173) | fn get(&self) -> &[f32] { method len (line 177) | fn len(&self) -> usize { method is_empty (line 181) | fn is_empty(&self) -> bool { FILE: psst-core/src/cache.rs type CacheHandle (line 16) | pub type CacheHandle = Arc; type Cache (line 19) | pub struct Cache { method new (line 33) | pub fn new(base: PathBuf) -> Result { method clear (line 43) | pub fn clear(&self) -> io::Result<()> { method get_track (line 63) | pub fn get_track(&self, item_id: ItemId) -> Option { method save_track (line 68) | pub fn save_track(&self, item_id: ItemId, track: &Track) -> Result<(),... method track_path (line 74) | fn track_path(&self, item_id: ItemId) -> PathBuf { method get_episode (line 81) | pub fn get_episode(&self, item_id: ItemId) -> Option { method save_episode (line 86) | pub fn save_episode(&self, item_id: ItemId, episode: &Episode) -> Resu... method episode_path (line 92) | fn episode_path(&self, item_id: ItemId) -> PathBuf { method get_audio_key (line 99) | pub fn get_audio_key(&self, item_id: ItemId, file_id: FileId) -> Optio... method save_audio_key (line 104) | pub fn save_audio_key( method audio_key_path (line 115) | fn audio_key_path(&self, item_id: ItemId, file_id: FileId) -> PathBuf { method audio_file_path (line 125) | pub fn audio_file_path(&self, file_id: FileId) -> PathBuf { method save_audio_file (line 129) | pub fn save_audio_file(&self, file_id: FileId, from_path: PathBuf) -> ... method get_country_code (line 138) | pub fn get_country_code(&self) -> Option { method save_country_code (line 142) | pub fn save_country_code(&self, country_code: &str) -> Result<(), Erro... method country_code_path (line 147) | fn country_code_path(&self) -> PathBuf { function create_cache_dirs (line 23) | fn create_cache_dirs(base: &Path) -> io::Result<()> { function mkdir_if_not_exists (line 152) | pub fn mkdir_if_not_exists(path: &Path) -> io::Result<()> { FILE: psst-core/src/cdn.rs type CdnHandle (line 17) | pub type CdnHandle = Arc; type Cdn (line 19) | pub struct Cdn { method new (line 26) | pub fn new(session: SessionService, proxy_url: Option<&str>) -> Result... method resolve_audio_file_url (line 35) | pub fn resolve_audio_file_url(&self, id: FileId) -> Result Self { method is_expired (line 111) | pub fn is_expired(&self) -> bool { method from (line 117) | fn from(err: ureq::Error) -> Self { function range_header (line 123) | fn range_header(offfset: u64, length: u64) -> String { function parse_total_content_length (line 132) | fn parse_total_content_length(response: &ureq::http::response::Response<... function parse_expiration (line 147) | fn parse_expiration(url: &str) -> Option { FILE: psst-core/src/connection/diffie_hellman.rs type DHLocalKeys (line 4) | pub struct DHLocalKeys { method random (line 10) | pub fn random() -> DHLocalKeys { method public_key (line 19) | pub fn public_key(&self) -> Vec { method shared_secret (line 23) | pub fn shared_secret(&self, remote_key: &[u8]) -> Vec { function dh_generator (line 30) | fn dh_generator() -> BigUint { function dh_prime (line 34) | fn dh_prime() -> BigUint { FILE: psst-core/src/connection/mod.rs constant DEVICE_ID (line 31) | const DEVICE_ID: &str = "Psst"; constant AP_RESOLVE_ENDPOINT (line 34) | const AP_RESOLVE_ENDPOINT: &str = "http://apresolve.spotify.com"; constant AP_FALLBACK (line 37) | const AP_FALLBACK: &str = "ap.spotify.com:443"; type Credentials (line 42) | pub struct Credentials { method from_username_and_password (line 49) | pub fn from_username_and_password(username: String, password: String) ... method from_access_token (line 57) | pub fn from_access_token(token: String) -> Self { method from (line 74) | fn from(value: SerializedCredentials) -> Self { type SerializedCredentials (line 67) | struct SerializedCredentials { method from (line 84) | fn from(value: Credentials) -> Self { type Transport (line 94) | pub struct Transport { method resolve_ap_with_fallback (line 101) | pub fn resolve_ap_with_fallback(proxy_url: Option<&str>) -> Vec { method resolve_ap (line 114) | pub fn resolve_ap(proxy_url: Option<&str>) -> Result, Erro... method connect (line 136) | pub fn connect(ap_list: &[String], proxy_url: Option<&str>) -> Result<... method stream_without_proxy (line 170) | fn stream_without_proxy(ap: &str) -> Result { method stream_through_proxy (line 190) | fn stream_through_proxy(ap: &str, url: &str) -> Result Result Result { method authenticate (line 270) | pub fn authenticate(&mut self, credentials: Credentials) -> Result io::Result> { function make_packet (line 314) | fn make_packet(prefix: &[u8], data: &[u8]) -> Vec { function client_hello (line 324) | fn client_hello(public_key: Vec, nonce: Vec) -> Vec { function client_response_plaintext (line 357) | fn client_response_plaintext(challenge: Vec) -> Vec { function compute_keys (line 378) | fn compute_keys( function client_response_encrypted (line 405) | fn client_response_encrypted(credentials: Credentials) -> ShannonMsg { FILE: psst-core/src/connection/shannon_codec.rs type ShannonMsg (line 6) | pub struct ShannonMsg { constant SECRET_BLOCK (line 12) | pub const SECRET_BLOCK: u8 = 0x02; constant PING (line 13) | pub const PING: u8 = 0x04; constant STREAM_CHUNK (line 14) | pub const STREAM_CHUNK: u8 = 0x08; constant STREAM_CHUNK_RES (line 15) | pub const STREAM_CHUNK_RES: u8 = 0x09; constant CHANNEL_ERROR (line 16) | pub const CHANNEL_ERROR: u8 = 0x0a; constant CHANNEL_ABORT (line 17) | pub const CHANNEL_ABORT: u8 = 0x0b; constant REQUEST_KEY (line 18) | pub const REQUEST_KEY: u8 = 0x0c; constant AES_KEY (line 19) | pub const AES_KEY: u8 = 0x0d; constant AES_KEY_ERROR (line 20) | pub const AES_KEY_ERROR: u8 = 0x0e; constant IMAGE (line 21) | pub const IMAGE: u8 = 0x19; constant COUNTRY_CODE (line 22) | pub const COUNTRY_CODE: u8 = 0x1b; constant PONG (line 23) | pub const PONG: u8 = 0x49; constant PONG_ACK (line 24) | pub const PONG_ACK: u8 = 0x4a; constant PAUSE (line 25) | pub const PAUSE: u8 = 0x4b; constant PRODUCT_INFO (line 26) | pub const PRODUCT_INFO: u8 = 0x50; constant LEGACY_WELCOME (line 27) | pub const LEGACY_WELCOME: u8 = 0x69; constant LICENSE_VERSION (line 28) | pub const LICENSE_VERSION: u8 = 0x76; constant LOGIN (line 29) | pub const LOGIN: u8 = 0xab; constant AP_WELCOME (line 30) | pub const AP_WELCOME: u8 = 0xac; constant AUTH_FAILURE (line 31) | pub const AUTH_FAILURE: u8 = 0xad; constant MERCURY_REQ (line 32) | pub const MERCURY_REQ: u8 = 0xb2; constant MERCURY_SUB (line 33) | pub const MERCURY_SUB: u8 = 0xb3; constant MERCURY_UNSUB (line 34) | pub const MERCURY_UNSUB: u8 = 0xb4; constant MERCURY_PUB (line 35) | pub const MERCURY_PUB: u8 = 0xb5; method new (line 37) | pub fn new(cmd: u8, payload: impl Into>) -> Self { constant MAC_SIZE (line 45) | const MAC_SIZE: usize = 4; constant HEADER_SIZE (line 46) | const HEADER_SIZE: usize = 3; type ShannonEncoder (line 48) | pub struct ShannonEncoder { function new (line 58) | pub fn new(inner: T, send_key: &[u8]) -> Self { function encode (line 66) | pub fn encode(&mut self, item: ShannonMsg) -> io::Result<()> { function as_inner_mut (line 87) | pub fn as_inner_mut(&mut self) -> &mut T { type ShannonDecoder (line 92) | pub struct ShannonDecoder { function new (line 102) | pub fn new(inner: T, recv_key: &[u8]) -> Self { function decode (line 110) | pub fn decode(&mut self) -> io::Result { function as_inner (line 138) | pub fn as_inner(&self) -> &T { FILE: psst-core/src/error.rs type Error (line 5) | pub enum Error { method fmt (line 32) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { method from (line 75) | fn from(err: io::Error) -> Error { method from (line 81) | fn from(_: crossbeam_channel::SendError) -> Self { method from (line 87) | fn from(err: RecvTimeoutError) -> Self { method from (line 93) | fn from(err: protobuf::Error) -> Self { Error::InvalidStateError(err.i... FILE: psst-core/src/item_id.rs type LocalItemRegistry (line 25) | pub struct LocalItemRegistry { method new (line 32) | fn new() -> Self { method get_or_insert (line 40) | pub fn get_or_insert(path: PathBuf) -> u128 { method get (line 50) | pub fn get(id: u128) -> Option { type ItemIdType (line 57) | pub enum ItemIdType { type ItemId (line 65) | pub struct ItemId { constant INVALID (line 74) | pub const INVALID: Self = Self::new(0u128, ItemIdType::Unknown); method new (line 76) | pub const fn new(id: u128, id_type: ItemIdType) -> Self { method from_base16 (line 80) | pub fn from_base16(id: &str, id_type: ItemIdType) -> Option { method from_base62 (line 90) | pub fn from_base62(id: &str, id_type: ItemIdType) -> Option { method from_raw (line 100) | pub fn from_raw(data: &[u8], id_type: ItemIdType) -> Option { method from_uri (line 105) | pub fn from_uri(uri: &str) -> Option { method to_uri (line 117) | pub fn to_uri(&self) -> Option { method to_base16 (line 128) | pub fn to_base16(&self) -> String { method to_base62 (line 132) | pub fn to_base62(&self) -> String { method to_raw (line 142) | pub fn to_raw(&self) -> [u8; 16] { method from_local (line 146) | pub fn from_local(path: PathBuf) -> Self { method to_local (line 153) | pub fn to_local(&self) -> PathBuf { constant BASE62_DIGITS (line 70) | const BASE62_DIGITS: &[u8] = b"0123456789abcdefghijklmnopqrstuvwxyzABCDE... constant BASE16_DIGITS (line 71) | const BASE16_DIGITS: &[u8] = b"0123456789abcdef"; method default (line 163) | fn default() -> Self { method from (line 169) | fn from(id: ItemId) -> Self { type FileId (line 175) | pub struct FileId(pub [u8; 20]); method from_raw (line 178) | pub fn from_raw(data: &[u8]) -> Option { method to_base16 (line 182) | pub fn to_base16(&self) -> String { method fmt (line 200) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { method fmt (line 206) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { type Target (line 192) | type Target = [u8]; method deref (line 194) | fn deref(&self) -> &Self::Target { FILE: psst-core/src/lastfm.rs type LastFmClient (line 7) | pub struct LastFmClient; method now_playing_song (line 11) | pub fn now_playing_song( method scrobble_song (line 25) | pub fn scrobble_song( method create_scrobbler (line 37) | pub fn create_scrobbler( method from (line 60) | fn from(value: ScrobblerError) -> Self { function generate_lastfm_auth_url (line 66) | pub fn generate_lastfm_auth_url( function exchange_token_for_session (line 76) | pub fn exchange_token_for_session( function get_lastfm_token_listener (line 89) | pub fn get_lastfm_token_listener( FILE: psst-core/src/lib.rs constant GIT_VERSION (line 5) | pub const GIT_VERSION: &str = git_version!(); constant BUILD_TIME (line 6) | pub const BUILD_TIME: &str = include!(concat!(env!("OUT_DIR"), "/build-t... constant REMOTE_URL (line 7) | pub const REMOTE_URL: &str = include!(concat!(env!("OUT_DIR"), "/remote-... FILE: psst-core/src/metadata.rs type Fetch (line 13) | pub trait Fetch: protobuf::Message { method uri (line 14) | fn uri(id: ItemId) -> String; method fetch (line 15) | fn fetch(session: &SessionService, id: ItemId) -> Result { method uri (line 21) | fn uri(id: ItemId) -> String { method uri (line 27) | fn uri(id: ItemId) -> String { type ToMediaPath (line 32) | pub trait ToMediaPath { method is_restricted_in_region (line 33) | fn is_restricted_in_region(&self, country: &str) -> bool; method find_allowed_alternative (line 34) | fn find_allowed_alternative(&self, country: &str) -> Option; method to_media_path (line 35) | fn to_media_path(&self, preferred_bitrate: usize) -> Option; method is_restricted_in_region (line 39) | fn is_restricted_in_region(&self, country: &str) -> bool { method find_allowed_alternative (line 45) | fn find_allowed_alternative(&self, country: &str) -> Option { method to_media_path (line 53) | fn to_media_path(&self, preferred_bitrate: usize) -> Option { method is_restricted_in_region (line 65) | fn is_restricted_in_region(&self, country: &str) -> bool { method find_allowed_alternative (line 71) | fn find_allowed_alternative(&self, _country: &str) -> Option { method to_media_path (line 75) | fn to_media_path(&self, preferred_bitrate: usize) -> Option { function select_preferred_file (line 86) | fn select_preferred_file(files: &[AudioFile], preferred_bitrate: usize) ... function is_restricted_in_region (line 96) | fn is_restricted_in_region(restriction: &Restriction, country: &str) -> ... function is_country_in_list (line 111) | fn is_country_in_list(countries: &[u8], country: &[u8]) -> bool { FILE: psst-core/src/oauth.rs function listen_for_callback_parameter (line 15) | pub fn listen_for_callback_parameter( function handle_callback_connection (line 71) | fn handle_callback_connection( function extract_parameter_from_request (line 103) | fn extract_parameter_from_request(request_line: &str, parameter_name: &s... function get_authcode_listener (line 115) | pub fn get_authcode_listener( function send_success_response (line 122) | pub fn send_success_response(stream: &mut TcpStream) { function create_spotify_oauth_client (line 151) | fn create_spotify_oauth_client(redirect_port: u16) -> BasicClient { function generate_auth_url (line 164) | pub fn generate_auth_url(redirect_port: u16) -> (String, PkceCodeVerifie... function exchange_code_for_token (line 177) | pub fn exchange_code_for_token( function get_scopes (line 193) | fn get_scopes() -> Vec { FILE: psst-core/src/player/file.rs type MediaPath (line 31) | pub struct MediaPath { type AudioFormat (line 40) | pub enum AudioFormat { method from_protocol (line 47) | pub fn from_protocol(format: Format) -> Self { method from_codec (line 56) | pub fn from_codec(codec: CodecType) -> Self { type MediaFile (line 68) | pub enum MediaFile { method supported_audio_formats_for_bitrate (line 82) | pub fn supported_audio_formats_for_bitrate(bitrate: usize) -> &'static... method open (line 118) | pub fn open(path: MediaPath, cdn: CdnHandle, cache: CacheHandle) -> Re... method local (line 140) | pub fn local(path: MediaPath) -> Self { method path (line 144) | pub fn path(&self) -> MediaPath { method storage (line 152) | pub fn storage(&self) -> Option<&StreamStorage> { method remote_audio_source (line 160) | pub fn remote_audio_source( method local_audio_source (line 175) | pub fn local_audio_source(&self) -> Result<(AudioDecoder, Normalizatio... method header_length (line 183) | fn header_length(&self) -> u64 { method codec_format (line 190) | fn codec_format(&self) -> AudioCodecFormat { type StreamedFile (line 199) | pub struct StreamedFile { method open (line 208) | fn open(path: MediaPath, cdn: CdnHandle, cache: CacheHandle) -> Result... method service_streaming (line 235) | fn service_streaming(&self) -> Result<(), Error> { type CachedFile (line 297) | pub struct CachedFile { method open (line 303) | fn open(path: MediaPath, file_path: PathBuf) -> Result { function load_range (line 311) | fn load_range( FILE: psst-core/src/player/item.rs type LoadedPlaybackItem (line 22) | pub struct LoadedPlaybackItem { type PlaybackItem (line 29) | pub struct PlaybackItem { method load (line 35) | pub fn load( function load_media_path (line 65) | fn load_media_path( function load_media_path_from_track_or_alternative (line 81) | fn load_media_path_from_track_or_alternative( function load_media_path_from_episode (line 119) | fn load_media_path_from_episode( function load_media_path_from_local (line 139) | fn load_media_path_from_local(item_id: ItemId) -> Result Op... function load_track (line 165) | fn load_track( function load_episode (line 181) | fn load_episode( function load_audio_key (line 197) | fn load_audio_key( FILE: psst-core/src/player/mod.rs constant PREVIOUS_TRACK_THRESHOLD (line 26) | const PREVIOUS_TRACK_THRESHOLD: Duration = Duration::from_secs(3); constant STOP_AFTER_CONSECUTIVE_LOADING_FAILURES (line 27) | const STOP_AFTER_CONSECUTIVE_LOADING_FAILURES: usize = 3; type PlaybackConfig (line 30) | pub struct PlaybackConfig { method default (line 36) | fn default() -> Self { type Player (line 44) | pub struct Player { method new (line 60) | pub fn new( method sender (line 84) | pub fn sender(&self) -> Sender { method receiver (line 88) | pub fn receiver(&self) -> Receiver { method handle (line 92) | pub fn handle(&mut self, event: PlayerEvent) { method handle_command (line 108) | fn handle_command(&mut self, cmd: PlayerCommand) { method handle_loaded (line 127) | fn handle_loaded(&mut self, item: PlaybackItem, result: Result, position: usize) { method load_and_play (line 216) | fn load_and_play(&mut self, item: PlaybackItem) { method preload (line 264) | fn preload(&mut self, item: PlaybackItem) { method set_volume (line 287) | fn set_volume(&mut self, volume: f64) { method play_loaded (line 291) | fn play_loaded(&mut self, loaded_item: LoadedPlaybackItem) { method pause (line 302) | fn pause(&mut self) { method resume (line 318) | fn resume(&mut self) { method pause_or_resume (line 334) | fn pause_or_resume(&mut self) { method previous (line 344) | fn previous(&mut self) { method next (line 357) | fn next(&mut self) { method stop (line 366) | fn stop(&mut self) { method seek (line 374) | fn seek(&mut self, position: Duration) { method configure (line 378) | fn configure(&mut self, config: PlaybackConfig) { method is_near_playback_start (line 382) | fn is_near_playback_start(&self) -> bool { method is_in_preload (line 391) | fn is_in_preload(&self, item: PlaybackItem) -> bool { type PlayerCommand (line 400) | pub enum PlayerCommand { type PlayerEvent (line 435) | pub enum PlayerEvent { type PlayerState (line 485) | enum PlayerState { type PreloadState (line 502) | enum PreloadState { FILE: psst-core/src/player/queue.rs type QueueBehavior (line 6) | pub enum QueueBehavior { type Queue (line 14) | pub struct Queue { method new (line 24) | pub fn new() -> Self { method clear (line 35) | pub fn clear(&mut self) { method fill (line 41) | pub fn fill(&mut self, items: Vec, position: usize) { method add (line 48) | pub fn add(&mut self, item: PlaybackItem) { method handle_added_queue (line 52) | fn handle_added_queue(&mut self) { method set_behaviour (line 64) | pub fn set_behaviour(&mut self, behavior: QueueBehavior) { method compute_positions (line 69) | fn compute_positions(&mut self) { method skip_to_previous (line 94) | pub fn skip_to_previous(&mut self) { method skip_to_next (line 98) | pub fn skip_to_next(&mut self) { method skip_to_following (line 103) | pub fn skip_to_following(&mut self) { method get_current (line 108) | pub fn get_current(&self) -> Option<&PlaybackItem> { method get_following (line 113) | pub fn get_following(&self) -> Option<&PlaybackItem> { method previous_position (line 124) | fn previous_position(&self) -> usize { method next_position (line 133) | fn next_position(&self) -> usize { method following_position (line 142) | fn following_position(&self) -> usize { FILE: psst-core/src/player/storage.rs type StreamRequest (line 15) | pub enum StreamRequest { type StreamStorage (line 20) | pub struct StreamStorage { method new (line 39) | pub fn new(total_size: u64) -> io::Result { method from_complete_file (line 61) | pub fn from_complete_file(path: PathBuf) -> io::Result { method reader (line 89) | pub fn reader(&self) -> io::Result { method writer (line 97) | pub fn writer(&self) -> io::Result { method receiver (line 104) | pub fn receiver(&self) -> &Receiver { method path (line 108) | pub fn path(&self) -> &Path { type StreamReader (line 27) | pub struct StreamReader { type StreamWriter (line 33) | pub struct StreamWriter { method is_complete (line 135) | pub fn is_complete(&self) -> bool { method mark_as_not_requested (line 139) | pub fn mark_as_not_requested(&self, offset: u64, length: u64) { type StreamFile (line 113) | enum StreamFile { method reopen (line 119) | fn reopen(&self) -> io::Result { method path (line 126) | fn path(&self) -> &Path { method write (line 145) | fn write(&mut self, buf: &[u8]) -> io::Result { method flush (line 152) | fn flush(&mut self) -> io::Result<()> { method seek (line 158) | fn seek(&mut self, pos: SeekFrom) -> io::Result { constant MINIMUM_READ_LENGTH (line 163) | const MINIMUM_READ_LENGTH: u64 = 1024 * 64; constant PREFETCH_READ_LENGTH (line 164) | const PREFETCH_READ_LENGTH: u64 = 1024 * 256; method read (line 167) | fn read(&mut self, buf: &mut [u8]) -> io::Result { method seek (line 204) | fn seek(&mut self, pos: SeekFrom) -> io::Result { type StreamDataMap (line 210) | struct StreamDataMap { method remaining (line 223) | fn remaining(&self, offset: u64) -> u64 { method not_yet_requested (line 229) | fn not_yet_requested(&self, offset: u64, length: u64) -> Vec<(u64, u64... method mark_as_requested (line 239) | fn mark_as_requested(&self, offset: u64, length: u64) { method mark_as_not_requested (line 244) | fn mark_as_not_requested(&self, offset: u64, length: u64) { method mark_as_downloaded (line 250) | fn mark_as_downloaded(&self, offset: u64, length: u64) { method wait_for (line 257) | fn wait_for(&self, offset: u64, blocking_callback: impl Fn(u64)) -> u64 { method is_complete (line 280) | fn is_complete(&self) -> bool { function range_to_offset_and_length (line 289) | fn range_to_offset_and_length(range: &Range) -> (u64, u64) { FILE: psst-core/src/player/worker.rs type PlaybackManager (line 33) | pub struct PlaybackManager { method new (line 40) | pub fn new(sink: DefaultAudioSink, event_send: Sender) ->... method play (line 48) | pub fn play(&mut self, loaded: LoadedPlaybackItem) { method seek (line 78) | pub fn seek(&self, position: Duration) { type DecoderSource (line 93) | pub struct DecoderSource { method new (line 109) | pub fn new( method written_samples (line 165) | fn written_samples(&self, position: u64) -> u64 { method should_report (line 169) | fn should_report(&self, pos: u64) -> bool { method samples_to_duration (line 173) | fn samples_to_duration(&self, samples: u64) -> Duration { method write (line 181) | fn write(&mut self, output: &mut [f32]) -> usize { method channel_count (line 221) | fn channel_count(&self) -> usize { method sample_rate (line 225) | fn sample_rate(&self) -> u32 { method drop (line 231) | fn drop(&mut self) { type Msg (line 236) | enum Msg { type Worker (line 242) | struct Worker { method default_buffer (line 268) | fn default_buffer() -> SpscRb { method new (line 274) | fn new( method on_seek (line 326) | fn on_seek(&mut self, time: Duration) -> Result, Error> { method on_read (line 346) | fn on_read(&mut self) -> Result, Error> { type Message (line 313) | type Message = Msg; type Error (line 314) | type Error = Error; method handle (line 316) | fn handle(&mut self, msg: Msg) -> Result, Self::Error> { FILE: psst-core/src/session/access_token.rs constant CLIENT_ID (line 11) | pub const CLIENT_ID: &str = "65b708073fc0480ea92a077233ca87bd"; constant ACCESS_SCOPES (line 14) | pub const ACCESS_SCOPES: &str = "streaming,user-read-email,user-read-pri... constant EXPIRATION_TIME_THRESHOLD (line 19) | const EXPIRATION_TIME_THRESHOLD: Duration = Duration::from_secs(60 * 30); type AccessToken (line 22) | pub struct AccessToken { method expired (line 28) | fn expired() -> Self { method request (line 35) | pub fn request(session: &SessionService) -> Result { method is_expired (line 54) | fn is_expired(&self) -> bool { type TokenProvider (line 59) | pub struct TokenProvider { method new (line 64) | pub fn new() -> Self { method get (line 70) | pub fn get(&self, session: &SessionService) -> Result Self { method enqueue_request (line 30) | pub fn enqueue_request( method make_key_request (line 41) | fn make_key_request(seq: u32, track: ItemId, file: FileId) -> ShannonM... method handle_aes_key (line 50) | pub fn handle_aes_key(&mut self, msg: ShannonMsg) { method handle_aes_key_error (line 66) | pub fn handle_aes_key_error(&mut self, msg: ShannonMsg) { FILE: psst-core/src/session/client_token.rs type ClientTokenProvider (line 16) | pub struct ClientTokenProvider { method new (line 22) | pub fn new(proxy_url: Option<&str>) -> Self { method request (line 29) | fn request(&self, message: &M) -> Result, Error> { method request_new_token (line 42) | fn request_new_token(&self) -> Result { method get (line 234) | pub fn get(&self) -> Result { FILE: psst-core/src/session/login5.rs constant MAX_LOGIN_TRIES (line 25) | const MAX_LOGIN_TRIES: u8 = 3; constant LOGIN_TIMEOUT (line 26) | const LOGIN_TIMEOUT: Duration = Duration::from_secs(3); type ChallengeError (line 29) | pub enum ChallengeError { type Login5Error (line 35) | enum Login5Error { method fmt (line 51) | fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { method from (line 68) | fn from(err: Login5Error) -> Self { type Login5 (line 79) | pub struct Login5 { method new (line 94) | pub fn new( method request (line 106) | fn request(&self, message: &LoginRequest) -> Result, Error> { method request_new_token (line 121) | fn request_new_token(&self, login: Login_method) -> Result Result Self { method enqueue_request (line 27) | pub fn enqueue_request( method handle_mercury_req (line 43) | pub fn handle_mercury_req(&mut self, shannon_msg: ShannonMsg) { type MercuryRequest (line 66) | pub struct MercuryRequest { method get (line 73) | pub fn get(uri: String) -> Self { method send (line 81) | pub fn send(uri: String, data: Vec) -> Self { method encode_to_mercury_message (line 89) | fn encode_to_mercury_message(self, seq: u64) -> Vec { method encode_to_parts (line 95) | fn encode_to_parts(self) -> Vec> { type MercuryResponse (line 112) | pub struct MercuryResponse { method decode_from_parts (line 119) | fn decode_from_parts(mut parts: Vec>) -> Self { type Pending (line 133) | struct Pending { type Msg (line 139) | struct Msg { constant FINAL (line 147) | const FINAL: u8 = 0x01; constant PARTIAL (line 148) | const PARTIAL: u8 = 0x02; method new (line 150) | fn new(seq: u64, flags: u8, parts: Vec>) -> Self { method decode (line 160) | fn decode(buf: Vec) -> Self { method encode (line 181) | fn encode(&self) -> Vec { method aggregate (line 195) | fn aggregate(msgs: impl IntoIterator) -> Vec> { FILE: psst-core/src/session/mod.rs type SessionConfig (line 39) | pub struct SessionConfig { type SessionService (line 50) | pub struct SessionService { method empty (line 58) | pub fn empty() -> Self { method with_config (line 66) | pub fn with_config(config: SessionConfig) -> Self { method update_config (line 75) | pub fn update_config(&self, config: SessionConfig) { method is_connected (line 83) | pub fn is_connected(&self) -> bool { method connected (line 92) | pub fn connected(&self) -> Result { method shutdown (line 114) | pub fn shutdown(&self) { type SessionConnection (line 123) | pub struct SessionConnection { method open (line 134) | pub fn open(config: SessionConfig) -> Result { type SessionWorker (line 147) | pub struct SessionWorker { method run (line 156) | pub fn run(transport: Transport) -> Self { method handle (line 184) | pub fn handle(&self) -> SessionHandle { method join (line 190) | pub fn join(self) { method has_terminated (line 202) | pub fn has_terminated(&self) -> bool { type SessionHandle (line 208) | pub struct SessionHandle { method get_mercury_protobuf (line 213) | pub fn get_mercury_protobuf(&self, uri: String) -> Result method get_mercury_json (line 222) | pub fn get_mercury_json(&self, uri: String) -> Result method get_mercury_bytes (line 231) | pub fn get_mercury_bytes(&self, uri: String) -> Result, Error> { method get_audio_key (line 247) | pub fn get_audio_key(&self, track: ItemId, file: FileId) -> Result Option { method request_shutdown (line 268) | pub fn request_shutdown(&self) { function decode_shannon_messages (line 278) | fn decode_shannon_messages(mut decoder: ShannonDecoder, dispa... function encode_shannon_messages (line 299) | fn encode_shannon_messages( type DispatchCmd (line 317) | enum DispatchCmd { function dispatch_messages (line 336) | fn dispatch_messages( function pong_message (line 399) | fn pong_message() -> ShannonMsg { function parse_country_code (line 403) | fn parse_country_code(msg: ShannonMsg) -> Result { method from (line 410) | fn from(error: serde_json::Error) -> Self { FILE: psst-core/src/session/token.rs constant EXPIRY_THRESHOLD (line 5) | const EXPIRY_THRESHOLD: Duration = Duration::from_secs(10); type Token (line 8) | pub struct Token { method is_expired (line 17) | pub fn is_expired(&self) -> bool { FILE: psst-core/src/system_info.rs constant OS (line 2) | pub const OS: &str = std::env::consts::OS; constant DEVICE_ID (line 6) | pub const DEVICE_ID: &str = "Psst"; constant CLIENT_ID (line 9) | pub const CLIENT_ID: &str = "65b708073fc0480ea92a077233ca87bd"; constant SPOTIFY_SEMANTIC_VERSION (line 12) | pub const SPOTIFY_SEMANTIC_VERSION: &str = "1.2.52.442"; FILE: psst-core/src/util.rs constant NET_CONNECT_TIMEOUT (line 8) | pub const NET_CONNECT_TIMEOUT: Duration = Duration::from_millis(8 * 1000); constant NET_IO_TIMEOUT (line 10) | pub const NET_IO_TIMEOUT: Duration = Duration::from_millis(16 * 1000); function default_ureq_agent_builder (line 12) | pub fn default_ureq_agent_builder( function solve_hash_cash (line 29) | pub fn solve_hash_cash( type Sequence (line 70) | pub struct Sequence(T); function new (line 73) | pub fn new(value: T) -> Self { function advance (line 77) | pub fn advance(&mut self) -> T { type OffsetFile (line 83) | pub struct OffsetFile { function new (line 89) | pub fn new(mut stream: T, offset: u64) -> io::Result> { function read (line 96) | fn read(&mut self, buf: &mut [u8]) -> io::Result { function write (line 102) | fn write(&mut self, buf: &[u8]) -> io::Result { function flush (line 106) | fn flush(&mut self) -> io::Result<()> { function seek (line 112) | fn seek(&mut self, pos: SeekFrom) -> io::Result { type FileWithConstSize (line 123) | pub struct FileWithConstSize { function len (line 129) | pub fn len(&self) -> u64 { function is_empty (line 133) | pub fn is_empty(&self) -> bool { function new (line 142) | pub fn new(mut stream: T) -> Self { function read (line 154) | fn read(&mut self, buf: &mut [u8]) -> io::Result { function seek (line 163) | fn seek(&mut self, pos: io::SeekFrom) -> io::Result { FILE: psst-gui/build.rs function main (line 1) | fn main() { function add_windows_icon (line 7) | fn add_windows_icon() { FILE: psst-gui/src/cmd.rs constant WIDGET_SEARCH_INPUT (line 13) | pub const WIDGET_SEARCH_INPUT: WidgetId = WidgetId::reserved(1); constant SHOW_MAIN (line 16) | pub const SHOW_MAIN: Selector = Selector::new("app.show-main"); constant SHOW_ACCOUNT_SETUP (line 17) | pub const SHOW_ACCOUNT_SETUP: Selector = Selector::new("app.show-initial"); constant CLOSE_ALL_WINDOWS (line 18) | pub const CLOSE_ALL_WINDOWS: Selector = Selector::new("app.close-all-win... constant QUIT_APP_WITH_SAVE (line 19) | pub const QUIT_APP_WITH_SAVE: Selector = Selector::new("app.quit-with-sa... constant SET_FOCUS (line 20) | pub const SET_FOCUS: Selector = Selector::new("app.set-focus"); constant COPY (line 21) | pub const COPY: Selector = Selector::new("app.copy-to-clipboard"); constant GO_TO_URL (line 22) | pub const GO_TO_URL: Selector = Selector::new("app.go-to-url"); constant TOGGLE_FINDER (line 25) | pub const TOGGLE_FINDER: Selector = Selector::new("app.show-finder"); constant FIND_IN_PLAYLIST (line 26) | pub const FIND_IN_PLAYLIST: Selector = Selector::new("find-in-play... constant FIND_IN_SAVED_TRACKS (line 27) | pub const FIND_IN_SAVED_TRACKS: Selector = Selector::new("find-in-... constant SESSION_CONNECT (line 30) | pub const SESSION_CONNECT: Selector = Selector::new("app.session-connect"); constant LOG_OUT (line 31) | pub const LOG_OUT: Selector = Selector::new("app.log-out"); constant NAVIGATE (line 34) | pub const NAVIGATE: Selector