Move code around a bit and renamed some functions
Merged asking for and updating status player into one operation, this will help simplifying MPC player control.
This commit is contained in:
parent
bbd8bb0cfc
commit
ccfb065ad7
@ -142,8 +142,8 @@ class Manager(object):
|
||||
def init_player(self, player):
|
||||
self.player = player
|
||||
if self.last_global_update:
|
||||
self.player.send_set_position(self.get_global_position())
|
||||
self.player.send_set_paused(self.global_paused)
|
||||
self.player.set_position(self.get_global_position())
|
||||
self.player.set_paused(self.global_paused)
|
||||
self.schedule_ask_player()
|
||||
|
||||
def init_protocol(self, protocol):
|
||||
@ -162,8 +162,7 @@ class Manager(object):
|
||||
if not self.running:
|
||||
return
|
||||
if self.player:
|
||||
self.player.send_get_position()
|
||||
self.player.send_get_paused()
|
||||
self.player.ask_for_status()
|
||||
self.schedule_ask_player()
|
||||
|
||||
|
||||
@ -182,12 +181,19 @@ class Manager(object):
|
||||
self.schedule_send_status()
|
||||
|
||||
|
||||
def update_player_position(self, value):
|
||||
self.player_position = value
|
||||
def update_player_status(self, paused, position):
|
||||
old_paused = self.player_paused
|
||||
self.player_paused = paused
|
||||
self.player_position = position
|
||||
self.last_player_update = time.time()
|
||||
|
||||
if old_paused and not paused:
|
||||
self.player_paused_at = None
|
||||
if old_paused != paused and self.global_paused != paused:
|
||||
self.send_status()
|
||||
|
||||
if not self.global_paused:
|
||||
diff = self.get_global_position() - value
|
||||
diff = self.get_global_position() - position
|
||||
if 0.6 <= abs(diff) <= 4:
|
||||
#print 'server is %0.2fs ahead of client' % diff
|
||||
if diff > 0:
|
||||
@ -196,24 +202,15 @@ class Manager(object):
|
||||
speed = 0.75
|
||||
#print 'fixing at speed %0.2f' % speed
|
||||
if not self.player_speed_fix:
|
||||
self.player.send_set_speed(speed)
|
||||
self.player.set_speed(speed)
|
||||
self.player_speed_fix = True
|
||||
elif self.player_speed_fix:
|
||||
self.player.send_set_speed(1)
|
||||
self.player.set_speed(1)
|
||||
self.player_speed_fix = False
|
||||
|
||||
if not self.player_paused and self.player_paused_at is not None and value >= self.player_paused_at:
|
||||
self.player.send_set_paused(True)
|
||||
self.schedule_ask_player()
|
||||
|
||||
|
||||
def update_player_paused(self, value):
|
||||
old = self.player_paused
|
||||
self.player_paused = value
|
||||
if not value:
|
||||
self.player_paused_at = None
|
||||
if old != value and self.global_paused != value:
|
||||
self.send_status()
|
||||
if not paused and self.player_paused_at is not None and position >= self.player_paused_at:
|
||||
#print 'Pausing %0.2fs after pause point' % (position - self.player_paused_at)
|
||||
self.player.set_paused(True)
|
||||
|
||||
def update_global_state(self, counter, paused, position, name):
|
||||
curtime = time.time()
|
||||
@ -226,19 +223,21 @@ class Manager(object):
|
||||
return
|
||||
|
||||
if not updated_before:
|
||||
self.player.send_set_position(position)
|
||||
self.player.send_set_paused(paused)
|
||||
self.player.set_position(position)
|
||||
self.player.set_paused(paused)
|
||||
elif not (self.counter and counter < self.counter):
|
||||
diff = self.get_player_position() - position
|
||||
if self.last_player_update is not None:
|
||||
diff += curtime - self.last_player_update
|
||||
if abs(diff) > 4:
|
||||
self.player.send_set_position(position)
|
||||
self.player.set_position(position)
|
||||
if self.player_paused and not paused:
|
||||
self.player_paused_at = None
|
||||
self.player.send_set_paused(False)
|
||||
self.player.set_paused(False)
|
||||
elif paused and not self.player_paused:
|
||||
self.player_paused_at = position
|
||||
if diff < 0:
|
||||
self.player.send_set_paused(True)
|
||||
self.player.set_paused(True)
|
||||
#else:
|
||||
# print 'Not pausing now'
|
||||
|
||||
|
||||
@ -13,11 +13,14 @@ RE_ANSWER = re.compile('^ANS_([a-zA-Z_]+)=(.+)$')
|
||||
|
||||
|
||||
class MplayerProtocol(LineProcessProtocol):
|
||||
speed_supported = True
|
||||
|
||||
def __init__(self, manager):
|
||||
self.manager = manager
|
||||
self.ignore_end = False
|
||||
self.error_lines = deque(maxlen=50)
|
||||
self.filename = None # To be moved to Manager
|
||||
self.tmp_paused = None
|
||||
|
||||
def connectionMade(self):
|
||||
reactor.callLater(0.1, self.prepare_player)
|
||||
@ -49,64 +52,68 @@ class MplayerProtocol(LineProcessProtocol):
|
||||
return
|
||||
|
||||
name, value = m.group(1).lower(), m.group(2)
|
||||
handler = getattr(self, 'answer_' + name, None)
|
||||
handler = getattr(self, 'mplayer_answer_' + name, None)
|
||||
if handler:
|
||||
handler(value)
|
||||
|
||||
|
||||
def prepare_player(self):
|
||||
self.send_set_paused(True)
|
||||
self.send_set_position(0)
|
||||
self.set_paused(True)
|
||||
self.set_position(0)
|
||||
self.send_get_filename()
|
||||
self.manager.init_player(self)
|
||||
|
||||
def ask_for_status(self):
|
||||
self.send_get_paused()
|
||||
self.send_get_position()
|
||||
|
||||
def set_property(self, name, value):
|
||||
|
||||
def send_set_property(self, name, value):
|
||||
self.writeLines('%s %s %s' % ('set_property', name, value))
|
||||
|
||||
def get_property(self, name):
|
||||
def send_get_property(self, name):
|
||||
self.writeLines('%s %s' % ('get_property', name))
|
||||
|
||||
|
||||
def send_get_filename(self):
|
||||
self.get_property('filename')
|
||||
self.send_get_property('filename')
|
||||
|
||||
def answer_filename(self, value):
|
||||
def mplayer_answer_filename(self, value):
|
||||
self.filename = value
|
||||
|
||||
|
||||
def send_set_paused(self, value):
|
||||
def set_paused(self, value):
|
||||
# docs say i can't set "pause" property, but it works...
|
||||
self.set_property('pause', 'yes' if value else 'no')
|
||||
self.send_set_property('pause', 'yes' if value else 'no')
|
||||
|
||||
def send_get_paused(self):
|
||||
self.get_property('pause')
|
||||
self.send_get_property('pause')
|
||||
|
||||
def answer_pause(self, value):
|
||||
def mplayer_answer_pause(self, value):
|
||||
value = value == 'yes'
|
||||
self.manager.update_player_paused(value)
|
||||
self.tmp_paused = value
|
||||
|
||||
|
||||
def send_set_position(self, value):
|
||||
self.set_property('time_pos', '%0.2f'%value)
|
||||
def set_position(self, value):
|
||||
self.send_set_property('time_pos', '%0.2f'%value)
|
||||
|
||||
def send_get_position(self):
|
||||
self.get_property('time_pos')
|
||||
self.send_get_property('time_pos')
|
||||
|
||||
def answer_time_pos(self, value):
|
||||
def mplayer_answer_time_pos(self, value):
|
||||
value = float(value)
|
||||
self.manager.update_player_position(value)
|
||||
self.manager.update_player_status(self.tmp_paused, value)
|
||||
|
||||
|
||||
def send_set_speed(self, value):
|
||||
self.set_property('speed', '%0.2f'%value)
|
||||
def set_speed(self, value):
|
||||
self.send_set_property('speed', '%0.2f'%value)
|
||||
|
||||
def send_get_speed(self):
|
||||
self.get_property('speed')
|
||||
#def send_get_speed(self):
|
||||
# self.send_get_property('speed')
|
||||
|
||||
def answer_speed(self, value):
|
||||
value = float(value)
|
||||
self.manager.update_player_speed(value)
|
||||
#def mplayer_answer_speed(self, value):
|
||||
# value = float(value)
|
||||
# self.manager.update_player_speed(value)
|
||||
|
||||
|
||||
def drop(self):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user