Source code for pyytlounge.events
import logging
from typing import Optional
from .api import get_thumbnail_url
from .models import State
from .lounge_models import (
_NowPlayingData,
_PlaybackStateData,
_VolumeChangedData,
_AutoplayModeChangedData,
_AdStateData,
_AdPlayingData,
_SubtitlesTrackData,
_AutoplayUpNextData,
_PlaybackSpeedData,
_DisconnectedData,
)
_logger = logging.getLogger(__name__)
[docs]
class PlaybackStateEvent:
"""Contains information related to playback state"""
def __init__(self, data: _PlaybackStateData):
self.current_time: float = float(data["currentTime"])
self.duration: float = float(data["duration"])
self.state = State.parse(data["state"])
[docs]
class NowPlayingEvent:
"""Contains information related to playback state"""
def __init__(self, data: _NowPlayingData):
self.video_id: Optional[str] = data.get("videoId", None)
self.current_time: Optional[float] = (
float(data["currentTime"]) if "currentTime" in data else None
)
self.duration: Optional[float] = float(data["duration"]) if "duration" in data else None
self.state = State.parse(data["state"]) if "state" in data else State.Stopped
[docs]
def get_thumbnail_url(self, thumbnail_idx: int = 0) -> Optional[str]:
"""Returns thumbnail for current video. Use thumbnail idx to get different thumbnails."""
if self.video_id:
return get_thumbnail_url(self.video_id, thumbnail_idx=thumbnail_idx)
return None
[docs]
class VolumeChangedEvent:
"""Contains information related to volume"""
def __init__(self, data: _VolumeChangedData):
self.volume: int = int(data["volume"])
self.muted: bool = data["muted"] == "true"
[docs]
class AutoplayModeChangedEvent:
"""Contains auto play mode"""
def __init__(self, data: _AutoplayModeChangedData):
self.enabled: bool = data["autoplayMode"] == "ENABLED"
self.supported: bool = data["autoplayMode"] != "UNSUPPORTED"
[docs]
class AdStateEvent:
"""Contains information related to ad state"""
def __init__(self, data: _AdStateData):
self.ad_state = State.parse(data["adState"])
self.current_time: float = float(data["currentTime"])
self.is_skip_enabled: bool = data["isSkipEnabled"] == "true"
[docs]
class AdPlayingEvent:
"""Contains information related to ad state"""
def __init__(self, data: _AdPlayingData):
self.ad_video_id: Optional[str] = data.get("adVideoId", None)
self.ad_video_uri: Optional[str] = data.get("adVideoUri", None)
self.ad_title: str = data["adTitle"]
self.is_bumper: bool = data["isBumper"] == "true"
self.is_skippable: bool = data["isSkippable"] == "true"
self.is_skip_enabled: bool = data["isSkipEnabled"] == "true"
self.click_through_url: str = data["clickThroughUrl"]
self.ad_system: str = data["adSystem"]
self.ad_next_params: str = data["adNextParams"]
self.remote_slots_data: Optional[str] = data.get("remoteSlotsData", None)
self.ad_state = State.parse(data["adState"])
self.content_video_id: str = data["contentVideoId"]
self.duration: float = float(data["duration"])
self.current_time: float = float(data["currentTime"])
[docs]
class SubtitlesTrackEvent:
"""Contains information related to subtitles track"""
def __init__(self, data: _SubtitlesTrackData):
self.video_id: str = data["videoId"]
self.track_name: Optional[str] = data.get("trackName", None)
self.language_code: Optional[str] = data.get("languageCode", None)
self.source_language_code: Optional[str] = data.get("sourceLanguageCode", None)
self.language_name: Optional[str] = data.get("languageName", None)
self.kind: Optional[str] = data.get("kind", None)
self.vss_id: Optional[str] = data.get("vss_id", None)
self.caption_id: Optional[str] = data.get("captionId", None)
self.style: Optional[str] = data.get("style", None)
[docs]
class AutoplayUpNextEvent:
"""Contains information related the next video to be played"""
def __init__(self, data: _AutoplayUpNextData):
self.video_id: str = data["videoId"]
[docs]
class PlaybackSpeedEvent:
"""Contains information related to playback speed"""
def __init__(self, data: _PlaybackSpeedData):
self.playback_speed: float = float(data["playbackSpeed"])
[docs]
class DisconnectedEvent:
"""Contains information related to disconnection"""
def __init__(self, data: Optional[_DisconnectedData]):
self.reason: Optional[str] = data.get("reason", None) if data else None