425 lines
147 KiB
HTML
425 lines
147 KiB
HTML
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Central player controller that coordinates playback"><title>PlayerController in jellytau_lib::player - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../static.files/rustdoc-17e0aaed.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="jellytau_lib" data-themes="" data-resource-suffix="" data-rustdoc-version="1.97.1 (8bab26f4f 2026-07-14)" data-channel="1.97.1" data-search-js="search-fd9372ac.js" data-stringdex-js="stringdex-2da4960a.js" data-settings-js="settings-170eb4bf.js" ><script src="../../static.files/storage-41dd4d93.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-fcd733ba.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-f7c3ffd8.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-044be391.svg"></head><body class="rustdoc struct"><a class="skip-main-content" href="#main-content">Skip to main content</a><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">PlayerController</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../jellytau_lib/index.html">jellytau_<wbr>lib</a><span class="version">0.11.0</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Player<wbr>Controller</a></h2><h3><a href="#fields">Fields</a></h3><ul class="block structfield"><li><a href="#structfield.autoplay_episode_count" title="autoplay_episode_count">autoplay_episode_count</a></li><li><a href="#structfield.autoplay_settings" title="autoplay_settings">autoplay_settings</a></li><li><a href="#structfield.backend" title="backend">backend</a></li><li><a href="#structfield.background_audio_active" title="background_audio_active">background_audio_active</a></li><li><a href="#structfield.background_audio_base" title="background_audio_base">background_audio_base</a></li><li><a href="#structfield.countdown_cancel" title="countdown_cancel">countdown_cancel</a></li><li><a href="#structfield.end_reason" title="end_reason">end_reason</a></li><li><a href="#structfield.event_emitter" title="event_emitter">event_emitter</a></li><li><a href="#structfield.html5_playing" title="html5_playing">html5_playing</a></li><li><a href="#structfield.jellyfin_client" title="jellyfin_client">jellyfin_client</a></li><li><a href="#structfield.muted" title="muted">muted</a></li><li><a href="#structfield.playback_reporter" title="playback_reporter">playback_reporter</a></li><li><a href="#structfield.position_throttler" title="position_throttler">position_throttler</a></li><li><a href="#structfield.queue" title="queue">queue</a></li><li><a href="#structfield.reported_time" title="reported_time">reported_time</a></li><li><a href="#structfield.reports" title="reports">reports</a></li><li><a href="#structfield.repository" title="repository">repository</a></li><li><a href="#structfield.sleep_timer" title="sleep_timer">sleep_timer</a></li><li><a href="#structfield.stream_resume" title="stream_resume">stream_resume</a></li></ul><h3><a href="#implementations">Associated Functions</a></h3><ul class="block method"><li><a href="#method.new" title="new">new</a></li><li><a href="#method.note_sleep_timer_stop" title="note_sleep_timer_stop">note_sleep_timer_stop</a></li><li><a href="#method.is_audio_only_video" title="is_audio_only_video">is_audio_only_video</a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.absolute_position" title="absolute_position">absolute_position</a></li><li><a href="#method.advance_to_next_episode_audio_only" title="advance_to_next_episode_audio_only">advance_to_next_episode_audio_only</a></li><li><a href="#method.audio_settings" title="audio_settings">audio_settings</a></li><li><a href="#method.auto_advance_to_next_episode" title="auto_advance_to_next_episode">auto_advance_to_next_episode</a></li><li><a href="#method.autoplay_settings" title="autoplay_settings">autoplay_settings</a></li><li><a href="#method.cancel_autoplay_countdown" title="cancel_autoplay_countdown">cancel_autoplay_countdown</a></li><li><a href="#method.cancel_sleep_timer" title="cancel_sleep_timer">cancel_sleep_timer</a></li><li><a href="#method.capabilities" title="capabilities">capabilities</a></li><li><a href="#method.claim_stream_resume" title="claim_stream_resume">claim_stream_resume</a></li><li><a href="#method.clear_queue" title="clear_queue">clear_queue</a></li><li><a href="#method.clear_reported_time" title="clear_reported_time">clear_reported_time</a></li><li><a href="#method.current_is_audio_episode" title="current_is_audio_episode">current_is_audio_episode</a></li><li><a href="#method.current_jellyfin_id" title="current_jellyfin_id">current_jellyfin_id</a></li><li><a href="#method.cycle_repeat" title="cycle_repeat">cycle_repeat</a></li><li><a href="#method.duration" title="duration">duration</a></li><li><a href="#method.emit_html5_control" title="emit_html5_control">emit_html5_control</a></li><li><a href="#method.emit_queue_changed" title="emit_queue_changed">emit_queue_changed</a></li><li><a href="#method.emit_sleep_timer_changed" title="emit_sleep_timer_changed">emit_sleep_timer_changed</a></li><li><a href="#method.enter_background_audio" title="enter_background_audio">enter_background_audio</a></li><li><a href="#method.event_emitter" title="event_emitter">event_emitter</a></li><li><a href="#method.exit_background_audio" title="exit_background_audio">exit_background_audio</a></li><li><a href="#method.fetch_next_episode_for_item" title="fetch_next_episode_for_item">fetch_next_episode_for_item</a></li><li><a href="#method.html5_is_playing" title="html5_is_playing">html5_is_playing</a></li><li><a href="#method.increment_autoplay_count" title="increment_autoplay_count">increment_autoplay_count</a></li><li><a href="#method.is_background_audio_active" title="is_background_audio_active">is_background_audio_active</a></li><li><a href="#method.is_episode_item" title="is_episode_item">is_episode_item</a></li><li><a href="#method.is_html5_active" title="is_html5_active">is_html5_active</a></li><li><a href="#method.is_shuffle" title="is_shuffle">is_shuffle</a></li><li><a href="#method.jellyfin_client" title="jellyfin_client">jellyfin_client</a></li><li><a href="#method.load_and_play" title="load_and_play">load_and_play</a></li><li><a href="#method.muted" title="muted">muted</a></li><li><a href="#method.next" title="next">next</a></li><li><a href="#method.observed_duration" title="observed_duration">observed_duration</a></li><li><a href="#method.on_playback_ended" title="on_playback_ended">on_playback_ended</a></li><li><a href="#method.on_video_playback_ended" title="on_video_playback_ended">on_video_playback_ended</a></li><li><a href="#method.pause" title="pause">pause</a></li><li><a href="#method.peek_end_reason" title="peek_end_reason">peek_end_reason</a></li><li><a href="#method.play" title="play">play</a></li><li><a href="#method.play_item" title="play_item">play_item</a></li><li><a href="#method.play_queue" title="play_queue">play_queue</a></li><li><a href="#method.play_queue_from" title="play_queue_from">play_queue_from</a></li><li><a href="#method.playback_reporter" title="playback_reporter">playback_reporter</a></li><li><a href="#method.position" title="position">position</a></li><li><a href="#method.position_throttler" title="position_throttler">position_throttler</a></li><li><a href="#method.previous" title="previous">previous</a></li><li><a href="#method.queue" title="queue">queue</a></li><li><a href="#method.recoverable_error_resume" title="recoverable_error_resume">recoverable_error_resume</a></li><li><a href="#method.repeat_mode" title="repeat_mode">repeat_mode</a></li><li><a href="#method.report" title="report">report</a></li><li><a href="#method.report_completion" title="report_completion">report_completion</a></li><li><a href="#method.report_html5_media_loaded" title="report_html5_media_loaded">report_html5_media_loaded</a></li><li><a href="#method.report_html5_position" title="report_html5_position">report_html5_position</a></li><li><a href="#method.report_html5_state" title="report_html5_state">report_html5_state</a></li><li><a href="#method.report_progress_throttled" title="report_progress_throttled">report_progress_throttled</a></li><li><a href="#method.report_stopped_at" title="report_stopped_at">report_stopped_at</a></li><li><a href="#method.reset_autoplay_count" title="reset_autoplay_count">reset_autoplay_count</a></li><li><a href="#method.resume_stream_at" title="resume_stream_at">resume_stream_at</a></li><li><a href="#method.seek" title="seek">seek</a></li><li><a href="#method.seek_absolute" title="seek_absolute">seek_absolute</a></li><li><a href="#method.set_audio_settings" title="set_audio_settings">set_audio_settings</a></li><li><a href="#method.set_audio_track" title="set_audio_track">set_audio_track</a></li><li><a href="#method.set_autoplay_settings" title="set_autoplay_settings">set_autoplay_settings</a></li><li><a href="#method.set_background_audio_base" title="set_background_audio_base">set_background_audio_base</a></li><li><a href="#method.set_current_item" title="set_current_item">set_current_item</a></li><li><a href="#method.set_end_reason" title="set_end_reason">set_end_reason</a></li><li><a href="#method.set_event_emitter" title="set_event_emitter">set_event_emitter</a></li><li><a href="#method.set_jellyfin_client" title="set_jellyfin_client">set_jellyfin_client</a></li><li><a href="#method.set_playback_reporter" title="set_playback_reporter">set_playback_reporter</a></li><li><a href="#method.set_queue" title="set_queue">set_queue</a></li><li><a href="#method.set_report_sink" title="set_report_sink">set_report_sink</a></li><li><a href="#method.set_repository" title="set_repository">set_repository</a></li><li><a href="#method.set_sleep_timer" title="set_sleep_timer">set_sleep_timer</a></li><li><a href="#method.set_subtitle_track" title="set_subtitle_track">set_subtitle_track</a></li><li><a href="#method.set_volume" title="set_volume">set_volume</a></li><li><a href="#method.sleep_timer_state" title="sleep_timer_state">sleep_timer_state</a></li><li><a href="#method.start_autoplay_countdown" title="start_autoplay_countdown">start_autoplay_countdown</a></li><li><a href="#method.start_timer_thread" title="start_timer_thread">start_timer_thread</a></li><li><a href="#method.state" title="state">state</a></li><li><a href="#method.stop" title="stop">stop</a></li><li><a href="#method.take_background_audio_base" title="take_background_audio_base">take_background_audio_base</a></li><li><a href="#method.take_end_reason" title="take_end_reason">take_end_reason</a></li><li><a href="#method.toggle_playback" title="toggle_playback">toggle_playback</a></li><li><a href="#method.toggle_shuffle" title="toggle_shuffle">toggle_shuffle</a></li><li><a href="#method.truncated_stream_resume_position" title="truncated_stream_resume_position">truncated_stream_resume_position</a></li><li><a href="#method.volume" title="volume">volume</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-Default-for-PlayerController" title="Default">Default</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-RefUnwindSafe-for-PlayerController" title="!RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-UnwindSafe-for-PlayerController" title="!UnwindSafe">!UnwindSafe</a></li><li><a href="#impl-Freeze-for-PlayerController" title="Freeze">Freeze</a></li><li><a href="#impl-Send-for-PlayerController" title="Send">Send</a></li><li><a href="#impl-Sync-for-PlayerController" title="Sync">Sync</a></li><li><a href="#impl-Unpin-for-PlayerController" title="Unpin">Unpin</a></li><li><a href="#impl-UnsafeUnpin-for-PlayerController" title="UnsafeUnpin">UnsafeUnpin</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Any-for-T" title="Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T" title="Borrow<T>">Borrow<T></a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T" title="BorrowMut<T>">BorrowMut<T></a></li><li><a href="#impl-From%3CT%3E-for-T" title="From<T>">From<T></a></li><li><a href="#impl-Instrument-for-T" title="Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E-for-T" title="Into<U>">Into<U></a></li><li><a href="#impl-NoneValue-for-T" title="NoneValue">NoneValue</a></li><li><a href="#impl-PolicyExt-for-T" title="PolicyExt">PolicyExt</a></li><li><a href="#impl-Same-for-T" title="Same">Same</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T" title="TryFrom<U>">TryFrom<U></a></li><li><a href="#impl-TryInto%3CU%3E-for-T" title="TryInto<U>">TryInto<U></a></li><li><a href="#impl-VZip%3CV%3E-for-T" title="VZip<V>">VZip<V></a></li><li><a href="#impl-WithSubscriber-for-T" title="WithSubscriber">WithSubscriber</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In jellytau_<wbr>lib::<wbr>player</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content" tabindex="-1"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../index.html">jellytau_lib</a>::<wbr><a href="index.html">player</a></div><h1>Struct <span class="struct">Player<wbr>Controller</span> <button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../src/jellytau_lib/player/mod.rs.html#242-340">Source</a> </span></div><pre class="rust item-decl"><code>pub struct PlayerController {<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 19 fields</span></summary>
|
||
backend: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="media_player/trait.MediaPlayer.html" title="trait jellytau_lib::player::media_player::MediaPlayer">MediaPlayer</a>>>>,
|
||
queue: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="queue/struct.QueueManager.html" title="struct jellytau_lib::player::queue::QueueManager">QueueManager</a>>>,
|
||
jellyfin_client: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../jellyfin/client/struct.JellyfinClient.html" title="struct jellytau_lib::jellyfin::client::JellyfinClient">JellyfinClient</a>>>>,
|
||
muted: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>,
|
||
sleep_timer: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="sleep_timer/struct.SleepTimerState.html" title="struct jellytau_lib::player::sleep_timer::SleepTimerState">SleepTimerState</a>>>,
|
||
autoplay_settings: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="autoplay/struct.AutoplaySettings.html" title="struct jellytau_lib::player::autoplay::AutoplaySettings">AutoplaySettings</a>>>,
|
||
repository: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="../repository/trait.MediaRepository.html" title="trait jellytau_lib::repository::MediaRepository">MediaRepository</a>>>>>,
|
||
event_emitter: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="events/trait.PlayerEventEmitter.html" title="trait jellytau_lib::player::events::PlayerEventEmitter">PlayerEventEmitter</a>>>>>,
|
||
countdown_cancel: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>>>>>>,
|
||
playback_reporter: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><Mutex<<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../playback_reporting/reporter/struct.PlaybackReporter.html" title="struct jellytau_lib::playback_reporting::reporter::PlaybackReporter">PlaybackReporter</a>>>>,
|
||
reports: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="trait.PlaybackReportSink.html" title="trait jellytau_lib::player::PlaybackReportSink">PlaybackReportSink</a>>>>,
|
||
position_throttler: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="../playback_reporting/throttle/struct.EventThrottler.html" title="struct jellytau_lib::playback_reporting::throttle::EventThrottler">EventThrottler</a>>,
|
||
end_reason: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="state/enum.EndReason.html" title="enum jellytau_lib::player::state::EndReason">EndReason</a>>>>,
|
||
autoplay_episode_count: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.u32.html">u32</a>>>,
|
||
background_audio_base: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>>>,
|
||
background_audio_active: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>>>,
|
||
stream_resume: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="stream_end/struct.ResumeTracker.html" title="struct jellytau_lib::player::stream_end::ResumeTracker">ResumeTracker</a>>>,
|
||
html5_playing: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>>>>,
|
||
reported_time: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="stream_end/struct.ObservedTime.html" title="struct jellytau_lib::player::stream_end::ObservedTime">ObservedTime</a>>>,
|
||
</details>}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Central player controller that coordinates playback</p>
|
||
</div></details><h2 id="fields" class="fields section-header">Fields<a href="#fields" class="anchor">§</a></h2><span id="structfield.backend" class="structfield section-header"><a href="#structfield.backend" class="anchor field">§</a><code>backend: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="media_player/trait.MediaPlayer.html" title="trait jellytau_lib::player::media_player::MediaPlayer">MediaPlayer</a>>>></code></span><div class="docblock"><p>The engine. One contract, so the controller stops branching on which
|
||
platform it is running on — see docs/specs/media-player-controller.md.</p>
|
||
</div><span id="structfield.queue" class="structfield section-header"><a href="#structfield.queue" class="anchor field">§</a><code>queue: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="queue/struct.QueueManager.html" title="struct jellytau_lib::player::queue::QueueManager">QueueManager</a>>></code></span><span id="structfield.jellyfin_client" class="structfield section-header"><a href="#structfield.jellyfin_client" class="anchor field">§</a><code>jellyfin_client: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../jellyfin/client/struct.JellyfinClient.html" title="struct jellytau_lib::jellyfin::client::JellyfinClient">JellyfinClient</a>>>></code></span><span id="structfield.muted" class="structfield section-header"><a href="#structfield.muted" class="anchor field">§</a><code>muted: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></code></span><span id="structfield.sleep_timer" class="structfield section-header"><a href="#structfield.sleep_timer" class="anchor field">§</a><code>sleep_timer: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="sleep_timer/struct.SleepTimerState.html" title="struct jellytau_lib::player::sleep_timer::SleepTimerState">SleepTimerState</a>>></code></span><span id="structfield.autoplay_settings" class="structfield section-header"><a href="#structfield.autoplay_settings" class="anchor field">§</a><code>autoplay_settings: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="autoplay/struct.AutoplaySettings.html" title="struct jellytau_lib::player::autoplay::AutoplaySettings">AutoplaySettings</a>>></code></span><span id="structfield.repository" class="structfield section-header"><a href="#structfield.repository" class="anchor field">§</a><code>repository: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="../repository/trait.MediaRepository.html" title="trait jellytau_lib::repository::MediaRepository">MediaRepository</a>>>>></code></span><span id="structfield.event_emitter" class="structfield section-header"><a href="#structfield.event_emitter" class="anchor field">§</a><code>event_emitter: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="events/trait.PlayerEventEmitter.html" title="trait jellytau_lib::player::events::PlayerEventEmitter">PlayerEventEmitter</a>>>>></code></span><span id="structfield.countdown_cancel" class="structfield section-header"><a href="#structfield.countdown_cancel" class="anchor field">§</a><code>countdown_cancel: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>>>>>></code></span><span id="structfield.playback_reporter" class="structfield section-header"><a href="#structfield.playback_reporter" class="anchor field">§</a><code>playback_reporter: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><Mutex<<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../playback_reporting/reporter/struct.PlaybackReporter.html" title="struct jellytau_lib::playback_reporting::reporter::PlaybackReporter">PlaybackReporter</a>>>></code></span><span id="structfield.reports" class="structfield section-header"><a href="#structfield.reports" class="anchor field">§</a><code>reports: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="trait.PlaybackReportSink.html" title="trait jellytau_lib::player::PlaybackReportSink">PlaybackReportSink</a>>>></code></span><span id="structfield.position_throttler" class="structfield section-header"><a href="#structfield.position_throttler" class="anchor field">§</a><code>position_throttler: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="../playback_reporting/throttle/struct.EventThrottler.html" title="struct jellytau_lib::playback_reporting::throttle::EventThrottler">EventThrottler</a>></code></span><span id="structfield.end_reason" class="structfield section-header"><a href="#structfield.end_reason" class="anchor field">§</a><code>end_reason: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="state/enum.EndReason.html" title="enum jellytau_lib::player::state::EndReason">EndReason</a>>>></code></span><span id="structfield.autoplay_episode_count" class="structfield section-header"><a href="#structfield.autoplay_episode_count" class="anchor field">§</a><code>autoplay_episode_count: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.u32.html">u32</a>>></code></span><span id="structfield.background_audio_base" class="structfield section-header"><a href="#structfield.background_audio_base" class="anchor field">§</a><code>background_audio_base: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>>></code></span><span id="structfield.background_audio_active" class="structfield section-header"><a href="#structfield.background_audio_active" class="anchor field">§</a><code>background_audio_active: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>>></code></span><span id="structfield.stream_resume" class="structfield section-header"><a href="#structfield.stream_resume" class="anchor field">§</a><code>stream_resume: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="stream_end/struct.ResumeTracker.html" title="struct jellytau_lib::player::stream_end::ResumeTracker">ResumeTracker</a>>></code></span><span id="structfield.html5_playing" class="structfield section-header"><a href="#structfield.html5_playing" class="anchor field">§</a><code>html5_playing: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a>>>></code></span><span id="structfield.reported_time" class="structfield section-header"><a href="#structfield.reported_time" class="anchor field">§</a><code>reported_time: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="stream_end/struct.ObservedTime.html" title="struct jellytau_lib::player::stream_end::ObservedTime">ObservedTime</a>>></code></span><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-PlayerController" class="impl"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#342-2296">Source</a><a href="#impl-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section></summary><div class="impl-items"><section id="method.new" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#343-377">Source</a><h4 class="code-header">pub fn <a href="#method.new" class="fn">new</a>(
|
||
backend: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a><dyn <a class="trait" href="media_player/trait.MediaPlayer.html" title="trait jellytau_lib::player::media_player::MediaPlayer">MediaPlayer</a>>,
|
||
playback_reporter: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><TokioMutex<<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../playback_reporting/reporter/struct.PlaybackReporter.html" title="struct jellytau_lib::playback_reporting::reporter::PlaybackReporter">PlaybackReporter</a>>>>,
|
||
position_throttler: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="../playback_reporting/throttle/struct.EventThrottler.html" title="struct jellytau_lib::playback_reporting::throttle::EventThrottler">EventThrottler</a>>,
|
||
) -> Self</h4></section><details class="toggle method-toggle" open><summary><section id="method.set_jellyfin_client" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#380-387">Source</a><h4 class="code-header">pub fn <a href="#method.set_jellyfin_client" class="fn">set_jellyfin_client</a>(&self, client: <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../jellyfin/client/struct.JellyfinClient.html" title="struct jellytau_lib::jellyfin::client::JellyfinClient">JellyfinClient</a>>)</h4></section></summary><div class="docblock"><p>Configure the Jellyfin API client for automatic playback reporting</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.jellyfin_client" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#390-392">Source</a><h4 class="code-header">pub fn <a href="#method.jellyfin_client" class="fn">jellyfin_client</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../jellyfin/client/struct.JellyfinClient.html" title="struct jellytau_lib::jellyfin::client::JellyfinClient">JellyfinClient</a>>>> <a href="#" class="tooltip" data-notable-ty="Arc<Mutex<Option<JellyfinClient>>>">ⓘ</a></h4></section></summary><div class="docblock"><p>Get a reference to the Jellyfin client (for remote session control)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_repository" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#400-402">Source</a><h4 class="code-header">pub fn <a href="#method.set_repository" class="fn">set_repository</a>(&self, repo: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="../repository/trait.MediaRepository.html" title="trait jellytau_lib::repository::MediaRepository">MediaRepository</a>>)</h4></section></summary><div class="docblock"><p>Configure the media repository used for next-episode lookups.</p>
|
||
<p>The Android ExoPlayer ended-callback calls <code>on_playback_ended</code> with no
|
||
repository handle (unlike the Linux HTML5 path, which passes one per
|
||
call), so the controller needs a repository of its own or episode
|
||
autoplay silently decides Stop.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_playback_reporter" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#406-413">Source</a><h4 class="code-header">pub async fn <a href="#method.set_playback_reporter" class="fn">set_playback_reporter</a>(&self, reporter: <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../playback_reporting/reporter/struct.PlaybackReporter.html" title="struct jellytau_lib::playback_reporting::reporter::PlaybackReporter">PlaybackReporter</a>>)</h4></section></summary><div class="docblock"><p>Configure the playback reporter for dual sync (local DB + server).
|
||
Called from <code>player_configure_jellyfin</code> on login/restore/reauth.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.playback_reporter" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#418-420">Source</a><h4 class="code-header">pub fn <a href="#method.playback_reporter" class="fn">playback_reporter</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><TokioMutex<<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="../playback_reporting/reporter/struct.PlaybackReporter.html" title="struct jellytau_lib::playback_reporting::reporter::PlaybackReporter">PlaybackReporter</a>>>> <a href="#" class="tooltip" data-notable-ty="Arc<TokioMutex<Option<PlaybackReporter>>>">ⓘ</a></h4></section></summary><div class="docblock"><p>Get a reference to the playback reporter (for backend position updates)
|
||
Will be used when position update hooks are added to backends</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.position_throttler" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#425-427">Source</a><h4 class="code-header">pub fn <a href="#method.position_throttler" class="fn">position_throttler</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="../playback_reporting/throttle/struct.EventThrottler.html" title="struct jellytau_lib::playback_reporting::throttle::EventThrottler">EventThrottler</a>> <a href="#" class="tooltip" data-notable-ty="Arc<EventThrottler>">ⓘ</a></h4></section></summary><div class="docblock"><p>Get a reference to the position throttler (for backend position updates)
|
||
Will be used when position update hooks are added to backends</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_end_reason" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#430-433">Source</a><h4 class="code-header">fn <a href="#method.set_end_reason" class="fn">set_end_reason</a>(&self, reason: <a class="enum" href="state/enum.EndReason.html" title="enum jellytau_lib::player::state::EndReason">EndReason</a>)</h4></section></summary><div class="docblock"><p>Set the end reason for the next playback end event</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_end_reason" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#436-438">Source</a><h4 class="code-header">fn <a href="#method.take_end_reason" class="fn">take_end_reason</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="state/enum.EndReason.html" title="enum jellytau_lib::player::state::EndReason">EndReason</a>></h4></section></summary><div class="docblock"><p>Get and clear the current end reason</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.peek_end_reason" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#446-448">Source</a><h4 class="code-header">fn <a href="#method.peek_end_reason" class="fn">peek_end_reason</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="state/enum.EndReason.html" title="enum jellytau_lib::player::state::EndReason">EndReason</a>></h4></section></summary><div class="docblock"><p>Read the end reason WITHOUT consuming it.</p>
|
||
<p><code>take_end_reason</code> has an owner: on Android the JNI ended-callback consumes
|
||
the <code>NewTrackLoaded</code> every load sets, and the frontend’s echoed call is the
|
||
one that sees <code>None</code> and decides. The truncated-stream check runs in both
|
||
calls and must not disturb that hand-off, so it peeks.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.note_sleep_timer_stop" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#462-465">Source</a><h4 class="code-header">fn <a href="#method.note_sleep_timer_stop" class="fn">note_sleep_timer_stop</a>(end_reason: &<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="state/enum.EndReason.html" title="enum jellytau_lib::player::state::EndReason">EndReason</a>>>>)</h4></section></summary><div class="docblock"><p>Record that playback is being stopped by an expiring sleep timer.</p>
|
||
<p>Stopping the backend makes it fire its ended callback (ExoPlayer does on
|
||
Android), which lands in <code>on_playback_ended</code>. Without an end reason that
|
||
reads as a natural finish and autoplay advances — defeating the timer.
|
||
<code>UserStop</code> is the honest label: the stop was user-initiated, just via the
|
||
timer they set rather than the stop button.</p>
|
||
<p>Takes the shared slot rather than <code>&self</code> so the sleep-timer thread —
|
||
which owns clones, not the controller — records it the same way.</p>
|
||
<p>TRACES: UR-023, UR-026 | DR-029</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.increment_autoplay_count" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#468-484">Source</a><h4 class="code-header">fn <a href="#method.increment_autoplay_count" class="fn">increment_autoplay_count</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Increment autoplay episode counter. Returns true if limit is reached.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.reset_autoplay_count" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#487-496">Source</a><h4 class="code-header">fn <a href="#method.reset_autoplay_count" class="fn">reset_autoplay_count</a>(&self)</h4></section></summary><div class="docblock"><p>Reset autoplay episode counter (called on manual play actions)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.play_item" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#499-515">Source</a><h4 class="code-header">pub fn <a href="#method.play_item" class="fn">play_item</a>(&self, item: <a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Load and play a single item (also sets the queue to contain only this item)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_current_item" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#528-546">Source</a><h4 class="code-header">pub fn <a href="#method.set_current_item" class="fn">set_current_item</a>(&self, item: <a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set the current queue item without loading it into the playback backend.</p>
|
||
<p>Used on platforms where video is rendered outside the native backend
|
||
(Linux WebKitGTK HTML5 <video>): the queue/UI state must reflect the
|
||
item, but MPV must not start a redundant decode for it.</p>
|
||
<p>Not gated to Linux. Its caller stopped being a <code>#[cfg]</code> branch and became
|
||
a runtime question — “does this renderer draw the picture?” — so the
|
||
<code>else</code> arm is compiled on every platform even where it never runs. The
|
||
gate outliving its caller broke the Android build outright, which went
|
||
unnoticed because nothing built for Android afterwards.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.load_and_play" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#550-628">Source</a><h4 class="code-header">pub fn <a href="#method.load_and_play" class="fn">load_and_play</a>(&self, item: &<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Load and play an item without modifying the queue
|
||
Use this when the queue is already set up and you just want to play a specific item from it</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.play_queue" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#631-633">Source</a><h4 class="code-header">pub fn <a href="#method.play_queue" class="fn">play_queue</a>(
|
||
&self,
|
||
items: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>>,
|
||
start_index: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.usize.html">usize</a>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set the queue and start playing from the specified index</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.play_queue_from" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#641-677">Source</a><h4 class="code-header">pub fn <a href="#method.play_queue_from" class="fn">play_queue_from</a>(
|
||
&self,
|
||
items: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>>,
|
||
start_index: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.usize.html">usize</a>,
|
||
start_position: <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set the queue and start playing from the specified index, optionally
|
||
resuming the starting track at <code>start_position</code> (seconds).</p>
|
||
<p>The seek happens immediately after load so the backend never audibly
|
||
starts at 0 and there’s no race against a fixed delay. Used when taking
|
||
over playback from a remote session.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_queue" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#684-694">Source</a><h4 class="code-header">pub fn <a href="#method.set_queue" class="fn">set_queue</a>(
|
||
&self,
|
||
items: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>>,
|
||
start_index: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.usize.html">usize</a>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Replace the queue without starting local playback.</p>
|
||
<p>Used when we’re controlling a remote session: the tracks play on the
|
||
remote device, but we keep the local queue in sync so the UI reflects
|
||
what’s playing and a later transfer-to-local has the queue to resume.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_html5_active" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#700-702">Source</a><h4 class="code-header">pub fn <a href="#method.is_html5_active" class="fn">is_html5_active</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>True while webview-rendered media (HTML5 <code><video></code>/<code><audio></code>) is the real
|
||
player, so transport must be routed to it rather than the native backend.</p>
|
||
<p>TRACES: UR-005 | DR-097</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.html5_is_playing" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#708-710">Source</a><h4 class="code-header">pub fn <a href="#method.html5_is_playing" class="fn">html5_is_playing</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Whether the webview element last reported itself as playing. Meaningless
|
||
unless <a href="struct.PlayerController.html#method.is_html5_active" title="method jellytau_lib::player::PlayerController::is_html5_active"><code>Self::is_html5_active</code></a> is true.</p>
|
||
<p>TRACES: UR-005 | DR-097</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.emit_html5_control" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#713-720">Source</a><h4 class="code-header">fn <a href="#method.emit_html5_control" class="fn">emit_html5_control</a>(&self, action: &<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.str.html">str</a>)</h4></section></summary><div class="docblock"><p>Send a transport intent to the webview element that is rendering media.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.play" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#723-733">Source</a><h4 class="code-header">pub fn <a href="#method.play" class="fn">play</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Play/resume playback</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.pause" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#736-743">Source</a><h4 class="code-header">pub fn <a href="#method.pause" class="fn">pause</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Pause playback</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.toggle_playback" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#752-768">Source</a><h4 class="code-header">pub fn <a href="#method.toggle_playback" class="fn">toggle_playback</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Toggle play/pause.</p>
|
||
<p>The decision is made HERE, from authoritative state — the reported webview
|
||
state for HTML5-rendered media, or the native backend’s state otherwise.
|
||
The frontend must never decide this from the DOM (see DR-097).</p>
|
||
<p>TRACES: UR-005 | DR-097</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.stop" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#771-819">Source</a><h4 class="code-header">pub fn <a href="#method.stop" class="fn">stop</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Stop playback</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report_stopped_at" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#834-853">Source</a><h4 class="code-header">fn <a href="#method.report_stopped_at" class="fn">report_stopped_at</a>(&self, jellyfin_id: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>)</h4></section></summary><div class="docblock"><p>Tell Jellyfin playback stopped at <code>position</code>, unless that position is
|
||
zero.</p>
|
||
<p>Jellyfin stores the reported position as the resume point, so a zero is
|
||
not a harmless no-op — it is an instruction to forget where the viewer
|
||
was. And it is never <em>information</em>: nobody watched zero seconds of
|
||
anything, so every zero this app ever sent came from asking a player that
|
||
was not rendering the media (webview video, or a handoff whose first tick
|
||
had not landed). On a device trace, 14 of 14 stop reports in 35 minutes
|
||
were zeroes, one of them 40s after the frontend had correctly reported
|
||
15:22 for the same episode.</p>
|
||
<p>TRACES: UR-025, UR-005 | DR-179 | UT-178</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.next" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#859-879">Source</a><h4 class="code-header">pub fn <a href="#method.next" class="fn">next</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Skip to next track</p>
|
||
<p>Note: load_and_play sets EndReason::NewTrackLoaded to prevent autoplay
|
||
from triggering when the current track’s EndFile event fires</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.previous" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#885-913">Source</a><h4 class="code-header">pub fn <a href="#method.previous" class="fn">previous</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Skip to previous track</p>
|
||
<p>Note: load_and_play sets EndReason::NewTrackLoaded to prevent autoplay
|
||
from triggering when the current track’s EndFile event fires</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.seek" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#921-924">Source</a><h4 class="code-header">pub fn <a href="#method.seek" class="fn">seek</a>(&self, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Seek to a position in seconds, <strong>on the player’s own timeline</strong>.</p>
|
||
<p>During a background-audio handoff that timeline is relative to the handoff
|
||
point, so this is not the call a lockscreen scrub or a UI seek wants — use
|
||
<a href="struct.PlayerController.html#method.seek_absolute" title="method jellytau_lib::player::PlayerController::seek_absolute"><code>seek_absolute</code></a>, which speaks the episode’s
|
||
timeline and is what every caller outside the player itself means.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.seek_absolute" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#943-964">Source</a><h4 class="code-header">pub async fn <a href="#method.seek_absolute" class="fn">seek_absolute</a>(&self, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>Seek to an <strong>absolute</strong> position on the item’s own timeline.</p>
|
||
<p>This is the boundary every outside seek comes through — the UI, the
|
||
lockscreen scrubber, a headset gesture — because all of them are looking
|
||
at the whole episode, not at whatever fragment of it the player happens to
|
||
be streaming.</p>
|
||
<p>Outside a background-audio handoff the two timelines are the same and this
|
||
is an ordinary seek. Inside one they differ by the handoff base, and the
|
||
stream cannot be seeked at all: <code>/Audio/{id}/universal</code> is a chunked
|
||
transcode with no length, so ExoPlayer either refuses or clamps — and a
|
||
clamped seek lands at stream zero, which is the handoff point. That is the
|
||
“jumps back to where I locked the screen” symptom. Honouring the seek means
|
||
re-opening the URL at the new position, which is exactly what the
|
||
truncation recovery already does, so it shares <code>resume_stream_at</code>.</p>
|
||
<p>TRACES: UR-040, UR-005 | DR-159 | UT-155</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_volume" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#967-969">Source</a><h4 class="code-header">pub fn <a href="#method.set_volume" class="fn">set_volume</a>(&self, volume: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f32.html">f32</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set volume (0.0 - 1.0)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_audio_track" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#972-975">Source</a><h4 class="code-header">pub fn <a href="#method.set_audio_track" class="fn">set_audio_track</a>(&self, stream_index: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.i32.html">i32</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set the active audio track by stream index</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_subtitle_track" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#978-981">Source</a><h4 class="code-header">pub fn <a href="#method.set_subtitle_track" class="fn">set_subtitle_track</a>(
|
||
&self,
|
||
stream_index: <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.i32.html">i32</a>>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set the active subtitle track by stream index (None to disable subtitles)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.state" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#984-1004">Source</a><h4 class="code-header">pub fn <a href="#method.state" class="fn">state</a>(&self) -> <a class="enum" href="state/enum.PlayerState.html" title="enum jellytau_lib::player::state::PlayerState">PlayerState</a></h4></section></summary><div class="docblock"><p>Get current state</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.capabilities" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1009-1011">Source</a><h4 class="code-header">pub fn <a href="#method.capabilities" class="fn">capabilities</a>(&self) -> <a class="struct" href="media_player/struct.Capabilities.html" title="struct jellytau_lib::player::media_player::Capabilities">Capabilities</a></h4></section></summary><div class="docblock"><p>What the engine currently rendering can do.</p>
|
||
<p>TRACES: UR-081 | DR-246</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.position" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1014-1016">Source</a><h4 class="code-header">pub fn <a href="#method.position" class="fn">position</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a></h4></section></summary><div class="docblock"><p>Get current position</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.absolute_position" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1040-1050">Source</a><h4 class="code-header">pub fn <a href="#method.absolute_position" class="fn">absolute_position</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a></h4></section></summary><div class="docblock"><p>The position on the <strong>item’s own timeline</strong>, whatever is rendering it.</p>
|
||
<p>This is what every outbound position must be taken from — the resume point
|
||
sent to Jellyfin, the point the video reloads at when a handoff ends, the
|
||
truncation comparison. <code>position()</code> alone answers for exactly one of the
|
||
three ways this app plays media, and reads 0 for the other two:</p>
|
||
<ul>
|
||
<li><strong>Webview <code><video></code>/<code><audio></code></strong>: nothing is loaded into the native
|
||
backend, so its position is a permanent 0. The element’s own reports are
|
||
the only reading there is.</li>
|
||
<li><strong>Background-audio handoff</strong>: the audio-only stream’s zero is the
|
||
handoff point, and the base is added at the native tick boundary
|
||
(DR-159) — so before the first tick lands, nothing has applied it.
|
||
Flooring at the base is exact rather than approximate: the stream cannot
|
||
physically be behind its own starting point.</li>
|
||
<li><strong>Native playback</strong>: the backend is authoritative and both other terms
|
||
are zero, so the max is its own value.</li>
|
||
</ul>
|
||
<p>Returning to the foreground during that pre-first-tick window is what
|
||
restarted an episode from 0:00 and wiped its server-side resume point.</p>
|
||
<p>TRACES: UR-040, UR-005, UR-025 | DR-178 | UT-176, UT-177</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.observed_duration" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1055-1057">Source</a><h4 class="code-header">pub fn <a href="#method.observed_duration" class="fn">observed_duration</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>></h4></section></summary><div class="docblock"><p>The duration last reported by webview-rendered media, if any.</p>
|
||
<p>TRACES: UR-005 | DR-178 | UT-177</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.clear_reported_time" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1066-1068">Source</a><h4 class="code-header">fn <a href="#method.clear_reported_time" class="fn">clear_reported_time</a>(&self)</h4></section></summary><div class="docblock"><p>Forget what webview-rendered media reported.</p>
|
||
<p>Called wherever that element stops being the player — it was torn down,
|
||
a handoff took over, or a different item is loading. A stale position
|
||
outliving its element would be reported against whatever plays next.</p>
|
||
<p>TRACES: UR-005 | DR-178 | UT-177</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_report_sink" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1075-1077">Source</a><h4 class="code-header">pub fn <a href="#method.set_report_sink" class="fn">set_report_sink</a>(&self, sink: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="trait.PlaybackReportSink.html" title="trait jellytau_lib::player::PlaybackReportSink">PlaybackReportSink</a>>)</h4></section></summary><div class="docblock"><p>Replace the sink playback reports go to. Tests capture; production wires
|
||
the <code>PlaybackReporter</code> at construction and never swaps it.</p>
|
||
<p>TRACES: UR-025 | DR-179</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1083-1086">Source</a><h4 class="code-header">fn <a href="#method.report" class="fn">report</a>(&self, operation: <a class="enum" href="../playback_reporting/reporter/enum.PlaybackOperation.html" title="enum jellytau_lib::playback_reporting::reporter::PlaybackOperation">PlaybackOperation</a>)</h4></section></summary><div class="docblock"><p>Send a playback report. Fire-and-forget by contract, so callers can do
|
||
this while holding nothing and waiting for nothing.</p>
|
||
<p>TRACES: UR-025 | DR-179</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.current_jellyfin_id" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1089-1094">Source</a><h4 class="code-header">fn <a href="#method.current_jellyfin_id" class="fn">current_jellyfin_id</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>The Jellyfin id of whatever is currently queued, if it has one.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.duration" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1104-1133">Source</a><h4 class="code-header">pub fn <a href="#method.duration" class="fn">duration</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>></h4></section></summary><div class="docblock"><p>Get duration.</p>
|
||
<p>Falls back to what webview-rendered media reported for the same reason
|
||
<a href="struct.PlayerController.html#method.absolute_position" title="method jellytau_lib::player::PlayerController::absolute_position"><code>absolute_position</code></a> does: on that path nothing
|
||
is loaded into the native backend, so its duration is <code>None</code> and the
|
||
element’s report is the only one there is.</p>
|
||
<p>TRACES: UR-005 | DR-178</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.queue" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1136-1138">Source</a><h4 class="code-header">pub fn <a href="#method.queue" class="fn">queue</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex">Mutex</a><<a class="struct" href="queue/struct.QueueManager.html" title="struct jellytau_lib::player::queue::QueueManager">QueueManager</a>>> <a href="#" class="tooltip" data-notable-ty="Arc<Mutex<QueueManager>>">ⓘ</a></h4></section></summary><div class="docblock"><p>Get queue reference</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.current_is_audio_episode" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1148-1156">Source</a><h4 class="code-header">pub fn <a href="#method.current_is_audio_episode" class="fn">current_is_audio_episode</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>True when the current item is a TV episode being played in audio-only
|
||
(background) mode — i.e. an <code>item_type == "Episode"</code> item loaded as
|
||
<code>MediaType::Audio</code>. Used to decide whether the backend must drive the
|
||
next-episode advance itself (the frontend is suspended in the background).</p>
|
||
<p>Only <em>called</em> from the Android autoplay dispatch (<code>#[cfg(android)]</code>), but
|
||
compiled and unit-tested on the host, hence <code>allow(dead_code)</code> off-Android.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.clear_queue" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1161-1163">Source</a><h4 class="code-header">pub fn <a href="#method.clear_queue" class="fn">clear_queue</a>(&self)</h4></section></summary><div class="docblock"><p>Clear the queue entirely (used when playback genuinely stops, e.g. the
|
||
sleep timer fires or the queue ends with repeat off). Pair with
|
||
<code>emit_queue_changed</code> so the frontend hides the mini player.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.toggle_shuffle" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1166-1168">Source</a><h4 class="code-header">pub fn <a href="#method.toggle_shuffle" class="fn">toggle_shuffle</a>(&self)</h4></section></summary><div class="docblock"><p>Toggle shuffle</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.cycle_repeat" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1171-1173">Source</a><h4 class="code-header">pub fn <a href="#method.cycle_repeat" class="fn">cycle_repeat</a>(&self)</h4></section></summary><div class="docblock"><p>Cycle repeat mode</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_shuffle" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1176-1178">Source</a><h4 class="code-header">pub fn <a href="#method.is_shuffle" class="fn">is_shuffle</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if shuffle is enabled</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.repeat_mode" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1181-1183">Source</a><h4 class="code-header">pub fn <a href="#method.repeat_mode" class="fn">repeat_mode</a>(&self) -> <a class="enum" href="queue/enum.RepeatMode.html" title="enum jellytau_lib::player::queue::RepeatMode">RepeatMode</a></h4></section></summary><div class="docblock"><p>Get repeat mode</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.volume" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1186-1188">Source</a><h4 class="code-header">pub fn <a href="#method.volume" class="fn">volume</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f32.html">f32</a></h4></section></summary><div class="docblock"><p>Get current volume (0.0 - 1.0)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.muted" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1191-1193">Source</a><h4 class="code-header">pub fn <a href="#method.muted" class="fn">muted</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if muted</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_audio_settings" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1196-1198">Source</a><h4 class="code-header">pub fn <a href="#method.set_audio_settings" class="fn">set_audio_settings</a>(
|
||
&mut self,
|
||
settings: &<a class="struct" href="../settings/struct.AudioSettings.html" title="struct jellytau_lib::settings::AudioSettings">AudioSettings</a>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="backend/struct.PlayerError.html" title="struct jellytau_lib::player::backend::PlayerError">PlayerError</a>></h4></section></summary><div class="docblock"><p>Set audio settings (crossfade, gapless, normalization)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.audio_settings" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1201-1203">Source</a><h4 class="code-header">pub fn <a href="#method.audio_settings" class="fn">audio_settings</a>(&self) -> <a class="struct" href="../settings/struct.AudioSettings.html" title="struct jellytau_lib::settings::AudioSettings">AudioSettings</a></h4></section></summary><div class="docblock"><p>Get current audio settings</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_event_emitter" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1208-1211">Source</a><h4 class="code-header">pub fn <a href="#method.set_event_emitter" class="fn">set_event_emitter</a>(&self, emitter: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="events/trait.PlayerEventEmitter.html" title="trait jellytau_lib::player::events::PlayerEventEmitter">PlayerEventEmitter</a>>)</h4></section></summary><div class="docblock"><p>Set the event emitter for notifications</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.event_emitter" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1214-1216">Source</a><h4 class="code-header">pub fn <a href="#method.event_emitter" class="fn">event_emitter</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="events/trait.PlayerEventEmitter.html" title="trait jellytau_lib::player::events::PlayerEventEmitter">PlayerEventEmitter</a>>></h4></section></summary><div class="docblock"><p>Get the event emitter</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.sleep_timer_state" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1219-1221">Source</a><h4 class="code-header">pub fn <a href="#method.sleep_timer_state" class="fn">sleep_timer_state</a>(&self) -> <a class="struct" href="sleep_timer/struct.SleepTimerState.html" title="struct jellytau_lib::player::sleep_timer::SleepTimerState">SleepTimerState</a></h4></section></summary><div class="docblock"><p>Get sleep timer state</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_sleep_timer" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1224-1237">Source</a><h4 class="code-header">pub fn <a href="#method.set_sleep_timer" class="fn">set_sleep_timer</a>(&self, mode: <a class="enum" href="sleep_timer/enum.SleepTimerMode.html" title="enum jellytau_lib::player::sleep_timer::SleepTimerMode">SleepTimerMode</a>)</h4></section></summary><div class="docblock"><p>Set sleep timer mode (in-memory only, not persisted)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.cancel_sleep_timer" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1240-1242">Source</a><h4 class="code-header">pub fn <a href="#method.cancel_sleep_timer" class="fn">cancel_sleep_timer</a>(&self)</h4></section></summary><div class="docblock"><p>Cancel sleep timer</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.start_timer_thread" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1245-1305">Source</a><h4 class="code-header">fn <a href="#method.start_timer_thread" class="fn">start_timer_thread</a>(&self)</h4></section></summary><div class="docblock"><p>Start background timer thread for sleep timer countdown updates</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.emit_sleep_timer_changed" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1308-1317">Source</a><h4 class="code-header">fn <a href="#method.emit_sleep_timer_changed" class="fn">emit_sleep_timer_changed</a>(&self)</h4></section></summary><div class="docblock"><p>Emit sleep timer changed event to frontend</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.emit_queue_changed" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1320-1338">Source</a><h4 class="code-header">pub fn <a href="#method.emit_queue_changed" class="fn">emit_queue_changed</a>(&self)</h4></section></summary><div class="docblock"><p>Emit queue changed event to frontend</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report_html5_state" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1354-1389">Source</a><h4 class="code-header">pub fn <a href="#method.report_html5_state" class="fn">report_html5_state</a>(&self, state: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, media_id: <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>>)</h4></section></summary><div class="docblock"><p>Report an HTML5 <video> state change (playing/paused/loading/stopped).</p>
|
||
<p>Re-emits a <code>StateChanged</code> event identical to what MpvBackend/ExoPlayer
|
||
would emit, so <code>playerEvents.ts</code> needs no HTML5-specific branch.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report_html5_position" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1395-1410">Source</a><h4 class="code-header">pub fn <a href="#method.report_html5_position" class="fn">report_html5_position</a>(&self, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>, duration: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>)</h4></section></summary><div class="docblock"><p>Report an HTML5 <video> position tick.</p>
|
||
<p>Re-emits a <code>PositionUpdate</code> event mirroring the native backends’ periodic
|
||
position updates (the adapter is expected to throttle to ~250ms like MPV).</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report_progress_throttled" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1426-1445">Source</a><h4 class="code-header">fn <a href="#method.report_progress_throttled" class="fn">report_progress_throttled</a>(&self, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>)</h4></section></summary><div class="docblock"><p>Send a throttled progress report to Jellyfin.</p>
|
||
<p>Progress is what makes a position survive anything other than a clean
|
||
exit — a crash, a swipe-away, a battery death — and lets another device
|
||
resume mid-episode. Webview-rendered media reported none: the frontend
|
||
service writes progress to the local DB only, and Rust had no position
|
||
for it to report. A device trace covering 35 minutes of playback hit
|
||
<code>/Sessions/Playing/Progress</code> exactly zero times.</p>
|
||
<p>The throttler is the one the controller already owned for this purpose
|
||
(30s per item), so ticks arriving four times a second cost one request
|
||
per half-minute.</p>
|
||
<p>TRACES: UR-005, UR-025 | DR-179 | UT-180</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report_html5_media_loaded" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1449-1457">Source</a><h4 class="code-header">pub fn <a href="#method.report_html5_media_loaded" class="fn">report_html5_media_loaded</a>(&self, duration: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>)</h4></section></summary><div class="docblock"><p>Report that the HTML5 <video> element finished loading and knows its
|
||
duration. Mirrors the native <code>MediaLoaded</code> event.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.autoplay_settings" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1462-1464">Source</a><h4 class="code-header">pub fn <a href="#method.autoplay_settings" class="fn">autoplay_settings</a>(&self) -> <a class="struct" href="autoplay/struct.AutoplaySettings.html" title="struct jellytau_lib::player::autoplay::AutoplaySettings">AutoplaySettings</a></h4></section></summary><div class="docblock"><p>Get autoplay settings</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_autoplay_settings" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1467-1470">Source</a><h4 class="code-header">pub fn <a href="#method.set_autoplay_settings" class="fn">set_autoplay_settings</a>(&self, settings: <a class="struct" href="autoplay/struct.AutoplaySettings.html" title="struct jellytau_lib::player::autoplay::AutoplaySettings">AutoplaySettings</a>)</h4></section></summary><div class="docblock"><p>Set autoplay settings (in-memory only, persistence handled by command layer)</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.cancel_autoplay_countdown" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1473-1477">Source</a><h4 class="code-header">pub fn <a href="#method.cancel_autoplay_countdown" class="fn">cancel_autoplay_countdown</a>(&self)</h4></section></summary><div class="docblock"><p>Cancel active autoplay countdown</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.on_playback_ended" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1483-1648">Source</a><h4 class="code-header">pub async fn <a href="#method.on_playback_ended" class="fn">on_playback_ended</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="enum" href="autoplay/enum.AutoplayDecision.html" title="enum jellytau_lib::player::autoplay::AutoplayDecision">AutoplayDecision</a>, <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>Handle playback ended event - decides what to do next</p>
|
||
<p>Only triggers autoplay if the track finished naturally (EndReason::Finished or None).
|
||
If EndReason is NewTrackLoaded, UserStop, UserSkip, or Error, returns Stop without autoplay.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.report_completion" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1670-1685">Source</a><h4 class="code-header">fn <a href="#method.report_completion" class="fn">report_completion</a>(&self, item: &<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>)</h4></section></summary><div class="docblock"><p>Report an item that just finished as stopped at its runtime, so Jellyfin
|
||
marks it played.</p>
|
||
<p>Jellyfin decides “watched” from the <code>PlaybackStopped</code> report and its
|
||
position — no report, no completion, however much of the episode was
|
||
actually heard. In the foreground the frontend sends one when the
|
||
<code><video></code> ends. In background audio-only mode there is nobody: the webview
|
||
is suspended and its element was torn down at the handoff, while the
|
||
backend drove the advance to the next episode and said nothing about the
|
||
one that ended. An episode listened to end-to-end on the lockscreen
|
||
therefore never counted, and (before DR-179) was often reset to 0 by the
|
||
stop report that followed.</p>
|
||
<p>Scoped to the audio-only handoff — the case the frontend provably cannot
|
||
report — so foreground playback keeps its single existing report rather
|
||
than gaining a second one. Music tracks ending natively remain
|
||
unreported; that is the same gap through a different door and wants its
|
||
own change.</p>
|
||
<p>TRACES: UR-040, UR-025 | DR-179 | UT-179</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.set_background_audio_base" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1691-1693">Source</a><h4 class="code-header">pub fn <a href="#method.set_background_audio_base" class="fn">set_background_audio_base</a>(&self, seconds: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>)</h4></section></summary><div class="docblock"><p>Record the base offset of a background-audio handoff (the position the
|
||
video was handed off at, which is the audio stream’s zero).</p>
|
||
<p>TRACES: UR-040 | DR-052</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.enter_background_audio" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1705-1712">Source</a><h4 class="code-header">pub fn <a href="#method.enter_background_audio" class="fn">enter_background_audio</a>(&self, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>)</h4></section></summary><div class="docblock"><p>Enter a background-audio handoff at <code>position</code> (the video’s position, and
|
||
therefore the audio stream’s zero).</p>
|
||
<p>Hands transport authority to the native audio player: the webview
|
||
<code><video></code> is about to be torn down, so its last reports — including the
|
||
<code>pause</code> the teardown itself fires — must not keep it looking like the
|
||
player. Without this the lockscreen pause emitted a ControlCommand at a
|
||
dead element and the audio played straight through it.</p>
|
||
<p>TRACES: UR-040, UR-005 | DR-052, DR-097</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.exit_background_audio" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1721-1724">Source</a><h4 class="code-header">pub fn <a href="#method.exit_background_audio" class="fn">exit_background_audio</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a></h4></section></summary><div class="docblock"><p>Leave a background-audio handoff, returning the base offset to add to the
|
||
native player’s relative position.</p>
|
||
<p>The webview <code><video></code> becomes the player again once it reloads, so its
|
||
reports are honoured from here on.</p>
|
||
<p>TRACES: UR-040, UR-005 | DR-052, DR-097</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_background_audio_active" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1730-1732">Source</a><h4 class="code-header">pub fn <a href="#method.is_background_audio_active" class="fn">is_background_audio_active</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>True while the native audio player owns playback via a background-audio
|
||
handoff.</p>
|
||
<p>TRACES: UR-040 | DR-052</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.take_background_audio_base" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1737-1740">Source</a><h4 class="code-header">pub fn <a href="#method.take_background_audio_base" class="fn">take_background_audio_base</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a></h4></section></summary><div class="docblock"><p>Read and clear the background-audio base offset.</p>
|
||
<p>TRACES: UR-040 | DR-052</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.auto_advance_to_next_episode" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1752-1786">Source</a><h4 class="code-header">pub async fn <a href="#method.auto_advance_to_next_episode" class="fn">auto_advance_to_next_episode</a>(
|
||
&self,
|
||
next_episode: <a class="struct" href="../repository/types/struct.MediaItem.html" title="struct jellytau_lib::repository::types::MediaItem">MediaItem</a>,
|
||
countdown_seconds: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.u32.html">u32</a>,
|
||
)</h4></section></summary><div class="docblock"><p>Perform the auto-advance for a <code>ShowNextEpisodePopup</code> decision.</p>
|
||
<p>Single place both end-of-playback dispatchers agree on: the Android JNI
|
||
callback (<code>nativeOnPlaybackEnded</code>) and the frontend-invoked command
|
||
(<code>player_on_playback_ended</code>). They used to each carry their own copy of
|
||
this branch, and the command’s copy was missing the background-audio case
|
||
entirely — so an audio-only episode ending while backgrounded only ever
|
||
started a countdown that nothing could act on.</p>
|
||
<p>TRACES: UR-040, UR-023 | DR-052</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_audio_only_video" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1791-1793">Source</a><h4 class="code-header">fn <a href="#method.is_audio_only_video" class="fn">is_audio_only_video</a>(item: &<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>A video item played through the native <em>audio</em> path — i.e. the background
|
||
audio-only handoff, the only place a length-less progressive transcode is
|
||
used. Jellyfin’s item-type taxonomy stays in Rust (CLAUDE.md).</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.claim_stream_resume" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1809-1834">Source</a><h4 class="code-header">fn <a href="#method.claim_stream_resume" class="fn">claim_stream_resume</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>, <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.u32.html">u32</a>)></h4></section></summary><div class="docblock"><p>Claim a resume attempt for the current stream, returning the absolute
|
||
position to re-open at and the 1-based attempt number. <code>None</code> when the
|
||
current item cannot meaningfully be re-requested, or when retrying at this
|
||
position has stopped helping.</p>
|
||
<p>Only <code>Remote</code> sources qualify. A downloaded file cannot fail because of
|
||
the network, so re-opening one would paper over a real read error; a
|
||
<code>DirectUrl</code> is a plugin’s endpoint with no Jellyfin item behind it.</p>
|
||
<p>The player’s position is relative to the stream’s own zero (the handoff
|
||
URL’s <code>StartTimeTicks</code>), so the base is added back to get an absolute one.
|
||
It is zero for everything else, where positions are already absolute.</p>
|
||
<p>TRACES: UR-040, UR-004 | DR-129 | UT-117</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.truncated_stream_resume_position" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1842-1876">Source</a><h4 class="code-header">fn <a href="#method.truncated_stream_resume_position" class="fn">truncated_stream_resume_position</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>></h4></section></summary><div class="docblock"><p>The absolute position to re-open the current stream at, when the reported
|
||
end was really a dropped connection — <code>None</code> when the end looks genuine,
|
||
when this is not an audio-only handoff, or when retrying has stopped
|
||
helping.</p>
|
||
<p>TRACES: UR-040 | DR-129 | UT-117</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.recoverable_error_resume" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1899-1902">Source</a><h4 class="code-header">pub fn <a href="#method.recoverable_error_resume" class="fn">recoverable_error_resume</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>, <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.u64.html">u64</a>)></h4></section></summary><div class="docblock"><p>Where to re-open the current stream after a <em>recoverable</em> playback error,
|
||
plus how many seconds to wait first.</p>
|
||
<p>The media was decoding fine a moment ago, so a mid-playback failure on a
|
||
server stream is the network — and stopping the player (the previous
|
||
behaviour, via the frontend’s error handler) turns a hiccup into “playback
|
||
just died”. Applies to every streamed item, not only the audio-only
|
||
handoff: music and video reach here instead of the truncation path because
|
||
their streams declare a length, so a cut connection surfaces as an error
|
||
rather than a phantom end.</p>
|
||
<p>The wait grows with the attempt number so a short outage has time to
|
||
clear, and the shared budget stops the retries when it doesn’t.</p>
|
||
<p>Called from the Android error callback, which decides in-process, and from
|
||
<code>player_recover_stream</code>, which is how the same decision reaches the
|
||
backends whose event thread has no controller to call — MPV is built
|
||
before the controller exists, so on Linux the error is emitted, echoed by
|
||
the frontend, and decided here.</p>
|
||
<p>TRACES: UR-040, UR-004 | DR-129, DR-130 | UT-117</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.resume_stream_at" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1930-1978">Source</a><h4 class="code-header">pub async fn <a href="#method.resume_stream_at" class="fn">resume_stream_at</a>(&self, position: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.f64.html">f64</a>) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>Re-open the current stream at <code>position</code> after the network cut it short.</p>
|
||
<p>Single place every dispatcher agrees on, for the same reason
|
||
<code>auto_advance_to_next_episode</code> is: the Android JNI callbacks and the
|
||
frontend-invoked command must not disagree about what a failed stream
|
||
means. None of them emits <code>PlaybackEnded</code> for this, so nothing downstream
|
||
clears the queue or tears the session down — from the outside this is a
|
||
buffering hiccup, which is what it actually was.</p>
|
||
<p>Reloads the item <strong>in place</strong> rather than through <code>play_item</code>, which
|
||
replaces the queue with a single item: recovering a track that way would
|
||
throw away the rest of the album, turning a network blip into lost state.</p>
|
||
<p>Two shapes of stream, two ways back to <code>position</code>:</p>
|
||
<ul>
|
||
<li>The audio-only handoff’s <code>/Audio/{id}/universal</code> transcode is chunked
|
||
with no length, so it cannot be seeked. Its URL is rewritten to start at
|
||
the position instead — edited, not rebuilt from the repository, since it
|
||
already carries the user’s audio track and media source and recovering
|
||
from a network failure must not itself need a network round-trip.</li>
|
||
<li>Everything else (a static file with byte ranges, an HLS playlist)
|
||
declares its whole timeline, so re-preparing the URL it already has and
|
||
seeking lands in the right place — and leaves any transcode session
|
||
behind it alone.</li>
|
||
</ul>
|
||
<p>TRACES: UR-040, UR-004 | DR-129 | UT-117</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.advance_to_next_episode_audio_only" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#1994-2061">Source</a><h4 class="code-header">pub async fn <a href="#method.advance_to_next_episode_audio_only" class="fn">advance_to_next_episode_audio_only</a>(
|
||
&self,
|
||
next_episode_id: &<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.str.html">str</a>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>Advance to the next episode while playing audio-only in the background.</p>
|
||
<p>The normal autoplay-next path navigates the frontend to <code>/player/<id></code>,
|
||
which is unavailable when the app is backgrounded and the WebView is
|
||
suspended. This drives the advance entirely in the backend: build the next
|
||
episode’s <em>audio-only</em> stream URL and load it into the native audio player,
|
||
so playback continues without any frontend involvement (UR-040).</p>
|
||
<p><code>next_episode_id</code> is the Jellyfin item ID of the episode to play next.</p>
|
||
<p>Reached through <code>auto_advance_to_next_episode</code>, which gates it on
|
||
<code>current_is_audio_episode()</code> — only ever true after a background-audio
|
||
handoff (Android), but compiled and unit-tested on every platform.
|
||
TRACES: UR-040, UR-023 | DR-052</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.on_video_playback_ended" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#2069-2154">Source</a><h4 class="code-header">pub async fn <a href="#method.on_video_playback_ended" class="fn">on_video_playback_ended</a>(
|
||
&self,
|
||
item_id: &<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.str.html">str</a>,
|
||
repo: <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="../repository/trait.MediaRepository.html" title="trait jellytau_lib::repository::MediaRepository">MediaRepository</a>>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="enum" href="autoplay/enum.AutoplayDecision.html" title="enum jellytau_lib::player::autoplay::AutoplayDecision">AutoplayDecision</a>, <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>Handle video playback ended from HTML5 video element.</p>
|
||
<p>HTML5 video plays independently of the Rust backend, so the backend
|
||
queue has no knowledge of the video item. This method bypasses the
|
||
queue lookup and end_reason check, using the provided Jellyfin item ID
|
||
to look up the item and check for next episodes.</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.is_episode_item" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#2163-2169">Source</a><h4 class="code-header">async fn <a href="#method.is_episode_item" class="fn">is_episode_item</a>(&self, item: &<a class="struct" href="media/struct.MediaItem.html" title="struct jellytau_lib::player::media::MediaItem">MediaItem</a>) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Check if a media item is an episode (has Jellyfin ID to query).</p>
|
||
<p>An explicit <code>item_type == "Episode"</code> wins so that a TV episode handed off
|
||
to the audio path for background playback (UR-040) is still recognised as
|
||
an episode — otherwise autoplay would fall through to the queue-based
|
||
audio path, find nothing next, and stop at the episode boundary. When the
|
||
type is unknown we fall back to the historical heuristic (video == episode).</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.fetch_next_episode_for_item" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#2177-2256">Source</a><h4 class="code-header">async fn <a href="#method.fetch_next_episode_for_item" class="fn">fetch_next_episode_for_item</a>(
|
||
&self,
|
||
item_id: &<a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.str.html">str</a>,
|
||
repo: &<a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a><dyn <a class="trait" href="../repository/trait.MediaRepository.html" title="trait jellytau_lib::repository::MediaRepository">MediaRepository</a>>,
|
||
) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="enum" href="https://doc.rust-lang.org/1.97.1/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="struct" href="../repository/types/struct.MediaItem.html" title="struct jellytau_lib::repository::types::MediaItem">MediaItem</a>, <a class="struct" href="../repository/types/struct.MediaItem.html" title="struct jellytau_lib::repository::types::MediaItem">MediaItem</a>)>, <a class="struct" href="https://doc.rust-lang.org/1.97.1/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>></h4></section></summary><div class="docblock"><p>Fetch next episode for a series by looking up the season’s episodes
|
||
sorted by index number and picking the one after the current episode.</p>
|
||
<p>This is deterministic and doesn’t depend on Jellyfin’s “Next Up” API
|
||
(which relies on watch history that may not be updated yet due to
|
||
the async nature of playback progress reporting).</p>
|
||
</div></details><details class="toggle method-toggle" open><summary><section id="method.start_autoplay_countdown" class="method"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#2259-2295">Source</a><h4 class="code-header">pub fn <a href="#method.start_autoplay_countdown" class="fn">start_autoplay_countdown</a>(
|
||
&self,
|
||
_next_item: <a class="struct" href="../repository/types/struct.MediaItem.html" title="struct jellytau_lib::repository::types::MediaItem">MediaItem</a>,
|
||
countdown_seconds: <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.u32.html">u32</a>,
|
||
)</h4></section></summary><div class="docblock"><p>Start autoplay countdown thread</p>
|
||
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Default-for-PlayerController" class="impl"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#2298-2311">Source</a><a href="#impl-Default-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.default" class="method trait-impl"><a class="src rightside" href="../../src/jellytau_lib/player/mod.rs.html#2299-2310">Source</a><a href="#method.default" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/default/trait.Default.html#tymethod.default" class="fn">default</a>() -> Self</h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a href="https://doc.rust-lang.org/1.97.1/core/default/trait.Default.html#tymethod.default">Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-PlayerController" class="impl"><a href="#impl-Freeze-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section><section id="impl-RefUnwindSafe-for-PlayerController" class="impl"><a href="#impl-RefUnwindSafe-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.97.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section><section id="impl-Send-for-PlayerController" class="impl"><a href="#impl-Send-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section><section id="impl-Sync-for-PlayerController" class="impl"><a href="#impl-Sync-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section><section id="impl-Unpin-for-PlayerController" class="impl"><a href="#impl-Unpin-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section><section id="impl-UnsafeUnpin-for-PlayerController" class="impl"><a href="#impl-UnsafeUnpin-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.UnsafeUnpin.html" title="trait core::marker::UnsafeUnpin">UnsafeUnpin</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section><section id="impl-UnwindSafe-for-PlayerController" class="impl"><a href="#impl-UnwindSafe-for-PlayerController" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/1.97.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.PlayerController.html" title="struct jellytau_lib::player::PlayerController">PlayerController</a></h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/any.rs.html#141">Source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
|
||
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/any.rs.html#142">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/1.97.1/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.97.1/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/borrow.rs.html#212">Source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><T> for T<div class="where">where
|
||
T: ?<a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/borrow.rs.html#214">Source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.reference.html">&T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.97.1/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/borrow.rs.html#221">Source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T<div class="where">where
|
||
T: ?<a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/borrow.rs.html#222">Source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/1.97.1/std/primitive.reference.html">&mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.97.1/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#786">Source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#789">Source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -> T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
|
||
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-T" class="impl"><a href="#impl-Instrument-for-T" class="anchor">§</a><h3 class="code-header">impl<T> Instrument for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.instrument" class="method trait-impl"><a href="#method.instrument" class="anchor">§</a><h4 class="code-header">fn <a class="fn">instrument</a>(self, span: Span) -> Instrumented<Self></h4></section></summary><div class='docblock'>Instruments this type with the provided [<code>Span</code>], returning an
|
||
<code>Instrumented</code> wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a class="fn">in_current_span</a>(self) -> Instrumented<Self></h4></section></summary><div class='docblock'>Instruments this type with the <a href="super::Span::current()">current</a> <a href="crate::Span"><code>Span</code></a>, returning an
|
||
<code>Instrumented</code> wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#768-770">Source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><U> for T<div class="where">where
|
||
U: <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#778">Source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -> U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
|
||
<p>That is, this conversion is whatever the implementation of
|
||
<code><a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
|
||
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-NoneValue-for-T" class="impl"><a href="#impl-NoneValue-for-T" class="anchor">§</a><h3 class="code-header">impl<T> NoneValue for T<div class="where">where
|
||
T: <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/default/trait.Default.html" title="trait core::default::Default">Default</a>,</div></h3></section></summary><div class="impl-items"><section id="associatedtype.NoneType" class="associatedtype trait-impl"><a href="#associatedtype.NoneType" class="anchor">§</a><h4 class="code-header">type <a class="associatedtype">NoneType</a> = T</h4></section><details class="toggle method-toggle" open><summary><section id="method.null_value" class="method trait-impl"><a href="#method.null_value" class="anchor">§</a><h4 class="code-header">fn <a class="fn">null_value</a>() -> T</h4></section></summary><div class='docblock'>The none-equivalent value.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-PolicyExt-for-T" class="impl"><a href="#impl-PolicyExt-for-T" class="anchor">§</a><h3 class="code-header">impl<T> PolicyExt for T<div class="where">where
|
||
T: ?<a class="trait" href="https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.and" class="method trait-impl"><a href="#method.and" class="anchor">§</a><h4 class="code-header">fn <a class="fn">and</a><P, B, E>(self, other: P) -> And<T, P><div class="where">where
|
||
T: Policy<B, E>,
|
||
P: Policy<B, E>,</div></h4></section></summary><div class='docblock'>Create a new <code>Policy</code> that returns [<code>Action::Follow</code>] only if <code>self</code> and <code>other</code> return
|
||
<code>Action::Follow</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.or" class="method trait-impl"><a href="#method.or" class="anchor">§</a><h4 class="code-header">fn <a class="fn">or</a><P, B, E>(self, other: P) -> Or<T, P><div class="where">where
|
||
T: Policy<B, E>,
|
||
P: Policy<B, E>,</div></h4></section></summary><div class='docblock'>Create a new <code>Policy</code> that returns [<code>Action::Follow</code>] if either <code>self</code> or <code>other</code> returns
|
||
<code>Action::Follow</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Same-for-T" class="impl"><a class="src rightside" href="https://docs.rs/typenum/1.19.0/src/typenum/type_operators.rs.html#34">Source</a><a href="#impl-Same-for-T" class="anchor">§</a><h3 class="code-header">impl<T> <a class="trait" href="https://docs.rs/typenum/1.19.0/typenum/type_operators/trait.Same.html" title="trait typenum::type_operators::Same">Same</a> for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl"><a class="src rightside" href="https://docs.rs/typenum/1.19.0/src/typenum/type_operators.rs.html#35">Source</a><a href="#associatedtype.Output" class="anchor">§</a><h4 class="code-header">type <a href="https://docs.rs/typenum/1.19.0/typenum/type_operators/trait.Same.html#associatedtype.Output" class="associatedtype">Output</a> = T</h4></section></summary><div class='docblock'>Should always be <code>Self</code></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#828-830">Source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U> for T<div class="where">where
|
||
U: <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#832">Source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#835">Source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, <T as <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#812-814">Source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><U> for T<div class="where">where
|
||
U: <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#816">Source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = <U as <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.97.1/src/core/convert/mod.rs.html#819">Source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -> <a class="enum" href="https://doc.rust-lang.org/1.97.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a><U, <U as <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-VZip%3CV%3E-for-T" class="impl"><a href="#impl-VZip%3CV%3E-for-T" class="anchor">§</a><h3 class="code-header">impl<V, T> VZip<V> for T<div class="where">where
|
||
V: MultiLane<T>,</div></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -> V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-T" class="impl"><a href="#impl-WithSubscriber-for-T" class="anchor">§</a><h3 class="code-header">impl<T> WithSubscriber for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_subscriber" class="method trait-impl"><a href="#method.with_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_subscriber</a><S>(self, subscriber: S) -> WithDispatch<Self><div class="where">where
|
||
S: <a class="trait" href="https://doc.rust-lang.org/1.97.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><Dispatch>,</div></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
|
||
[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a href="#method.with_current_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_subscriber</a>(self) -> WithDispatch<Self></h4></section></summary><div class='docblock'>Attaches the current <a href="dispatcher#setting-the-default-subscriber">default</a> <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
|
||
[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details></div></details></div><script type="text/json" id="notable-traits-data">{"Arc<EventThrottler>":"<h3>Notable traits for <code><a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R></code></h3><pre><code><div class=\"where\">impl<R> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R><div class=\"where\">where\n R: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a R</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a>,</div></div><div class=\"where\">impl<W> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><W><div class=\"where\">where\n W: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a W</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a>,</div></div>","Arc<Mutex<Option<JellyfinClient>>>":"<h3>Notable traits for <code><a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R></code></h3><pre><code><div class=\"where\">impl<R> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R><div class=\"where\">where\n R: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a R</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a>,</div></div><div class=\"where\">impl<W> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><W><div class=\"where\">where\n W: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a W</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a>,</div></div>","Arc<Mutex<QueueManager>>":"<h3>Notable traits for <code><a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R></code></h3><pre><code><div class=\"where\">impl<R> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R><div class=\"where\">where\n R: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a R</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a>,</div></div><div class=\"where\">impl<W> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><W><div class=\"where\">where\n W: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a W</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a>,</div></div>","Arc<TokioMutex<Option<PlaybackReporter>>>":"<h3>Notable traits for <code><a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R></code></h3><pre><code><div class=\"where\">impl<R> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><R><div class=\"where\">where\n R: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a R</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a>,</div></div><div class=\"where\">impl<W> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> for <a class=\"struct\" href=\"https://doc.rust-lang.org/1.97.1/alloc/sync/struct.Arc.html\" title=\"struct alloc::sync::Arc\">Arc</a><W><div class=\"where\">where\n W: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a> + <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.IoHandle.html\" title=\"trait std::io::IoHandle\">IoHandle</a> + ?<a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/core/marker/trait.Sized.html\" title=\"trait core::marker::Sized\">Sized</a>,\n <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.97.1/std/primitive.reference.html\">&'a W</a>: for<'a> <a class=\"trait\" href=\"https://doc.rust-lang.org/1.97.1/std/io/trait.Write.html\" title=\"trait std::io::Write\">Write</a>,</div></div>"}</script></section></div></main></body></html> |