not sure what changes i made tbh

This commit is contained in:
Brandon4466
2023-01-21 00:48:00 -08:00
parent 319542f470
commit dcd2fc068f
8 changed files with 578 additions and 211 deletions

View File

@@ -1,19 +1,15 @@
import spotipy
import spotipy.util
from spotipy.oauth2 import SpotifyOAuth
import tkinter as ttk
from tkinter import ttk as tk
import random
import sv_ttk
from urllib.request import urlopen
import requests
from time import sleep
import sys
import os
import platform
import syncedlyrics
from PIL import Image, ImageTk
from io import BytesIO
import math
from time import sleep
# Set the Spotify app's client ID and client secret
client_id = "69b82a34d0fb40be80b020eae8e80f25"
@@ -24,70 +20,31 @@ redirect_uri = "http://127.0.0.1:8888/callback"
username = "thebrandon45"
password = "Mariposa2502$"
def wait_for_connection():
while True:
try:
urlopen('http://142.250.189.174', timeout=1)
return True
except:
pass
# os.environ["DISPLAY"] = ":0"
# def wait_for_display():
# def setup():
# checkDisplay()
# def checkDisplay():
# while True:
# try:
# test = ttk.Tk()
# test.destroy()
# return True
# except:
# pass
# if os.name == 'posix':
# if "DISPLAY" in os.environ:
# break
# else:
# sleep(0.25)
# pass
# else:
# break
# Get the user's Spotify authorization token
scope = "user-read-playback-state,user-modify-playback-state"
if len(sys.argv) == 1:
pass
elif sys.argv[1] == "--setup":
try:
os.remove(".cache-" + username)
except OSError:
pass
elif sys.argv[1] == "--clear":
os.remove(".cache-" + username)
sys.exit("Deleting token from cache and exiting...")
elif sys.argv[1] == "--clearChromeCache":
if platform.system() == "Linux":
os.system("rm -rf ~/.cache/chromium")
os.system("rm -rf ~/.config/chromium")
sys.exit("Deleting Chrome cache and exiting...")
# def oauthLogin():
# if os.path.isfile(".cache-" + username) == False:
# sleep(25)
# pyautogui.press('tab')
# pyautogui.press('tab')
# pyautogui.press('tab')
# pyautogui.press('tab')
# pyautogui.write(username)
# pyautogui.press('tab')
# pyautogui.write(password)
# pyautogui.press('enter')
# sleep(90)
# if platform.system() == "Linux":
# os.system("killall chromium-browser")
# threading.Thread(target=oauthLogin).start()
# oauthLogin()
token = spotipy.util.prompt_for_user_token(username, scope, client_id, client_secret, redirect_uri)
# Create a Spotify object with the user's authorization token
def createToken():
spotify = spotipy.Spotify(auth=token)
return spotify
spotify = createToken()
spotify = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=client_id, client_secret=client_secret, redirect_uri=redirect_uri, scope=scope, requests_timeout=30))
bg_color = "#000000"
count = 0
# Create the tkinter window
root = ttk.Tk()
@@ -111,54 +68,19 @@ def next():
def previous():
spotify.previous_track()
def maxvolume():
spotify.volume(100)
def minvolume():
spotify.volume(0)
def randomvolume():
spotify.volume(random.randint(0,100))
def volumeslider(self):
spotify.volume(int(volumeslider_button.get()))
def search(event):
searched = track_search.get()
if searched.startswith(":t"):
track_searched_isolated = searched.replace(":t", "")
track_search_results = spotify.search(q='track:' + track_searched_isolated, type='track')
searched_track_id = track_search_results["tracks"]["items"][0]["id"]
spotify.start_playback(uris=["spotify:track:" + searched_track_id])
if searched.startswith(":a"):
artist_searched_isolated = searched.replace(":a", "")
artist_search_results = spotify.search(q='artist:' + artist_searched_isolated, type='artist')
searched_artist_id = artist_search_results["artists"]["items"][0]["uri"]
spotify.start_playback(context_uri=searched_artist_id)
if searched.startswith(":l"):
album_searched_isolated = searched.replace(":l", "")
album_search_results = spotify.search(q='album:' + album_searched_isolated, type='album')
searched_album_id = album_search_results["albums"]["items"][0]["uri"]
spotify.start_playback(context_uri=searched_album_id)
if searched.startswith(":p"):
playlist_searched_isolated = searched.replace(":p", "")
playlist_search_results = spotify.search(q='playlist:' + playlist_searched_isolated, type='playlist')
searched_playlist_id = playlist_search_results["playlists"]["items"][0]["uri"]
spotify.start_playback(context_uri=searched_playlist_id)
def start_playback_on_device():
device_selections = devices_list.curselection()
try:
list_of_devices = spotify.devices()
except (spotipy.exceptions.SpotifyException, requests.exceptions.HTTPError):
createToken()
pass
list_of_devices = spotify.devices()
list_of_devices = spotify.devices()
device_id = list_of_devices["devices"][device_selections[0]]["id"]
spotify.transfer_playback(device_id=device_id)
def get_devices():
# count +=1
# if count >= 277:
list_of_devices = spotify.devices()
unloadNow_playing()
if list_of_devices == "{'devices': []}":
@@ -176,30 +98,11 @@ def get_devices():
unloadSearching_Devices()
loadDevices_list()
devices_list.delete(0, ttk.END)
try:
list_of_devices = spotify.devices()
except (spotipy.exceptions.SpotifyException, requests.exceptions.HTTPError):
createToken()
pass
list_of_devices = spotify.devices()
for num_of_device, garbage in enumerate(list_of_devices["devices"]):
devices_list.insert(num_of_device, list_of_devices["devices"][num_of_device]["name"])
root.after(6500, get_devices)
def loadLyrics_pressed():
unloadNow_playing()
loadLyrics()
def unloadLyrics_pressed():
unloadLyrics()
loadNow_playing()
# def hide_devices():
# get_devices_button.grid()
# devices_list.grid_remove()
# start_playback_on_device_button.grid_remove()
# hide_devices_button.grid_remove()
play_img = ttk.PhotoImage(file="icons/play-circle-x2.png")
@@ -210,19 +113,10 @@ play_img_black = ttk.PhotoImage(file="icons/play-circle-x2-black.png")
pause_img_black = ttk.PhotoImage(file="icons/pause-circle-x2-black.png")
next_img_black = ttk.PhotoImage(file="icons/skip-next-x2-black.png")
previous_img_black = ttk.PhotoImage(file="icons/skip-previous-x2-black.png")
# lyrics_img = ttk.PhotoImage(file="icons/lyrics.png")
album_art_img = ""
# album_art_img = ttk.PhotoImage(file="album_art.png")
# canvas = ttk.Canvas(root, width=480, height=320)
# canvas.create_image(0, 0, image=album_art_img, anchor="nw")
# canvas.grid()
canvas = ttk.Canvas(root, width=480, height=320)
frame_artist_song = ttk.Frame(root, width=(1280/3), height=400, bg=bg_color)
# frame_controls = tk.Frame(root)
# lyrics_button = tk.Frame(root)
album_art_frame = ttk.Frame(root, bg=bg_color)
lyrics_label_frame = ttk.Frame(root, width=(1280/3), height=400, bg=bg_color)
lyrics_label_frame.grid_propagate(0)
@@ -232,7 +126,6 @@ root.grid_rowconfigure(1, weight=1)
root.grid_rowconfigure(2, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
# root.grid_columnconfigure(2, weight=1)
root.configure(background=bg_color)
@@ -244,35 +137,18 @@ play_button = ttk.Label(frame_artist_song, image=play_img, borderwidth=0)
pause_button = ttk.Label(frame_artist_song, image=pause_img, borderwidth=0)
next_button = ttk.Label(frame_artist_song, image=next_img, borderwidth=0)
previous_button = ttk.Label(frame_artist_song, image=previous_img, borderwidth=0)
maxvolume_button = tk.Button(root, text="Max Volume", command=maxvolume)
minvolume_button = tk.Button(root, text="Min Volume", command=minvolume)
randomvolume_button = tk.Button(root, text="Random Volume", command=randomvolume)
volumeslider_button = tk.Scale(root, from_=100, to=0, orient=ttk.VERTICAL, length=240, command=volumeslider)
#doaudio_analysis = tk.Button(root, text="Audio Analysis", command=doaudioanalysis)
artist_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
song_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 24), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
track_progress_label = tk.Label(root, text="")
track_duration_label = tk.Label(root, text="")
# track_combined_label = tk.Label(root, text="")
track_search = tk.Entry(root, text="")
track_search_button = tk.Button(root, text="Search", command=search)
artist_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 24), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
song_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
get_devices_button = tk.Button(root, text="Get Devices", command=get_devices)
start_playback_on_device_button = tk.Button(root, text="Start Playback on Device", command=start_playback_on_device)
# hide_devices_button = tk.Button(root, text="Hide Devices", command=hide_devices)
username_label = tk.Label(root, text="Username: " + spotify.me()["display_name"])
devices_list = ttk.Listbox(root, selectmode=ttk.SINGLE, font=("Helvetica", 18))
progress_bar = tk.Progressbar(root, orient=ttk.HORIZONTAL, length=1280)
searching_for_devices_label = tk.Label(root, text="Searching for Devices...", font=("Helvetica", 24))
device_name_label = tk.Label(frame_artist_song, text="", font=("Helvetica", 12))
# background_image_label = tk.Label(root, image=album_art_img)
lyrics_label = tk.Label(lyrics_label_frame, text="", font=("Helvetica", 32), wraplength=(1280/3), justify=ttk.CENTER, background=bg_color)
# loadLyrics_button = ttk.Button(lyrics_button, image=lyrics_img, command=loadLyrics_pressed, borderwidth=0)
# album_art_canvas = ttk.Canvas(root)
# album_art_canvas_create_image = album_art_canvas.create_image(0, 0, image=album_art_img)
album_art_label = tk.Label(album_art_frame, image=album_art_img)
root.bind("<Return>", search)
lyrics_label.bind("<Button-1>", lambda e:unloadLyrics_pressed())
play_button.bind("<Button-1>", lambda e:play())
pause_button.bind("<Button-1>", lambda e:pause())
next_button.bind("<Button-1>", lambda e:next())
@@ -283,16 +159,9 @@ def update_song_label():
global lrc
global album_art_img
# Get the current playback information
while True:
try:
current_playback = spotify.current_playback()
break
except (spotipy.exceptions.SpotifyException, requests.exceptions.HTTPError):
createToken()
current_playback = spotify.current_playback()
# If there is no current playback, set the text of the song label to "No playback"
if current_playback is None:
# nothing_playing_obj = '{"item": {"artists": [{"name": "Nothing Playing"}],"duration_ms": 0,"name": "Nothing Playing"},"progress_ms": 0}'
# current_playback = json.loads(nothing_playing_obj)
get_devices()
# Update the song label every 1 second
else:
@@ -300,44 +169,24 @@ def update_song_label():
artist_name = current_playback["item"]["artists"][0]["name"]
track_duration = current_playback["item"]["duration_ms"]
track_progress = current_playback["progress_ms"]
current_volume = current_playback["device"]["volume_percent"]
playing_status = current_playback["is_playing"]
device_name = current_playback["device"]["name"]
album_art_url = current_playback["item"]["album"]["images"][0]["url"]
track_progress_min = track_progress//(1000*60)%60
track_progress_sec = (track_progress//1000)%60
track_duration_min = track_duration//(1000*60)%60
track_duration_sec = (track_duration//1000)%60
# open_url = urlopen(album_art_url)
# raw_image_data = open_url.read()
# open_url.close()
# album_art = ImageTk.PhotoImage(data=raw_image_data)
# background_image_label.config(image=album_art)
# print(background_image_label.cget("image"))
# if raw_image_data == background_image_label.cget("image"):
# print("this is the same image")
# else:
# pass
# loadNow_playing()
if track_name == song_label.cget("text"):
track_progress_formatted = ("{}:{:02d}".format(track_progress_min, track_progress_sec))
track_progress_label.config(text=track_progress_formatted)
progress_bar.config(maximum=track_duration)
progress_bar.config(value=track_progress)
for line in str(lrc).splitlines():
if track_progress_formatted in line:
lyric = line.split("]")[1]
# wrapped_lyric = textwrap.fill(lyric, 21)
lyrics_label.config(text=lyric)
root.after(800, update_song_label)
else:
# album_art_data = Image.open(requests.get(album_art_url, stream=True).raw)
# album_art_data.save("album_art.jpg")
device_name_label.config(text=device_name)
song_label.config(text=track_name)
artist_label.config(text=artist_name)
track_duration_label.config(text=("{}:{:02d}".format(track_duration_min, track_duration_sec)))
volumeslider_button.set(value=current_volume)
lyrics_label.config(text="")
lrc = syncedlyrics.search("[" + track_name + "] [" + artist_name + "]")
album_art_img_data = requests.get(album_art_url).content
@@ -358,7 +207,7 @@ def update_song_label():
previous_button.config(background=bg_color)
lyrics_label_frame.config(background=bg_color)
lyrics_label.config(background=bg_color)
if math.sqrt(0.299 * (bg_color_img_pixel[0] ** 2) + 0.587 * (bg_color_img_pixel[1] ** 2) + 0.114 * (bg_color_img_pixel[2] ** 2)) > 186:
if math.sqrt(0.299 * (bg_color_img_pixel[0] ** 2) + 0.587 * (bg_color_img_pixel[1] ** 2) + 0.114 * (bg_color_img_pixel[2] ** 2)) > 170:
song_label.config(foreground="black")
artist_label.config(foreground="black")
device_name_label.config(foreground="black")
@@ -376,17 +225,7 @@ def update_song_label():
pause_button.config(image=pause_img)
next_button.config(image=next_img)
previous_button.config(image=previous_img)
# album_art_label.grid_forget()
# album_art_label.grid()
root.after(500, update_song_label)
# if album_art_url == "12345":
# open_url = urlopen(album_art_url)
# raw_image_data = open_url.read()
# open_url.close()
# album_art = ImageTk.PhotoImage(data=raw_image_data)
# background_image_label.config(image=album_art)
# else:
# pass
if playing_status == True:
play_button.grid_forget()
pause_button.grid(row=3, column=1, pady=(100,0))
@@ -397,15 +236,10 @@ def update_song_label():
pass
def loadNow_playing():
# background_image_label.place(x=0, y=0)
# volumeslider_button.grid(row=1, column=1, rowspan=3, sticky="e", padx=(0,20))
# lyrics_button.grid(row=1, column=1, padx=(0,380))
frame_artist_song.grid(row=0, column=1, rowspan=3, pady=(20,0))
# frame_controls.grid(row=2, column=1)
# loadLyrics_button.grid()
device_name_label.grid(row=0, column=1)
artist_label.grid(row=1, column=1)
song_label.grid(row=2, column=1)
artist_label.grid(row=2, column=1)
song_label.grid(row=1, column=1)
previous_button.grid(row=3, column=1, padx=(0,200), pady=(100,0))
play_button.grid(row=3, column=1, pady=(100,0))
next_button.grid(row=3, column=1, padx=(200,0), pady=(100,0))
@@ -416,16 +250,15 @@ def loadNow_playing():
lyrics_label.grid()
def unloadNow_playing():
volumeslider_button.grid_forget()
frame_artist_song.grid_forget()
# frame_controls.grid_forget()
device_name_label.grid_forget()
artist_label.grid_forget()
song_label.grid_forget()
previous_button.grid_forget()
play_button.grid_forget()
next_button.grid_forget()
progress_bar.grid_forget()
# loadLyrics_button.grid_forget()
lyrics_label.grid_forget()
album_art_label.grid_forget()
def loadDevices_list():
devices_list.grid(row=1, column=1, pady=10)
@@ -441,18 +274,9 @@ def loadSearching_Devices():
def unloadSearching_Devices():
searching_for_devices_label.grid_forget()
def loadLyrics():
album_art_frame.grid(row=0, column=1)
album_art_label.grid()
lyrics_label.grid(row=0, column=1)
def unloadLyrics():
album_art_frame.grid_forget()
album_art_label.grid_forget()
lyrics_label.grid_forget()
# Start updating the song label
wait_for_connection()
# setup()
loadNow_playing()
update_song_label()