diff --git a/src/controller/player.py b/src/controller/player.py index 28bb462..72d4776 100644 --- a/src/controller/player.py +++ b/src/controller/player.py @@ -4,9 +4,8 @@ import random import logging import config import time -from sound_lib import output, stream +import mpv from pubsub import pub -from utils import call_threaded, RepeatingTimer player = None log = logging.getLogger("controller.player") @@ -26,25 +25,26 @@ class audioPlayer(object): self.stopped = True self.queue_pos = 0 self.shuffle = False - self.worker = RepeatingTimer(5, self.player_function) - self.worker.start() - self.output = output.Output() - self.set_output_device(config.app["main"]["output_device"]) - self.player = None + self.player = mpv.MPV() + + # Fires at the end of every file and attempts to play the next one. + @self.player.event_callback('end-file') + def handle_end_idle(event): + if event.as_dict()["reason"] == b"aborted" or event.as_dict()["reason"] == b"stop": + return + log.debug("Reached end of file stream.") + if len(self.queue) > 1: + log.debug("Requesting next item...") + self.next() def get_output_devices(self): """ Retrieve enabled output devices so we can switch or use those later. """ - devices = output.Output.get_device_names() - return devices + return None def set_output_device(self, device_name): """ Set Output device to be used in LibVLC""" log.debug("Setting output audio device to {device}...".format(device=device_name,)) - try: - self.output.set_device(self.output.find_device_by_name(device_name)) - except: - log.error("Error in input or output devices, using defaults...") - config.app["main"]["output_device"] = "Default" +# config.app["main"]["output_device"] = "Default" def play(self, item): self.stopped = True @@ -53,17 +53,8 @@ class audioPlayer(object): if item.download_url == "": item.get_download_url() log.debug("playing {0}...".format(item.download_url,)) - if hasattr(self, "player") and self.player != None and self.player.is_playing: - self.player.stop() - self.player = stream.URLStream(item.download_url) - if self.player.play() == -1: - log.debug("Error when playing the file {0}".format(item.title,)) - pub.sendMessage("change_status", status=_("Error playing {0}. {1}.").format(item.title, e.description)) - self.stopped = True - self.is_working = False - self.next() - return - self.player.volume = self.vol/100 + self.player.play(item.download_url) + self.player.volume = self.vol pub.sendMessage("change_status", status=_("Playing {0}.").format(item.title)) self.stopped = False self.is_working = False @@ -95,7 +86,7 @@ class audioPlayer(object): self.stopped = True def pause(self): - self.player.pause() + self.player.pause = True if self.stopped == True: self.stopped = False else: @@ -111,25 +102,11 @@ class audioPlayer(object): config.app["main"]["volume"] = vol self.vol = vol if self.player != None: - self.player.volume = self.vol/100 + self.player.volume = self.vol def play_all(self, list_of_items, playing=0, shuffle=False): if list_of_items != self.queue: self.queue = list_of_items self.shuffle = shuffle self.queue_pos = playing - self.play(self.queue[self.queue_pos]) - - def player_function(self): - """ Check if the stream has reached the end of the file so it will play the next song. """ - if self.player != None and self.player.is_playing == False and self.stopped == False and len(self.player)-self.player.position < 50000: - - if self.queue_pos >= len(self.queue): - self.stopped = True - return - elif self.queue_pos < len(self.queue): - self.queue_pos += 1 - self.play(self.queue[self.queue_pos]) - - def playback_error(self, event): - pub.sendMessage("notify", title=_("Error"), message=_("There was an error while trying to access the file you have requested.")) + self.play(self.queue[self.queue_pos]) \ No newline at end of file