Skip to content

Commit

Permalink
Add track to user playlist from ISRC (Fixes #96)
Browse files Browse the repository at this point in the history
Formatting, updated changelog

Add track to user playlist, user tracks from ISRC (#96)
  • Loading branch information
tehkillerbee committed Oct 1, 2024
1 parent 48459c8 commit 630b289
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
1 change: 1 addition & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ History
=======
v0.7.7
------
* Feature: Add track to user playlist, user tracks from ISRC (#96) - tehkillerbee_
* Feature: Add support for moving playlist items (#116) - tehkillerbee_
* Feature: Allow adding items multiple times to the same playlist - tehkillerbee_
* Feature: Add support for adding items to a playlists at a specific position (#116) - tehkillerbee_
Expand Down
33 changes: 31 additions & 2 deletions tidalapi/playlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,8 @@ def add(
:param media_ids: List of Media IDs to add.
:param allow_duplicates: Allow adding duplicate items
:param position: Insert items at a specific position. Default: insert at the end
of the playlist
:param position: Insert items at a specific position.
Default: insert at the end of the playlist
:return: True, if successful.
"""
# Insert items at a specific index
Expand All @@ -302,6 +302,35 @@ def add(
self._reparse()
return res.ok

def add_by_isrc(
self,
isrc: str,
allow_duplicates: bool = False,
position: int = -1,
) -> bool:
"""Add an item to a playlist, using the track ISRC.
:param isrc: The ISRC of the track to be added
:param allow_duplicates: Allow adding duplicate items
:param position: Insert items at a specific position.
Default: insert at the end of the playlist
:return: True, if successful.
"""
try:
track = self.session.get_tracks_by_isrc(isrc)
if track:
# Add the first track in the list
track_id = str(track[0].id)
return self.add(
[track_id],
allow_duplicates=allow_duplicates,
position=position,
)
else:
return False
except ObjectNotFound:
return False

def move_by_id(self, media_id: str, position: int) -> bool:
"""Move an item to a new position, by media ID.
Expand Down
20 changes: 20 additions & 0 deletions tidalapi/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from typing import TYPE_CHECKING, List, Optional, Union, cast
from urllib.parse import urljoin

from tidalapi.exceptions import ObjectNotFound
from tidalapi.types import JsonObj

if TYPE_CHECKING:
Expand Down Expand Up @@ -263,6 +264,25 @@ def add_track(self, track_id: str) -> bool:
"POST", f"{self.base_url}/tracks", data={"trackId": track_id}
).ok

def add_track_by_isrc(self, isrc: str) -> bool:
"""Adds a track to the users favorites, using isrc.
:param isrc: The ISRC of the track to be added
:return: True, if successful.
"""
try:
track = self.session.get_tracks_by_isrc(isrc)
if track:
# Add the first track in the list
track_id = str(track[0].id)
return self.requests.request(
"POST", f"{self.base_url}/tracks", data={"trackId": track_id}
).ok
else:
return False
except ObjectNotFound:
return False

def add_video(self, video_id: str) -> bool:
"""Adds a video to the users favorites.
Expand Down

0 comments on commit 630b289

Please sign in to comment.