import asyncio
import json
+from time import time
from typing import Dict, List
import ytmusicapi
def _get_playlist():
ytm = ytmusicapi.YTMusic(auth=json.dumps(headers))
- return ytm.get_playlist(playlistId=prov_playlist_id)
+ playlist = ytm.get_playlist(playlistId=prov_playlist_id)
+ playlist["checksum"] = get_playlist_checksum(playlist)
+ return playlist
loop = asyncio.get_running_loop()
return await loop.run_in_executor(None, _get_playlist)
for playlist in playlists:
playlist["id"] = playlist["playlistId"]
del playlist["playlistId"]
+ playlist["checksum"] = get_playlist_checksum(playlist)
return playlists
loop = asyncio.get_running_loop()
loop = asyncio.get_running_loop()
return await loop.run_in_executor(None, _search)
+
+
+def get_playlist_checksum(playlist_obj: dict) -> str:
+ """Try to calculate a checksum so we can detect changes in a playlist."""
+ for key in ("duration_seconds", "trackCount"):
+ if key in playlist_obj:
+ return playlist_obj[key]
+ return str(int(time()))
item_id=playlist_obj["id"], prov_type=self.type, prov_id=self.id
)
)
- # use duration_seconds as checksum for now by lack of something better
- playlist.metadata.checksum = playlist_obj["duration_seconds"]
+ playlist.metadata.checksum = playlist_obj["checksum"]
return playlist
async def _parse_track(self, track_obj: dict) -> Track: