SYMBOL INDEX (285 symbols across 23 files) FILE: src/app.rs constant VERSION (line 15) | pub const VERSION: &str = env!("CARGO_PKG_VERSION"); constant LATEST_RELEASE_URL (line 16) | const LATEST_RELEASE_URL: &str = type App (line 19) | pub struct App { method new (line 71) | pub fn new() -> Result, AppError> { method run_tui (line 106) | pub fn run_tui(&self) { method restore (line 114) | fn restore(&self) { method context (line 125) | fn context(&self) -> AppContext { method exit (line 135) | fn exit(&self) { method handle_event (line 145) | fn handle_event(&self, event: AppEvent) { method handle_discord_state_update (line 152) | fn handle_discord_state_update(&self, new_state: dickcord::State) { method handle_action (line 165) | fn handle_action(&self, action: AppAction) { method set_state (line 199) | fn set_state(&self, state: AppState) { method state (line 203) | fn state(&self) -> AppState { method set_config (line 207) | fn set_config(&self, config: Config) { method save_config (line 212) | fn save_config(&self) { method edit_config (line 220) | fn edit_config(&self, cb: impl FnOnce(&mut Config)) { method read_only_config (line 229) | fn read_only_config(&self) -> ReadOnlyConfig { method check_for_update (line 238) | fn check_for_update(&self) { type AppContext (line 33) | pub struct AppContext { method dispatch_action (line 265) | pub fn dispatch_action(&self, action: AppAction) { method sources (line 269) | pub fn sources(&self) -> Vec { method current_source (line 273) | pub fn current_source(&self) -> Option { method selected_source (line 277) | pub fn selected_source(&self) -> Option { method meter_value_ranged (line 281) | pub fn meter_value_ranged(&self) -> (f32, f32) { method discord_state (line 285) | pub fn discord_state(&self) -> dickcord::State { method config (line 289) | pub fn config(&self) -> ReadOnlyConfig { method update_available (line 298) | pub fn update_available(&self) -> Option { type AppState (line 42) | enum AppState { type AppError (line 48) | pub enum AppError { type AppAction (line 54) | pub enum AppAction { type AppEvent (line 65) | pub enum AppEvent { function spawn_poll_thread (line 251) | fn spawn_poll_thread(app: Arc, receiver: Receiver) { type LatestRelease (line 304) | struct LatestRelease { function fetch_update (line 308) | async fn fetch_update() -> Option { FILE: src/audio/analysis.rs type Meter (line 12) | pub struct Meter { constant DEFAULT_WINDOW_SIZE (line 21) | const DEFAULT_WINDOW_SIZE: usize = SAMPLE_RATE / 24; constant DB_RANGE (line 22) | const DB_RANGE: f32 = 100.; constant MAX_SMOOTHING (line 25) | const MAX_SMOOTHING: f32 = 0.1 / 2.; constant MIN_SMOOTHING (line 26) | const MIN_SMOOTHING: f32 = 0.2; constant SMOOTHING_BOUNDARY (line 29) | const SMOOTHING_BOUNDARY: f32 = 0.5; method new (line 31) | pub fn new() -> Self { method write (line 39) | pub fn write(&self, buf: &[u8]) { method drain (line 55) | pub fn drain(&self, amount: usize) { method process (line 62) | pub fn process(&self) { method value (line 66) | pub fn value(&self) -> f32 { method dbfs (line 70) | pub fn dbfs(&self) -> f32 { method value_ranged (line 74) | pub fn value_ranged(&self) -> f32 { function process_multiversioned (line 81) | fn process_multiversioned(meter: &Meter) { type StereoMeter (line 110) | pub struct StereoMeter { method new (line 116) | pub fn new() -> Self { method write (line 123) | pub fn write(&self, buf: &[u8]) { method process (line 138) | pub fn process(&self) { method drain (line 143) | pub fn drain(&self, amount: usize) { method value_ranged (line 148) | pub fn value_ranged(&self) -> (f32, f32) { method default (line 154) | fn default() -> Self { function faster_max (line 159) | fn faster_max(a: f32, b: f32) -> f32 { function raw_samples_from_bytes (line 168) | pub fn raw_samples_from_bytes(bytes: &[u8]) -> Vec { function spawn_analysis_thread (line 178) | pub fn spawn_analysis_thread(meter: Arc) { FILE: src/audio/mod.rs type Sample (line 13) | pub type Sample = f32; type AudioProducer (line 15) | pub type AudioProducer = Arc>>; type AudioConsumer (line 16) | pub type AudioConsumer = Arc>>; constant SAMPLE_RATE (line 18) | pub const SAMPLE_RATE: usize = 48000; constant SAMPLE_IN_BYTES (line 19) | pub const SAMPLE_IN_BYTES: usize = 4; constant LATENCY_IN_SECONDS (line 21) | pub const LATENCY_IN_SECONDS: f32 = 0.05; constant BUFFER_SIZE (line 22) | pub const BUFFER_SIZE: usize = FILE: src/audio/pulse.rs type PulseClient (line 33) | pub struct PulseClient { method new (line 44) | pub fn new() -> Result { method setup_mainloop (line 100) | fn setup_mainloop(proplist: Proplist) -> Result<(Context, Mainloop), P... method subscribe_to_events (line 138) | pub fn subscribe_to_events(&self) { method sink_inputs (line 165) | pub fn sink_inputs(&self) -> Result, PulseClientError> { method record (line 205) | pub fn record(&self, sink_input: &SinkInput) -> Result Result<(), ... method status (line 394) | pub fn status(&self) -> SinkInputStreamStatus { method drop (line 400) | fn drop(&mut self) { type SinkInputStreamStatus (line 417) | pub enum SinkInputStreamStatus { FILE: src/audio/source.rs constant ALLOW_SPOTIFY_STREAMING (line 24) | const ALLOW_SPOTIFY_STREAMING: Option<&'static str> = option_env!("ALLOW... constant SPOTIFY_NAME (line 25) | const SPOTIFY_NAME: &str = "Spotify"; constant VAGUE_WORDS (line 28) | const VAGUE_WORDS: [&str; 10] = [ type SourceSelector (line 34) | pub struct SourceSelector { method new (line 45) | pub fn new(client: Arc) -> Self { method sources (line 61) | pub fn sources(&self) -> Vec { method current_source (line 73) | pub fn current_source(&self) -> Option { method selected_source (line 77) | pub fn selected_source(&self) -> Option { method select (line 81) | pub(super) fn select(&self, source: Option) { method handle_sink_input_event (line 94) | pub fn handle_sink_input_event(&self, index: u32, operation: Operation) { type Source (line 144) | pub struct Source { constant MAX_LIFESPAN (line 171) | const MAX_LIFESPAN: Duration = Duration::from_secs(60); method update (line 173) | fn update(&self, incoming: Source) { method compare (line 184) | fn compare(&self, rhs: &Source) -> SourceComparison { method remove (line 201) | fn remove(&self) { method is_dead (line 205) | fn is_dead(&self) -> bool { method sink_input (line 209) | pub fn sink_input(&self) -> SinkInput { method index (line 213) | pub fn index(&self) -> u32 { method available (line 217) | pub fn available(&self) -> bool { method volume (line 221) | pub fn volume(&self) -> f32 { method name (line 225) | pub fn name(&self) -> String { method from (line 320) | fn from(raw: SinkInput) -> Self { type SourceComparison (line 163) | enum SourceComparison { method is_similar_enough (line 231) | fn is_similar_enough(&self) -> bool { type SourceKind (line 243) | pub enum SourceKind { method parse (line 249) | fn parse>(candidates: &[T]) -> Self { method determine_name (line 258) | fn determine_name>(&self, candidates: &[T]) -> String { method from (line 314) | fn from(value: BrowserKind) -> Self { type BrowserKind (line 273) | pub enum BrowserKind { constant FIREFOX (line 279) | const FIREFOX: &'static str = "Firefox"; constant CHROME (line 280) | const CHROME: &'static str = "Chrome"; method parse (line 282) | fn parse>(name: T) -> Option { method determine_tab_name (line 290) | fn determine_tab_name>(&self, candidates: &[T]) -> String { method fmt (line 303) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function str_is_doublecase (line 372) | fn str_is_doublecase(str: &str) -> bool { function calculate_name_quality (line 376) | fn calculate_name_quality(str: &str) -> i32 { FILE: src/audio/system.rs type AudioSystem (line 19) | pub struct AudioSystem { method new (line 32) | pub fn new() -> Result, PulseClientError> { method select (line 54) | pub fn select(&self, source: Option) { method stream (line 59) | pub fn stream(&self) -> AudioStream { method sources (line 63) | pub fn sources(&self) -> Vec { method current_source (line 67) | pub fn current_source(&self) -> Option { method selected_source (line 71) | pub fn selected_source(&self) -> Option { method meter_value_ranged (line 75) | pub fn meter_value_ranged(&self) -> (f32, f32) { method refresh_stream (line 79) | fn refresh_stream(&self) { function spawn_event_thread (line 95) | fn spawn_event_thread(audio: Arc) { type AudioStream (line 144) | pub struct AudioStream(AudioConsumer); method into_input (line 147) | pub fn into_input(self) -> Input { method read (line 162) | fn read(&mut self, buf: &mut [u8]) -> std::io::Result { method seek (line 177) | fn seek(&mut self, _: std::io::SeekFrom) -> std::io::Result { method byte_len (line 183) | fn byte_len(&self) -> Option { method is_seekable (line 187) | fn is_seekable(&self) -> bool { function normalize_volume (line 192) | fn normalize_volume(bytes: &[u8], incoming_volume: f32) -> Vec { FILE: src/dickcord/bot.rs type ConnectedToChannel (line 23) | type ConnectedToChannel = Arc>>; type Bot (line 26) | pub struct Bot { method new (line 71) | pub fn new(rt: Arc, config: &Config) -> Self { method set_streaming_status (line 114) | pub async fn set_streaming_status(&self, name: Option) { method attempt_join_and_stream (line 129) | pub async fn attempt_join_and_stream(&self, audio: AudioStream) { method poll (line 142) | pub fn poll(&self) -> BotEvent { method connect_to_channel (line 146) | pub async fn connect_to_channel(&self, channel: &GuildChannel) -> Opti... method disconnect_from_channel (line 182) | pub async fn disconnect_from_channel(&self) -> Result<(), JoinError> { method stream_call_audio (line 195) | pub async fn stream_call_audio(&self, call: Arc>, audio: A... method locate_target_user_channel (line 200) | pub async fn locate_target_user_channel(&self) -> Option { method is_target_user_streaming (line 214) | pub async fn is_target_user_streaming(&self) -> bool { method all_members_in_channels (line 235) | async fn all_members_in_channels( method all_channels (line 252) | async fn all_channels(&self, context: &SerenityContext) -> Vec SerenityContext { method stop (line 273) | pub async fn stop(&self) { type BotHandler (line 40) | pub struct BotHandler { type BotEvent (line 49) | pub enum BotEvent { method ready (line 288) | async fn ready(&self, context: SerenityContext, ready: Ready) { method resume (line 296) | async fn resume(&self, _context: SerenityContext, _resumed: ResumedEvent) { method voice_state_update (line 300) | async fn voice_state_update( function intents (line 348) | fn intents() -> GatewayIntents { FILE: src/dickcord/mod.rs type TargetUser (line 7) | type TargetUser = u64; FILE: src/dickcord/system.rs type DiscordSystem (line 15) | pub struct DiscordSystem { method new (line 47) | pub fn new(rt: Arc, app_events: Sender, stream: Aud... method connect (line 62) | pub fn connect(&self, config: &Config) { method disconnect (line 71) | pub fn disconnect(&self) { method announce_source_streaming (line 81) | pub fn announce_source_streaming(&self, source: Option) { method state (line 89) | pub fn state(&self) -> State { method stream_on_demand (line 93) | fn stream_on_demand(&self) { method set_state (line 119) | fn set_state(&self, new_state: State) { method set_voice_state (line 127) | fn set_voice_state(&self, new_voice_state: VoiceState) { method handle_event (line 131) | fn handle_event(&self, event: BotEvent) { method handle_connected (line 147) | fn handle_connected(&self, user: CurrentUser) { method handle_client_error (line 159) | fn handle_client_error(&self, error: String) { method handle_joining (line 163) | fn handle_joining(&self, channel: GuildChannel) { method handle_joined (line 167) | fn handle_joined(&self, channel: GuildChannel) { method handle_left (line 171) | fn handle_left(&self) { method handle_voice_error (line 175) | fn handle_voice_error(&self, error: String) { method handle_target_user_moved (line 179) | fn handle_target_user_moved(&self, new_channel: Option) { method handle_target_user_stream_state_changed (line 192) | fn handle_target_user_stream_state_changed(&self, new_state: bool) { method bot_unwrapped (line 197) | fn bot_unwrapped(&self) -> Arc { method set_config (line 204) | pub fn set_config(&self, config: ReadOnlyConfig) { method config_unwrapped (line 209) | fn config_unwrapped(&self) -> ReadOnlyConfig { type State (line 29) | pub enum State { method set_voice_state (line 218) | fn set_voice_state(&mut self, new_state: VoiceState) { method is_connected (line 227) | fn is_connected(&self) -> bool { type VoiceState (line 38) | pub enum VoiceState { function spawn_discord_event_thread (line 232) | fn spawn_discord_event_thread(discord: Arc) { FILE: src/interface/components/text_field.rs type TextField (line 12) | pub struct TextField { method new (line 18) | pub fn new(label: &str) -> Self { method focus (line 28) | pub fn focus(&mut self) { method blur (line 36) | pub fn blur(&mut self) { method value (line 41) | pub fn value(&self) -> String { method render (line 47) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 60) | fn handle_event(&mut self, event: Event) { FILE: src/interface/dashboard/discord_module.rs type DiscordModule (line 14) | pub struct DiscordModule { method new (line 19) | pub fn new(context: AppContext) -> Self { method render (line 25) | fn render(&self, area: Rect, buf: &mut Buffer) { FILE: src/interface/dashboard/meter.rs type Meter (line 8) | pub struct Meter { method new (line 13) | pub fn new(context: AppContext) -> Self { method render_meter (line 17) | fn render_meter(&self, value: f32, area: tui::layout::Rect, buf: &mut ... method render (line 76) | fn render(&self, area: Rect, buf: &mut tui::buffer::Buffer) { constant BAR_PARTIALS (line 89) | const BAR_PARTIALS: [&str; 9] = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉",... FILE: src/interface/dashboard/mod.rs type Dashboard (line 29) | pub struct Dashboard { method new (line 51) | pub fn new(context: AppContext) -> Self { type Content (line 34) | pub struct Content { method cycle_focus (line 124) | fn cycle_focus(&mut self) { type FocusedModule (line 44) | enum FocusedModule { method render (line 70) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 118) | fn handle_event(&mut self, event: crossterm::event::Event) { method render (line 138) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 190) | fn handle_event(&mut self, event: Event) { FILE: src/interface/dashboard/settings_module.rs type Option (line 14) | struct Option { method new (line 138) | fn new(context: AppContext, name: String, kind: OptionKind, action: Ap... method toggle_if_switch (line 148) | fn toggle_if_switch(&mut self) { method focus (line 154) | fn focus(&mut self) { method blur (line 158) | fn blur(&mut self) { type OptionKind (line 22) | enum OptionKind { type SettingsModule (line 27) | pub struct SettingsModule { method new (line 34) | pub fn new(context: AppContext) -> Self { method navigate (line 63) | fn navigate(&mut self, amount: isize) { method update_focus_states (line 71) | fn update_focus_states(&mut self) { method focus (line 81) | pub fn focus(&mut self) { method blur (line 86) | pub fn blur(&mut self) { method render (line 93) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 124) | fn handle_event(&mut self, event: Event) { method render (line 164) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 192) | fn handle_event(&mut self, event: Event) { constant IDLE_SYMBOL (line 202) | const IDLE_SYMBOL: &str = "○"; constant FOCUS_SYMBOL (line 203) | const FOCUS_SYMBOL: &str = "●"; FILE: src/interface/dashboard/source_selector.rs type SourceSelector (line 16) | pub struct SourceSelector { method new (line 23) | pub fn new(context: AppContext) -> Self { method navigate (line 31) | pub fn navigate(&mut self, amount: isize) { method select (line 39) | pub fn select(&self) { method focus (line 60) | pub fn focus(&mut self) { method blur (line 64) | pub fn blur(&mut self) { method render (line 70) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 143) | fn handle_event(&mut self, event: Event) { constant IDLE_SYMBOL (line 164) | const IDLE_SYMBOL: &str = "○"; constant HOVER_SYMBOL (line 165) | const HOVER_SYMBOL: &str = "●"; constant ACTIVE_SYMBOL (line 166) | const ACTIVE_SYMBOL: &str = "►"; constant ACTIVE_COLOR (line 168) | const ACTIVE_COLOR: Color = Color::Green; constant IDLE_COLOR (line 169) | const IDLE_COLOR: Color = Color::Reset; constant DISABLE_COLOR (line 170) | const DISABLE_COLOR: Color = Color::DarkGray; constant UNAVAILABLE_COLOR (line 171) | const UNAVAILABLE_COLOR: Color = Color::Yellow; FILE: src/interface/dashboard/version.rs type Version (line 13) | pub struct Version { method new (line 18) | pub fn new(context: AppContext) -> Self { method render (line 24) | fn render(&self, area: Rect, buf: &mut Buffer) { FILE: src/interface/mod.rs constant TARGET_FPS (line 35) | pub const TARGET_FPS: u32 = 144; constant MS_PER_FRAME (line 36) | pub const MS_PER_FRAME: f32 = 1000. / TARGET_FPS as f32; constant LOGO (line 38) | pub const LOGO: &str = " type Interface (line 44) | pub struct Interface { method new (line 51) | pub fn new(view: V, sender: Sender) -> Self method set_view (line 62) | pub fn set_view(&self, view: V) method run (line 70) | pub fn run(&self) -> Result<(), io::Error> { method stop (line 127) | pub fn stop(&self) { function spawn_event_loop (line 132) | fn spawn_event_loop() -> Receiver { FILE: src/interface/setup/form.rs type SelectedField (line 11) | pub enum SelectedField { type Form (line 17) | pub struct Form { method new (line 24) | pub fn new() -> Self { method cycle_selection (line 37) | fn cycle_selection(&mut self) { method current_selection (line 49) | pub fn current_selection(&self) -> &SelectedField { method current_values (line 53) | pub fn current_values(&self) -> (String, String) { method render (line 62) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 72) | fn handle_event(&mut self, event: crossterm::event::Event) { FILE: src/interface/setup/mod.rs type Setup (line 20) | pub struct Setup { method new (line 26) | pub fn new(context: AppContext) -> Self { method is_valid (line 33) | fn is_valid(&self) -> bool { method render (line 40) | fn render(&self, area: Rect, buf: &mut Buffer) { method handle_event (line 95) | fn handle_event(&mut self, event: Event) { function get_bot_token_help (line 122) | fn get_bot_token_help() -> Paragraph<'static> { function get_user_id_help (line 146) | fn get_user_id_help() -> Paragraph<'static> { FILE: src/interface/splash.rs type Splash (line 7) | pub struct Splash; method render (line 10) | fn render(&self, area: tui::layout::Rect, buf: &mut tui::buffer::Buffer) { FILE: src/interface/view.rs type View (line 4) | pub trait View { method handle_event (line 5) | fn handle_event(&mut self, _event: Event) {} method render (line 7) | fn render(&self, area: Rect, buf: &mut Buffer); method render (line 32) | fn render(&self, area: tui::layout::Rect, buf: &mut tui::buffer::Buffe... method handle_event (line 36) | fn handle_event(&mut self, event: Event) { type BoxedView (line 10) | pub struct BoxedView { method new (line 15) | pub fn new(view: V) -> Self method render (line 26) | fn render(self, area: tui::layout::Rect, buf: &mut tui::buffer::Buffer) { FILE: src/main.rs function main (line 9) | fn main() { FILE: src/state.rs type Config (line 7) | pub struct Config { method path (line 24) | fn path() -> String { method new (line 32) | pub fn new(bot_token: String, user_id: u64) -> Self { method restore (line 41) | pub fn restore() -> Option { method save (line 51) | pub fn save(&self) { method read_only (line 62) | pub fn read_only(&self) -> ReadOnlyConfig { type ReadOnlyConfig (line 16) | pub struct ReadOnlyConfig {