Skip to content

Commit

Permalink
Improve playlist author displaying
Browse files Browse the repository at this point in the history
Owner is now `User` class.
  • Loading branch information
AnonymousX86 committed Nov 12, 2023
1 parent 3693d7c commit fadb138
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 10 deletions.
28 changes: 22 additions & 6 deletions Spoyt/api/spotify.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,19 @@ def is_single_artist(self) -> bool:
def track_url(self) -> str:
return f'https://open.spotify.com/track/{self.track_id}'


class User:
def __init__(self, payload: dict) -> None:
self.name: str = payload.get('display_name')
self.id: str = payload.get('id')
self.user_url: str = payload.get('external_urls', {}).get('spotify')
self.avatar_url: str = payload.get('images', [{}])[-1].get('url')

class Playlist:
def __init__(self, payload: dict) -> None:
self.name: str = payload.get('name')
self.description: str = payload.get('description')
self.playlist_id: str = payload.get('id')
self.owner_name: str = payload.get('owner', {}).get('display_name')
self.owner_id: str = payload.get('owner', {}).get('id')
self.cover_url: str = payload.get('images', [{}])[0].get('url')
self.tracks: list[Track] = list(map(
lambda a: Track(a.get('track', {})),
Expand All @@ -40,14 +46,12 @@ def __init__(self, payload: dict) -> None:
self.total_tracks: int = payload.get('tracks', {}).get('total')
self.query_limit: int = payload.get('tracks', {}).get('limit')

self.owner: User = search_user(payload.get('owner', {}).get('id'))

@property
def url(self) -> str:
return f'https://open.spotify.com/playlist/{self.playlist_id}'

@property
def owner_url(self) -> str:
return f'https://open.spotify.com/user/{self.owner_id}'

@property
def is_query_limited(self) -> bool:
return len(self.tracks) == self.query_limit
Expand Down Expand Up @@ -96,3 +100,15 @@ def search_playlist(playlist_id: str) -> Playlist:
log.error('Spotify unreachable')
raise SpotifyUnreachableException
return Playlist(playlist)


def search_user(user_id: str) -> User:
log.info(f'Searching user by ID "{user_id}"')
try:
user: dict | None = spotify_connect().user(user=user_id)
except SpotifyException:
raise SpotifyNotFoundException
if not user:
log.error('Spotify unreachable')
raise SpotifyUnreachableException
return User(user)
8 changes: 4 additions & 4 deletions Spoyt/embeds.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,10 @@ def __init__(self, playlist: Playlist, *args, **kwargs) -> None:
self.description = description
self.color = Color.green()
self.set_thumbnail(url=playlist.cover_url)
self.add_field(
name='Owner',
value=f'[{playlist.owner_name}]({playlist.owner_url})',
inline=False
self.set_author(
name=playlist.owner.name,
url=playlist.owner.user_url,
icon_url=playlist.owner.avatar_url
)
first_tracks = '\n'.join(map(
lambda a: f'- {markdown_url(a.track_url, a.name)}',
Expand Down

0 comments on commit fadb138

Please sign in to comment.