added Canvas
reverse engineered Spotify Canvas API only available on iOS and Android displays short looping video for song in place of album when available
This commit is contained in:
@@ -14,6 +14,9 @@ import threading
|
||||
import queue
|
||||
import numpy
|
||||
from sys import exit
|
||||
import _canvas as SpotifyCanvas
|
||||
from _tkvideoplayer import TkinterVideo
|
||||
from gc import collect as gc
|
||||
|
||||
# SpotifyGUI - Made by Brandon Brunson
|
||||
|
||||
@@ -350,6 +353,31 @@ def getLyrics(artist_name, track_name):
|
||||
global lrc
|
||||
lrc = syncedlyrics.search("[" + track_name + "] [" + artist_name + "]")
|
||||
|
||||
|
||||
# IT WONT DELETE
|
||||
def getCanvas(track_id):
|
||||
global videoplayer
|
||||
videoplayer.stop()
|
||||
videoplayer.grid_forget()
|
||||
videoplayer.destroy()
|
||||
gc()
|
||||
try:
|
||||
canvas_url = SpotifyCanvas.get_canvas_for_track(SpotifyCanvas.get_access_token(), track_id)
|
||||
except AttributeError:
|
||||
videoplayer = TkinterVideo(album_art_frame, scaled=True, background=bg_color, loop=True)
|
||||
album_art_label.grid(sticky="w")
|
||||
return None
|
||||
else:
|
||||
videoplayer = TkinterVideo(album_art_frame, scaled=True, background=bg_color, loop=True)
|
||||
album_art_label.grid_forget()
|
||||
videoplayer.load(canvas_url)
|
||||
videoplayer.grid(sticky="w")
|
||||
videoplayer.play()
|
||||
videoplayer.bind("<Button-1>", lambda e:likeSong())
|
||||
# def loop(e):
|
||||
# videoplayer.play()
|
||||
# videoplayer.bind("<<Ended>>", loop)
|
||||
|
||||
# def upNext():
|
||||
# print(spotify.queue())
|
||||
# up_next_label.config(text="Placeholder")
|
||||
@@ -405,6 +433,7 @@ device_name_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 12))
|
||||
lyrics_label = tk.Label(lyrics_label_frame, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
|
||||
album_art_label = tk.Label(album_art_frame, image=album_art_img)
|
||||
# up_next_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 12), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
|
||||
videoplayer = TkinterVideo(album_art_frame, scaled=True, background=bg_color, loop=True)
|
||||
|
||||
|
||||
play_button.bind("<Button-1>", lambda e:controlPlay())
|
||||
@@ -422,6 +451,8 @@ devices_list.bind("<Double-Button-1>", lambda e:kill())
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Function to update the song label with the current track's name
|
||||
def update_song_label():
|
||||
try:
|
||||
@@ -458,6 +489,7 @@ def update_song_label():
|
||||
artist_name = current_playback["item"]["artists"][0]["name"]
|
||||
threading.Thread(target=getLyrics, args=(artist_name, track_name)).start()
|
||||
track_id = current_playback["item"]["id"]
|
||||
threading.Thread(target=getCanvas, args=(track_id,)).start()
|
||||
track_duration = current_playback["item"]["duration_ms"]
|
||||
device_name = current_playback["device"]["name"]
|
||||
album_art_url = current_playback["item"]["album"]["images"][0]["url"]
|
||||
@@ -535,11 +567,11 @@ def unloadNow_playing():
|
||||
progress_bar.grid_forget()
|
||||
lyrics_label.grid_forget()
|
||||
album_art_label.grid_forget()
|
||||
videoplayer.grid_forget()
|
||||
|
||||
def loadDevices_list():
|
||||
pass
|
||||
# devices_list.grid(row=1, column=1, pady=10)
|
||||
# start_playback_on_device_button.grid(row=0, column=1, ipadx=40, ipady=40)
|
||||
devices_list.grid(row=1, column=1, pady=10)
|
||||
start_playback_on_device_button.grid(row=0, column=1, ipadx=40, ipady=40)
|
||||
|
||||
def unloadDevices_list():
|
||||
devices_list.grid_forget()
|
||||
|
||||
Reference in New Issue
Block a user