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):
|
def init_player(self, player):
|
||||||
self.player = player
|
self.player = player
|
||||||
if self.last_global_update:
|
if self.last_global_update:
|
||||||
self.player.send_set_position(self.get_global_position())
|
self.player.set_position(self.get_global_position())
|
||||||
self.player.send_set_paused(self.global_paused)
|
self.player.set_paused(self.global_paused)
|
||||||
self.schedule_ask_player()
|
self.schedule_ask_player()
|
||||||
|
|
||||||
def init_protocol(self, protocol):
|
def init_protocol(self, protocol):
|
||||||
@ -162,8 +162,7 @@ class Manager(object):
|
|||||||
if not self.running:
|
if not self.running:
|
||||||
return
|
return
|
||||||
if self.player:
|
if self.player:
|
||||||
self.player.send_get_position()
|
self.player.ask_for_status()
|
||||||
self.player.send_get_paused()
|
|
||||||
self.schedule_ask_player()
|
self.schedule_ask_player()
|
||||||
|
|
||||||
|
|
||||||
@ -182,12 +181,19 @@ class Manager(object):
|
|||||||
self.schedule_send_status()
|
self.schedule_send_status()
|
||||||
|
|
||||||
|
|
||||||
def update_player_position(self, value):
|
def update_player_status(self, paused, position):
|
||||||
self.player_position = value
|
old_paused = self.player_paused
|
||||||
|
self.player_paused = paused
|
||||||
|
self.player_position = position
|
||||||
self.last_player_update = time.time()
|
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:
|
if not self.global_paused:
|
||||||
diff = self.get_global_position() - value
|
diff = self.get_global_position() - position
|
||||||
if 0.6 <= abs(diff) <= 4:
|
if 0.6 <= abs(diff) <= 4:
|
||||||
#print 'server is %0.2fs ahead of client' % diff
|
#print 'server is %0.2fs ahead of client' % diff
|
||||||
if diff > 0:
|
if diff > 0:
|
||||||
@ -196,24 +202,15 @@ class Manager(object):
|
|||||||
speed = 0.75
|
speed = 0.75
|
||||||
#print 'fixing at speed %0.2f' % speed
|
#print 'fixing at speed %0.2f' % speed
|
||||||
if not self.player_speed_fix:
|
if not self.player_speed_fix:
|
||||||
self.player.send_set_speed(speed)
|
self.player.set_speed(speed)
|
||||||
self.player_speed_fix = True
|
self.player_speed_fix = True
|
||||||
elif self.player_speed_fix:
|
elif self.player_speed_fix:
|
||||||
self.player.send_set_speed(1)
|
self.player.set_speed(1)
|
||||||
self.player_speed_fix = False
|
self.player_speed_fix = False
|
||||||
|
|
||||||
if not self.player_paused and self.player_paused_at is not None and value >= self.player_paused_at:
|
if not paused and self.player_paused_at is not None and position >= self.player_paused_at:
|
||||||
self.player.send_set_paused(True)
|
#print 'Pausing %0.2fs after pause point' % (position - self.player_paused_at)
|
||||||
self.schedule_ask_player()
|
self.player.set_paused(True)
|
||||||
|
|
||||||
|
|
||||||
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()
|
|
||||||
|
|
||||||
def update_global_state(self, counter, paused, position, name):
|
def update_global_state(self, counter, paused, position, name):
|
||||||
curtime = time.time()
|
curtime = time.time()
|
||||||
@ -226,19 +223,21 @@ class Manager(object):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if not updated_before:
|
if not updated_before:
|
||||||
self.player.send_set_position(position)
|
self.player.set_position(position)
|
||||||
self.player.send_set_paused(paused)
|
self.player.set_paused(paused)
|
||||||
elif not (self.counter and counter < self.counter):
|
elif not (self.counter and counter < self.counter):
|
||||||
diff = self.get_player_position() - position
|
diff = self.get_player_position() - position
|
||||||
if self.last_player_update is not None:
|
if self.last_player_update is not None:
|
||||||
diff += curtime - self.last_player_update
|
diff += curtime - self.last_player_update
|
||||||
if abs(diff) > 4:
|
if abs(diff) > 4:
|
||||||
self.player.send_set_position(position)
|
self.player.set_position(position)
|
||||||
if self.player_paused and not paused:
|
if self.player_paused and not paused:
|
||||||
self.player_paused_at = None
|
self.player_paused_at = None
|
||||||
self.player.send_set_paused(False)
|
self.player.set_paused(False)
|
||||||
elif paused and not self.player_paused:
|
elif paused and not self.player_paused:
|
||||||
self.player_paused_at = position
|
self.player_paused_at = position
|
||||||
if diff < 0:
|
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):
|
class MplayerProtocol(LineProcessProtocol):
|
||||||
|
speed_supported = True
|
||||||
|
|
||||||
def __init__(self, manager):
|
def __init__(self, manager):
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.ignore_end = False
|
self.ignore_end = False
|
||||||
self.error_lines = deque(maxlen=50)
|
self.error_lines = deque(maxlen=50)
|
||||||
self.filename = None # To be moved to Manager
|
self.filename = None # To be moved to Manager
|
||||||
|
self.tmp_paused = None
|
||||||
|
|
||||||
def connectionMade(self):
|
def connectionMade(self):
|
||||||
reactor.callLater(0.1, self.prepare_player)
|
reactor.callLater(0.1, self.prepare_player)
|
||||||
@ -49,64 +52,68 @@ class MplayerProtocol(LineProcessProtocol):
|
|||||||
return
|
return
|
||||||
|
|
||||||
name, value = m.group(1).lower(), m.group(2)
|
name, value = m.group(1).lower(), m.group(2)
|
||||||
handler = getattr(self, 'answer_' + name, None)
|
handler = getattr(self, 'mplayer_answer_' + name, None)
|
||||||
if handler:
|
if handler:
|
||||||
handler(value)
|
handler(value)
|
||||||
|
|
||||||
|
|
||||||
def prepare_player(self):
|
def prepare_player(self):
|
||||||
self.send_set_paused(True)
|
self.set_paused(True)
|
||||||
self.send_set_position(0)
|
self.set_position(0)
|
||||||
self.send_get_filename()
|
self.send_get_filename()
|
||||||
self.manager.init_player(self)
|
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))
|
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))
|
self.writeLines('%s %s' % ('get_property', name))
|
||||||
|
|
||||||
|
|
||||||
def send_get_filename(self):
|
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
|
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...
|
# 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):
|
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'
|
value = value == 'yes'
|
||||||
self.manager.update_player_paused(value)
|
self.tmp_paused = value
|
||||||
|
|
||||||
|
|
||||||
def send_set_position(self, value):
|
def set_position(self, value):
|
||||||
self.set_property('time_pos', '%0.2f'%value)
|
self.send_set_property('time_pos', '%0.2f'%value)
|
||||||
|
|
||||||
def send_get_position(self):
|
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)
|
value = float(value)
|
||||||
self.manager.update_player_position(value)
|
self.manager.update_player_status(self.tmp_paused, value)
|
||||||
|
|
||||||
|
|
||||||
def send_set_speed(self, value):
|
def set_speed(self, value):
|
||||||
self.set_property('speed', '%0.2f'%value)
|
self.send_set_property('speed', '%0.2f'%value)
|
||||||
|
|
||||||
def send_get_speed(self):
|
#def send_get_speed(self):
|
||||||
self.get_property('speed')
|
# self.send_get_property('speed')
|
||||||
|
|
||||||
def answer_speed(self, value):
|
#def mplayer_answer_speed(self, value):
|
||||||
value = float(value)
|
# value = float(value)
|
||||||
self.manager.update_player_speed(value)
|
# self.manager.update_player_speed(value)
|
||||||
|
|
||||||
|
|
||||||
def drop(self):
|
def drop(self):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user