Overview
Streams types manage the state of previously played streams including subtitle/audio preferences, playback speed, and player settings.StreamsBucket
Container for stream items with per-user storage.User ID (Option<UserId>) - None if not authenticated
Map of stream items keyed by meta ID and video ID
Methods
new(uid: UID) -> Self
Create a new empty streams bucket for a user.
last_stream_item(&self, video_id: &str, meta_item: &MetaItem) -> Option<&StreamsItem>
Get the most recent stream item for a video. For series, searches up to 30 videos backwards to find a previously used stream.
StreamsItemKey
Composite key for identifying stream items.Meta item identifier
Video identifier
StreamsItem
Stores information about a previously used stream.The stream that was played
Content type (e.g., “movie”, “series”)
Meta item ID
Video ID
URL of the addon that provided the meta
URL of the addon that provided the stream
Saved playback state (subtitle/audio tracks, speeds, etc.)
Modification time (serialized as
_mtime)Methods
adjusted_state(&self, new_stream: &Stream) -> Option<StreamItemState>
Retrieve adjusted stream state based on the new stream:
- Same source: Retain entire state (subtitle delay, audio delay, tracks, speed, player type)
- Same binge group: Retain tracks, speed, and player type, but clear subtitle/audio delay
- Different source/group: Retain only playback speed and player type
StreamItemState
User-customized playback settings that persist across sessions.Selected subtitle track
Subtitle delay in milliseconds
Subtitle size (platform-dependent units)
Vertical subtitle offset (platform-dependent units)
Selected audio track
Audio delay in milliseconds
Playback speed multiplier (e.g., 1.0 = normal, 1.5 = 1.5x speed)
Player type override
SubtitleTrack
Selected subtitle track information.Track identifier
Whether this is an embedded subtitle or addon subtitle
Subtitle language. Used when playing next stream in same binge group to match tracks by language (in case IDs differ).
AudioTrack
Selected audio track information.Track identifier
Audio language. Used when playing next stream in same binge group to match tracks by language (in case IDs differ).
State Persistence Strategy
The streams bucket implements an intelligent state persistence strategy:Same Source
When the exact same stream is played again, all state is preserved:- Subtitle track, delay, size, and offset
- Audio track and delay
- Playback speed
- Player type
Same Binge Group
When moving to another video in the same binge group (e.g., next episode):- Preserved: Track selections (subtitle/audio), playback speed, player type
- Cleared: Subtitle and audio delay (sync may differ between episodes)
- Track matching: Uses language in addition to ID to handle cases where track order differs
Different Source/Group
When playing a completely different stream:- Preserved: Only playback speed and player type
- Cleared: All track-specific settings
