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:
Tomasz Fluxid Kowalczyk 2012-02-02 22:23:06 +01:00
parent bbd8bb0cfc
commit ccfb065ad7
2 changed files with 56 additions and 50 deletions

View File

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

View File

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