From c66ee19a25e381a4760a0da9f739b49ddc613e8d Mon Sep 17 00:00:00 2001 From: Brandon4466 Date: Sat, 4 Mar 2023 01:58:18 -0800 Subject: [PATCH] mem leak fix new icons! higher qual miscelanous code cleanup --- .cache | 2 +- icons/next-black.png | Bin 0 -> 514 bytes icons/next.png | Bin 0 -> 619 bytes icons/pause-black.png | Bin 0 -> 826 bytes icons/pause.png | Bin 0 -> 1019 bytes icons/play-black.png | Bin 0 -> 892 bytes icons/play-circle-x2.png | Bin 2442 -> 2835 bytes icons/play.png | Bin 0 -> 1101 bytes icons/previous-black.png | Bin 0 -> 565 bytes icons/previous.png | Bin 0 -> 661 bytes json.json | 1 + spotifycontroller.py | 111 ++++++++++++++++++++++----------------- todo.txt | 36 ++++++++++++- 13 files changed, 99 insertions(+), 51 deletions(-) create mode 100644 icons/next-black.png create mode 100644 icons/next.png create mode 100644 icons/pause-black.png create mode 100644 icons/pause.png create mode 100644 icons/play-black.png create mode 100644 icons/play.png create mode 100644 icons/previous-black.png create mode 100644 icons/previous.png create mode 100644 json.json diff --git a/.cache b/.cache index 8c0fd19..5c88449 100644 --- a/.cache +++ b/.cache @@ -1 +1 @@ -{"access_token": "BQBH29kwm5mcADwR9i0rL8Wu_xiI9H2HRRLXUMWFMRf8jvRFXLvXXLitv2MzZAx3VcKyDlKz_zdWHHyWqJqPJ2S41_MaVngikw6EXwYFoi2vudlNqViSiLaUOvi8XRbNcrKqqQDLbuJDGh791iuB7JNAOSV166bDLwpOA_k_JAZme2HtxZ1aUyfPc24ldJc", "token_type": "Bearer", "expires_in": 3600, "scope": "user-modify-playback-state user-read-playback-state", "expires_at": 1676101304, "refresh_token": "AQCOARNKfmTOZ0eINGRwD7Yo5JWarv7bH5LnTvoz_mMEDhXR_luBWsl8wq010xTTbLO3c4XLeCqIKUwmPsJX5uQn4mUP-JWKgETATkkii6vlKTS7xR3DntNwfquOIjV-9CQ"} \ No newline at end of file +{"access_token": "BQDrxTAIyV04s8ELEHxjvK118srmPFqciwk8FVd15twhg-Vh3LOY1sBzU3M6_K6oRH7sODe4740H3SnBZ-aDDSombJOFVCi26WaEEtUM0v8mgTJQvabM1yacXLOUC3uGtWXzZ5twdBfllOJD0sqMRvllkbwvfOsi09QiUifN50vcpaL0uLWHBIZ7SbBoUN4", "token_type": "Bearer", "expires_in": 3600, "scope": "user-modify-playback-state user-read-playback-state", "expires_at": 1677924835, "refresh_token": "AQCOARNKfmTOZ0eINGRwD7Yo5JWarv7bH5LnTvoz_mMEDhXR_luBWsl8wq010xTTbLO3c4XLeCqIKUwmPsJX5uQn4mUP-JWKgETATkkii6vlKTS7xR3DntNwfquOIjV-9CQ"} \ No newline at end of file diff --git a/icons/next-black.png b/icons/next-black.png new file mode 100644 index 0000000000000000000000000000000000000000..18e1915af765e41f2596f5546185f00c6541ffd3 GIT binary patch literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U_9yR;uumf=k1+`zK0D2+8*+& zaY!35DVMbL9pLB*P&>iV!ytWtEwy=reO!6J?e`~J zvf2d~^=*2&UM6<^W0s0nX?_1zn!OjWI9h(r`bG`Ia#rig0-5;Fj4fpas}?V5=Q_T< z(wo_$KmD{YCB84<{3;KD`a?QF(|#R-Lobzt7dk( z?13u_)~*W?a&X!!VUoe*u|{#Dqi{pu+P(8!7}`o>E-v6yaBi+Mk-7hDDqq5?rHVV) z0v?skz8?5R_hsI}=T47LTe)wy+-3MkAxy+PMJdAHZo7(dq+ea1=@OO=3nHdXQYift zIb-UIHaF{bhIJy{#k@!5zUug!hdD2vd%1?eX3>+L_Agoiuaj4O;ydu#@h!jSeAex@ y>Lw?BZC1n@Uk?{;m|hyvc>O9O$bqa4iZ9u9Rvb%^-^UgLlJIo(b6Mw<&;$Ug?$-1G literal 0 HcmV?d00001 diff --git a/icons/next.png b/icons/next.png new file mode 100644 index 0000000000000000000000000000000000000000..51563a35889c97c598b7e00f3e8f298596d5c76a GIT binary patch literal 619 zcmV-x0+juUP)N226O|u0c=n<5NFOkdOc{8CjO9lpI`h4 z7ge%sH%%e{000000000000000&>}OtG_!a65&piU*crs+|Aiu?wlnf~y{A6EX8fS1 zA~F||nTRY@^&{80_rw%pS?@bWRkP(N88dtMWpus71eA!QC zx&TM1PcTC0fY-Q%ExKKGZA1rbOSVAM0sVyJzvW(_b4dO*JHaSgipb4WmomEIOMNNA zO9yP5$8KoiN~OmFNL--9R`tpI0_|}M+7+gvD^*<`^3O~`a~}ETkC*rVXOMwbx`RJXt@BNs(R9O5K~Y(v(mq|_0e(xTwn@f3QFeQ zLy#>N;4|)k9xI5Y({bhT4Yi8NKj^YV2`zQNqpF^JO1?DG0UvSHFDr;;Fz+3(5Rr4Q z$rr~Ruvusq6~r=%#|~J=QSUza;;;bss(Mkwt?g6sG6lKYUiRgo1Hu=oix!ig#fY1+ z);aEcD1BpAat9`#n{%f!F!9`;KD7bK=K+lrctoi%9@48ot&gcn1qCSep!TwseSKGw zn|M&WW~E z?Qz>M42F?R;1S#nyg@udHfT18M@T2hbpnszW&(Kwdjolc=6pw`7uA#jiU2|CeeUqj zCaD)9#ZQm`000000002k@=%f98zNc}(K^^I&cQB3bSzt39$p=A6?jWTPeJ%iVmilQ zA4K#gI0sCKz9XWJi2f>B7xIYJphfaRLF+@eb359$FD3pK;(uB4Eb5#k$rDzVzPK)R{z&=bV`7Fc5dRzN)J2`t8i2R|f0AlJ zN)5or<};X~agS7GoE+i8`z1XKHBAO=Aj+XJ9u&l8>;}o*AnT zrY3ByBo26T^@zS?U~45A3Eyj5b1_vWZW(fk?BDRL5 z87AZO$T}HEwL~9r0$VFMKnE2Ed^mZy8c@;7YEgcQxoJptR=8V~KN~eeQ`=Iw#C~hB zuymAk+odDn-}3T^d5!!*vhOnX+gRE;QPrrXt%>6uYE5iSB*W-deaLH0Y@t&~!|EK{ zL0fzZ)!X7>YBcfobR5vghuHy*E5D2$swR>&!6CgoBp=e71CFWwvtq&ia8SG8L2W{) zg7TpX2*EmhfN(VqK)|NLAY_>X5VQ|YShn~B2;Axbgf4ahf_FOr;p-iM3mlw)D@>fQ z_)B~|IRe*MIbe|&x#23q!r(Gb00000000003xbF~0qS^B99%!eod5s;07*qoM6N<$ Ef;8N7bN~PV literal 0 HcmV?d00001 diff --git a/icons/pause.png b/icons/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..a1dd5d69b1c45a438e4763526285424310ccca5b GIT binary patch literal 1019 zcmV z`*9jE5XN^?fzyHA0j|KN1E+#O1)&6|5<3;x9e^v~I)DyB2bYlGatvTS;aWfMPwr)d&$RM^B8JDvlMz?`fkb%_ksA?tt4s4{#GdV5U#9G6-XD4h`iLPu@^77 z^~tsl&}O`in8VkCTSqLJ`IMtP-*P0XtJW68C#}O)>y(`2E#Q;*Z4G2ZCv6Eyw>Xj- zpkeXPBsW4b12ojvU}{;yV_prl`>^Ko=};DGD<| zelYWUOtGU3p#A=#;X(H++&FL-GakftK`%2FpS12#T~Tlg(4E6=Oy&*YW<|S@>ckk} zaOG@vZXB8UE~L&uU63ANK>YvQh92q!wE+D4dkJa<<`#f|{~$rFAfyZW8D2&cZfdtv zKc7&JnnsqbBqpl+*c)rMY6OiZXB8}%lWzW|;1PWoLcU5i7doz$mi8JZmyi*w< zr_hoZ59IsM(%uQ@lO!__*2_1INbY>yAT5J% z5uce{XRn3v*2-dlhuUjh5#Cx^3^1qt{#d-VvWx*G`pzW%cLig>)iQj>s|Dn8$!Hm0 z&3wC{Iq&(0;-#6d0kHRD$4fI9ARkE$05Smsj0_AgGBCi%zyKrTYXDquwv%)>6b7)9 z)Br7P5tqhGGi=6XBI#zFGKuITmEf%v43LK`2KcC?a#O%tD~kbwynkz=U?WFE;9$ej~hx-Vr8*Du`y>Pz9RtoV%iR?0tsl zLwSuBVw(Fl!fR}#6hgqJVCo9kq%3E0Xwzw3lYpRoHtG%9cLrfAZ6x=M(*m~E9d$Xx zCxkBcVtS#AN!JKEQ<(A;)lD_;Cx3St;p-~^4>;6g2s~j@19-%zE<@lMtFf8uLvDD= paAfe9CjbBd00000fEhtV{{R6U&D^-C?u7sV002ovPDHLkV1ieM&}jew literal 0 HcmV?d00001 diff --git a/icons/play-black.png b/icons/play-black.png new file mode 100644 index 0000000000000000000000000000000000000000..0daa8d949b6a2e1e6f0eac498a3129e1c6ef8bb3 GIT binary patch literal 892 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 delta 2432 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 yp z|4~~p49BHj2VexUL70GK1DK%61ceC-6SSQmFad0kFhR0G*r05np6`@GXJsB7=~dOhGC2g)}l8NO#$Ep08aUJjAwqmAmXm9#WGYnfQX#H zGXOXTfGNL1*zxNL05*vDT()J3aiSB^6%lPIA6x#8p$O_y_yrNIGm1Wh`_6>|3Ch62 z?+Xb3o_$x2AflNP;oswInkkSd4@7iAL=U<&KZ>*Qq&4v`i0GF>v4?QBUMP?*9wJ)l z)L6tSw?5hC0UXBbh#X!EZXPj5#FrfQe9G~mJZo)1eBd^$xlPGQ9szH}Z)+d}c;QG$ zy2O#x0S$|PAh{EgIiR6F|09x)2`L@0?LhnkJ48H7@j*!jVNTb25#KRQm7+#R08dyR zQW#Sqmx%ZnV|J7SxZmG5Jm`Le8wVya<3Vf}wCY%V;I>C~MZpokD~IctFK-B!6>UPA z6XSsWfA(g3;~5brA#D!of_MYN#DC>9bWI7T)F1gqz?hA{fBT1<>>%Q$OZm9^ zO)Fj+`8r_C?&m0+Z@Y!CAEj*>z)K^s1GxK9vEathaLta;Rs%Zqsl4-v0ChDpZexU( zg>RJ&(qgTA9B>|HOMVdXhNB^9IUoaKt$ZAydcEIe9*8*Sw6%0Jh_!0Q0S6HA&ZU9? z5VcMpNm>WwD#^%&hLlyRnKS~bT=OrSvWhg5I-uIMpMoi?NVDc0aG*fSn$!W!z$xoo z%e@CrH43t2H`4hAK}uF zec{b}u~yAEfG_)4D=8Sx;((_xTk^xH(N*n=PY^0(a zDwtYI*ySwDx);1BE1X(7;jc>DGJuyxR+^X|uhK;C@^sEL#v1Gn%f?RpZxw8fZn!c- zOo#&(vFD;1X313<`5XXtKx2q;4rnm9f&bSsL7Lbhy)=w_NRL@&ZBktXYZ2@KE_y0i z{-=e<&@;kdR~1B4_NoH@;-0&rW$e8{(VOyoTZmWg+X#2DH>H4G*c6Pe3!9jEExTrs z?6|E-uuJ>=(0gg$0lT)+kK~ncY+!5M(JqJhU{@E5sPF1xcs-eNR(Xo*Qq8km;*W-1 zU$4Un_5cSB*dt8zIHLQ9_^7}hW2J;%ALM3_GAxWe%+oLo!!QiPFbu=!2mtsEGhzNp TaWn9~00000NkvXXu0mjf^$Ye) literal 0 HcmV?d00001 diff --git a/icons/previous-black.png b/icons/previous-black.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ad4a03e0d5e6a70d91dbfee4223ea2f3e193e1 GIT binary patch literal 565 zcmV-50?Pe~P)8O&jA>rZh#vw0wdrCx&cnW2)Kc6ARFigbpzc1uXpKLI7$m`k~iu9ch@g| zz_)owT9T#$000000000000000fGaH}m6G=EDBa%>z_QWs#|I$L{<+ywX^ zdjmD}Q8aqwyQFU;bq&_`?XQp6W|Foi>e{B;3hoI^% z=EG{^hZ185nqPRKjWz^@5ITUTks6)=E>yVTX3WMXfS#&3oF5O3PXHa-=5Yw1!B+r_ zj(MCU0!Z~XbnV9b!ayy9r1nFsa6hWDnMz2h2V^;qlS&U*<+MQ3lu8fCVqxTz6atv% zJeM=I^#F5H2;fW7uYo$eNTmln8>qpHR04RF^q6x`@M+Ach)WmLnTi-$^|ac9q?g3% zj*7{+Oal`z;r-LpaW$#BPJPx&yI78rS<## zVul%zcTc-I-K`A(000000000000000_Tlaq?*8b1w4W~+%r_8&zX_Aj+uD`C?s4o- zznyyjgErt(zn9cKhF!S(shK@z6DfV+R&7TcjOkXdB=fNiaJ_th?gA3pVr=UvY~o{hVIHnWwPon;B_eS#Re zYa6YZE&i%<(inaMVhOo3vy%kjyfE|<6jjWRtb=c(WZ;n{TlEQe?&D;xa<(bE1Vwq-2LCicID0FZ0j-Y{8|__{3TGE(G9Y6gXAUJYAO?So2PA8%WI+7~BO9cjfM_d}EHQU+RL=u4N?lDvFC0ZX zI?C0{jQymedLA%pKWS3dBS0KcO7Hh&w3y~$e`9MleL2ep^+D6~Gls^Gx* vvW^7!x*7lg00000000000000-!_0mGvb*rinE01s00000NkvXXu0mjfx!WDN literal 0 HcmV?d00001 diff --git a/json.json b/json.json new file mode 100644 index 0000000..01635a2 --- /dev/null +++ b/json.json @@ -0,0 +1 @@ +{"device": {"id": "3e20a2964c1151e118255b819e12e57836e32c1b", "is_active": true, "is_private_session": false, "is_restricted": false, "name": "SILVERHAND", "type": "Computer", "volume_percent": 13}, "shuffle_state": false, "repeat_state": "context", "timestamp": 1677383950362, "context": {"external_urls": {"spotify": "https://open.spotify.com/artist/2CmaKO2zEGJ1NWpS1yfVGz"}, "href": "https://api.spotify.com/v1/artists/2CmaKO2zEGJ1NWpS1yfVGz", "type": "artist", "uri": "spotify:artist:2CmaKO2zEGJ1NWpS1yfVGz"}, "progress_ms": 110281, "item": {"album": {"album_type": "single", "artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/2CmaKO2zEGJ1NWpS1yfVGz"}, "href": "https://api.spotify.com/v1/artists/2CmaKO2zEGJ1NWpS1yfVGz", "id": "2CmaKO2zEGJ1NWpS1yfVGz", "name": "Falling In Reverse", "type": "artist", "uri": "spotify:artist:2CmaKO2zEGJ1NWpS1yfVGz"}], "available_markets": ["AD", "AE", "AG", "AL", "AM", "AO", "AR", "AT", "AU", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BN", "BO", "BR", "BS", "BT", "BW", "BY", "BZ", "CA", "CD", "CG", "CH", "CI", "CL", "CM", "CO", "CR", "CV", "CW", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ES", "ET", "FI", "FJ", "FM", "FR", "GA", "GB", "GD", "GE", "GH", "GM", "GN", "GQ", "GR", "GT", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN", "IQ", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KR", "KW", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MG", "MH", "MK", "ML", "MN", "MO", "MR", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NE", "NG", "NI", "NL", "NO", "NP", "NR", "NZ", "OM", "PA", "PE", "PG", "PH", "PK", "PL", "PS", "PT", "PW", "PY", "QA", "RO", "RS", "RW", "SA", "SB", "SC", "SE", "SG", "SI", "SK", "SL", "SM", "SN", "SR", "ST", "SV", "SZ", "TD", "TG", "TH", "TJ", "TL", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VC", "VE", "VN", "VU", "WS", "XK", "ZA", "ZM", "ZW"], "external_urls": {"spotify": "https://open.spotify.com/album/4RAskRcPGU9RuCIZVRl5Gb"}, "href": "https://api.spotify.com/v1/albums/4RAskRcPGU9RuCIZVRl5Gb", "id": "4RAskRcPGU9RuCIZVRl5Gb", "images": [{"height": 640, "url": "https://i.scdn.co/image/ab67616d0000b273f9d64ac5b0e042252e3a561a", "width": 640}, {"height": 300, "url": "https://i.scdn.co/image/ab67616d00001e02f9d64ac5b0e042252e3a561a", "width": 300}, {"height": 64, "url": "https://i.scdn.co/image/ab67616d00004851f9d64ac5b0e042252e3a561a", "width": 64}], "name": "Drugs", "release_date": "2019-04-08", "release_date_precision": "day", "total_tracks": 3, "type": "album", "uri": "spotify:album:4RAskRcPGU9RuCIZVRl5Gb"}, "artists": [{"external_urls": {"spotify": "https://open.spotify.com/artist/2CmaKO2zEGJ1NWpS1yfVGz"}, "href": "https://api.spotify.com/v1/artists/2CmaKO2zEGJ1NWpS1yfVGz", "id": "2CmaKO2zEGJ1NWpS1yfVGz", "name": "Falling In Reverse", "type": "artist", "uri": "spotify:artist:2CmaKO2zEGJ1NWpS1yfVGz"}], "available_markets": ["AR", "AU", "AT", "BE", "BO", "BR", "BG", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "DE", "EC", "EE", "SV", "FI", "FR", "GR", "GT", "HN", "HK", "HU", "IS", "IE", "IT", "LV", "LT", "LU", "MY", "MT", "MX", "NL", "NZ", "NI", "NO", "PA", "PY", "PE", "PH", "PL", "PT", "SG", "SK", "ES", "SE", "CH", "TW", "TR", "UY", "US", "GB", "AD", "LI", "MC", "ID", "JP", "TH", "VN", "RO", "IL", "ZA", "SA", "AE", "BH", "QA", "OM", "KW", "EG", "MA", "DZ", "TN", "LB", "JO", "PS", "IN", "BY", "KZ", "MD", "UA", "AL", "BA", "HR", "ME", "MK", "RS", "SI", "KR", "BD", "PK", "LK", "GH", "KE", "NG", "TZ", "UG", "AG", "AM", "BS", "BB", "BZ", "BT", "BW", "BF", "CV", "CW", "DM", "FJ", "GM", "GE", "GD", "GW", "GY", "HT", "JM", "KI", "LS", "LR", "MW", "MV", "ML", "MH", "FM", "NA", "NR", "NE", "PW", "PG", "WS", "SM", "ST", "SN", "SC", "SL", "SB", "KN", "LC", "VC", "SR", "TL", "TO", "TT", "TV", "VU", "AZ", "BN", "BI", "KH", "CM", "TD", "KM", "GQ", "SZ", "GA", "GN", "KG", "LA", "MO", "MR", "MN", "NP", "RW", "TG", "UZ", "ZW", "BJ", "MG", "MU", "MZ", "AO", "CI", "DJ", "ZM", "CD", "CG", "IQ", "LY", "TJ", "VE", "ET", "XC", "XK"], "disc_number": 1, "duration_ms": 231920, "explicit": true, "external_ids": {"isrc": "USEP41915001"}, "external_urls": {"spotify": "https://open.spotify.com/track/5BkCDt5w0WOGgBgDC7T39i"}, "href": "https://api.spotify.com/v1/tracks/5BkCDt5w0WOGgBgDC7T39i", "id": "5BkCDt5w0WOGgBgDC7T39i", "is_local": false, "name": "Drugs", "popularity": 61, "preview_url": "https://p.scdn.co/mp3-preview/7f962f70f7d2dba2e83e4f2e0847a517afa7be5e?cid=69b82a34d0fb40be80b020eae8e80f25", "track_number": 1, "type": "track", "uri": "spotify:track:5BkCDt5w0WOGgBgDC7T39i"}, "currently_playing_type": "track", "actions": {"disallows": {"resuming": true}}, "is_playing": true} \ No newline at end of file diff --git a/spotifycontroller.py b/spotifycontroller.py index 7475e8d..c87afc8 100644 --- a/spotifycontroller.py +++ b/spotifycontroller.py @@ -16,11 +16,12 @@ import queue # SpotifyGUI - Made by Brandon Brunson # import speech_recognition as sr - -if os.path.isfile("updated.cfg"): - print("A new update was downloaded and installed. Starting in 5 seconds...") - os.remove("updated.cfg") - sleep(5) +if os.name == 'posix': + os.system("xset -display :0 s 21600") + if os.path.isfile("updated.cfg"): + print("A new update was downloaded and installed. Starting in 5 seconds...") + os.remove("updated.cfg") + sleep(5) q = queue.Queue() @@ -65,12 +66,11 @@ spotify = spotipy.Spotify(auth_manager=oauth) # print(SpotifyOAuth.refresh_access_token(refresh_token=access_token)) bg_color = "#000000" -count = 0 -wait_time = 6500 +# count = 0 +# wait_time = 6500 # hotword = "magical" -if os.name == 'posix': - os.system("xset -display :0 s 21600") + # Create the tkinter window root = ttk.Tk() @@ -94,9 +94,15 @@ def controlNext(): def controlPrevious(): spotify.previous_track() +def likeSong(): + print(spotify.current_playback()["item"]["id"]) + spotify.current_user_saved_tracks_add(tracks=(spotify.current_playback()["item"]["id"])) def start_playback_on_device(): - wakeup() + # global count + # global wait_time + # count = 0 + # wait_time = 6500 device_selections = devices_list.curselection() list_of_devices = spotify.devices() list_of_devices = spotify.devices() @@ -104,17 +110,13 @@ def start_playback_on_device(): spotify.transfer_playback(device_id=device_id) def get_devices(): - global count - global wait_time - count +=1 - if count < 69: - wait_time = 6500 - elif count >= 69: - wait_time = 300000 - elif count >= 138: - wait_time = 600000 - elif count >= 277: - wait_time = 3600000 + # global count + # global wait_time + # count +=1 + # if count < 69: + # wait_time = 6500 + # elif count >= 69: + # wait_time = 3600000 list_of_devices = spotify.devices() unloadNow_playing() if list_of_devices == "{'devices': []}": @@ -122,12 +124,11 @@ def get_devices(): loadSearching_Devices() root.after(1000, get_devices) else: - current_playback = spotify.current_playback() - if current_playback != None: + if spotify.current_playback() != None: unloadSearching_Devices() unloadDevices_list() loadNow_playing() - update_song_label() + return else: unloadSearching_Devices() loadDevices_list() @@ -135,13 +136,13 @@ def get_devices(): 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(wait_time, get_devices) + root.after(6500, get_devices) -def wakeup(): - global count - global wait_time - count = 0 - wait_time = 6500 +# def wakeup(): +# global count +# global wait_time +# count = 0 +# wait_time = 6500 def addCorners(im, rad): circle = Image.new('L', (rad * 2, rad * 2), 0) @@ -224,14 +225,14 @@ def getLyrics(artist_name, track_name): # def rgb_to_hex(r, g, b): # return ('{:X}{:X}{:X}').format(r, g, b) -play_img = ttk.PhotoImage(file="icons/play-circle-x2.png") -pause_img = ttk.PhotoImage(file="icons/pause-circle-x2.png") -next_img = ttk.PhotoImage(file="icons/skip-next-x2.png") -previous_img = ttk.PhotoImage(file="icons/skip-previous-x2.png") -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") +play_img = ttk.PhotoImage(file="icons/play.png") +pause_img = ttk.PhotoImage(file="icons/pause.png") +next_img = ttk.PhotoImage(file="icons/next.png") +previous_img = ttk.PhotoImage(file="icons/previous.png") +play_img_black = ttk.PhotoImage(file="icons/play-black.png") +pause_img_black = ttk.PhotoImage(file="icons/pause-black.png") +next_img_black = ttk.PhotoImage(file="icons/next-black.png") +previous_img_black = ttk.PhotoImage(file="icons/previous-black.png") album_art_img = "" @@ -267,13 +268,16 @@ 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) +play_button.configure() + play_button.bind("", lambda e:controlPlay()) pause_button.bind("", lambda e:controlPause()) next_button.bind("", lambda e:controlNext()) previous_button.bind("", lambda e:controlPrevious()) -devices_list.bind("", lambda e:wakeup()) - +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 @@ -283,17 +287,25 @@ def update_song_label(): # If there is no current playback, set the text of the song label to "No playback" if current_playback is None: get_devices() + root.after(100, update_song_label) # Update the song label every 1 second else: - 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 + 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 = "Loading..." + track_duration = 1 + track_progress = 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) @@ -361,6 +373,7 @@ def update_song_label(): elif playing_status == False: pause_button.grid_forget() play_button.grid(row=3, column=1, pady=(100,0)) + else: pass diff --git a/todo.txt b/todo.txt index edcf680..33ab659 100644 --- a/todo.txt +++ b/todo.txt @@ -32,4 +32,38 @@ add canvas videos to background if available. USE: https://github.com/Delitefull need to find out what the protobud error parsing message with type' error is about, probably use a try and except as e statement then print e to figure out the full error SpotifyOAuthError -SpotifyException \ No newline at end of file +SpotifyException + +02/23/2023: +Make try statement for update_song_label to get around this + +Traceback (most recent call last): + File "C:\Users\spong\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__ + return self.func(*args) + File "C:\Users\spong\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 839, in callit + func(*args) + File "c:\Users\spong\Documents\Python Programs\Spotify\spotifycontroller.py", line 287, in update_song_label + track_name = current_playback["item"]["name"] +TypeError: 'NoneType' object is not subscriptable + + +02/23/2023: +add ability to like songs, by icon somewhere or maybe by double tapping or holding on track title... animation?? when adding to liked + +is calling the functions directly causing the issues? ex. get_devices() should be root.after(0, get_devices) or root(get_devices) ??????? +Exception in Tkinter callback +Traceback (most recent call last): + File "/usr/lib/python3.9/tkinter/__init__.py", line 1892, in __call__ + return self.func(*args) + File "/usr/lib/python3.9/tkinter/__init__.py", line 814, in callit + func(*args) + File "", line 287, in update_song_label +TypeError: 'NoneType' object is not subscriptable + +03/04/2023: +switch to spotify web api for track information to avoid api limit??? + +03/04/2023: +new updater, use version numbering to pull updates if server has a newer version and dont update if newer version isnt available. +create a single json file that has a version list with download links to each version. have updater.py download the json file, read and compare to currently downloaded version. +if newer version is in json file, follow link in json file to download, otherwise continue to start the program. \ No newline at end of file