renamed run scripts

mpc webapi dropped
This commit is contained in:
Uriziel 2012-07-10 18:22:23 +02:00
parent 97a357ae00
commit faf5c63c14
6 changed files with 102 additions and 307 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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)

View File

@ -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)