renamed run scripts
mpc webapi dropped
This commit is contained in:
parent
97a357ae00
commit
faf5c63c14
@ -7,7 +7,7 @@ from setup_common import common_info
|
|||||||
|
|
||||||
info = dict(
|
info = dict(
|
||||||
common_info,
|
common_info,
|
||||||
console = ['sync_mplayer.py', 'sync_mpc_api.py', 'sync_mpc.py', 'run_sync_server.py'],
|
console = ['syncplay_mplayer.py', 'syncplay_mpc.py', 'run_sync_server.py'],
|
||||||
)
|
)
|
||||||
|
|
||||||
setup(**info)
|
setup(**info)
|
||||||
|
|||||||
13
sync_mpc.py
13
sync_mpc.py
@ -1,13 +0,0 @@
|
|||||||
#coding:utf8
|
|
||||||
import thread
|
|
||||||
|
|
||||||
from twisted.internet import reactor
|
|
||||||
from syncplay import client
|
|
||||||
from syncplay.players import mpc
|
|
||||||
|
|
||||||
from syncplay import utils
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
args = utils.get_configuration()
|
|
||||||
manager = client.Manager(args.host, args.port, args.name, lambda m: mpc.run_mpc(m))
|
|
||||||
manager.start()
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
#coding:utf8
|
|
||||||
from twisted.internet import reactor
|
|
||||||
from syncplay import client
|
|
||||||
from syncplay.players import mpc_using_api
|
|
||||||
|
|
||||||
from syncplay import utils
|
|
||||||
|
|
||||||
|
|
||||||
def prepareArguments():
|
|
||||||
args = utils.MPCConfigurationGetter()
|
|
||||||
args.prepareClientConfiguration()
|
|
||||||
return args.getClientConfiguration()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
manager = None
|
|
||||||
try:
|
|
||||||
args = prepareArguments()
|
|
||||||
manager = client.Manager(args.host, args.port, args.name, lambda m: mpc_using_api.run_mpc(m, args.mpc_path, args.file, args._args))
|
|
||||||
manager.start()
|
|
||||||
finally:
|
|
||||||
if(manager): manager.stop()
|
|
||||||
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
#coding:utf8
|
|
||||||
from twisted.internet import reactor
|
|
||||||
from syncplay import client
|
|
||||||
from syncplay.players import mplayer
|
|
||||||
|
|
||||||
from syncplay import utils
|
|
||||||
|
|
||||||
def prepareArguments():
|
|
||||||
args = utils.ConfigurationGetter()
|
|
||||||
args.prepareClientConfiguration()
|
|
||||||
return args.getClientConfiguration()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
args = prepareArguments()
|
|
||||||
args.args.extend(('-slave', '-msglevel', 'all=1:global=4'))
|
|
||||||
if(args.file): args.args.extend((args.file,))
|
|
||||||
manager = client.Manager(args.host, args.port, args.name, lambda m: mplayer.run_mplayer(m, 'mplayer', args.args))
|
|
||||||
manager.start()
|
|
||||||
|
|
||||||
@ -1,151 +1,128 @@
|
|||||||
#coding:utf8
|
#coding:utf8
|
||||||
|
|
||||||
import re
|
from ..mpc_api import MPC_API
|
||||||
|
import time
|
||||||
|
|
||||||
from twisted.internet import reactor
|
class MPCHCAPIPlayer(object):
|
||||||
from twisted.web.client import Agent
|
def __init__(self, manager):
|
||||||
from twisted.web.http_headers import Headers
|
|
||||||
|
|
||||||
from ..network_utils import (
|
|
||||||
BodyProducer,
|
|
||||||
handle_response,
|
|
||||||
null_response_handler,
|
|
||||||
)
|
|
||||||
|
|
||||||
#RE_MPC_STATUS = re.compile("^OnStatus\('(.+)', '(Paused|Playing)', (\d+), '\d{2}:\d{2}:\d{2}', \d+, '\d{2}:\d{2}:\d{2}', \d+, \d+, '.+'\)$")
|
|
||||||
RE_MPC_STATUS = re.compile(r"^OnStatus\('((?:[^']*(?:\\\\)*\\')*[^']*)', '(.+?)', (\d+),")
|
|
||||||
|
|
||||||
PLAYING_STATUSES = {
|
|
||||||
'Playing': False,
|
|
||||||
'Reproduzindo': False,
|
|
||||||
'Прайграванне': False,
|
|
||||||
'Reproduint': False,
|
|
||||||
'Přehrávání': False,
|
|
||||||
'Spiele ab': False,
|
|
||||||
'Reproduciendo': False,
|
|
||||||
'Lecture': False,
|
|
||||||
'מנגן': False,
|
|
||||||
'Lejátszás': False,
|
|
||||||
'Վերարատադրվում է': False,
|
|
||||||
'Riproduzione': False,
|
|
||||||
'再生中': False,
|
|
||||||
'재생중': False,
|
|
||||||
'Afspelen': False,
|
|
||||||
'Odtwarzanie...': False,
|
|
||||||
'Воспроизведение': False,
|
|
||||||
'正在播放': False,
|
|
||||||
'Prehráva sa': False,
|
|
||||||
'Spelar': False,
|
|
||||||
'播放中': False,
|
|
||||||
'Oynatılıyor': False,
|
|
||||||
'Відтворення': False,
|
|
||||||
|
|
||||||
'Paused': True,
|
|
||||||
'Pausado': True,
|
|
||||||
'Паўза': True,
|
|
||||||
'Pausat': True,
|
|
||||||
'Pozastaveno': True,
|
|
||||||
'Angehalten': True,
|
|
||||||
'Pausado': True,
|
|
||||||
'En pause': True,
|
|
||||||
'מושהה': True,
|
|
||||||
'Szünet': True,
|
|
||||||
'Դադար': True,
|
|
||||||
'In pausa': True,
|
|
||||||
'一時停止': True,
|
|
||||||
'일시정지': True,
|
|
||||||
'Gepauzeerd': True,
|
|
||||||
'Wstrzymano': True,
|
|
||||||
'Пауза': True,
|
|
||||||
'已暂停': True,
|
|
||||||
'Pozastavené': True,
|
|
||||||
'Pausad': True,
|
|
||||||
'已暫停': True,
|
|
||||||
'Duraklatıldı': True,
|
|
||||||
'Пауза': True,
|
|
||||||
}
|
|
||||||
|
|
||||||
class MPCHCPlayer(object):
|
|
||||||
def __init__(self, manager, host = None):
|
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.host = 'localhost:13579'
|
self.mpc_api = MPC_API()
|
||||||
|
|
||||||
self.pinged = False
|
self.pinged = False
|
||||||
self.tmp_filename = None
|
self.tmp_filename = None
|
||||||
self.tmp_position = None
|
self.tmp_position = None
|
||||||
|
|
||||||
self.agent = Agent(reactor)
|
self.mpc_api.callbacks.on_file_ready = lambda: self.make_ping()
|
||||||
|
self.mpc_api.callbacks.on_mpc_closed = lambda: self.mpc_error("MPC closed")
|
||||||
|
|
||||||
|
self.semaphore_filename = False
|
||||||
|
|
||||||
def drop(self):
|
def drop(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def set_speed(self, value):
|
def set_speed(self, value):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def display_message(self, message):
|
def test_mpc_ready(self):
|
||||||
pass
|
try:
|
||||||
|
self.mpc_api.ask_for_current_position()
|
||||||
|
except MPC_API.PlayerNotReadyException:
|
||||||
|
time.sleep(0.1)
|
||||||
|
self.test_mpc_ready()
|
||||||
|
return
|
||||||
|
|
||||||
def make_ping(self):
|
def make_ping(self):
|
||||||
|
self.mpc_api.callbacks.on_file_ready = None
|
||||||
|
self.test_mpc_ready()
|
||||||
|
self.manager.init_player(self)
|
||||||
|
self.pinged = True
|
||||||
self.ask_for_status()
|
self.ask_for_status()
|
||||||
|
|
||||||
|
def display_message(self, message):
|
||||||
|
try:
|
||||||
|
self.mpc_api.send_osd(message)
|
||||||
|
except Exception, err:
|
||||||
|
self.mpc_error(err)
|
||||||
|
|
||||||
def set_paused(self, value):
|
def set_paused(self, value):
|
||||||
self.send_post_request('wm_command=%d' % (888 if value else 887))
|
try:
|
||||||
|
if value:
|
||||||
|
self.mpc_api.pause()
|
||||||
|
else:
|
||||||
|
self.mpc_api.unpause()
|
||||||
|
except MPC_API.PlayerNotReadyException:
|
||||||
|
time.sleep(0.2)
|
||||||
|
self.set_paused(value)
|
||||||
|
return
|
||||||
|
except Exception, err:
|
||||||
|
self.mpc_error(err)
|
||||||
|
|
||||||
def set_position(self, value):
|
def set_position(self, value):
|
||||||
value = int(value*1000)
|
try:
|
||||||
seconds, mseconds = divmod(value, 1000)
|
self.mpc_api.seek(value)
|
||||||
minutes, seconds = divmod(seconds, 60)
|
except MPC_API.PlayerNotReadyException:
|
||||||
hours, minutes = divmod(minutes, 60)
|
self.set_position(value)
|
||||||
self.send_post_request('wm_command=-1&position=%d.%d.%d.%d' % (
|
return
|
||||||
hours, minutes, seconds, mseconds
|
except Exception, err:
|
||||||
))
|
self.mpc_error(err)
|
||||||
|
|
||||||
def status_response(self, status, headers, body):
|
|
||||||
m = RE_MPC_STATUS.match(body)
|
|
||||||
if m:
|
|
||||||
filename, paused, position = m.group(1), m.group(2), m.group(3)
|
|
||||||
paused = PLAYING_STATUSES.get(paused)
|
|
||||||
else:
|
|
||||||
filename, paused, position = self.tmp_filename, True, self.tmp_position
|
|
||||||
if paused is None:
|
|
||||||
paused = True #assume stopped or changing episodes!
|
|
||||||
position = self.tmp_position
|
|
||||||
else:
|
|
||||||
position = float(position)/1000
|
|
||||||
self.tmp_position = position
|
|
||||||
if self.pinged:
|
|
||||||
self.manager.update_player_status(paused, position)
|
|
||||||
else:
|
|
||||||
self.pinged = True
|
|
||||||
self.manager.init_player(self)
|
|
||||||
if filename != self.tmp_filename:
|
|
||||||
self.tmp_filename = filename
|
|
||||||
self.manager.update_filename(filename)
|
|
||||||
|
|
||||||
def ask_for_status(self):
|
def ask_for_status(self):
|
||||||
request = self.agent.request(
|
position = self.tmp_position if self.tmp_position else 0
|
||||||
'GET',
|
paused = None
|
||||||
'http://localhost:13579/status.html',
|
try:
|
||||||
Headers(),
|
if(self.mpc_api.is_file_ready() and not self.semaphore_filename):
|
||||||
None,
|
try:
|
||||||
)
|
position = self.mpc_api.ask_for_current_position()
|
||||||
request.addCallbacks(handle_response(self.status_response), self.mpc_error)
|
except MPC_API.PlayerNotReadyException:
|
||||||
|
time.sleep(0.1)
|
||||||
|
self.ask_for_status()
|
||||||
|
return
|
||||||
|
if(self.tmp_filename <> self.mpc_api.fileplaying):
|
||||||
|
self.handle_updated_filename(self.mpc_api.fileplaying)
|
||||||
|
return
|
||||||
|
paused = self.mpc_api.is_paused()
|
||||||
|
position = float(position)
|
||||||
|
self.tmp_position = position
|
||||||
|
self.manager.update_player_status(paused, position)
|
||||||
|
else:
|
||||||
|
self.manager.update_player_status(True, self.manager.get_global_position())
|
||||||
|
except Exception, err:
|
||||||
|
self.mpc_error(err)
|
||||||
|
|
||||||
def send_post_request(self, body):
|
def __force_pause(self, filename, position):
|
||||||
request = self.agent.request(
|
self.set_paused(True)
|
||||||
'POST',
|
time.sleep(0.1)
|
||||||
'http://%s/command.html' % self.host,
|
if (not self.mpc_api.is_paused()):
|
||||||
Headers({'Content-Type': ['application/x-www-form-urlencoded']}),
|
self.__set_up_newly_opened_file(filename, position)
|
||||||
BodyProducer(body),
|
|
||||||
)
|
|
||||||
request.addCallbacks(handle_response(null_response_handler), self.mpc_error)
|
|
||||||
|
|
||||||
def mpc_error(self, error):
|
def __set_up_newly_opened_file(self, filename, position):
|
||||||
|
self.test_mpc_ready()
|
||||||
|
try:
|
||||||
|
self.mpc_api.seek(position)
|
||||||
|
except MPC_API.PlayerNotReadyException:
|
||||||
|
time.sleep(0.1)
|
||||||
|
self.__set_up_newly_opened_file(filename, position)
|
||||||
|
self.__force_pause(filename, position)
|
||||||
|
|
||||||
|
def handle_updated_filename(self, filename):
|
||||||
|
position = self.manager.get_global_position()
|
||||||
|
if(self.semaphore_filename):
|
||||||
|
self.manager.update_player_status(True, position)
|
||||||
|
return
|
||||||
|
self.semaphore_filename = True
|
||||||
|
self.__set_up_newly_opened_file(filename, position)
|
||||||
|
self.tmp_filename = filename
|
||||||
|
self.manager.update_filename(str(self.tmp_filename))
|
||||||
|
self.manager.update_player_status(True, position)
|
||||||
|
self.semaphore_filename = False
|
||||||
|
|
||||||
|
def mpc_error(self, err=""):
|
||||||
|
print "ERROR:", str(err) + ',', "desu"
|
||||||
if self.manager.running:
|
if self.manager.running:
|
||||||
print 'Failed to connect to MPC-HC web interface'
|
print 'Failed to connect to MPC-HC API!'
|
||||||
self.manager.stop()
|
self.manager.stop()
|
||||||
|
|
||||||
def run_mpc(manager, host=None):
|
def run_mpc(manager, mpc_path, file_path, args):
|
||||||
mpc = MPCHCPlayer(manager, host)
|
mpc = MPCHCAPIPlayer(manager)
|
||||||
mpc.make_ping()
|
mpc.mpc_api.callbacks.on_connected = lambda: mpc.mpc_api.open_file(file_path) if(file_path) else None
|
||||||
|
mpc.mpc_api.start_mpc(mpc_path, args)
|
||||||
|
|||||||
@ -1,128 +0,0 @@
|
|||||||
#coding:utf8
|
|
||||||
|
|
||||||
from ..mpc_api import MPC_API
|
|
||||||
import time
|
|
||||||
|
|
||||||
class MPCHCAPIPlayer(object):
|
|
||||||
def __init__(self, manager):
|
|
||||||
self.manager = manager
|
|
||||||
self.mpc_api = MPC_API()
|
|
||||||
|
|
||||||
self.pinged = False
|
|
||||||
self.tmp_filename = None
|
|
||||||
self.tmp_position = None
|
|
||||||
|
|
||||||
self.mpc_api.callbacks.on_file_ready = lambda: self.make_ping()
|
|
||||||
self.mpc_api.callbacks.on_mpc_closed = lambda: self.mpc_error("MPC closed")
|
|
||||||
|
|
||||||
self.semaphore_filename = False
|
|
||||||
|
|
||||||
def drop(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def set_speed(self, value):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def test_mpc_ready(self):
|
|
||||||
try:
|
|
||||||
self.mpc_api.ask_for_current_position()
|
|
||||||
except MPC_API.PlayerNotReadyException:
|
|
||||||
time.sleep(0.1)
|
|
||||||
self.test_mpc_ready()
|
|
||||||
return
|
|
||||||
|
|
||||||
def make_ping(self):
|
|
||||||
self.mpc_api.callbacks.on_file_ready = None
|
|
||||||
self.test_mpc_ready()
|
|
||||||
self.manager.init_player(self)
|
|
||||||
self.pinged = True
|
|
||||||
self.ask_for_status()
|
|
||||||
|
|
||||||
def display_message(self, message):
|
|
||||||
try:
|
|
||||||
self.mpc_api.send_osd(message)
|
|
||||||
except Exception, err:
|
|
||||||
self.mpc_error(err)
|
|
||||||
|
|
||||||
def set_paused(self, value):
|
|
||||||
try:
|
|
||||||
if value:
|
|
||||||
self.mpc_api.pause()
|
|
||||||
else:
|
|
||||||
self.mpc_api.unpause()
|
|
||||||
except MPC_API.PlayerNotReadyException:
|
|
||||||
time.sleep(0.2)
|
|
||||||
self.set_paused(value)
|
|
||||||
return
|
|
||||||
except Exception, err:
|
|
||||||
self.mpc_error(err)
|
|
||||||
|
|
||||||
def set_position(self, value):
|
|
||||||
try:
|
|
||||||
self.mpc_api.seek(value)
|
|
||||||
except MPC_API.PlayerNotReadyException:
|
|
||||||
self.set_position(value)
|
|
||||||
return
|
|
||||||
except Exception, err:
|
|
||||||
self.mpc_error(err)
|
|
||||||
|
|
||||||
def ask_for_status(self):
|
|
||||||
position = self.tmp_position if self.tmp_position else 0
|
|
||||||
paused = None
|
|
||||||
try:
|
|
||||||
if(self.mpc_api.is_file_ready() and not self.semaphore_filename):
|
|
||||||
try:
|
|
||||||
position = self.mpc_api.ask_for_current_position()
|
|
||||||
except MPC_API.PlayerNotReadyException:
|
|
||||||
time.sleep(0.1)
|
|
||||||
self.ask_for_status()
|
|
||||||
return
|
|
||||||
if(self.tmp_filename <> self.mpc_api.fileplaying):
|
|
||||||
self.handle_updated_filename(self.mpc_api.fileplaying)
|
|
||||||
return
|
|
||||||
paused = self.mpc_api.is_paused()
|
|
||||||
position = float(position)
|
|
||||||
self.tmp_position = position
|
|
||||||
self.manager.update_player_status(paused, position)
|
|
||||||
else:
|
|
||||||
self.manager.update_player_status(True, self.manager.get_global_position())
|
|
||||||
except Exception, err:
|
|
||||||
self.mpc_error(err)
|
|
||||||
|
|
||||||
def __force_pause(self, filename, position):
|
|
||||||
self.set_paused(True)
|
|
||||||
time.sleep(0.1)
|
|
||||||
if (not self.mpc_api.is_paused()):
|
|
||||||
self.__set_up_newly_opened_file(filename, position)
|
|
||||||
|
|
||||||
def __set_up_newly_opened_file(self, filename, position):
|
|
||||||
self.test_mpc_ready()
|
|
||||||
try:
|
|
||||||
self.mpc_api.seek(position)
|
|
||||||
except MPC_API.PlayerNotReadyException:
|
|
||||||
time.sleep(0.1)
|
|
||||||
self.__set_up_newly_opened_file(filename, position)
|
|
||||||
self.__force_pause(filename, position)
|
|
||||||
|
|
||||||
def handle_updated_filename(self, filename):
|
|
||||||
position = self.manager.get_global_position()
|
|
||||||
if(self.semaphore_filename):
|
|
||||||
self.manager.update_player_status(True, position)
|
|
||||||
return
|
|
||||||
self.semaphore_filename = True
|
|
||||||
self.__set_up_newly_opened_file(filename, position)
|
|
||||||
self.tmp_filename = filename
|
|
||||||
self.manager.update_filename(str(self.tmp_filename))
|
|
||||||
self.manager.update_player_status(True, position)
|
|
||||||
self.semaphore_filename = False
|
|
||||||
|
|
||||||
def mpc_error(self, err=""):
|
|
||||||
print "ERROR:", str(err) + ',', "desu"
|
|
||||||
if self.manager.running:
|
|
||||||
print 'Failed to connect to MPC-HC API!'
|
|
||||||
self.manager.stop()
|
|
||||||
|
|
||||||
def run_mpc(manager, mpc_path, file_path, args):
|
|
||||||
mpc = MPCHCAPIPlayer(manager)
|
|
||||||
mpc.mpc_api.callbacks.on_connected = lambda: mpc.mpc_api.open_file(file_path) if(file_path) else None
|
|
||||||
mpc.mpc_api.start_mpc(mpc_path, args)
|
|
||||||
Loading…
x
Reference in New Issue
Block a user