Start rewrite of player control module with mpv [Skip CI]
This commit is contained in:
parent
f5ecaefe8c
commit
062bbcc842
@ -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])
|
Loading…
Reference in New Issue
Block a user