187 lines
5.6 KiB
Python
187 lines
5.6 KiB
Python
import multiprocessing
|
|
import os
|
|
from kivy.core.window import Window, Config
|
|
from kivy.uix.screenmanager import ScreenManager
|
|
from kivymd.uix.screen import MDScreen
|
|
from kivymd.app import MDApp
|
|
from kivy.base import Builder
|
|
from kivy.uix.popup import Popup
|
|
from kivy.clock import Clock
|
|
import bin.csv_parsers
|
|
import bin.filepathanalysis
|
|
import bin.player
|
|
|
|
|
|
pl = bin.player.Player()
|
|
pa = bin.filepathanalysis.PathAnalysis()
|
|
cvr = bin.csv_parsers.CsvRead()
|
|
cvw = bin.csv_parsers.CsvWrite()
|
|
|
|
|
|
###########
|
|
# Popups
|
|
###########
|
|
|
|
|
|
class PathMissingPU(Popup):
|
|
pass
|
|
|
|
|
|
class PathWrongPU(Popup):
|
|
pass
|
|
|
|
|
|
class invalidpathPU(Popup):
|
|
pass
|
|
|
|
|
|
###########
|
|
# SCREENS
|
|
###########
|
|
|
|
|
|
class Home(MDScreen):
|
|
def change_screen(self):
|
|
if self.ids.filepath.text != "":
|
|
self.analyse_dir()
|
|
else:
|
|
self.openpathmpu()
|
|
|
|
def analyse_dir(self):
|
|
try:
|
|
self.__fcontent = os.listdir(self.ids.filepath.text)
|
|
self.__good_files = 0
|
|
for self.item in self.__fcontent:
|
|
self.__filextension = self.item[(len(self.item) - 4):]
|
|
if self.__filextension == ".mp3" or self.__filextension == ".wav":
|
|
self.__good_files += 1
|
|
else:
|
|
pass
|
|
# self.__good_files = 1
|
|
if self.__good_files > 0:
|
|
cvw.write_str("./data/temp.csv", [self.ids.filepath.text])
|
|
self.manager.current = "Main"
|
|
self.manager.transition.direction = "left"
|
|
else:
|
|
self.openpathfpu()
|
|
except:
|
|
self.ivpathpu()
|
|
|
|
def openpathmpu(self):
|
|
self.pmpu = PathMissingPU()
|
|
self.pmpu.open()
|
|
|
|
def openpathfpu(self):
|
|
self.wppu = PathWrongPU()
|
|
self.wppu.open()
|
|
|
|
def ivpathpu(self):
|
|
self.ivppu = invalidpathPU()
|
|
self.ivppu.open()
|
|
|
|
|
|
class Main(MDScreen):
|
|
def __init__(self, **kwargs):
|
|
super().__init__(**kwargs)
|
|
self.instructions = multiprocessing.Value('i', 0)
|
|
self.others = multiprocessing.Value('i', 0)
|
|
self.keyboard = Window.request_keyboard(None, self)
|
|
self.keyboard.bind(on_key_down=self.key_pressed)
|
|
self.quit_requests = 0
|
|
|
|
def key_pressed(self, keyboard, keycode, text, modifiers):
|
|
# print(keycode[1])
|
|
self.key = keycode[1]
|
|
if self.key == "spacebar":
|
|
self.playmusic()
|
|
elif self.key == "right":
|
|
self.nextsong()
|
|
elif self.key == "left":
|
|
self.rewindsong()
|
|
else:
|
|
pass
|
|
|
|
def initialize(self):
|
|
try:
|
|
if self.mplayer.is_alive() == True:
|
|
pass
|
|
else:
|
|
self.mplayer = multiprocessing.Process(name="player", target=pl.musicmanager, args=(self.instructions, self.others,))
|
|
self.mplayer.start()
|
|
except:
|
|
self.mplayer = multiprocessing.Process(name="player", target=pl.musicmanager, args=(self.instructions, self.others,))
|
|
self.mplayer.start()
|
|
|
|
def playmusic(self):
|
|
self.others.value = 3
|
|
if self.instructions.value == 0:
|
|
self.instructions.value = 1
|
|
self.ids.pp_button.text = "Pause"
|
|
else:
|
|
self.instructions.value = 0
|
|
self.ids.pp_button.text = "Play"
|
|
|
|
def nextsong(self):
|
|
self.others.value = 1
|
|
|
|
def rewindsong(self):
|
|
self.others.value = 2
|
|
|
|
def go_back(self):
|
|
try:
|
|
self.mplayer.kill()
|
|
except:
|
|
pass
|
|
self.manager.current = "Home"
|
|
self.manager.transition.direction = "right"
|
|
|
|
class ShowcaseS(MDScreen):
|
|
def screen_updater_start(self):
|
|
Clock.schedule_interval(self.screen_updating, 2)
|
|
|
|
|
|
def screen_updating(self, waste):
|
|
self.__info = cvr.importing("./data/songtemp.csv")
|
|
self.__currents_imp = self.__info.pop(0)
|
|
self.__currents = int(self.__currents_imp.pop(0))
|
|
self.__upcoming = self.__info.pop(0)
|
|
self.__upcoming.sort()
|
|
self.__current = self.__upcoming.pop(self.__currents)
|
|
self.ids.current_song.text = self.__current[:(len(self.__current) - 4)]
|
|
if len(self.__upcoming) <= self.__currents:
|
|
self.ids.upcoming_songs.text = "No more songs in Queue"
|
|
else:
|
|
self.__upcoming2 = str(self.__upcoming.pop(self.__currents))
|
|
self.__upcoming_output = self.__upcoming2[:(len(self.__upcoming2) - 4)]
|
|
self.__length_output = 0
|
|
for i in range(len(self.__upcoming) - self.__currents):
|
|
if self.__length_output > 5:
|
|
pass
|
|
else:
|
|
self.__upcoming2 = str(self.__upcoming.pop(self.__currents))
|
|
self.__upcoming_output += f"\n{self.__upcoming2[:(len(self.__upcoming2) - 4)]}"
|
|
self.__length_output += 1
|
|
self.ids.upcoming_songs.text = self.__upcoming_output
|
|
|
|
class RootScreen(ScreenManager):
|
|
pass
|
|
|
|
class MusicPlayer(MDApp):
|
|
def build(self):
|
|
self.title = "MusicPlayer"
|
|
self.theme_cls.primary_palette = "Yellow"
|
|
self.theme_cls.accent_palette = "BlueGray"
|
|
# self.icon = "./BiogasControllerAppLogo.png"
|
|
return Builder.load_file("./bin/gui/gui.kv")
|
|
|
|
if __name__ == "__main__":
|
|
Config.set('graphics', 'width', '800')
|
|
Config.set('graphics', 'height', '600')
|
|
Config.set('graphics', 'resizable', True)
|
|
Config.set('kivy', 'exit_on_escape', '0')
|
|
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
|
|
Config.set('graphics', 'window_state', 'normal')
|
|
Config.set('graphics', 'fullscreen', False)
|
|
Config.write()
|
|
MusicPlayer().run()
|