Files
playing_now_2_mm/connectors/spotify.py
2024-04-08 09:06:26 +03:00

59 lines
2.0 KiB
Python

import osascript # type: ignore
class Spotify:
def __init__(self):
self.__request_prefix = 'tell application "Spotify" to'
self.__request_current_track = "of current track as string"
self.name: str = ""
self.artist: str = ""
self.album: str = ""
self.duration: int = 0
self.elapsed_time: float = 0
self.get_current_track_info()
@property
def text(self) -> str:
return f"{self.name} - {self.artist}"
@property
def emoji(self) -> dict:
return {
"name": "headphones",
"name_with_colons": ":headphones:",
"icon": "🎧",
}
@property
def remaining_time(self) -> float:
return self.duration - self.elapsed_time
def get_current_track_info(self):
try:
name_code = f"{self.__request_prefix} name {self.__request_current_track}"
artist_code = (
f"{self.__request_prefix} artist {self.__request_current_track}"
)
album_code = f"{self.__request_prefix} album {self.__request_current_track}"
duration_code = (
f"{self.__request_prefix} duration {self.__request_current_track}"
)
elapsed_time_code = f"{self.__request_prefix} player position as string"
self.name = osascript.osascript(name_code)[1]
self.artist = osascript.osascript(artist_code)[1]
self.album = osascript.osascript(album_code)[1]
self.duration = round(int(osascript.osascript(duration_code)[1]) / 1000)
self.elapsed_time = float(
osascript.osascript(elapsed_time_code)[1].replace(",", ".")
)
except Exception as e:
print(f"Failed to get current track info: {e}")
def get(self) -> dict:
return {
name: getattr(self, name)
for name in dir(self)
if not name.startswith("_") and not callable(getattr(self, name))
}