From 14d9620ab8d888451c606d8a3a8d29edd3a5bfdc Mon Sep 17 00:00:00 2001 From: janis Date: Sun, 30 Oct 2022 16:19:09 +0100 Subject: [PATCH] server almost running - Second display working --- bin/__pycache__/player.cpython-310.pyc | Bin 3270 -> 3270 bytes bin/__pycache__/servercoms.cpython-310.pyc | Bin 0 -> 1530 bytes bin/gui/gui.kv | 30 ++++- bin/player.py | 2 + bin/servercoms.py | 48 +++++++ data/temp.csv | 2 +- musicplayer.py | 62 ++++++--- nodeserver/server.js | 39 +++++- .../__pycache__/comHandler.cpython-310.pyc | Bin 1171 -> 1759 bytes .../__pycache__/csv_parsers.cpython-310.pyc | Bin 0 -> 4888 bytes showcaseScreen/handlers/comHandler.py | 40 +++++- showcaseScreen/handlers/csv_parsers.py | 122 ++++++++++++++++++ showcaseScreen/musicplayer_showcase_screen.py | 59 ++++----- showcaseScreen/ui/showcase.kv | 8 +- 14 files changed, 337 insertions(+), 75 deletions(-) create mode 100644 bin/__pycache__/servercoms.cpython-310.pyc create mode 100644 bin/servercoms.py create mode 100644 showcaseScreen/handlers/__pycache__/csv_parsers.cpython-310.pyc create mode 100755 showcaseScreen/handlers/csv_parsers.py diff --git a/bin/__pycache__/player.cpython-310.pyc b/bin/__pycache__/player.cpython-310.pyc index 41d7a7e7a46430ab99d946f01ab3c9c04e9a67b0..b6b71ce955c03e3ff27c7f94241fa7325ca6bbb9 100644 GIT binary patch delta 20 acmX>mc}$W!pO=@50SMN_L~i8X%>w{81O-6= delta 20 acmX>mc}$W!pO=@50SI>KMr`EX%>w{7M+F}M diff --git a/bin/__pycache__/servercoms.cpython-310.pyc b/bin/__pycache__/servercoms.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e15932f94c232dc6694cd468ad1621d33bbcfcde GIT binary patch literal 1530 zcma)6F>ljA6uz^a#7Uhdq)@e0H>NPu3kwoLl?r7ds+3BI3|Ox3nz}f4dS^ppb)$cP z86nZJ3qR;qCgyG|@ZP0~-H5habl-cYd%pL5FYhjCHX8)Sk1y{7r$We2T$G0ii*1;4 z1Aq}mBQhYb2{V{^PMG=G7*Iz0q-*_xebNgM%fo=hHca^vfD?!&1A|d!oRfjcOlE<# zScO%=R#=VMV5_Xo8enT|i8)|x)?~|I>#PNt+N#m#;v*M3$w&qij-3tkaqhsB762m< zPkWaD%91=f6evf-?`Q5&GUD#BABWQ2n*>L`810GVmQ9jLTFibI4OgPgVWZX~4&6 zn8aN}AU|bhA}VwX_>+mMT^~||g>(Q6+M!kIz%>5kosyL6zyJ$38|crJTs?(F-YP3$ z#+eb)3*%Z3u-AIl=Xxxyr_#&Y?l_TYkO{%#R3`CoU?axm1A##?3iZ=VZ z0`rMB!o1t2ReykaZhZ6zqgDX&%>_C)!tN*3)P%;+u?K$eL79;0E+)D}vuKFjoby;L zODX7n7A?&J>k#pHm>#L>)ZRs98H-YU@_5cNQO%%VsJg7a843jba*Md*`T z$rLfYZUY|#>{-uK4bK}TEQ`>0Jntm)qv?*Q;#t^*qJ!`dVHIHw0bkcryXeNjn=0_t pz?H;?vWZP?)2>Z_PEGH^J;!^Z{eK;y?B`QTFYs;D@1jjQ#$Rt|RWkqp literal 0 HcmV?d00001 diff --git a/bin/gui/gui.kv b/bin/gui/gui.kv index d4ce3f2..8ae3273 100755 --- a/bin/gui/gui.kv +++ b/bin/gui/gui.kv @@ -6,8 +6,29 @@ RootScreen: ########### # POPUPS ########### +: + title: "Connect to Server" + auto_dismiss: False + size_hint: 0.8, 0.8 + GridLayout: + cols: 1 + Label: + text: "Please enter the Server's IP address below!" + Label: + text: "" + id: output + TextInput: + text: "" + id: url + hint_text: "Enter Server-IP" + Button: + text: "Connect" + on_release: + root.tryconnect() + + : - title: "BiogasControllerApp" + title: "MusicPlayer" font_size: 50 size_hint: 0.5, 0.4 auto_dismiss: False @@ -218,12 +239,17 @@ RootScreen: on_release: root.playmusic() GridLayout: - cols: 2 + cols: 3 Button: text: "Back" background_color: app.theme_cls.accent_dark on_release: root.go_back() + Button: + text: "Connect to Server" + background_color: app.theme_cls.accent_dark + on_release: + root.connectToServer() Button: text: "Showcase" background_color: app.theme_cls.accent_dark diff --git a/bin/player.py b/bin/player.py index 96ea356..afdc87c 100755 --- a/bin/player.py +++ b/bin/player.py @@ -5,6 +5,7 @@ import bin.filepathanalysis import pygame import bin.info_handler import configparser +import time pa = bin.filepathanalysis.PathAnalysis() cvr = bin.csv_parsers.CsvRead() @@ -134,3 +135,4 @@ class Player: self.infoupdater() else: pass + time.sleep(0.25) diff --git a/bin/servercoms.py b/bin/servercoms.py new file mode 100644 index 0000000..b54b320 --- /dev/null +++ b/bin/servercoms.py @@ -0,0 +1,48 @@ +import requests + +class ServerComs: + def __init__(self): + pass + + def connect(self, url): + try: + self.x = requests.get(f"{url}/tryconnect") + return True + except Exception: + return False + + def postcurrentsong(self, url, data): + try: + self.x = requests.post(f"{url}/postcurrentsong", {"songname":data}) + return True + except Exception: + return False + + def postupcomingsongs(self, url, data): + try: + self.x = requests.post(f"{url}/postupcomingsongs", {"songs":data}) + return True + except Exception: + return False + + def postplaybackpos(self, url, data): + try: + self.x = requests.post(f"{url}/postplayback", {"pos":data}) + return True + except Exception: + return False + + def postsonglength(self, url, data): + try: + self.x = requests.post(f"{url}/postsonglength", {"length":data}) + return True + except Exception: + return False + + def postfullscreen(self, url, data): + try: + self.x = requests.post(f"{url}/postfullscreen", {"fullscreen":data}) + return True + except Exception: + return False + \ No newline at end of file diff --git a/data/temp.csv b/data/temp.csv index dd5c1f5..67aab75 100755 --- a/data/temp.csv +++ b/data/temp.csv @@ -1 +1 @@ -/mnt/data/Music/ +/mnt/storage/SORTED/Music/ diff --git a/musicplayer.py b/musicplayer.py index 21b77e5..1152840 100755 --- a/musicplayer.py +++ b/musicplayer.py @@ -25,6 +25,7 @@ import bin.filepathanalysis import bin.player import math import bin.autocomplete +import bin.servercoms returnOk = False @@ -33,13 +34,40 @@ pa = bin.filepathanalysis.PathAnalysis() cvr = bin.csv_parsers.CsvRead() cvw = bin.csv_parsers.CsvWrite() ac = bin.autocomplete.AutoComplete() +svc = bin.servercoms.ServerComs() version_app = f"Music Player {config['Info']['version']}{config['Info']['subVersion']}" +global address +address = "" + ########### # Popups ########### +class ConnectPU(Popup): + def tryconnect(self): + self.url = self.ids.url.text + self.containsPort = False + for self.letter in self.url: + if self.letter == ":": + self.containsPort = True + else: + pass + self.connectionurl = "" + if self.url[:8] != "https://" and self.url[:7] != "http://" and self.url[len(self.url) - 1:] == "/" and not self.containsPort and len(self.url) > 2: + self.connectionurl = f"http://{self.url[:len(self.url) - 1]}:8000" + print(svc.connect(self.connectionurl)) + self.dismiss() + elif self.url[:8] != "https://" and self.url[:7] != "http://" and self.url[len(self.url) - 1:] != "/" and not self.containsPort and len(self.url) > 2: + self.connectionurl = f"http://{self.url}:8000" + print(svc.connect(self.connectionurl)) + self.dismiss() + else: + self.ids.output = "Invalid address, please enter just the IP address!" + global address + address = self.connectionurl + class QuitPU(Popup): pass @@ -250,13 +278,13 @@ class Main(MDScreen): self.manager.get_screen("Showcase").ids.progressbars.value = self.__songdisplay self.__current = self.__upcoming.pop(self.__currents) if self.__config == ["1"]: - self.ids.current_song.text = self.__current[:(len(self.__current) - 4)] - self.manager.get_screen("Showcase").ids.current_song.text = self.__current[:(len(self.__current) - 4)] + self.__current_output = self.__current[:(len(self.__current) - 4)] else: - self.ids.current_song.text = self.__current - self.manager.get_screen("Showcase").ids.current_song.text = self.__current + self.__current_output = self.__current + self.ids.current_song.text = self.__current_output + self.manager.get_screen("Showcase").ids.current_song.text = self.__current_output if len(self.__upcoming) <= self.__currents: - self.manager.get_screen("Showcase").ids.upcoming_songs.text = "No more songs in Queue" + self.__upcoming_output = "No more songs in Queue" else: self.__upcoming2 = str(self.__upcoming.pop(self.__currents)) if self.__config == ["1"]: @@ -275,17 +303,12 @@ class Main(MDScreen): else: self.__upcoming_output += f"\n{self.__upcoming2}" self.__length_output += 1 - self.manager.get_screen("Showcase").ids.upcoming_songs.text = self.__upcoming_output + self.manager.get_screen("Showcase").ids.upcoming_songs.text = self.__upcoming_output def back_here(self): if self.manager.current == "Showcase": - if config["Security"]["pwdFSExit"] == "True": - self.open_leave_popup() - if returnOk: - Window.fullscreen = False - else: - self.manager.current = "Main" - self.manager.transition.direction = "right" + self.manager.current = "Main" + self.manager.transition.direction = "right" elif self.manager.current == "Main": self.go_back() else: @@ -294,17 +317,14 @@ class Main(MDScreen): def open_leave_popup(self): LeavePU().open() + def connectToServer(self): + ConnectPU().open() + class ShowcaseS(MDScreen): def leave_screen(self): - if config["Security"]["pwdFSExit"] == "True": - self.disablefullscreen() - LeavePU().open() - if returnOk: - self.disablefullscreen() - else: - self.manager.current = "Main" - self.manager.transition.direction = "right" + self.manager.current = "Main" + self.manager.transition.direction = "right" def disablefullscreen(self): Window.fullscreen = False diff --git a/nodeserver/server.js b/nodeserver/server.js index a42aeff..ddca80e 100644 --- a/nodeserver/server.js +++ b/nodeserver/server.js @@ -9,8 +9,14 @@ console.log("Use this IP address when connecting to this server from the player // INITIALIZE VARIABLES var app = express(); +var playbackpos = "1" +var upcomingsongs = "Test\nTest2\nTest3" +var currentsong = "This is a song" +var songmaxlength = "100" +var fullscreen = "False" +// CONFIG FOR EXPRESS app.use(bodyParser.urlencoded({extended : true})) @@ -26,31 +32,50 @@ app.get('/tryconnect', (request, response) => { // Get data (Interface for Screen) app.get('/playbackpos', (request, response) => { - response.send(1) + response.send(playbackpos) }) app.get('/upcomingsongs', (request, response) => { - response.send("This is a song") + response.send(upcomingsongs) }) app.get('/songmaxlength', (request, response) => { - response.send(100) + response.send(songmaxlength) }) app.get('/currentsong', (request, response) => { - response.send("Test\nTest2\nTest3") + response.send(currentsong) }) - +app.get('/fullscreen', (request, response) => { + response.send(fullscreen) +}) // POST data (Interface for Player) -app.post('/posplayback', (request, response) => { - +app.post('/postplayback', (request, response) => { + playbackpos = request.body.pos + response.send("ok") }) app.post('/postupcomingsogns', (request, response) => { + upcomingsongs = request.body.songs + response.send("ok") +}) +app.post('/postcurrentsong', (request, response) => { + currentsong = request.body.songname + response.send("ok") +}) + +app.post('/postfullscreen', (request, response) => { + fullscreen = request.body.fullscreen + response.send("ok") +}) + +app.post('/postsonglength', (request, response) => { + songmaxlength = request.body.length + response.send("ok") }) diff --git a/showcaseScreen/handlers/__pycache__/comHandler.cpython-310.pyc b/showcaseScreen/handlers/__pycache__/comHandler.cpython-310.pyc index 131929ffba6e340b67333dc7ce812a3b49e65c49..93ce50d83f63389bc877e9e7d6a570e5e6885d22 100644 GIT binary patch literal 1759 zcmbVNOK;mo5Z+x<(psVw+l_;ukDw^hgDzpwQx8R9AdmLY2nJ*zs1GIB-L)l~B9&PZ zwg@)}keu=tiURFX_x_r__LOsO0h)G(lq;!~4($RvJInnzoNpe>Y_397^2y+ z&|Hg`?AX(u_Hp%fLpO14=$4kaHuaWn2)X69srK3EGFnY`qU7wc$dU)^pK+(hNLAu0Q zx%w?CWhZC9@GJfk#`b6NE5Blqc*4@Q&vI|N&yg2r-(kE5?1JU~6+07WjTfA=TGQUS zfVGrX&C*lXcnFXIkgGkf zq69mrJ8u5Ts*3?xdhu63Ay%ooy;`_6rDCG8@hCl|?^vKn&l>9}ZDzBBY*ws%f<|mj z2-D>S@2DEfn{z@d(2bnn78)TBgK&bK|3j?KCz%DhP~bL+b#ZOadzT^f%~6uEX3jWb;&qz6&-w1|`X1e)Z+E{S~-^v{5gNZcXuF^NTe xRvO(bK&?a9PUVth5;G|~Qp%QW1+D6|C+b2W+}S=r^RBFiT6iC3W`FZM?>k=^WmD?>aCjcak~$&g8RC|`+y;E<{UDRJmBi_=&g zlTwH14b}xs%>i<-jv=j6-T^z`>k6t*g#{9=A~Ezfv~-j`5W@8$a21dhEviN<#n@D= z=@V`E?ZEGam-?XF=K2z6tX%$!k5Z6-kOZyA*X~)_++1G!WV`=UV4fJ?F}8|@7#~?p z|7uTn3^QH(L91%2TB4SVy3PW%0g?mBtG7hHD8LJzB!J;L;+Rv;b)j{McyR!K-e8aHD5%lUuRbGv6_|&7H>vch0Szg;s^TXt`+F+`4D9tJ6Q+ z83o~o!LeXG2~{ei;c@+bKT-_;0aMXn6h}u<7^G1$WXTar`+|k)lnoL-j>V@~(CCIl z%a4V|9lVNx2%~30D2to4D7POQJ%>BIf)e785LxwYb^3t_`1EA8bQlLpVYwh>5<^O_ zdKAS1at%4-VkCwf(lW?JLgfN6C1Me#0uvI<jMJK8w=Oglvn4 z>Lm2rc-2cF+?*MHPEB36xB*eEZf3OYY}+pc_I(^sxhaE5wznEZ(~l#SUYeN$$&M}! zSp)aax(EGaAP!D~VWbWY&%%Bn2Zu5_f#~Ys?pQ_PVH}(Zd7%2qBn*_e7fK<92YqZk z7E&ER1^y_I3iZzDEb}19FiL%&xGNXLHC?lAPFsbboyCNZwz+ty?%>ti{tYUrF*DC; z>t<@5*fZkr9vHmpzzdw)rZMzx z8|tkIdg<@)c++i~eQt91Lq~q3`FmfJ|D#R()m^M*&YRk;*m=pTKxS>q--CK68tCAo z{RoSOY(iiq&o9`dABAx1im8zZ38kC`6e(CBkH-UY|An7HZ{cdLyBFDj7UVX_r-Z=F zoLpLxd_k}JXq==#kw#`WGlTYy+@ZyF`9KWRJ+VK{6W%mEWP7t0k4$_WOT* z@BW|syYF`2z5CW*;-JB>Uj}s@h1N2pZMOKw=`-id8yMHZ+iGt)TRl`oe>MzX%LSQ9YyE3 z!=fW}ARa~|L72|x@XiXM@<-5;{4o*2YFGXQ^m6wZP$^%fk8XlwZZt#!k;>Por%mL0 zM1D%-XG92}IUwB?ASGp)gl*NU4aLOQa%c5I#&rM<`^N-O3JHqj%mLa2K$~XkSzuZ) z2+3709)j!=rfSG%`6ZA#E0A7# z)AwHlNcDB$8Br=b&|JH64N&su=#{sLtg<7Wmu(f=_u;JG!TA5KLa6a12<+LWm*}ELxfL#2NTLv|(lZ1q{5qhQ#0SeY zhe?V^ra#spDvw|kx4P|Wju)Lit@O_@mWQA(WkMCrzE{uBgs%%V#R&|+MBm^V&OU<7 z&CeUQz6$4APci9*DjFGdDTiLKX!-@g>E@wZ=bCg58;)TWiLW1nq>Fm5rh%~T4Du1e z!Rhi8kO>y2u(t$@We>b*jBVgu=J{HId&E`5lp!tJXDr zk^L41h?Am3IKRkxb#K?ZL4S>!q;Vv;dI_z2y7}tfb?h?l_xZj0kCf-=%dum4cGKQ# F{U47?Uo8Lt literal 0 HcmV?d00001 diff --git a/showcaseScreen/handlers/comHandler.py b/showcaseScreen/handlers/comHandler.py index 0d9fb6b..9fb95ea 100644 --- a/showcaseScreen/handlers/comHandler.py +++ b/showcaseScreen/handlers/comHandler.py @@ -6,7 +6,10 @@ class Com: pass def connect(self, url): - self.x = requests.get(f"{url}/tryconnect") + try: + self.x = requests.get(f"{url}/tryconnect") + except Exception: + return False print(self.x.text) if self.x.text == "ok": return True @@ -14,13 +17,40 @@ class Com: return False def getcurrentsong(self, url): - return "Testsong" + try: + self.x = requests.get(f"{url}/currentsong") + except Exception as e: + print(e) + return "Error" + return self.x.text def getsonglength(self, url): - return 100 + try: + self.x = requests.get(f"{url}/songmaxlength") + except Exception: + return 100 + return int(self.x.text) def getupcomingsongs(self, url): - return "Test1\nTest2" + try: + self.x = requests.get(f"{url}/upcomingsongs") + except Exception: + return "Error" + return self.x.text def getsongpos(self, url): - return 2 \ No newline at end of file + try: + self.x = requests.get(f"{url}/playbackpos") + except Exception: + return 0 + return int(self.x.text) + + def checkiffullscreen(self, url): + try: + self.x = requests.get(f"{url}/currentsong") + except Exception: + return False + if self.x.text == "True": + return True + else: + return False \ No newline at end of file diff --git a/showcaseScreen/handlers/csv_parsers.py b/showcaseScreen/handlers/csv_parsers.py new file mode 100755 index 0000000..c56faec --- /dev/null +++ b/showcaseScreen/handlers/csv_parsers.py @@ -0,0 +1,122 @@ +"""@package docstring +This is a simplification of the csv module""" + +import csv + + +class CsvRead: + """This is a class that reads csv files and depending on the module selected does do different things with it""" + def __init__(self): + self.__imp = "" + self.__raw = "" + self.__raw_list = "" + + def importing(self, path): + """Returns a list of the imported csv-file, requires path, either direct system path or relative path""" + self.__imp = open(path) + self.__raw = csv.reader(self.__imp, delimiter=',') + self.__raw_list = list(self.__raw) + self.__imp.close() + return self.__raw_list + + +class CsvWrite: + """This is a class that modifies csv files""" + def __init__(self): + self.__impl = [] + self.__strpop = [] + self.__removed = [] + self.__removing = 0 + self.__change = 0 + self.__appending = 0 + self.__imp = [] + self.__raw = [] + + def rem_str(self, path, row): + """Opens the csv-file in write mode which is specified as an argument either as direct or relative path""" + self.__imp = open(path) + self.__raw = csv.reader(self.__imp, delimiter=',') + self.__impl = list(self.__raw) + self.__removed = self.__impl.pop(row + 1) + with open(path, "w") as removedata: + self.__removing = csv.writer(removedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__removing.writerow(self.__impl.pop(0)) + while len(self.__impl) > 0: + with open(path, "a") as removedata: + self.__removing = csv.writer(removedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__removing.writerow(self.__impl.pop(0)) + self.__imp.close() + removedata.close() + + + def chg_str(self, path, row, pos, new_value): + """Opens the csv-file in write mode to change a value, e.g. if a recipe is changed.""" + self.__imp = open(path) + self.__raw = csv.reader(self.__imp, delimiter=',') + self.__impl = list(self.__raw) + self.__strpop = self.__impl.pop(row) + self.__strpop.pop(pos) + self.__strpop.insert(pos, new_value) + self.__impl.insert(row, self.__strpop) + with open(path, "w") as changedata: + self.__change = csv.writer(changedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__change.writerow(self.__impl.pop(0)) + while len(self.__impl) > 0: + with open(path, "a") as changedata: + self.__removing = csv.writer(changedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__removing.writerow(self.__impl.pop(0)) + self.__imp.close() + changedata.close() + + def chg_str_rem(self, path, row, pos): + """Opens the csv-file in write mode to change a value, e.g. if a recipes is changed.""" + self.__imp = open(path) + self.__raw = csv.reader(self.__imp, delimiter=',') + self.__impl = list(self.__raw) + self.__strpop = self.__impl.pop(row) + self.__strpop.pop(pos) + self.__strpop.pop(pos) + self.__impl.insert(row, self.__strpop) + with open(path, "w") as changedata: + self.__change = csv.writer(changedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__change.writerow(self.__impl.pop(0)) + while len(self.__impl) > 0: + with open(path, "a") as changedata: + self.__removing = csv.writer(changedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__removing.writerow(self.__impl.pop(0)) + self.__imp.close() + changedata.close() + + def chg_str_add(self, path, row, new_value1, new_value2): + """Opens the csv-file in write mode to change a value, e.g. if a recipes is changed.""" + self.__imp = open(path) + self.__raw = csv.reader(self.__imp, delimiter=',') + self.__impl = list(self.__raw) + self.__strpop = self.__impl.pop(row) + self.__strpop.append(new_value1) + self.__strpop.append(new_value2) + self.__impl.insert(row, self.__strpop) + with open(path, "w") as changedata: + self.__change = csv.writer(changedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__change.writerow(self.__impl.pop(0)) + while len(self.__impl) > 0: + with open(path, "a") as changedata: + self.__removing = csv.writer(changedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__removing.writerow(self.__impl.pop(0)) + self.__imp.close() + changedata.close() + + def app_str(self, path, value): + """Opens the csv-file in append mode and writes given input. CsvWrite.app_str(path, value). + Path can be specified both as direct or relative. value is a list. Will return an error if type of value is + not a list.""" + with open(path, "a") as appenddata: + self.__appending = csv.writer(appenddata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__appending.writerow(value) + appenddata.close() + + def write_str(self, path, value): + with open(path, "w") as writedata: + self.__change = csv.writer(writedata, delimiter=',', quoting=csv.QUOTE_MINIMAL) + self.__change.writerow(value) + writedata.close() diff --git a/showcaseScreen/musicplayer_showcase_screen.py b/showcaseScreen/musicplayer_showcase_screen.py index 24486d1..9714fb5 100644 --- a/showcaseScreen/musicplayer_showcase_screen.py +++ b/showcaseScreen/musicplayer_showcase_screen.py @@ -1,3 +1,4 @@ +from audioop import add from kivy.core.window import Window from kivy.uix.screenmanager import ScreenManager from kivymd.uix.screen import MDScreen @@ -7,11 +8,11 @@ from kivy.uix.popup import Popup from kivy.clock import Clock import handlers.comHandler import math -import bin.csv_parsers +import handlers.csv_parsers Builder.load_file('./ui/connectionPU.kv') comHandler = handlers.comHandler.Com() -cvr = bin.csv_parsers.CsvRead() +cvr = handlers.csv_parsers.CsvRead() class ConnectionPU(Popup): pass @@ -27,21 +28,30 @@ class LoginWindow(MDScreen): else: pass self.connectionurl = "" - if self.url[:8] != "https://" and self.url[:7] != "http://" and self.url[len(self.url) - 1:] == "/" and not self.containsPort: + if self.url[:8] != "https://" and self.url[:7] != "http://" and self.url[len(self.url) - 1:] == "/" and not self.containsPort and len(self.url) > 2: self.connectionurl = f"http://{self.url[:len(self.url) - 1]}:8000" print(comHandler.connect(self.connectionurl)) - elif self.url[:8] != "https://" and self.url[:7] != "http://" and self.url[len(self.url) - 1:] != "/" and not self.containsPort: + elif self.url[:8] != "https://" and self.url[:7] != "http://" and self.url[len(self.url) - 1:] != "/" and not self.containsPort and len(self.url) > 2: self.connectionurl = f"http://{self.url}:8000" print(comHandler.connect(self.connectionurl)) else: ConnectionPU().open() global address - address = self.url + address = self.connectionurl + screen_manager.current = "ShowcaseScreen" class ShowcaseScreen(MDScreen): - def updateScreen(self): + def beginUpdating(self): + Clock.schedule_interval(self.updateScreen, 0.5) + self.lastsongpos = 200 + self.__current = comHandler.getcurrentsong(address) + self.__upcoming = comHandler.getupcomingsongs(address) + self.songlength = comHandler.getsonglength(address) + + def updateScreen(self, dmp): global address + Window.fullscreen = comHandler.checkiffullscreen(address) self.__windowsize = Window._get_size() self.__windowsize_x = self.__windowsize[0] self.__windowsize_y = self.__windowsize[1] @@ -50,33 +60,18 @@ class ShowcaseScreen(MDScreen): self.ids.upcoming_songs.font_size = self.__text_size - 5 self.ids.titleinfo.font_size = self.__text_size * 2.2 self.ids.upcoming_ind.font_size = self.__text_size + 10 - self.__current = comHandler.getcurrentsong(address) - self.__upcoming = comHandler.getupcomingsongs(address) - self.__songdisplay = int(comHandler.getsonglength(address) / float(comHandler.getsongpos(address)) * 100) + self.songpos = comHandler.getsongpos(address) + if self.songpos < self.lastsongpos: + self.__current = comHandler.getcurrentsong(address) + self.__upcoming = comHandler.getupcomingsongs(address) + self.songlength = comHandler.getsonglength(address) + else: + pass + self.lastsongpos = self.songpos + self.__songdisplay = int(self.songpos / float(self.songlength) * 100) self.ids.progressbars.value = self.__songdisplay - if self.__config == ["1"]: - self.ids.current_song.text = self.__current[:(len(self.__current) - 4)] - else: - self.ids.current_song.text = self.__current - if len(self.__upcoming) <= self.__currents: - self.ids.upcoming_songs.text = "No more songs in Queue" - else: - if self.__config == ["1"]: - self.__upcoming_output = self.__upcoming[:(len(self.__upcoming) - 4)] - else: - self.__upcoming_output = self.__upcoming - - self.__length_output = 0 - for i in range(len(self.__upcoming) - self.__currents): - if self.__length_output > 5: - pass - else: - if self.__config == ["1"]: - self.__upcoming_output += f"\n{self.__upcoming[:(len(self.__upcoming) - 4)]}" - else: - self.__upcoming_output += f"\n{self.__upcoming}" - self.__length_output += 1 - self.ids.upcoming_songs.text = self.__upcoming_output + self.ids.current_song.text = self.__current + self.ids.upcoming_songs.text = self.__upcoming class MusicPlayerShowcaseScreen(MDApp): diff --git a/showcaseScreen/ui/showcase.kv b/showcaseScreen/ui/showcase.kv index 72128a4..ea83d21 100644 --- a/showcaseScreen/ui/showcase.kv +++ b/showcaseScreen/ui/showcase.kv @@ -1,5 +1,6 @@ ShowcaseScreen: name: "ShowcaseScreen" + on_pre_enter: root.beginUpdating() md_bg_color: (0, 0, 0, 1) FloatLayout: Label: @@ -45,13 +46,6 @@ ShowcaseScreen: color: app.theme_cls.primary_color shorten: False halign: "center" - Button: - text: "back" - font_size: 10 - size_hint: 0.05, 0.05 - background_color: app.theme_cls.accent_light - on_release: - root.leave_screen() Label: text: "Designed and developed by Janis Hutz" font_size: 7