SYMBOL INDEX (1000 symbols across 161 files) FILE: assets/js/app.js constant MAX_VOLUME_PERCENT_DEFAULT (line 33) | const MAX_VOLUME_PERCENT_DEFAULT = 150 constant BOOST_CAP (line 34) | const BOOST_CAP = 1.5 method mounted (line 102) | mounted() { method updated (line 109) | updated() { method destroyed (line 114) | destroyed() { method readGain (line 118) | readGain() { method handleClick (line 122) | async handleClick(event) { method startPlayback (line 137) | async startPlayback() { method configureGain (line 170) | async configureGain(targetGain) { method releaseBoost (line 219) | releaseBoost() { method stopPlayback (line 230) | stopPlayback() { method setPlaying (line 244) | setPlaying(isPlaying) { method mounted (line 263) | mounted() { method updated (line 281) | updated() { method destroyed (line 295) | destroyed() { method syncDataset (line 326) | syncDataset() { method bindElements (line 338) | bindElements() { method initialPercent (line 368) | initialPercent() { method setPercent (line 373) | setPercent(percent, {emit = false} = {}) { method handleSliderInput (line 393) | async handleSliderInput(event) { method queuePush (line 399) | queuePush(percent) { method handlePreviewClick (line 417) | async handlePreviewClick(event) { method updatePreviewGain (line 459) | async updatePreviewGain(percent) { method ensurePreviewGraph (line 469) | async ensurePreviewGraph(targetGain) { method applyPreviewGain (line 510) | applyPreviewGain(targetGain) { method getPreviewSource (line 528) | getPreviewSource() { method stopPreview (line 563) | stopPreview(forceRevoke = false) { method setPreviewState (line 579) | setPreviewState(isPlaying) { method mounted (line 590) | mounted() { method destroyed (line 629) | destroyed() { FILE: assets/js/hooks/local_player.js method mounted (line 5) | mounted() { method updateIcon (line 42) | updateIcon(isPlaying) { method playIcon (line 46) | playIcon() { method stopIcon (line 53) | stopIcon() { FILE: lib/soundboard.ex class Soundboard (line 1) | defmodule Soundboard method app_name (line 13) | def app_name, do: :soundboard FILE: lib/soundboard/accounts.ex class Soundboard.Accounts (line 1) | defmodule Soundboard.Accounts method get_user (line 10) | def get_user(user_id), do: Repo.get(User, user_id) method avatars_by_usernames (line 12) | def avatars_by_usernames([]), do: %{} FILE: lib/soundboard/accounts/api_token.ex class Soundboard.Accounts.ApiToken (line 1) | defmodule Soundboard.Accounts.ApiToken method changeset (line 36) | def changeset(token, attrs) do FILE: lib/soundboard/accounts/api_tokens.ex class Soundboard.Accounts.ApiTokens (line 1) | defmodule Soundboard.Accounts.ApiTokens method list_tokens (line 19) | def list_tokens(%User{id: user_id}) do method generate_token (line 29) | def generate_token(%User{id: user_id}, attrs \\ %{}) do method revoke_token (line 73) | def revoke_token(%User{id: user_id}, token_id) do method update_last_used_at (line 92) | defp update_last_used_at(%ApiToken{} = token) do method random_token (line 100) | defp random_token do method hash_token (line 104) | defp hash_token(raw) do FILE: lib/soundboard/accounts/user.ex class Soundboard.Accounts.User (line 1) | defmodule Soundboard.Accounts.User method changeset (line 25) | def changeset(user, attrs) do FILE: lib/soundboard/application.ex class Soundboard.Application (line 1) | defmodule Soundboard.Application method start (line 11) | def start(_type, _args) do method discord_children (line 30) | defp discord_children do method config_change (line 42) | def config_change(changed, _new, removed) do FILE: lib/soundboard/audio_player.ex class Soundboard.AudioPlayer (line 1) | defmodule Soundboard.AudioPlayer method start_link (line 44) | def start_link(_opts) do method play_sound (line 48) | def play_sound(sound_name, actor) do method stop_sound (line 52) | def stop_sound do method set_voice_channel (line 56) | def set_voice_channel(guild_id, channel_id) do method last_user_left (line 60) | def last_user_left(guild_id) do method user_joined_channel (line 64) | def user_joined_channel(guild_id) do method playback_finished (line 68) | def playback_finished(guild_id) do method current_voice_channel (line 72) | def current_voice_channel do method invalidate_cache (line 83) | def invalidate_cache(sound_name), do: SoundLibrary.invalidate_cache(so... method init (line 86) | def init(state) do method handle_cast (line 103) | def handle_cast({:set_voice_channel, guild_id, channel_id}, state) do method handle_cast (line 124) | def handle_cast(:stop_sound, %{voice_channel: {guild_id, _channel_id}}... method handle_cast (line 131) | def handle_cast(:stop_sound, state) do method handle_cast (line 136) | def handle_cast({:playback_finished, guild_id}, state) do method handle_cast (line 140) | def handle_cast({:play_sound, sound_name, actor}, %{voice_channel: nil... method handle_cast (line 161) | def handle_cast({:play_sound, sound_name, actor}, state) do method handle_cast (line 165) | def handle_cast({:last_user_left, guild_id}, %{voice_channel: {guild_i... method handle_cast (line 185) | def handle_cast({:last_user_left, _guild_id}, state), do: {:noreply, s... method handle_cast (line 187) | def handle_cast({:user_joined_channel, _guild_id}, state) do method handle_call (line 192) | def handle_call(:get_voice_channel, _from, state) do method handle_info (line 197) | def handle_info( method handle_info (line 212) | def handle_info({:idle_timeout, _stale_token}, state), do: {:noreply, ... method handle_info (line 215) | def handle_info(:check_voice_connection, state) do method handle_info (line 221) | def handle_info({ref, result}, %{current_playback: %{task_ref: ref}} =... method handle_info (line 227) | def handle_info( method handle_info (line 235) | def handle_info({:interrupt_watchdog, guild_id, attempt}, state) do method handle_info (line 247) | def handle_info(_, state), do: {:noreply, state} method do_play_sound (line 249) | defp do_play_sound(sound_name, actor, %{voice_channel: voice_channel} ... method try_auto_join (line 263) | defp try_auto_join(actor) do method find_and_join_voice (line 270) | defp find_and_join_voice(discord_id) do method safely_leave (line 290) | defp safely_leave(guild_id) do method actor_discord_id (line 298) | defp actor_discord_id(_), do: nil method schedule_idle_timeout (line 300) | defp schedule_idle_timeout(state) do method cancel_idle_timeout (line 312) | defp cancel_idle_timeout(%{idle_timeout_ref: nil} = state), do: state method cancel_idle_timeout (line 314) | defp cancel_idle_timeout(%{idle_timeout_ref: {ref, _token}} = state) do method reset_idle_timeout (line 319) | defp reset_idle_timeout(state) do method schedule_voice_check (line 323) | defp schedule_voice_check do class State (line 18) | defmodule State FILE: lib/soundboard/audio_player/notifier.ex class Soundboard.AudioPlayer.Notifier (line 1) | defmodule Soundboard.AudioPlayer.Notifier method sound_played (line 6) | def sound_played(sound_name, actor_name) do method error (line 10) | def error(message) do FILE: lib/soundboard/audio_player/playback_engine.ex class Soundboard.AudioPlayer.PlaybackEngine (line 1) | defmodule Soundboard.AudioPlayer.PlaybackEngine method play (line 20) | def play(guild_id, channel_id, sound_name, path_or_url, volume, actor) do method maybe_settle_before_play (line 26) | defp maybe_settle_before_play({:joined, :ok}) do method maybe_settle_before_play (line 30) | defp maybe_settle_before_play(_), do: :ok method submit_play_request (line 32) | defp submit_play_request(guild_id, sound_name, path_or_url, volume, ac... method play_with_retries (line 72) | defp play_with_retries(%{sound_name: sound_name}, attempt, _refresh_at... method voice_play (line 78) | defp voice_play(play_request) do method classify_play_attempt (line 87) | defp classify_play_attempt(:ok), do: :ok method classify_play_attempt (line 89) | defp classify_play_attempt({:error, "Audio already playing in voice ch... method classify_play_attempt (line 99) | defp classify_play_attempt({:error, "Must be connected to voice channe... method classify_play_attempt (line 109) | defp classify_play_attempt({:error, "Voice session is still negotiatin... method classify_play_attempt (line 120) | defp classify_play_attempt({:error, reason}), do: {:error, reason} method classify_play_attempt (line 121) | defp classify_play_attempt(other), do: {:error, inspect(other)} method retry_play_attempt (line 123) | defp retry_play_attempt(play_request, attempt, refresh_attempted, retr... method maybe_trigger_rejoin (line 142) | defp maybe_trigger_rejoin(guild_id, attempt, refresh_attempted, force_... method maybe_rejoin_current_channel (line 151) | defp maybe_rejoin_current_channel(guild_id, force_refresh) do method maybe_rejoin_for_channel (line 167) | defp maybe_rejoin_for_channel(guild_id, channel_id, true) do method maybe_rejoin_for_channel (line 183) | defp maybe_rejoin_for_channel(guild_id, channel_id, false) do method refresh_voice_session (line 194) | defp refresh_voice_session(guild_id, channel_id) do method rejoin_voice_channel (line 202) | defp rejoin_voice_channel(guild_id, channel_id) do method reconnect_voice_session (line 206) | defp reconnect_voice_session(guild_id, channel_id, log_message) do method ensure_joined_channel (line 212) | defp ensure_joined_channel(guild_id, channel_id) do method maybe_probe_first_rtp (line 223) | defp maybe_probe_first_rtp(guild_id, sound_name, attempt_number) do method wait_for_first_rtp (line 250) | defp wait_for_first_rtp( method wait_for_voice_ready (line 301) | defp wait_for_voice_ready(guild_id, timeout_ms \\ @voice_ready_timeout... method do_wait_for_voice_ready (line 306) | defp do_wait_for_voice_ready(guild_id, started_at, timeout_ms) do method current_rtp_sequence (line 325) | defp current_rtp_sequence(guild_id) do method safe_voice_status (line 335) | defp safe_voice_status(guild_id) do method safe_voice_ready (line 342) | defp safe_voice_ready(guild_id) do method safe_voice_channel (line 348) | defp safe_voice_channel(guild_id) do method safe_voice_playing (line 354) | defp safe_voice_playing(guild_id) do method track_play_if_needed (line 360) | defp track_play_if_needed(sound_name, actor) do method broadcast_success (line 381) | defp broadcast_success(sound_name, actor) do method broadcast_error (line 385) | defp broadcast_error(message) do method unwrap_sequence (line 389) | defp unwrap_sequence({:ok, sequence}), do: sequence method unwrap_sequence (line 390) | defp unwrap_sequence({:error, _reason}), do: nil method ffmpeg_executable (line 392) | defp ffmpeg_executable do method clamp_volume (line 407) | defp clamp_volume(_), do: 1.0 method actor_display_name (line 414) | defp actor_display_name(_), do: nil method actor_user_id (line 418) | defp actor_user_id(_), do: nil method system_user? (line 420) | defp system_user?(actor), do: actor_display_name(actor) in @system_users FILE: lib/soundboard/audio_player/playback_queue.ex class Soundboard.AudioPlayer.PlaybackQueue (line 1) | defmodule Soundboard.AudioPlayer.PlaybackQueue method build_request (line 20) | def build_request({guild_id, channel_id}, sound_name, actor) do method enqueue (line 39) | def enqueue(%State{} = state, request, interrupt_watchdog_ms) do method clear_all (line 55) | def clear_all(%State{} = state) do method handle_task_result (line 66) | def handle_task_result( method handle_task_down (line 87) | def handle_task_down(%State{} = state, reason) do method handle_interrupt_watchdog (line 100) | def handle_interrupt_watchdog( method handle_interrupt_watchdog (line 133) | def handle_interrupt_watchdog(%State{} = state, _guild_id, _attempt, _... method handle_playback_finished (line 137) | def handle_playback_finished(%State{} = state, guild_id) do method start_playback (line 154) | defp start_playback(state, request) do method maybe_interrupt_current (line 173) | defp maybe_interrupt_current(%State{current_playback: %{guild_id: guil... method maybe_interrupt_current (line 190) | defp maybe_interrupt_current(%State{} = state, _delay_ms), do: state method maybe_start_pending (line 192) | defp maybe_start_pending(%State{pending_request: nil} = state), do: state method maybe_start_pending (line 194) | defp maybe_start_pending(%State{} = state) do method clear_current_playback (line 209) | defp clear_current_playback(%State{} = state) do method reset_interrupt_state (line 221) | defp reset_interrupt_state(%State{} = state) do method schedule_interrupt_watchdog (line 227) | defp schedule_interrupt_watchdog(%State{} = state, guild_id, attempt, ... method cancel_interrupt_watchdog (line 235) | defp cancel_interrupt_watchdog(%State{interrupt_watchdog_ref: nil} = s... method cancel_interrupt_watchdog (line 237) | defp cancel_interrupt_watchdog(%State{} = state) do method cancel_playback_task (line 242) | defp cancel_playback_task(nil), do: :ok method cancel_playback_task (line 254) | defp cancel_playback_task(_), do: :ok method safe_voice_playing (line 256) | defp safe_voice_playing(guild_id) do FILE: lib/soundboard/audio_player/sound_library.ex class Soundboard.AudioPlayer.SoundLibrary (line 1) | defmodule Soundboard.AudioPlayer.SoundLibrary method ensure_cache (line 8) | def ensure_cache do method get_sound_path (line 19) | def get_sound_path(sound_name) do method prepare_play_input (line 28) | def prepare_play_input(sound_name, path_or_url) do method invalidate_cache (line 56) | def invalidate_cache(_), do: :ok method lookup_cached_sound (line 58) | defp lookup_cached_sound(sound_name) do method resolve_and_cache_sound (line 68) | defp resolve_and_cache_sound(sound_name) do method resolve_upload_path (line 97) | defp resolve_upload_path(filename) do method cache_sound (line 101) | defp cache_sound(sound_name, meta) do FILE: lib/soundboard/audio_player/voice_session.ex class Soundboard.AudioPlayer.VoiceSession (line 1) | defmodule Soundboard.AudioPlayer.VoiceSession method normalize_channel (line 10) | def normalize_channel(guild_id, channel_id) do method maintain_connection (line 26) | def maintain_connection(%State{} = state), do: state method maintenance_status (line 28) | defp maintenance_status(guild_id, channel_id) do method voice_ready (line 38) | defp voice_ready(guild_id) do method voice_playing (line 49) | defp voice_playing(guild_id) do method perform_maintenance (line 63) | defp perform_maintenance(%{playing?: true}, state), do: state method perform_maintenance (line 64) | defp perform_maintenance(%{joined?: true, ready?: true}, state), do: s... method perform_maintenance (line 66) | defp perform_maintenance(%{joined?: true} = status, state) do method perform_maintenance (line 81) | defp perform_maintenance(status, state) do method attempt_voice_join (line 89) | defp attempt_voice_join(state, guild_id, channel_id, action) do method safe_voice_ready (line 100) | defp safe_voice_ready(guild_id) do method safe_voice_playing (line 106) | defp safe_voice_playing(guild_id) do method safe_join_voice_channel (line 112) | defp safe_join_voice_channel(guild_id, channel_id) do FILE: lib/soundboard/discord/bot_identity.ex class Soundboard.Discord.BotIdentity (line 1) | defmodule Soundboard.Discord.BotIdentity method fetch (line 7) | def fetch do method fetch_from_api (line 14) | defp fetch_from_api do method normalize_user (line 25) | defp normalize_user(%{id: id}), do: %{id: id} method normalize_user (line 26) | defp normalize_user(%{"id" => id}), do: %{id: id} method normalize_user (line 27) | defp normalize_user(_), do: %{} FILE: lib/soundboard/discord/consumer.ex class Soundboard.Discord.Consumer (line 1) | defmodule Soundboard.Discord.Consumer method handle_event (line 8) | def handle_event({event_name, payload}) do FILE: lib/soundboard/discord/guild_cache.ex class Soundboard.Discord.GuildCache (line 1) | defmodule Soundboard.Discord.GuildCache method all (line 6) | def all do method get (line 11) | def get(guild_id) do method get! (line 18) | def get!(guild_id) do method normalize_guild (line 25) | defp normalize_guild(guild) do method normalize_channels (line 38) | defp normalize_channels(channels, guild_id) do method normalize_voice_state (line 50) | defp normalize_voice_state(voice_state, guild_id) do method to_id (line 71) | defp to_id(value), do: to_string(value) FILE: lib/soundboard/discord/handler.ex class Soundboard.Discord.Handler (line 1) | defmodule Soundboard.Discord.Handler method init (line 46) | def init do method start_link (line 50) | def start_link(_opts) do method dispatch_event (line 54) | def dispatch_event(event) do method init (line 67) | def init([]) do method handle_event (line 72) | def handle_event({:VOICE_STATE_UPDATE, %{channel_id: nil} = payload, _... method handle_event (line 85) | def handle_event({:VOICE_STATE_UPDATE, payload, _ws_state}) do method handle_event (line 113) | def handle_event({:READY, _payload, _ws_state}) do method handle_event (line 119) | def handle_event({:VOICE_READY, payload, _ws_state}) do method handle_event (line 129) | def handle_event({:VOICE_PLAYBACK_FINISHED, payload, _ws_state}) do method handle_event (line 134) | def handle_event({:VOICE_SERVER_UPDATE, _payload, _ws_state}), do: [] method handle_event (line 136) | def handle_event({:VOICE_CHANNEL_STATUS_UPDATE, _payload, _ws_state}),... method handle_event (line 138) | def handle_event({:MESSAGE_CREATE, msg, _ws_state}) do method handle_event (line 143) | def handle_event(_event), do: [] method handle_cast (line 146) | def handle_cast({:eda_event, event}, state) do method handle_info (line 155) | def handle_info({:event, {event_name, payload, ws_state}}, state) do method handle_info (line 163) | def handle_info({:recheck_alone, guild_id, channel_id}, state) do method handle_info (line 171) | def handle_info(_msg, state), do: {:noreply, state} method get_current_voice_channel (line 173) | def get_current_voice_channel do method apply_runtime_actions (line 181) | defp apply_runtime_actions(_actions), do: :ok method apply_runtime_action (line 183) | defp apply_runtime_action({:schedule_recheck_alone, guild_id, channel_... method apply_runtime_action (line 187) | defp apply_runtime_action(_action), do: :ok class State (line 10) | defmodule State method start_link (line 16) | def start_link(_) do method init (line 20) | def init(_) do method get_state (line 24) | def get_state(user_id) do method update_state (line 30) | def update_state(user_id, channel_id, session_id) do method handle_call (line 36) | def handle_call({:get_state, user_id}, _from, state) do method handle_cast (line 40) | def handle_cast({:update_state, user_id, channel_id, session_id}, stat... FILE: lib/soundboard/discord/handler/auto_join_policy.ex class Soundboard.Discord.Handler.AutoJoinPolicy (line 1) | defmodule Soundboard.Discord.Handler.AutoJoinPolicy method mode (line 7) | def mode do method parse_mode (line 14) | defp parse_mode(nil), do: :play method parse_mode (line 16) | defp parse_mode(value) do FILE: lib/soundboard/discord/handler/command_handler.ex class Soundboard.Discord.Handler.CommandHandler (line 1) | defmodule Soundboard.Discord.Handler.CommandHandler method handle_message (line 8) | def handle_message(%{content: "!join"} = msg) do method handle_message (line 25) | def handle_message(_msg), do: :ignore method joined_message (line 27) | defp joined_message do FILE: lib/soundboard/discord/handler/idle_timeout_policy.ex class Soundboard.Discord.Handler.IdleTimeoutPolicy (line 1) | defmodule Soundboard.Discord.Handler.IdleTimeoutPolicy method timeout_ms (line 9) | def timeout_ms do method raw_seconds (line 16) | defp raw_seconds do FILE: lib/soundboard/discord/handler/sound_effects.ex class Soundboard.Discord.Handler.SoundEffects (line 1) | defmodule Soundboard.Discord.Handler.SoundEffects method handle_join (line 9) | def handle_join(user_id, previous_state, guild_id, channel_id) do method handle_leave (line 28) | def handle_leave(user_id) do method play_join_sound (line 39) | defp play_join_sound(user_id, guild_id, channel_id) do method maybe_join_for_sound (line 56) | defp maybe_join_for_sound(guild_id, channel_id) do FILE: lib/soundboard/discord/handler/voice_commands.ex class Soundboard.Discord.Handler.VoiceCommands (line 1) | defmodule Soundboard.Discord.Handler.VoiceCommands method join_voice_channel (line 9) | def join_voice_channel(guild_id, channel_id) do method leave_voice_channel (line 22) | def leave_voice_channel(guild_id) do method connected_to_discord? (line 35) | def connected_to_discord? do method execute (line 60) | defp execute(true, _skip_message, command_fun, success_fun, error_fun) do method execute (line 67) | defp execute(false, skip_message, _command_fun, _success_fun, _error_f... method run (line 71) | defp run(action, command) do method safely_run (line 87) | defp safely_run(command) do method rate_limited? (line 96) | defp rate_limited?(error_msg) do FILE: lib/soundboard/discord/handler/voice_presence.ex class Soundboard.Discord.Handler.VoicePresence (line 1) | defmodule Soundboard.Discord.Handler.VoicePresence method current_voice_channel (line 9) | def current_voice_channel do method user_voice_channel (line 18) | def user_voice_channel(guild_id, user_id) do method bot_user? (line 25) | def bot_user?(user_id) do method bot_id (line 32) | def bot_id do method cached_guilds (line 41) | def cached_guilds do method find_user_voice_channel (line 47) | def find_user_voice_channel(discord_id) do method find_in_guild (line 58) | defp find_in_guild(guild, discord_id) do method users_in_channel (line 67) | def users_in_channel(guild_id, channel_id) do method count_users_in_channel (line 80) | defp count_users_in_channel(guild_id, channel_id) do method bot_id_value (line 98) | defp bot_id_value do method log_voice_state_snapshot (line 105) | defp log_voice_state_snapshot(channel_id, users_in_channel, bot_id, vo... method find_bot_voice_channel (line 115) | defp find_bot_voice_channel(bot_id) do method find_user_voice_channel (line 129) | defp find_user_voice_channel(guild, user_id) do method find_voice_channel_in_guilds (line 136) | defp find_voice_channel_in_guilds(guilds, bot_id) do method voice_channel_for_guild (line 140) | defp voice_channel_for_guild(guild, bot_id) do method fallback_voice_channel (line 152) | defp fallback_voice_channel do method valid_discord_id? (line 166) | defp valid_discord_id?(value), do: is_integer(value) or (is_binary(val... FILE: lib/soundboard/discord/handler/voice_runtime.ex class Soundboard.Discord.Handler.VoiceRuntime (line 1) | defmodule Soundboard.Discord.Handler.VoiceRuntime method bootstrap (line 12) | def bootstrap do method join_voice_channel (line 18) | def join_voice_channel(guild_id, channel_id), method leave_voice_channel (line 21) | def leave_voice_channel(guild_id), do: VoiceCommands.leave_voice_chann... method handle_connect (line 24) | def handle_connect(payload) do method handle_disconnect (line 33) | def handle_disconnect(payload) do method recheck_alone (line 42) | def recheck_alone(guild_id, channel_id) do method get_current_voice_channel (line 51) | def get_current_voice_channel do method user_voice_channel (line 58) | def user_voice_channel(guild_id, user_id) do method bot_user? (line 65) | def bot_user?(user_id), do: VoicePresence.bot_user?(user_id) method start_guild_check_task (line 67) | defp start_guild_check_task do method check_guilds (line 75) | defp check_guilds do method process_guilds (line 88) | defp process_guilds(guilds) do method check_and_join_voice (line 93) | defp check_and_join_voice(guild) do method handle_recheck_alone (line 108) | defp handle_recheck_alone(guild_id, channel_id) do method maybe_act_if_bot_alone (line 119) | defp maybe_act_if_bot_alone(guild_id, _channel_id, 0) do method maybe_act_if_bot_alone (line 124) | defp maybe_act_if_bot_alone(_guild_id, _channel_id, _users), do: :ok method handle_bot_alone_check (line 126) | defp handle_bot_alone_check(_guild_id) do method check_and_maybe_act (line 133) | defp check_and_maybe_act(guild_id, channel_id) do method bot_alone_action (line 153) | defp bot_alone_action(guild_id) do method handle_auto_join_leave (line 160) | defp handle_auto_join_leave(payload) do method handle_user_rejoin_cancel (line 169) | defp handle_user_rejoin_cancel(payload) do method process_user_voice_update (line 186) | defp process_user_voice_update(payload) do method handle_bot_not_in_voice (line 200) | defp handle_bot_not_in_voice(payload) do method handle_bot_in_different_channel (line 216) | defp handle_bot_in_different_channel(guild_id, current_channel_id) do method maybe_join_channel_for_payload (line 234) | defp maybe_join_channel_for_payload(payload, users_in_channel) do method handle_current_channel_users (line 243) | defp handle_current_channel_users(guild_id, current_channel_id, 0) do method handle_current_channel_users (line 249) | defp handle_current_channel_users(guild_id, current_channel_id, _users... method schedule_recheck (line 253) | defp schedule_recheck(guild_id, channel_id), method current_voice_channel_status (line 256) | defp current_voice_channel_status do method current_bot_id (line 270) | defp current_bot_id do FILE: lib/soundboard/discord/message.ex class Soundboard.Discord.Message (line 1) | defmodule Soundboard.Discord.Message method create (line 6) | def create(channel_id, payload) do method to_id (line 11) | defp to_id(value), do: to_string(value) FILE: lib/soundboard/discord/role_checker.ex class Soundboard.Discord.RoleChecker (line 1) | defmodule Soundboard.Discord.RoleChecker method feature_enabled? (line 12) | def feature_enabled? do method authorized? (line 31) | def authorized?(user_id) do method check_member_roles (line 39) | defp check_member_roles(user_id) do method member_authorized? (line 58) | defp member_authorized?({:ok, _member}, user_id) do method member_authorized? (line 63) | defp member_authorized?({:error, reason}, user_id) do FILE: lib/soundboard/discord/runtime_capability.ex class Soundboard.Discord.RuntimeCapability (line 1) | defmodule Soundboard.Discord.RuntimeCapability method discord_handler_enabled? (line 8) | def discord_handler_enabled? do method voice_runtime_available? (line 12) | def voice_runtime_available? do method voice_runtime_status (line 16) | def voice_runtime_status do method log_degraded_mode (line 32) | def log_degraded_mode do FILE: lib/soundboard/discord/voice.ex class Soundboard.Discord.Voice (line 1) | defmodule Soundboard.Discord.Voice method join_channel (line 12) | def join_channel(guild_id, channel_id) do method leave_channel (line 16) | def leave_channel(guild_id) do method play (line 20) | def play(guild_id, input, type, opts \\ []) do method stop (line 32) | def stop(guild_id) do method ready? (line 36) | def ready?(guild_id) do method channel_id (line 40) | def channel_id(guild_id) do method playing? (line 44) | def playing?(guild_id) do method get_voice (line 49) | def get_voice(guild_id) do method play_with_supported_arity (line 58) | defp play_with_supported_arity(guild_id, input, type, opts) do method voice_module (line 74) | defp voice_module do method to_id (line 78) | defp to_id(nil), do: nil method to_id (line 80) | defp to_id(value), do: to_string(value) FILE: lib/soundboard/favorites.ex class Soundboard.Favorites (line 1) | defmodule Soundboard.Favorites method list_favorites (line 15) | def list_favorites(user_id) do method list_favorite_sounds_with_tags (line 23) | def list_favorite_sounds_with_tags(user_id) do method toggle_favorite (line 36) | def toggle_favorite(user_id, sound_id) do method error_message (line 44) | def error_message(%Ecto.Changeset{} = changeset) do method add_favorite (line 52) | defp add_favorite(user_id, sound_id) do method favorite? (line 78) | def favorite?(user_id, sound_id) do method max_favorites (line 83) | def max_favorites, do: @max_favorites FILE: lib/soundboard/favorites/favorite.ex class Soundboard.Favorites.Favorite (line 1) | defmodule Soundboard.Favorites.Favorite method changeset (line 18) | def changeset(favorite, attrs) do FILE: lib/soundboard/public_url.ex class Soundboard.PublicURL (line 1) | defmodule Soundboard.PublicURL method current (line 10) | def current, do: SoundboardWeb.Endpoint.url() method from_uri_or_current (line 12) | def from_uri_or_current(nil), do: current() method from_uri_or_current (line 14) | def from_uri_or_current(uri) do method port_suffix (line 24) | defp port_suffix("http", 80), do: "" method port_suffix (line 25) | defp port_suffix("https", 443), do: "" method port_suffix (line 26) | defp port_suffix(_scheme, nil), do: "" method port_suffix (line 27) | defp port_suffix(_scheme, port), do: ":#{port}" FILE: lib/soundboard/pubsub_topics.ex class Soundboard.PubSubTopics (line 1) | defmodule Soundboard.PubSubTopics method files_topic (line 10) | def files_topic, do: @files_topic method playback_topic (line 11) | def playback_topic, do: @playback_topic method stats_topic (line 12) | def stats_topic, do: @stats_topic method subscribe_files (line 14) | def subscribe_files, do: PubSub.subscribe(Soundboard.PubSub, @files_to... method subscribe_playback (line 15) | def subscribe_playback, do: PubSub.subscribe(Soundboard.PubSub, @playb... method subscribe_stats (line 16) | def subscribe_stats, do: PubSub.subscribe(Soundboard.PubSub, @stats_to... method broadcast_files_updated (line 18) | def broadcast_files_updated do method broadcast_stats_updated (line 22) | def broadcast_stats_updated do method broadcast_sound_played (line 26) | def broadcast_sound_played(sound_name, username) do method broadcast_error (line 34) | def broadcast_error(message) do FILE: lib/soundboard/release.ex class Soundboard.Release (line 1) | defmodule Soundboard.Release method migrate (line 6) | def migrate do method rollback (line 17) | def rollback(repo, version) do method repos (line 26) | defp repos do method load_app (line 30) | defp load_app do FILE: lib/soundboard/repo.ex class Soundboard.Repo (line 1) | defmodule Soundboard.Repo FILE: lib/soundboard/sound.ex class Soundboard.Sound (line 1) | defmodule Soundboard.Sound method changeset (line 33) | def changeset(sound, attrs) do method with_tags (line 50) | def with_tags(query \\ __MODULE__) do method by_tag (line 55) | def by_tag(query \\ __MODULE__, tag_name) do method validate_source_type (line 61) | defp validate_source_type(changeset) do method put_tags (line 73) | defp put_tags(changeset, _), do: changeset method validate_volume (line 75) | defp validate_volume(changeset) do FILE: lib/soundboard/sound_tag.ex class Soundboard.SoundTag (line 1) | defmodule Soundboard.SoundTag method changeset (line 15) | def changeset(sound_tag, attrs) do FILE: lib/soundboard/sounds.ex class Soundboard.Sounds (line 1) | defmodule Soundboard.Sounds method list_files (line 20) | def list_files do method list_detailed (line 28) | def list_detailed do method ids_by_filename (line 43) | def ids_by_filename([]), do: %{} method filename_taken_excluding? (line 58) | def filename_taken_excluding?(filename, sound_id) do method fetch_filename_extension (line 72) | def fetch_filename_extension(sound_id) do method get_recent_uploads (line 80) | def get_recent_uploads(opts \\ []) do method get_user_join_sound (line 94) | def get_user_join_sound(user_id) do method get_user_leave_sound (line 105) | def get_user_leave_sound(user_id) do method get_user_join_sound_by_discord_id (line 116) | def get_user_join_sound_by_discord_id(discord_id) do method get_user_leave_sound_by_discord_id (line 130) | def get_user_leave_sound_by_discord_id(discord_id) do method get_user_sound_preferences_by_discord_id (line 144) | def get_user_sound_preferences_by_discord_id(discord_id) do method get_sound! (line 159) | def get_sound!(id) do method update_sound (line 166) | def update_sound(sound, attrs) do method update_sound (line 173) | def update_sound(sound, user_id, params), do: Management.update_sound(... method delete_sound (line 176) | def delete_sound(sound, user_id), do: Management.delete_sound(sound, u... method new_create_request (line 179) | def new_create_request(user, attrs), do: CreateRequest.new(user, attrs) method put_request_upload (line 182) | def put_request_upload(request, upload), do: CreateRequest.put_upload(... method validate_create (line 185) | def validate_create(request), do: Uploads.validate(request) method create_sound (line 188) | def create_sound(request), do: Uploads.create(request) method create_error_message (line 191) | def create_error_message(error), do: Uploads.error_message(error) FILE: lib/soundboard/sounds/management.ex class Soundboard.Sounds.Management (line 1) | defmodule Soundboard.Sounds.Management method update_sound (line 14) | def update_sound(%Sound{} = sound, user_id, params) do method delete_sound (line 53) | def delete_sound(%Sound{} = sound, user_id) do method maybe_remove_local_file (line 67) | defp maybe_remove_local_file(%{source_type: "local", filename: filenam... method maybe_remove_local_file (line 72) | defp maybe_remove_local_file(_), do: :ok method maybe_rename_local_file (line 74) | defp maybe_rename_local_file(%{source_type: "local"} = sound, old_path... method maybe_rename_local_file (line 98) | defp maybe_rename_local_file(_, _, _), do: :ok method update_user_settings (line 100) | defp update_user_settings(sound, user_id, updated_sound, params) do FILE: lib/soundboard/sounds/tags.ex class Soundboard.Sounds.Tags (line 1) | defmodule Soundboard.Sounds.Tags method search (line 10) | def search(query) do method all_for_sounds (line 15) | def all_for_sounds(sounds) do method count_sounds_with_tag (line 22) | def count_sounds_with_tag(sounds, tag) do method tag_selected? (line 28) | def tag_selected?(tag, selected_tags) do method update_sound_tags (line 32) | def update_sound_tags(sound, tags) do method resolve_many (line 55) | def resolve_many(_), do: {:ok, []} method resolve (line 57) | def resolve(%Tag{} = tag), do: {:ok, tag} method resolve (line 72) | def resolve(_), do: {:ok, nil} method list_for_sound (line 83) | def list_for_sound(filename) do method insert_or_get (line 90) | defp insert_or_get(name) do method fetch_after_insert_conflict (line 97) | defp fetch_after_insert_conflict(name) do FILE: lib/soundboard/sounds/uploads.ex class Soundboard.Sounds.Uploads (line 1) | defmodule Soundboard.Sounds.Uploads method validate (line 15) | def validate(%CreateRequest{} = request) do method create (line 23) | def create(%CreateRequest{} = request) do method error_message (line 34) | def error_message(%Ecto.Changeset{} = changeset) do method error_message (line 43) | def error_message(_), do: "An unexpected error occurred" method normalize_create_error (line 45) | defp normalize_create_error(%Ecto.Changeset{} = changeset), do: changeset method normalize_create_error (line 47) | defp normalize_create_error(_reason), do: add_base_error("An unexpecte... method add_base_error (line 49) | defp add_base_error(message) do FILE: lib/soundboard/sounds/uploads/create_request.ex class Soundboard.Sounds.Uploads.CreateRequest (line 1) | defmodule Soundboard.Sounds.Uploads.CreateRequest method put_upload (line 59) | def put_upload(%__MODULE__{} = request, upload) do method normalize_upload (line 63) | defp normalize_upload(nil), do: nil method normalize_upload (line 72) | defp normalize_upload(_), do: nil method get_param (line 74) | defp get_param(map, key, default \\ nil) do FILE: lib/soundboard/sounds/uploads/creator.ex class Soundboard.Sounds.Uploads.Creator (line 1) | defmodule Soundboard.Sounds.Uploads.Creator method create (line 9) | def create(params, source) do method insert_sound (line 31) | defp insert_sound(params, source, tags) do method insert_user_setting (line 46) | defp insert_user_setting(sound, params) do method broadcast_updates (line 66) | defp broadcast_updates do FILE: lib/soundboard/sounds/uploads/normalizer.ex class Soundboard.Sounds.Uploads.Normalizer (line 1) | defmodule Soundboard.Sounds.Uploads.Normalizer method normalize (line 10) | def normalize(%CreateRequest{} = request) do method build_normalized_params (line 34) | defp build_normalized_params(%{ method build_normalized_params (line 65) | defp build_normalized_params(_params) do method normalize_default_volume (line 69) | defp normalize_default_volume(value), do: Volume.normalize_percent(val... method normalize_tags (line 71) | defp normalize_tags(nil), do: [] method normalize_tags (line 81) | defp normalize_tags(_), do: [] method normalize_source_type (line 91) | defp normalize_source_type(_source_type, upload, url), do: infer_sourc... method infer_source_type (line 93) | defp infer_source_type(upload, url) do method normalize_name (line 102) | defp normalize_name(_), do: nil method normalize_url (line 105) | defp normalize_url(_), do: nil method to_boolean (line 108) | defp to_boolean(_), do: false method blank? (line 110) | defp blank?(value), do: value in [nil, ""] FILE: lib/soundboard/sounds/uploads/source.ex class Soundboard.Sounds.Uploads.Source (line 1) | defmodule Soundboard.Sounds.Uploads.Source method prepare (line 14) | def prepare(%{source_type: "url"} = params, _mode) do method prepare (line 28) | def prepare(%{source_type: "local"} = params, :validate) do method prepare (line 43) | def prepare(%{source_type: "local"} = params, :create) do method prepare (line 59) | def prepare(_params, _mode) do method cleanup_local_file (line 75) | def cleanup_local_file(_path), do: :ok method validate_url (line 85) | defp validate_url(_url), do: {:error, add_error(change(%Sound{}), :url... method validate_local_upload (line 87) | defp validate_local_upload(nil, _mode), method validate_local_upload (line 90) | defp validate_local_upload(%{filename: filename} = upload, :validate) do method validate_local_upload (line 106) | defp validate_local_upload(_, _mode), method validate_local_extension (line 109) | defp validate_local_extension(filename) do method copy_local_file (line 124) | defp copy_local_file(src_path, filename) do method ensure_uploads_dir (line 137) | defp ensure_uploads_dir(uploads_dir) do method validate_destination_filename (line 144) | defp validate_destination_filename(filename) do method filename_taken? (line 154) | defp filename_taken?(filename) do method url_file_extension (line 172) | defp url_file_extension(_), do: "" method blank? (line 174) | defp blank?(value), do: value in [nil, ""] FILE: lib/soundboard/stats.ex class Soundboard.Stats (line 1) | defmodule Soundboard.Stats method track_play (line 15) | def track_play(sound_name, user_id) do method get_week_range (line 27) | defp get_week_range do method get_top_users (line 40) | def get_top_users(start_date, end_date, opts \\ []) do method get_top_sounds (line 55) | def get_top_sounds(start_date, end_date, opts \\ []) do method get_recent_plays (line 69) | def get_recent_plays(opts \\ []) do method reset_weekly_stats (line 83) | def reset_weekly_stats do method broadcast_stats_update (line 93) | def broadcast_stats_update do method insert_play (line 97) | defp insert_play(attrs) do FILE: lib/soundboard/stats/play.ex class Soundboard.Stats.Play (line 1) | defmodule Soundboard.Stats.Play method changeset (line 20) | def changeset(play, attrs) do FILE: lib/soundboard/tag.ex class Soundboard.Tag (line 1) | defmodule Soundboard.Tag method changeset (line 19) | def changeset(tag, attrs) do method search (line 26) | def search(query \\ __MODULE__, search_term) do FILE: lib/soundboard/uploads_path.ex class Soundboard.UploadsPath (line 1) | defmodule Soundboard.UploadsPath method dir (line 10) | def dir do method safe_joined_path (line 28) | def safe_joined_path(path) do method within_uploads_dir? (line 47) | defp within_uploads_dir?(candidate, base_dir) do FILE: lib/soundboard/user_sound_setting.ex class Soundboard.UserSoundSetting (line 1) | defmodule Soundboard.UserSoundSetting method changeset (line 20) | def changeset(settings, attrs) do method clear_conflicting_settings (line 26) | def clear_conflicting_settings(user_id, sound_id, is_join_sound, is_le... method maybe_clear_join_sound (line 32) | defp maybe_clear_join_sound(user_id, sound_id, true) do method maybe_clear_join_sound (line 44) | defp maybe_clear_join_sound(_user_id, _sound_id, _is_join_sound), do: :ok method maybe_clear_leave_sound (line 46) | defp maybe_clear_leave_sound(user_id, sound_id, true) do method maybe_clear_leave_sound (line 58) | defp maybe_clear_leave_sound(_user_id, _sound_id, _is_leave_sound), do... FILE: lib/soundboard/volume.ex class Soundboard.Volume (line 1) | defmodule Soundboard.Volume method clamp_percent (line 9) | def clamp_percent(value) do method normalize_percent (line 17) | def normalize_percent(value, default_percent) do method percent_to_decimal (line 24) | def percent_to_decimal(percent), do: percent_to_decimal(percent, 100) method percent_to_decimal (line 27) | def percent_to_decimal(value, default_percent) do method decimal_to_percent (line 34) | def decimal_to_percent(nil), do: 100 method do_decimal_to_percent (line 49) | defp do_decimal_to_percent(value) do method do_normalize (line 57) | defp do_normalize(default, nil), do: default method do_normalize (line 71) | defp do_normalize(default, _), do: default FILE: lib/soundboard_web.ex class SoundboardWeb (line 1) | defmodule SoundboardWeb method static_paths (line 20) | def static_paths, do: ~w(assets fonts images favicon.ico robots.txt) method router (line 22) | def router do method channel (line 33) | def channel do method controller (line 39) | def controller do method live_view (line 53) | def live_view do method live_component (line 62) | def live_component do method html (line 70) | def html do method html_helpers (line 83) | defp html_helpers do method verified_routes (line 102) | def verified_routes do FILE: lib/soundboard_web/components/core_components.ex class SoundboardWeb.CoreComponents (line 1) | defmodule SoundboardWeb.CoreComponents method modal (line 45) | def modal(assigns) do method flash (line 109) | def flash(assigns) do method flash_group (line 148) | def flash_group(assigns) do method simple_form (line 203) | def simple_form(assigns) do method button (line 230) | def button(assigns) do method input (line 295) | def input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do method input (line 306) | def input(%{type: "checkbox"} = assigns) do method input (line 332) | def input(%{type: "select"} = assigns) do method input (line 351) | def input(%{type: "textarea"} = assigns) do method input (line 371) | def input(assigns) do method label (line 398) | def label(assigns) do method error (line 411) | def error(assigns) do method header (line 429) | def header(assigns) do method table (line 470) | def table(assigns) do method list (line 537) | def list(assigns) do method back (line 560) | def back(assigns) do method icon (line 595) | def icon(%{name: "hero-" <> _} = assigns) do method show (line 603) | def show(js \\ %JS{}, selector) do method hide (line 614) | def hide(js \\ %JS{}, selector) do method hide_modal (line 638) | def hide_modal(js \\ %JS{}, id) do method translate_error (line 653) | def translate_error({msg, opts}) do FILE: lib/soundboard_web/components/flash_component.ex class SoundboardWeb.Components.FlashComponent (line 1) | defmodule SoundboardWeb.Components.FlashComponent method flash (line 7) | def flash(assigns) do FILE: lib/soundboard_web/components/layouts.ex class SoundboardWeb.Layouts (line 1) | defmodule SoundboardWeb.Layouts FILE: lib/soundboard_web/components/layouts/navbar.ex class SoundboardWeb.Components.Layouts.Navbar (line 1) | defmodule SoundboardWeb.Components.Layouts.Navbar method mount (line 9) | def mount(socket) do method handle_event (line 14) | def handle_event("toggle-mobile-menu", _, socket) do method render (line 19) | def render(assigns) do method nav_link (line 175) | defp nav_link(assigns) do method mobile_nav_link (line 193) | defp mobile_nav_link(assigns) do method visible_users (line 211) | defp visible_users(presences) do method current_page? (line 219) | defp current_page?(current_path, path), do: current_path == path FILE: lib/soundboard_web/components/soundboard/delete_modal.ex class SoundboardWeb.Components.Soundboard.DeleteModal (line 1) | defmodule SoundboardWeb.Components.Soundboard.DeleteModal method delete_modal (line 7) | def delete_modal(assigns) do FILE: lib/soundboard_web/components/soundboard/edit_modal.ex class SoundboardWeb.Components.Soundboard.EditModal (line 1) | defmodule SoundboardWeb.Components.Soundboard.EditModal method edit_modal (line 16) | def edit_modal(assigns) do FILE: lib/soundboard_web/components/soundboard/helpers.ex class SoundboardWeb.Components.Soundboard.Helpers (line 1) | defmodule SoundboardWeb.Components.Soundboard.Helpers FILE: lib/soundboard_web/components/soundboard/tag_components.ex class SoundboardWeb.Components.Soundboard.TagComponents (line 1) | defmodule SoundboardWeb.Components.Soundboard.TagComponents method tag_badge_list (line 13) | def tag_badge_list(assigns) do method tag_suggestions_dropdown (line 51) | def tag_suggestions_dropdown(assigns) do method tag_filter_button (line 80) | def tag_filter_button(assigns) do method tag_input_field (line 112) | def tag_input_field(assigns) do method tag_value (line 144) | defp tag_value(tag, _tag_key), do: tag FILE: lib/soundboard_web/components/soundboard/upload_modal.ex class SoundboardWeb.Components.Soundboard.UploadModal (line 1) | defmodule SoundboardWeb.Components.Soundboard.UploadModal method upload_modal (line 8) | def upload_modal(assigns) do method source_input_ready? (line 258) | defp source_input_ready?("local", entries, _url), do: entries != [] method source_input_ready? (line 259) | defp source_input_ready?("url", _entries, url), do: String.trim(url ||... method source_input_ready? (line 260) | defp source_input_ready?(_, _entries, _url), do: false method form_ready? (line 262) | defp form_ready?(source_type, entries, url, upload_error) do method local_upload_pending? (line 266) | defp local_upload_pending?(source_type, entries), do: source_type == "... method url_upload_pending? (line 268) | defp url_upload_pending?(source_type, url), FILE: lib/soundboard_web/components/soundboard/volume_control.ex class SoundboardWeb.Components.Soundboard.VolumeControl (line 1) | defmodule SoundboardWeb.Components.Soundboard.VolumeControl method volume_control (line 18) | def volume_control(assigns) do FILE: lib/soundboard_web/controllers/api/sound_controller.ex class SoundboardWeb.API.SoundController (line 1) | defmodule SoundboardWeb.API.SoundController method index (line 6) | def index(conn, _params) do method create (line 16) | def create(conn, params) do method play (line 35) | def play(conn, %{"id" => id}) do method stop (line 66) | def stop(conn, _params) do method create_sound (line 79) | defp create_sound(user, params) do method require_upload_user (line 85) | defp require_upload_user(conn) do method require_play_user (line 92) | defp require_play_user(conn), do: require_upload_user(conn) method format_sound (line 94) | defp format_sound(sound, current_user) do method find_user_setting (line 112) | defp find_user_setting(_sound, nil), do: nil method find_user_setting (line 114) | defp find_user_setting(sound, user) do method changeset_errors (line 127) | defp changeset_errors(changeset) do FILE: lib/soundboard_web/controllers/auth_controller.ex class SoundboardWeb.AuthController (line 1) | defmodule SoundboardWeb.AuthController method request (line 10) | def request(conn, %{"provider" => "discord"} = _params) do method request (line 16) | def request(conn, _params) do method callback (line 22) | def callback(%{assigns: %{ueberauth_auth: auth}} = conn, _params) do method callback (line 49) | def callback(%{assigns: %{ueberauth_failure: _fails}} = conn, _params) do method find_or_create_user (line 55) | defp find_or_create_user(%{discord_id: discord_id} = params) do method logout (line 67) | def logout(conn, _params) do method debug_session (line 73) | def debug_session(conn, _params) do FILE: lib/soundboard_web/controllers/error_html.ex class SoundboardWeb.ErrorHTML (line 1) | defmodule SoundboardWeb.ErrorHTML method render (line 7) | def render(template, _assigns) do FILE: lib/soundboard_web/controllers/error_json.ex class SoundboardWeb.ErrorJSON (line 1) | defmodule SoundboardWeb.ErrorJSON method render (line 6) | def render(template, _assigns) do FILE: lib/soundboard_web/controllers/upload_controller.ex class SoundboardWeb.UploadController (line 1) | defmodule SoundboardWeb.UploadController method show (line 6) | def show(conn, %{"path" => path}) do FILE: lib/soundboard_web/endpoint.ex class SoundboardWeb.Endpoint (line 1) | defmodule SoundboardWeb.Endpoint FILE: lib/soundboard_web/gettext.ex class SoundboardWeb.Gettext (line 1) | defmodule SoundboardWeb.Gettext FILE: lib/soundboard_web/live/favorites_live.ex class SoundboardWeb.FavoritesLive (line 1) | defmodule SoundboardWeb.FavoritesLive method mount (line 10) | def mount(_params, session, socket) do method handle_event (line 27) | def handle_event("play", %{"name" => filename}, socket) do method handle_event (line 32) | def handle_event("toggle_favorite", %{"sound-id" => sound_id}, socket) do method handle_info (line 52) | def handle_info({:sound_played, %{filename: _, played_by: _} = event},... method handle_info (line 71) | def handle_info({:error, message}, socket) do method handle_info (line 79) | def handle_info({:files_updated}, socket) do method handle_info (line 84) | def handle_info(:clear_flash, socket) do method handle_info (line 89) | def handle_info({:stats_updated}, socket) do method assign_favorites_state (line 93) | defp assign_favorites_state(socket, nil) do method assign_favorites_state (line 97) | defp assign_favorites_state(socket, user) do FILE: lib/soundboard_web/live/settings_live.ex class SoundboardWeb.SettingsLive (line 1) | defmodule SoundboardWeb.SettingsLive method mount (line 8) | def mount(_params, session, socket) do method handle_params (line 22) | def handle_params(_params, uri, socket) do method handle_event (line 27) | def handle_event( method handle_event (line 45) | def handle_event("revoke_token", %{"id" => id}, %{assigns: %{current_u... method load_tokens (line 54) | defp load_tokens(%{assigns: %{current_user: nil}} = socket), do: socket method load_tokens (line 56) | defp load_tokens(%{assigns: %{current_user: user}} = socket) do method render (line 72) | def render(assigns) do method format_dt (line 290) | defp format_dt(nil), do: nil method format_dt (line 291) | defp format_dt(%NaiveDateTime{} = dt), do: Calendar.strftime(dt, "%Y-%... FILE: lib/soundboard_web/live/soundboard_live.ex class SoundboardWeb.SoundboardLive (line 1) | defmodule SoundboardWeb.SoundboardLive method mount (line 18) | def mount(_params, session, socket) do method assign_initial_state (line 44) | defp assign_initial_state(socket) do method handle_event (line 68) | def handle_event("validate", _params, socket), do: {:noreply, socket} method handle_event (line 71) | def handle_event("change_source_type", %{"source_type" => source_type}... method handle_event (line 76) | def handle_event("validate_sound", params, socket) do method handle_event (line 81) | def handle_event("toggle_tag_list", _params, socket) do method handle_event (line 86) | def handle_event("play", %{"name" => filename}, socket) do method handle_event (line 91) | def handle_event("search", %{"query" => query}, socket) do method handle_event (line 96) | def handle_event("toggle_tag_filter", %{"tag" => tag_name}, socket) do method handle_event (line 113) | def handle_event("clear_tag_filters", _, socket) do method handle_event (line 118) | def handle_event("edit", %{"id" => id}, socket) do method handle_event (line 123) | def handle_event("save_upload", params, socket) do method handle_event (line 128) | def handle_event("validate_upload", params, socket) do method handle_event (line 133) | def handle_event("show_upload_modal", _params, socket) do method handle_event (line 138) | def handle_event("hide_upload_modal", _params, socket) do method handle_event (line 143) | def handle_event("add_upload_tag", %{"key" => key, "value" => value}, ... method handle_event (line 148) | def handle_event("remove_upload_tag", %{"tag" => tag_name}, socket) do method handle_event (line 153) | def handle_event("select_upload_tag_suggestion", %{"tag" => tag_name},... method handle_event (line 158) | def handle_event("upload_tag_input", %{"key" => _key, "value" => value... method handle_event (line 163) | def handle_event("add_tag", %{"key" => key, "value" => value}, socket) do method handle_event (line 168) | def handle_event("remove_tag", %{"tag" => tag_name}, socket) do method handle_event (line 173) | def handle_event("select_tag_suggestion", %{"tag" => tag_name}, socket... method handle_event (line 178) | def handle_event("tag_input", %{"key" => _key, "value" => value}, sock... method handle_event (line 183) | def handle_event("select_tag", %{"tag" => tag_name}, socket) do method handle_event (line 188) | def handle_event("save_sound", params, socket) do method handle_event (line 193) | def handle_event("close_upload_modal", _params, socket) do method handle_event (line 198) | def handle_event("close_modal", _params, socket) do method handle_event (line 206) | def handle_event("close_modal_key", %{"key" => "Escape"}, socket) do method handle_event (line 218) | def handle_event("select_upload_tag", %{"tag" => tag_name}, socket) do method handle_event (line 223) | def handle_event("toggle_favorite", %{"sound-id" => sound_id}, socket) do method handle_event (line 243) | def handle_event("show_delete_confirm", _params, socket) do method handle_event (line 248) | def handle_event("hide_delete_confirm", _params, socket) do method handle_event (line 253) | def handle_event("delete_sound", _params, socket) do method handle_event (line 258) | def handle_event("toggle_join_sound", _params, socket) do method handle_event (line 263) | def handle_event("toggle_leave_sound", _params, socket) do method handle_event (line 268) | def handle_event("update_volume", %{"volume" => volume, "target" => "e... method handle_event (line 273) | def handle_event("update_volume", %{"volume" => volume, "target" => "u... method handle_event (line 278) | def handle_event("update_volume", _params, socket), do: {:noreply, soc... method handle_event (line 281) | def handle_event("play_random", _params, socket) do method handle_event (line 299) | def handle_event("stop_sound", _params, socket) do method handle_info (line 312) | def handle_info({:error, message}, socket) do method handle_info (line 317) | def handle_info({:sound_played, %{filename: _, played_by: _} = event},... method handle_info (line 322) | def handle_info(:clear_flash, socket) do method handle_info (line 327) | def handle_info({:files_updated}, socket) do method handle_info (line 332) | def handle_info(:load_sound_files, socket) do method assign_favorites (line 339) | defp assign_favorites(socket, nil), do: assign(socket, :favorites, []) method assign_favorites (line 341) | defp assign_favorites(socket, user) do method load_sound_files (line 346) | defp load_sound_files(socket) do method get_random_sound (line 350) | defp get_random_sound([]), do: nil method get_random_sound (line 352) | defp get_random_sound(sounds) do method handle_progress (line 356) | defp handle_progress(:audio, _entry, socket) do FILE: lib/soundboard_web/live/soundboard_live/edit_flow.ex class SoundboardWeb.Live.SoundboardLive.EditFlow (line 1) | defmodule SoundboardWeb.Live.SoundboardLive.EditFlow method assign_defaults (line 33) | def assign_defaults(socket), do: put_state(socket, default_state()) method validate_sound (line 35) | def validate_sound(socket, %{"_target" => ["filename"]} = params) do method validate_sound (line 54) | def validate_sound(socket, _params), do: {:noreply, socket} method open_modal (line 56) | def open_modal(socket, id) do method close_modal (line 66) | def close_modal(socket), do: put_state(socket, default_state()) method add_tag (line 68) | def add_tag(socket, key, value) do method remove_tag (line 74) | def remove_tag(socket, tag_name) do method select_tag_suggestion (line 87) | def select_tag_suggestion(socket, tag_name), do: select_tag(socket, ta... method update_tag_input (line 89) | def update_tag_input(socket, value), do: TagForm.update_input(socket, ... method select_tag (line 91) | def select_tag(socket, tag_name) do method save_sound (line 97) | def save_sound(socket, params) do method show_delete_confirm (line 120) | def show_delete_confirm(socket) do method hide_delete_confirm (line 124) | def hide_delete_confirm(socket) do method delete_sound (line 128) | def delete_sound(socket) do method update_volume (line 153) | def update_volume(socket, volume) do method error_message (line 170) | defp error_message(%Ecto.Changeset{} = changeset) do method error_message (line 176) | defp error_message(_), do: "Failed to update sound" method append_sound_tag (line 178) | defp append_sound_tag(socket, tag, current_tags) do method current_tags (line 192) | defp current_tags(_state), do: [] method default_state (line 194) | defp default_state, do: %State{} method state (line 196) | defp state(socket) do method put_state (line 215) | defp put_state(socket, %State{} = state) do class State (line 11) | defmodule State FILE: lib/soundboard_web/live/soundboard_live/upload_flow.ex class SoundboardWeb.Live.SoundboardLive.UploadFlow (line 1) | defmodule SoundboardWeb.Live.SoundboardLive.UploadFlow method assign_defaults (line 47) | def assign_defaults(socket), do: put_state(socket, default_state()) method change_source_type (line 49) | def change_source_type(socket, source_type) do method save (line 53) | def save(socket, params, consume_uploaded_entries_fn) do method validate (line 86) | def validate(socket, params) do method show_modal (line 101) | def show_modal(socket) do method hide_modal (line 108) | def hide_modal(socket), do: {:noreply, close_modal(socket)} method close_modal (line 110) | def close_modal(socket) do method add_tag (line 116) | def add_tag(socket, key, value) do method remove_tag (line 122) | def remove_tag(socket, tag_name) do method select_tag_suggestion (line 129) | def select_tag_suggestion(socket, tag_name), do: select_tag(socket, ta... method update_tag_input (line 131) | def update_tag_input(socket, value), do: TagForm.update_input(socket, ... method select_tag (line 133) | def select_tag(socket, tag_name) do method toggle_join_sound (line 139) | def toggle_join_sound(socket) do method toggle_leave_sound (line 143) | def toggle_leave_sound(socket) do method update_volume (line 147) | def update_volume(socket, volume) do method append_upload_tag (line 154) | defp append_upload_tag(socket, tag, current_tags) do method reset_state (line 158) | defp reset_state(socket), do: put_state(socket, default_state()) method normalize_params (line 160) | defp normalize_params(upload, params) do method assign_params (line 167) | defp assign_params(socket, upload, params, error) do method validate_existing_entries (line 179) | defp validate_existing_entries(socket, %State{audio_entries: []}), do:... method validate_existing_entries (line 181) | defp validate_existing_entries(socket, %State{} = upload) do method validate_audio (line 194) | defp validate_audio(entry) do method validate_request (line 201) | defp validate_request(upload, %{"source_type" => "url", "name" => name... method validate_request (line 212) | defp validate_request(upload, params) do method handle_save_results (line 224) | defp handle_save_results(socket, [{:ok, _sound}]) do method handle_save_results (line 232) | defp handle_save_results(socket, [{:error, changeset}]) do method handle_save_results (line 236) | defp handle_save_results(socket, []) do method handle_save_results (line 249) | defp handle_save_results(socket, _results) do method build_request (line 253) | defp build_request(%State{} = upload, params) do method default_upload_name (line 266) | defp default_upload_name(upload, params) do method inferred_upload_name (line 285) | defp inferred_upload_name(_), do: "" method inferred_url_name (line 299) | defp inferred_url_name(_), do: "" method default_state (line 301) | defp default_state, do: %State{} method state (line 303) | defp state(socket) do method put_state (line 329) | defp put_state(socket, %State{} = state) do method audio_entries (line 345) | defp audio_entries(socket) do method current_upload (line 355) | defp current_upload(socket) do method blank? (line 367) | defp blank?(value), do: value in [nil, ""] method present? (line 368) | defp present?(value), do: not blank?(value) class State (line 11) | defmodule State FILE: lib/soundboard_web/live/stats_live.ex class SoundboardWeb.StatsLive (line 1) | defmodule SoundboardWeb.StatsLive method mount (line 15) | def mount(_params, session, socket) do method handle_info (line 38) | def handle_info({:sound_played, %{filename: filename, played_by: usern... method handle_info (line 49) | def handle_info({:stats_updated}, socket) do method handle_info (line 54) | def handle_info({:error, message}, socket) do method handle_info (line 62) | def handle_info(:clear_flash, socket) do method assign_stats (line 66) | defp assign_stats(socket) do method get_favorites (line 88) | defp get_favorites(nil), do: [] method get_favorites (line 89) | defp get_favorites(user), do: Favorites.list_favorites(user.id) method format_timestamp (line 91) | defp format_timestamp(timestamp) do method get_week_range (line 97) | defp get_week_range(date \\ Date.utc_today()) do method format_date_range (line 104) | defp format_date_range({start_date, end_date}) do method date_input_value (line 108) | defp date_input_value({start_date, _end_date}) do method parse_week_input (line 112) | defp parse_week_input(nil), do: :error method parse_week_input (line 113) | defp parse_week_input(""), do: :error method parse_week_input (line 115) | defp parse_week_input(week_value) do method render (line 123) | def render(assigns) do method get_user_color_from_presence (line 341) | defp get_user_color_from_presence(username, presences) do method handle_favorite_toggle (line 353) | defp handle_favorite_toggle(socket, user, sound_name) do method update_favorite (line 360) | defp update_favorite(socket, user, sound_id) do method recent_plays (line 377) | defp recent_plays do method map_recent_play (line 382) | defp map_recent_play({id, filename, username, timestamp}) do method load_sound_ids_by_filename (line 391) | defp load_sound_ids_by_filename(top_sounds, recent_plays, recent_uploa... method load_avatars_by_username (line 408) | defp load_avatars_by_username(top_users, recent_plays, recent_uploads) do method recent_play_dom_id (line 425) | defp recent_play_dom_id(play) do method handle_event (line 431) | def handle_event("play_sound", %{"sound" => sound_name}, socket) do method handle_event (line 436) | def handle_event("toggle_favorite", %{"sound" => sound_name}, socket) do method handle_event (line 447) | def handle_event("previous_week", _, socket) do method handle_event (line 458) | def handle_event("next_week", _, socket) do method handle_event (line 469) | def handle_event("select_week", %{"week" => week_value}, socket) do method favorite? (line 488) | defp favorite?(favorites, sound_name, sound_ids_by_filename) do method get_user_avatar (line 495) | defp get_user_avatar(username, presences, avatars_by_username) do FILE: lib/soundboard_web/live/support/flash_helpers.ex class SoundboardWeb.Live.Support.FlashHelpers (line 1) | defmodule SoundboardWeb.Live.Support.FlashHelpers method flash_sound_played (line 6) | def flash_sound_played(socket, %{filename: filename, played_by: userna... method clear_flash_after_timeout (line 12) | def clear_flash_after_timeout(socket) do FILE: lib/soundboard_web/live/support/live_tags.ex class SoundboardWeb.Live.Support.LiveTags (line 1) | defmodule SoundboardWeb.Live.Support.LiveTags method search (line 16) | def search(query), do: Tags.search(query) method all_tags (line 17) | def all_tags(sounds), do: Tags.all_for_sounds(sounds) method count_sounds_with_tag (line 18) | def count_sounds_with_tag(sounds, tag), do: Tags.count_sounds_with_tag... method tag_selected? (line 19) | def tag_selected?(tag, selected_tags), do: Tags.tag_selected?(tag, sel... method update_sound_tags (line 20) | def update_sound_tags(sound, tags), do: Tags.update_sound_tags(sound, ... method find_or_create_tag (line 21) | def find_or_create_tag(name), do: Tags.find_or_create(name) method list_tags_for_sound (line 22) | def list_tags_for_sound(filename), do: Tags.list_for_sound(filename) method broadcast_update (line 24) | def broadcast_update do method validate_tag_name (line 28) | defp validate_tag_name(tag_name) do method validate_unique_tag (line 36) | defp validate_unique_tag(tag, current_tags) do FILE: lib/soundboard_web/live/support/presence_live.ex class SoundboardWeb.Live.Support.PresenceLive (line 1) | defmodule SoundboardWeb.Live.Support.PresenceLive FILE: lib/soundboard_web/live/support/sound_playback.ex class SoundboardWeb.Live.Support.SoundPlayback (line 1) | defmodule SoundboardWeb.Live.Support.SoundPlayback method play (line 8) | def play(socket, sound_name) do method current_username (line 19) | def current_username(socket) do FILE: lib/soundboard_web/live/support/tag_form.ex class SoundboardWeb.Live.Support.TagForm (line 1) | defmodule SoundboardWeb.Live.Support.TagForm method update_input (line 27) | def update_input(socket, value, %{input_key: input_key, suggestions_ke... method handle_result (line 36) | defp handle_result({:ok, updated_socket}, _socket, config) do method handle_result (line 40) | defp handle_result({:error, message}, socket, config) do method reset (line 47) | defp reset(socket, %{input_key: input_key, suggestions_key: suggestion... FILE: lib/soundboard_web/plugs/api_auth.ex class SoundboardWeb.Plugs.APIAuth (line 1) | defmodule SoundboardWeb.Plugs.APIAuth method init (line 8) | def init(opts), do: opts method call (line 10) | def call(conn, _opts) do method authenticate_with_token (line 20) | defp authenticate_with_token(conn, token) do method unauthorized (line 35) | defp unauthorized(conn, message \\ "Invalid API token") do method internal_error (line 42) | defp internal_error(conn) do method verify_db_token (line 49) | defp verify_db_token(token), do: ApiTokens.verify_token(token) FILE: lib/soundboard_web/plugs/basic_auth.ex class SoundboardWeb.Plugs.BasicAuth (line 1) | defmodule SoundboardWeb.Plugs.BasicAuth method init (line 13) | def init(opts), do: opts method call (line 15) | def call(conn, _opts) do method credential (line 32) | defp credential(key) do method authenticate (line 46) | defp authenticate(conn, username, password) do method split_credentials (line 57) | defp split_credentials(decoded) do method unauthorized (line 64) | defp unauthorized(conn) do FILE: lib/soundboard_web/plugs/role_check.ex class SoundboardWeb.Plugs.RoleCheck (line 1) | defmodule SoundboardWeb.Plugs.RoleCheck method init (line 9) | def init(opts), do: opts method call (line 11) | def call(conn, _opts) do method check_role (line 19) | defp check_role(conn) do method fresh? (line 42) | defp fresh?(nil, _interval), do: false FILE: lib/soundboard_web/presence.ex class SoundboardWeb.Presence (line 1) | defmodule SoundboardWeb.Presence FILE: lib/soundboard_web/presence_handler.ex class SoundboardWeb.PresenceHandler (line 1) | defmodule SoundboardWeb.PresenceHandler method start_link (line 31) | def start_link(_opts) do method init (line 36) | def init(:ok) do method track_presence (line 41) | def track_presence(socket, user) do method get_user_color (line 58) | def get_user_color(username) do method get_random_unique_color (line 63) | defp get_random_unique_color(username) do method get_presence_count (line 82) | def get_presence_count do method handle_presence_diff (line 88) | def handle_presence_diff(%{joins: joins, leaves: leaves}, current_coun... method count_active_presences (line 97) | defp count_active_presences(presences) do method count_active_presences (line 102) | defp count_active_presences(presences, now) do FILE: lib/soundboard_web/router.ex class SoundboardWeb.Router (line 1) | defmodule SoundboardWeb.Router method fetch_current_user (line 94) | def fetch_current_user(conn, _) do method ensure_authenticated_user (line 112) | def ensure_authenticated_user(conn, _opts) do method put_session_opts (line 123) | defp put_session_opts(conn, _opts) do FILE: lib/soundboard_web/sound_helpers.ex class SoundboardWeb.SoundHelpers (line 1) | defmodule SoundboardWeb.SoundHelpers method display_name (line 6) | def display_name(nil), do: "" method display_name (line 14) | def display_name(other), do: to_string(other) method slugify (line 16) | def slugify(name) do method ensure_slug (line 25) | defp ensure_slug(""), do: "sound" method ensure_slug (line 26) | defp ensure_slug(slug), do: slug FILE: lib/soundboard_web/soundboard/sound_filter.ex class SoundboardWeb.Soundboard.SoundFilter (line 1) | defmodule SoundboardWeb.Soundboard.SoundFilter method filter_sounds (line 6) | def filter_sounds(sounds, query, selected_tags) do method filter_by_tags (line 12) | defp filter_by_tags(sounds, []), do: sounds method filter_by_tags (line 14) | defp filter_by_tags(sounds, selected_tags) do method filter_by_search (line 23) | defp filter_by_search(sounds, ""), do: sounds method filter_by_search (line 25) | defp filter_by_search(sounds, query) do FILE: lib/soundboard_web/telemetry.ex class SoundboardWeb.Telemetry (line 1) | defmodule SoundboardWeb.Telemetry method start_link (line 5) | def start_link(arg) do method init (line 10) | def init(_arg) do method metrics (line 22) | def metrics do method periodic_measurements (line 85) | defp periodic_measurements do FILE: mix.exs class Soundboard.MixProject (line 1) | defmodule Soundboard.MixProject method project (line 10) | def project do method application (line 53) | def application do method elixirc_paths (line 64) | defp elixirc_paths(:test), do: ["lib", "test/support"] method elixirc_paths (line 65) | defp elixirc_paths(_), do: ["lib"] method deps (line 70) | defp deps do method aliases (line 110) | defp aliases do method cli (line 134) | def cli do FILE: priv/repo/migrations/20250101213201_create_sounds.exs class Soundboard.Repo.Migrations.CreateSounds (line 1) | defmodule Soundboard.Repo.Migrations.CreateSounds method change (line 4) | def change do FILE: priv/repo/migrations/20250101213717_create_tags.exs class Soundboard.Repo.Migrations.CreateTags (line 1) | defmodule Soundboard.Repo.Migrations.CreateTags method change (line 4) | def change do FILE: priv/repo/migrations/20250101231744_create_users.exs class Soundboard.Repo.Migrations.CreateUsers (line 1) | defmodule Soundboard.Repo.Migrations.CreateUsers method change (line 4) | def change do FILE: priv/repo/migrations/20250102212120_create_plays.exs class Soundboard.Repo.Migrations.CreatePlays (line 1) | defmodule Soundboard.Repo.Migrations.CreatePlays method change (line 4) | def change do FILE: priv/repo/migrations/20250102212121_create_favorites.exs class Soundboard.Repo.Migrations.CreateFavorites (line 1) | defmodule Soundboard.Repo.Migrations.CreateFavorites method change (line 4) | def change do FILE: priv/repo/migrations/20250102212122_add_user_id_to_sounds.exs class Soundboard.Repo.Migrations.AddUserIdToSounds (line 1) | defmodule Soundboard.Repo.Migrations.AddUserIdToSounds method change (line 4) | def change do FILE: priv/repo/migrations/20250102212123_change_favorites_filename_to_sound_id.exs class Soundboard.Repo.Migrations.ChangeFavoritesFilenameToSoundId (line 1) | defmodule Soundboard.Repo.Migrations.ChangeFavoritesFilenameToSoundId method up (line 4) | def up do method down (line 39) | def down do FILE: priv/repo/migrations/20250102212124_add_index_to_plays.exs class Soundboard.Repo.Migrations.AddIndexToPlays (line 1) | defmodule Soundboard.Repo.Migrations.AddIndexToPlays method change (line 4) | def change do FILE: priv/repo/migrations/20250102212125_add_join_leave_flags_to_sounds.exs class Soundboard.Repo.Migrations.AddJoinLeaveFlagsToSounds (line 1) | defmodule Soundboard.Repo.Migrations.AddJoinLeaveFlagsToSounds method change (line 4) | def change do FILE: priv/repo/migrations/20250102212126_add_url_to_sounds.exs class Soundboard.Repo.Migrations.AddUrlToSounds (line 1) | defmodule Soundboard.Repo.Migrations.AddUrlToSounds method change (line 4) | def change do FILE: priv/repo/migrations/20250218214831_create_user_sound_settings.exs class Soundboard.Repo.Migrations.CreateUserSoundSettings (line 1) | defmodule Soundboard.Repo.Migrations.CreateUserSoundSettings method change (line 4) | def change do FILE: priv/repo/migrations/20250218214832_remove_join_leave_flags_from_sounds.exs class Soundboard.Repo.Migrations.RemoveJoinLeaveFlagsFromSounds (line 1) | defmodule Soundboard.Repo.Migrations.RemoveJoinLeaveFlagsFromSounds method change (line 4) | def change do FILE: priv/repo/migrations/20250218220000_create_api_tokens.exs class Soundboard.Repo.Migrations.CreateApiTokens (line 1) | defmodule Soundboard.Repo.Migrations.CreateApiTokens method change (line 4) | def change do FILE: priv/repo/migrations/20250218223000_add_token_plain_to_api_tokens.exs class Soundboard.Repo.Migrations.AddTokenPlainToApiTokens (line 1) | defmodule Soundboard.Repo.Migrations.AddTokenPlainToApiTokens method change (line 4) | def change do FILE: priv/repo/migrations/20250310120000_add_volume_to_sounds.exs class Soundboard.Repo.Migrations.AddVolumeToSounds (line 1) | defmodule Soundboard.Repo.Migrations.AddVolumeToSounds method change (line 4) | def change do FILE: priv/repo/migrations/20260306150000_add_sound_id_to_plays.exs class Soundboard.Repo.Migrations.AddSoundIdToPlays (line 1) | defmodule Soundboard.Repo.Migrations.AddSoundIdToPlays method up (line 4) | def up do method down (line 22) | def down do FILE: priv/repo/migrations/20260306151000_finalize_favorites_and_sound_tags_migrations.exs class Soundboard.Repo.Migrations.FinalizeFavoritesAndSoundTagsMigrations (line 1) | defmodule Soundboard.Repo.Migrations.FinalizeFavoritesAndSoundTagsMigrat... method up (line 4) | def up do method down (line 56) | def down do FILE: priv/repo/migrations/20260307211000_rename_sound_name_to_played_filename_in_plays.exs class Soundboard.Repo.Migrations.RenameSoundNameToPlayedFilenameInPlays (line 1) | defmodule Soundboard.Repo.Migrations.RenameSoundNameToPlayedFilenameInPlays method up (line 4) | def up do method down (line 22) | def down do FILE: test/soundboard/accounts/api_tokens_test.exs class Soundboard.Accounts.ApiTokensTest (line 1) | defmodule Soundboard.Accounts.ApiTokensTest FILE: test/soundboard/accounts_test.exs class Soundboard.AccountsTest (line 1) | defmodule Soundboard.AccountsTest FILE: test/soundboard/audio_player/playback_engine_test.exs class Soundboard.AudioPlayer.PlaybackEngineTest (line 1) | defmodule Soundboard.AudioPlayer.PlaybackEngineTest FILE: test/soundboard/audio_player/playback_queue_test.exs class Soundboard.AudioPlayer.PlaybackQueueTest (line 1) | defmodule Soundboard.AudioPlayer.PlaybackQueueTest method base_state (line 9) | defp base_state(overrides \\ []) do method request (line 26) | defp request(overrides \\ %{}) do FILE: test/soundboard/audio_player/sound_library_test.exs class Soundboard.AudioPlayer.SoundLibraryTest (line 1) | defmodule Soundboard.AudioPlayer.SoundLibraryTest method insert_sound! (line 122) | defp insert_sound!(user, attrs) do method unique_filename (line 133) | defp unique_filename(prefix, ext) do method clear_sound_cache (line 137) | defp clear_sound_cache do FILE: test/soundboard/discord/bot_identity_test.exs class Soundboard.Discord.BotIdentityTest (line 1) | defmodule Soundboard.Discord.BotIdentityTest FILE: test/soundboard/discord/handler/auto_join_policy_test.exs class Soundboard.Discord.Handler.AutoJoinPolicyTest (line 1) | defmodule Soundboard.Discord.Handler.AutoJoinPolicyTest FILE: test/soundboard/discord/handler/command_handler_test.exs class Soundboard.Discord.Handler.CommandHandlerTest (line 1) | defmodule Soundboard.Discord.Handler.CommandHandlerTest FILE: test/soundboard/discord/handler/idle_timeout_policy_test.exs class Soundboard.Discord.Handler.IdleTimeoutPolicyTest (line 1) | defmodule Soundboard.Discord.Handler.IdleTimeoutPolicyTest FILE: test/soundboard/discord/handler/voice_presence_test.exs class Soundboard.Discord.Handler.VoicePresenceTest (line 1) | defmodule Soundboard.Discord.Handler.VoicePresenceTest FILE: test/soundboard/discord/handler/voice_runtime_test.exs class Soundboard.Discord.Handler.VoiceRuntimeTest (line 1) | defmodule Soundboard.Discord.Handler.VoiceRuntimeTest FILE: test/soundboard/discord/role_checker_test.exs class Soundboard.Discord.RoleCheckerTest (line 1) | defmodule Soundboard.Discord.RoleCheckerTest method restore_env (line 21) | defp restore_env(key, nil), do: Application.delete_env(:soundboard, key) method restore_env (line 22) | defp restore_env(key, value), do: Application.put_env(:soundboard, key... FILE: test/soundboard/discord/runtime_capability_test.exs class Soundboard.Discord.RuntimeCapabilityTest (line 1) | defmodule Soundboard.Discord.RuntimeCapabilityTest FILE: test/soundboard/discord/voice_test.exs class Soundboard.Discord.VoiceTest (line 1) | defmodule Soundboard.Discord.VoiceTest class VoiceModuleWithPlay4 (line 6) | defmodule VoiceModuleWithPlay4 method play (line 7) | def play(guild_id, input, type, opts) do class VoiceModuleWithPlay3 (line 13) | defmodule VoiceModuleWithPlay3 method play (line 14) | def play(guild_id, input, type) do FILE: test/soundboard/favorites_test.exs class Soundboard.FavoritesTest (line 1) | defmodule Soundboard.FavoritesTest method insert_user (line 66) | defp insert_user(attrs \\ %{}) do method insert_sound (line 84) | defp insert_sound(user, attrs \\ %{}) do FILE: test/soundboard/migrations/data_migrations_test.exs class Soundboard.Migrations.DataMigrationsTest (line 16) | defmodule Soundboard.Migrations.DataMigrationsTest method migrate_up (line 210) | defp migrate_up(repo, migrations) do method column_names (line 216) | defp column_names(repo, table_name) do class MigrationRepo (line 32) | defmodule MigrationRepo FILE: test/soundboard/public_url_test.exs class Soundboard.PublicURLTest (line 1) | defmodule Soundboard.PublicURLTest FILE: test/soundboard/pubsub_topics_test.exs class Soundboard.PubSubTopicsTest (line 1) | defmodule Soundboard.PubSubTopicsTest FILE: test/soundboard/sound_tag_test.exs class Soundboard.SoundTagTest (line 1) | defmodule Soundboard.SoundTagTest method insert_sound (line 49) | defp insert_sound do method insert_tag (line 62) | defp insert_tag do method insert_user (line 71) | defp insert_user do FILE: test/soundboard/sound_test.exs class Soundboard.SoundTest (line 1) | defmodule Soundboard.SoundTest method insert_user (line 543) | defp insert_user do method insert_sound (line 556) | defp insert_sound(user) do FILE: test/soundboard/sounds/management_test.exs class Soundboard.Sounds.ManagementTest (line 1) | defmodule Soundboard.Sounds.ManagementTest method insert_local_sound (line 140) | defp insert_local_sound(user, filename) do method uploads_dir (line 154) | defp uploads_dir do FILE: test/soundboard/sounds/sound_settings_test.exs class Soundboard.Sounds.SoundSettingsTest (line 1) | defmodule Soundboard.Sounds.SoundSettingsTest method insert_user (line 166) | defp insert_user do method insert_sound (line 179) | defp insert_sound(user) do method insert_sound! (line 184) | defp insert_sound!(user, filename) do FILE: test/soundboard/sounds/tags_test.exs class Soundboard.Sounds.TagsTest (line 1) | defmodule Soundboard.Sounds.TagsTest method insert_tag! (line 103) | defp insert_tag!(name) do FILE: test/soundboard/sounds/uploads_test.exs class Soundboard.Sounds.UploadsTest (line 1) | defmodule Soundboard.Sounds.UploadsTest method request (line 222) | defp request(user, attrs) do method uploads_dir (line 226) | defp uploads_dir do FILE: test/soundboard/stats_test.exs class Soundboard.StatsTest (line 1) | defmodule Soundboard.StatsTest method insert_sound (line 143) | defp insert_sound(user) do method insert_user (line 156) | defp insert_user do FILE: test/soundboard/tags/tag_test.exs class Soundboard.Tags.TagTest (line 1) | defmodule Soundboard.Tags.TagTest method insert_user (line 78) | defp insert_user do method insert_sound (line 91) | defp insert_sound(user) do FILE: test/soundboard/uploads_path_test.exs class Soundboard.UploadsPathTest (line 1) | defmodule Soundboard.UploadsPathTest FILE: test/soundboard/volume_test.exs class Soundboard.VolumeTest (line 1) | defmodule Soundboard.VolumeTest FILE: test/soundboard_test.exs class SoundboardTest (line 1) | defmodule SoundboardTest FILE: test/soundboard_web/audio_player_test.exs class Soundboard.AudioPlayerTest (line 1) | defmodule Soundboard.AudioPlayerTest FILE: test/soundboard_web/components/layouts/navbar_test.exs class SoundboardWeb.Components.Layouts.NavbarTest (line 1) | defmodule SoundboardWeb.Components.Layouts.NavbarTest FILE: test/soundboard_web/components/soundboard/edit_modal_test.exs class SoundboardWeb.Components.Soundboard.EditModalTest (line 1) | defmodule SoundboardWeb.Components.Soundboard.EditModalTest method edit_assigns (line 47) | defp edit_assigns(overrides \\ %{}) do method edit_sound (line 60) | defp edit_sound do FILE: test/soundboard_web/components/soundboard/upload_modal_test.exs class SoundboardWeb.Components.Soundboard.UploadModalTest (line 1) | defmodule SoundboardWeb.Components.Soundboard.UploadModalTest method upload_assigns (line 47) | defp upload_assigns(overrides \\ %{}) do FILE: test/soundboard_web/controllers/api/sound_controller_test.exs class SoundboardWeb.API.SoundControllerTest (line 1) | defmodule SoundboardWeb.API.SoundControllerTest method insert_sound (line 330) | defp insert_sound(user) do method insert_tag (line 343) | defp insert_tag do method insert_user (line 352) | defp insert_user do method insert_sound_tag (line 365) | defp insert_sound_tag(sound, tag) do method uploads_dir (line 375) | defp uploads_dir do method temp_upload_path (line 379) | defp temp_upload_path(filename) do FILE: test/soundboard_web/controllers/auth_controller_test.exs class SoundboardWeb.AuthControllerTest (line 1) | defmodule SoundboardWeb.AuthControllerTest method insert_user (line 219) | defp insert_user do FILE: test/soundboard_web/controllers/upload_controller_test.exs class SoundboardWeb.UploadControllerTest (line 1) | defmodule SoundboardWeb.UploadControllerTest FILE: test/soundboard_web/discord_handler_test.exs class Soundboard.Discord.HandlerTest (line 1) | defmodule Soundboard.Discord.HandlerTest method insert_user! (line 280) | defp insert_user!(attrs) do method insert_sound! (line 286) | defp insert_sound!(user, attrs) do method insert_user_sound_setting! (line 298) | defp insert_user_sound_setting!(user, sound, attrs) do FILE: test/soundboard_web/eda_consumer_test.exs class Soundboard.Discord.ConsumerTest (line 1) | defmodule Soundboard.Discord.ConsumerTest FILE: test/soundboard_web/live/favorites_live_test.exs class SoundboardWeb.FavoritesLiveTest (line 1) | defmodule SoundboardWeb.FavoritesLiveTest FILE: test/soundboard_web/live/settings_live_test.exs class SoundboardWeb.SettingsLiveTest (line 1) | defmodule SoundboardWeb.SettingsLiveTest FILE: test/soundboard_web/live/soundboard_live/edit_flow_test.exs class SoundboardWeb.Live.SoundboardLive.EditFlowTest (line 1) | defmodule SoundboardWeb.Live.SoundboardLive.EditFlowTest method create_user (line 29) | defp create_user do method seed_alphabetical_tags (line 39) | defp seed_alphabetical_tags do FILE: test/soundboard_web/live/soundboard_live/upload_flow_test.exs class SoundboardWeb.Live.SoundboardLive.UploadFlowTest (line 1) | defmodule SoundboardWeb.Live.SoundboardLive.UploadFlowTest method build_socket (line 53) | defp build_socket(overrides) do method seed_alphabetical_tags (line 79) | defp seed_alphabetical_tags do FILE: test/soundboard_web/live/soundboard_live_test.exs class SoundboardWeb.SoundboardLiveTest (line 1) | defmodule SoundboardWeb.SoundboardLiveTest method uploads_dir (line 463) | defp uploads_dir do FILE: test/soundboard_web/live/stats_live_test.exs class SoundboardWeb.StatsLiveTest (line 1) | defmodule SoundboardWeb.StatsLiveTest method live_as_user (line 141) | defp live_as_user(conn, user) do FILE: test/soundboard_web/plugs/api_auth_db_token_test.exs class SoundboardWeb.APIAuthDBTokenTest (line 1) | defmodule SoundboardWeb.APIAuthDBTokenTest FILE: test/soundboard_web/plugs/basic_auth_test.exs class SoundboardWeb.BasicAuthPlugTest (line 1) | defmodule SoundboardWeb.BasicAuthPlugTest method restore_env (line 23) | defp restore_env(key, nil), do: System.delete_env(key) method restore_env (line 24) | defp restore_env(key, value), do: System.put_env(key, value) FILE: test/soundboard_web/plugs/role_check_test.exs class SoundboardWeb.Plugs.RoleCheckTest (line 1) | defmodule SoundboardWeb.Plugs.RoleCheckTest method restore_env (line 25) | defp restore_env(key, nil), do: Application.delete_env(:soundboard, key) method restore_env (line 26) | defp restore_env(key, value), do: Application.put_env(:soundboard, key... method insert_user (line 28) | defp insert_user do method build_conn_with_session (line 41) | defp build_conn_with_session(conn, user, session_params) do FILE: test/soundboard_web/presence_handler_test.exs class SoundboardWeb.PresenceHandlerTest (line 1) | defmodule SoundboardWeb.PresenceHandlerTest FILE: test/soundboard_web/sound_helpers_test.exs class SoundboardWeb.SoundHelpersTest (line 1) | defmodule SoundboardWeb.SoundHelpersTest FILE: test/soundboard_web/soundboard/sound_filter_test.exs class SoundboardWeb.Soundboard.SoundFilterTest (line 1) | defmodule SoundboardWeb.Soundboard.SoundFilterTest FILE: test/support/conn_case.ex class SoundboardWeb.ConnCase (line 1) | defmodule SoundboardWeb.ConnCase method file_upload (line 30) | def file_upload(lv, field, entries) do FILE: test/support/data_case.ex class Soundboard.DataCase (line 1) | defmodule Soundboard.DataCase method setup_sandbox (line 27) | def setup_sandbox(tags) do method errors_on (line 40) | def errors_on(changeset) do FILE: test/support/test_helpers.ex class Soundboard.TestHelpers (line 1) | defmodule Soundboard.TestHelpers method create_test_file (line 7) | def create_test_file(filename) do method cleanup_test_files (line 15) | def cleanup_test_files do method setup_test_socket (line 19) | def setup_test_socket(assigns \\ %{}) do method setup_upload_socket (line 34) | def setup_upload_socket(user) do method setup_test_audio_file (line 51) | def setup_test_audio_file do method create_user (line 59) | def create_user(attrs \\ %{}) do method create_sound (line 72) | def create_sound(user, attrs \\ %{}) do