From d66b187dea7d99510ed2df3fe036b9b4416fbbb8 Mon Sep 17 00:00:00 2001 From: Rafael Moraes <50295204+glomatico@users.noreply.github.com> Date: Wed, 25 Feb 2026 23:32:07 -0300 Subject: [PATCH] Unify decryption key type to DecryptionKey --- votify/interface/audio.py | 4 ++-- votify/interface/base.py | 8 +++----- votify/interface/episode.py | 6 ++---- votify/interface/types.py | 8 +------- votify/interface/video.py | 4 ++-- 5 files changed, 10 insertions(+), 20 deletions(-) diff --git a/votify/interface/audio.py b/votify/interface/audio.py index 738b103..4d6af32 100644 --- a/votify/interface/audio.py +++ b/votify/interface/audio.py @@ -3,7 +3,7 @@ import logging from .base import SpotifyBaseInterface from .enums import AudioQuality from .exceptions import VotifyMediaAudioQualityNotAvailableException -from .types import DecryptionKeyAv, StreamInfo, StreamInfoAv +from .types import DecryptionKey, StreamInfo, StreamInfoAv logger = logging.getLogger(__name__) @@ -59,7 +59,7 @@ class SpotifyAudioInterface(SpotifyBaseInterface): return stream_info - async def get_widevine_decryption_key(self, pssh: str) -> DecryptionKeyAv: + async def get_widevine_decryption_key(self, pssh: str) -> DecryptionKey: return await self._get_widevine_decryption_key(pssh, "audio") def _parse_file_id( diff --git a/votify/interface/base.py b/votify/interface/base.py index c73d68a..27e4982 100644 --- a/votify/interface/base.py +++ b/votify/interface/base.py @@ -8,7 +8,7 @@ from ..api import SpotifyApi from .constants import URL_INFO_RE from .enums import CoverSize, MediaRating from .exceptions import VotifyUrlParseException -from .types import DecryptionKey, DecryptionKeyAv, PlaylistTags, SpotifyUrlInfo +from .types import DecryptionKey, PlaylistTags, SpotifyUrlInfo logger = logging.getLogger(__name__) @@ -82,7 +82,7 @@ class SpotifyBaseInterface: self, pssh: str, media_type: str, - ) -> DecryptionKeyAv: + ) -> DecryptionKey: try: cdm_session = self.cdm.open() pssh = PSSH(pssh) @@ -99,9 +99,7 @@ class SpotifyBaseInterface: logger.debug(f"Received decryption key: {key_id}:{decryption_key}") - return DecryptionKeyAv( - DecryptionKey(key_id=key_id, decryption_key=decryption_key) - ) + return DecryptionKey(key_id=key_id, decryption_key=decryption_key) def is_video(self, playback_info: dict) -> bool: return bool(playback_info["manifest"].get("manifest_ids_video")) diff --git a/votify/interface/episode.py b/votify/interface/episode.py index 4efa819..11bab76 100644 --- a/votify/interface/episode.py +++ b/votify/interface/episode.py @@ -54,10 +54,8 @@ class SpotifyEpisodeInterface(SpotifyAudioInterface): e.media_metadata = episode_data raise - media.decryption_key = DecryptionKeyAv( - DecryptionKey( - decryption_key=DEFAULT_EPISODE_DECRYPTION_KEY, - ) + media.decryption_key = DecryptionKey( + decryption_key=DEFAULT_EPISODE_DECRYPTION_KEY, ) logger.debug(f"Parsed episode media: {media}") diff --git a/votify/interface/types.py b/votify/interface/types.py index 059077c..de9a714 100644 --- a/votify/interface/types.py +++ b/votify/interface/types.py @@ -20,12 +20,6 @@ class DecryptionKey: key_id: str = "0" * 32 -@dataclass -class DecryptionKeyAv: - audio: DecryptionKey - video: DecryptionKey | None = None - - @dataclass class StreamInfo: stream_url: str | list[str] @@ -192,5 +186,5 @@ class SpotifyMedia: cover_url: str | None = None lyrics: MediaLyrics | None = None stream_info: StreamInfoAv | None = None - decryption_key: DecryptionKeyAv | None = None + decryption_key: DecryptionKey | None = None flat_filter_result: Any = None diff --git a/votify/interface/video.py b/votify/interface/video.py index d6b536a..44e5598 100644 --- a/votify/interface/video.py +++ b/votify/interface/video.py @@ -6,7 +6,7 @@ from InquirerPy.base.control import Choice from .base import SpotifyBaseInterface from .constants import COVER_SIZE_ID_MAP_VIDEO from .enums import VideoFormat, VideoResolution -from .types import StreamInfo, StreamInfoAv +from .types import DecryptionKey, StreamInfo, StreamInfoAv logger = logging.getLogger(__name__) @@ -270,5 +270,5 @@ class SpotifyVideoInterface(SpotifyBaseInterface): return cover_url - async def get_widevine_decryption_key(self, pssh: str): + async def get_widevine_decryption_key(self, pssh: str) -> DecryptionKey: return await self._get_widevine_decryption_key(pssh, "video")