From 8a5afa9a36d1bd2fb2fc8f0ccc1479143f3caca8 Mon Sep 17 00:00:00 2001 From: Brandon4466 Date: Sat, 4 Mar 2023 17:17:36 -0800 Subject: [PATCH] added liking songs by tapping album art liked songs change play button to heart --- .cache | 2 +- icons/pause-heart-black.png | Bin 0 -> 983 bytes icons/pause-heart.png | Bin 0 -> 1136 bytes icons/play-heart-black.png | Bin 0 -> 1071 bytes icons/play-heart.png | Bin 0 -> 1224 bytes spotifycontroller.py | 64 ++++++++++++++++++++++++------------ 6 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 icons/pause-heart-black.png create mode 100644 icons/pause-heart.png create mode 100644 icons/play-heart-black.png create mode 100644 icons/play-heart.png diff --git a/.cache b/.cache index 278f4d5..2825e3c 100644 --- a/.cache +++ b/.cache @@ -1 +1 @@ -{"access_token": "BQC05wxeoZyHXRQVuQgm4-1Zqp2Uv8hf7Hg-wMyp0R7IIQMHwzLVINH31DaxsxO3aU_fCt9a3a4hihcgqZbVACu4IZLGU1TtN_P4mBpKbftuIxiDH7UMaOIGuwhvDKKkr0Zm_jqflBuJ0wdcaAD2CkYBzevBfMsXjtO87iD8ZoWwCh5mzWicZKnHho-tAlDaDI0FY-cgU_Xe_fU0S1Hf", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "AQCCSkV9mWV-ysqv_bMMERsUGgz7baaOfBGhqm2-6_3I-lpd2CKy8bs3GS_kNZy2D1YG6Z2dhKVUNTCE7MC0qcKypWZAvRw6nRlsM8816mTP6hpK67WWAuwq_qfnLVia1Oo", "scope": "user-library-modify user-library-read user-modify-playback-state user-read-playback-state", "expires_at": 1677969435} \ No newline at end of file +{"access_token": "BQDMY3TJbe_zGpD0_Hbhitu8zVPEwuXwPDv-KkVhqZ_itVTbYbUdwoqkUl0xFTpReD9_Hgix6RRsM7HyeWpr6r02dlVG8EzbVf9CDNclFSDH56lplmN_H8wbyZrz1DGqow-uVUZJpfDYrPizY2GclbsJLNj3pxguVNPwfbkLXjiOBK9LO1M4A-eoA8YzTCFxhdL5CC-tW2lucUDEaEpd", "token_type": "Bearer", "expires_in": 3600, "scope": "user-library-modify user-library-read user-modify-playback-state user-read-playback-state", "expires_at": 1677981348, "refresh_token": "AQDMo7jMg-YY6MpV64feNjby-v67EjBDVFxHtJM4Uax4geoYYKU_bYmu8Mpz-7h6XjTurxvaoUZSIyxr1b4dnLgnOwfvCtS2ozFGXifAXl7R4wMjCY79BvGesxGogf24j58"} \ No newline at end of file diff --git a/icons/pause-heart-black.png b/icons/pause-heart-black.png new file mode 100644 index 0000000000000000000000000000000000000000..f79fb0721fb99dffd4648c99bc157ad3f3225506 GIT binary patch literal 983 zcmV;|11S87P) z&2if>5QSICB}cjgxq_$zy9AXWcc2n<%TePBT!NirPKqmVT!GaA)d4daFEboPB$oKw z1^K=iOgs|{2HqnGaJhg80000000000004lQvE-7SMdClWBBFaDy5kP6dVcRnM1P3r zm56@x&#Bt8CZg~BbD!wB+LMHeh_*!ZK}3ybIe&H^>8f0EU7_vSao@~RaU<)1j$SKI zo<=PBvoYIJTQy>xK={kD7k0ej-%Z(;n)|FymEbCK-3t2V5#s*~xz+fLPPNf+{=;t> zJKHUrEA81RwdGC21WobV(ltR#d=(Qch~G6qTm0-MkvJaTI60Sp0aD2hT6jKn8((!xu|2O)R&;>frbIkUEw@U z*!I-%T$%x-(cm8Osu6WmJ#}bYP=i>Ugm0Rrxq8oDEEb}+G)>dnFKHbS37&+rPGEiF z7mBkl5(A3L3NwaNI~b6bC{1UHCv*9Jy zBz)%Q+|~3zq}iCPh&o3`#6)gEC%*kS854|qOw-m$BG$@WUeE+az^J^SF(crFQ6S)K?Zo=_fxQ%p#kPLt3=tY zn9_ienH59D?0yNK1gih8tO(+zOiS6RtLz|j8>{8SEcF$Slu#35q$X}J>Ih9uEJpm6 zP!no?ybnF+=MZ6)mNm=}6Dvm=gcK8NeP1k{E8$a$7Qdxb6DA>kOKB!dO8k~eDL)_L zUtsyTo5NfVBe7^gaqIk0ESWGn@mnmIFkA6kG|zn7+mJvX4HIw#&jmS6fcQPE5+8wF zLwq->OsFO2_kd4gp8*Z=J%|-QdV~1>gqkq z>vbA25QRsnz;r+=FsZ<%1G@v$0j?l+1;iEL4sa^4T>(x7&;fLy963X>hp;P+R!{bR z=kUv{n7Olhk7NP>00000000000ANUHt;gn*!(|n-aIN)(h^~p~iinJZla{Y;iRgof z-ihc%WLw%qPhw9LwAL3|>$%o?qx~_@E<(JO{B|z_*z;g~D^vADkms zS!SyZEdDy7vrXciB6t<7rJ8h}n$j+17tHDJ@RatKbdRZ4xeX=AMc zJoSh8a>iZDCI?)ap!|zY^-0g7O*c??OXzY=EonacGgbVEH>r!p>C8?of=Cf zVyQ7R$v57g^<~Rth!)6F(is4)^>rq@9*JmVRu|2LhKTMx%9!!9Q!eW<{lAv(}f zI^mIRYtmW+xB%x(X7HC6mwjQ^rHG%a#K{Zd0#OU>JW29HrKySL?O#XUC9AmxnEi)uk^qP{WVm3TwfUiNA3Zyo z{?vq3#B7OLYk)aTIh8)-8-SP{a*YAlbJHWFS`%QZ11+f9*-v11^?JGWo zO3dQRENbYKL)B8#>7L5m5ECpjPAT;qXp+{JM&Dm5!Eic3{(6AnJ?U1l%YaqG6exw@H9yr1c-kMzWFxh705e?Zy{n3 zb}sk#fH-$RLwqR#uSZ@(d`|)dA^pYL=ZNQoZ5Zo1sSpNX*t6SMIQ*v$^S60TJ|)?Z z2@Q|sFB=;?W)1(B>)BiY0000000000005FhM85%pILPo13;qKD0000a( literal 0 HcmV?d00001 diff --git a/icons/play-heart-black.png b/icons/play-heart-black.png new file mode 100644 index 0000000000000000000000000000000000000000..e104556b1215ca85229895b2e09290ae5a0fc1ce GIT binary patch literal 1071 zcmV+~1kn45P) z!ExI#5Ji{CB}bMZR}iHFOC8u9$Q>vhD5o4{SKy?AILDkMS0JYXsROEm&2YTTa5NGD zf>`W=+Bbu-J+`dn{{R6j016DlFbu;m48t%C!!Qiv%9v0|PQm~0G0r-2LKE#^=sFWYUPCf*U)%YbZu%WDadNT zg`O+VfksT|wJ~FI{8ApB`rdtP`+f6Ez5Mb|7&$xzE&w}MOk2+;3_+-gEvr&w#K z-*}hsV%ueLCZ2^*EISDkB*kw^+XN}`MNH5je%l0T@spd7@}8etdFB@X&O~;WUZbNv zGvSg(7^){D3OEA54SjX;u}8e$DXn01^NGqIADw(#z=UeQ;m-}_lsfs~`R~q+yNw8% z`L=+)RJt}}4%7-d@o52FX69r>?R*Tly;k)i;MC5?0K5H!V#{4506I%!69pO&A2z;dQZfL6s8^Ar={{0 zwa-NCDabZu(2#Y`JW}%3s*eGWW64O?6F9~Sb?npU^fBN#mR7*b6K6#&6Yjrf=>w=A zm@@SPy>|}wO~xH*aU@%cqNw|T4bv9OWD7?r7Dl4B0IKzz+v+zdgl{Ml4CSI2knqe{ z(B_5E^?)NKy;M^a#f)nGk~z)?sgwt2%?fS-iPw+W4`sOEx~~QqK$~Jy&Duo{=$$fQ zy5L?0P#l{?!sC$pew!F;!Uvk#i$O!nUE%{I_u6)6#6GR)Yyk;|mY0g!^AgJx1_*CU zS;@=XO{`cVVYQiYQZ^+GrQHkG>%K?i~ir+@_<8HWC%Gd}ER-*~ojq``1$%LyD zzd?fuS1W#l z?QJ445QfKB0VO0A9H}6rgU|s~kWj&q3Lq6MS3z!S|G{O^Y1sl=yyLlDo}l#QqA z|AjX}ehnyS8&!xAD11d6%NI){wAPOiguiCvQgD0_Hj!g7WqnMeuD!6-Pgx(PDVS=l zq2p&du&ME-8d@8IJ7N6bkDiV-HrKH)0HDechv}dnlv3xAe-1K$f%uoGjN&&0o8WB# zGx0eQWWtYt0&GP5R;H+p7hW|0d;Yg1#VMD$QtI6`dS?T$={W)b-^mCMOcQkL+7$UT zLBB+NCnl(s6HYY%XQIcf#VQX|3r@DEU2DMNn~6t(lV+|p;MlWrD714@O5NJDvDN@w z!WHrTxk2rEacP3`FFKWrRXZ00?!U2sL$PY-Vt_P1;aIh^cEV+amZRw zO3VV+5&%{>!yKPMeJ^UQXSnj212c)a9L7y>$+@&afmtElcfH8D2K>JI-PC}&DG-`7 z3VIFbb1ow$raJ)GmSBKQL+*V*7ia7j?y#RI78e6JcYZaR@WM1sYfLT%l<bxx&5vz7C25=k++2Ar{wQ6TI0QWXIJWV0w z9J0Q<>G#st&G4-wPq&!~wvK?Yzo3;Mvs z%ux8}$RE3O$pdX8ctZxO8`oW_37%v4NRU>u3u$^9hVF>17%o>YFq1pQ=6yYMP(raK zIcL%z+~5;mB|67&#?vr^%1&WGvk{V$HMaG$gfYxR+x<(ZHs$L~opS7a2*ksP-k4yu8r%!FM@-3+klgUD`A zCt4w#MogN5i&XVN;!{2SKz)5Za}&sBASa|J;V m1VIo4K@bE%5CkDP0Pqj2vmU>c*zgSi0000", lambda e:controlPlay()) pause_button.bind("", lambda e:controlPause()) next_button.bind("", lambda e:controlNext()) previous_button.bind("", lambda e:controlPrevious()) -album_art_label.bind("", lambda e:likeSong()) +album_art_label.bind("", lambda e:likeSong()) # devices_list.bind("", lambda e:wakeup()) import json # Function to update the song label with the current track's name def update_song_label(): global lrc global album_art_img + global is_bright # Get the current playback information current_playback = spotify.current_playback() # If there is no current playback, set the text of the song label to "No playback" @@ -294,26 +309,14 @@ def update_song_label(): else: if current_playback.get("item"): track_name = current_playback["item"]["name"] - artist_name = current_playback["item"]["artists"][0]["name"] - track_duration = current_playback["item"]["duration_ms"] track_progress = current_playback["progress_ms"] 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 else: track_name = "Loading..." - artist_name = "" - track_duration = 1 - playing_status = True - device_name = "" - album_art_url = "" - track_progress_min = 0 - track_progress_sec = 1 if track_name == song_label.cget("text"): track_progress_formatted = ("{}:{:02d}".format(track_progress_min, track_progress_sec)) - progress_bar.config(maximum=track_duration) progress_bar.config(value=track_progress) for line in str(lrc).splitlines(): if track_progress_formatted in line: @@ -321,10 +324,16 @@ def update_song_label(): lyrics_label.config(text=lyric) root.after(800, update_song_label) else: + artist_name = current_playback["item"]["artists"][0]["name"] threading.Thread(target=getLyrics, args=(artist_name, track_name)).start() + track_id = current_playback["item"]["id"] + track_duration = current_playback["item"]["duration_ms"] + device_name = current_playback["device"]["name"] + album_art_url = current_playback["item"]["album"]["images"][0]["url"] device_name_label.config(text=device_name) song_label.config(text=track_name) artist_label.config(text=artist_name) + progress_bar.config(maximum=track_duration) lyrics_label.config(text="") album_art_img_data = requests.get(album_art_url).content album_art_img_open = Image.open(BytesIO(album_art_img_data)) @@ -348,22 +357,36 @@ def update_song_label(): previous_button.config(background=bg_color) lyrics_label_frame.config(background=bg_color) lyrics_label.config(background=bg_color) + if spotify.current_user_saved_tracks_contains(tracks=[track_id])[0] is True: + liked_song = True + else: + liked_song = False if math.sqrt(0.299 * (get_colors(album_art_img_open)[0] ** 2) + 0.587 * (get_colors(album_art_img_open)[1] ** 2) + 0.114 * (get_colors(album_art_img_open)[2] ** 2)) > 170: + is_bright = True + if liked_song is True: + play_button.config(image=play_heart_img_black) + pause_button.config(image=pause_heart_img_black) + else: + play_button.config(image=play_img_black) + pause_button.config(image=pause_img_black) song_label.config(foreground="black") artist_label.config(foreground="black") device_name_label.config(foreground="black") lyrics_label.config(foreground="black") - play_button.config(image=play_img_black) - pause_button.config(image=pause_img_black) next_button.config(image=next_img_black) previous_button.config(image=previous_img_black) else: + is_bright = False + if liked_song is True: + play_button.config(image=play_heart_img) + pause_button.config(image=pause_heart_img) + else: + play_button.config(image=play_img) + pause_button.config(image=pause_img) song_label.config(foreground="white") artist_label.config(foreground="white") device_name_label.config(foreground="white") lyrics_label.config(foreground="white") - play_button.config(image=play_img) - pause_button.config(image=pause_img) next_button.config(image=next_img) previous_button.config(image=previous_img) # print(oauth.get_cached_token()["access_token"]) @@ -378,7 +401,6 @@ def update_song_label(): elif playing_status == False: pause_button.grid_forget() play_button.grid(row=3, column=1, pady=(100,0)) - else: pass