Some hacking on api
This commit is contained in:
parent
269e4fc7d2
commit
0f1735da74
@ -251,7 +251,7 @@ 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.set_position(0)
|
self.player.set_position(self.get_global_position())
|
||||||
self.player.set_paused(True)
|
self.player.set_paused(True)
|
||||||
self.schedule_ask_player()
|
self.schedule_ask_player()
|
||||||
|
|
||||||
@ -375,7 +375,7 @@ class Manager(object):
|
|||||||
self.player.set_position(self.get_global_position())
|
self.player.set_position(self.get_global_position())
|
||||||
self.ask_player()
|
self.ask_player()
|
||||||
else:
|
else:
|
||||||
message = '%s resumed' % self.name
|
message = '%s unpaused' % self.name
|
||||||
print message
|
print message
|
||||||
self.player.display_message(message)
|
self.player.display_message(message)
|
||||||
|
|
||||||
|
|||||||
@ -11,9 +11,10 @@ class MPC_API:
|
|||||||
while(self.__listener == None): continue
|
while(self.__listener == None): continue
|
||||||
self.__position_request_warden = False
|
self.__position_request_warden = False
|
||||||
self.__seek_warden = False
|
self.__seek_warden = False
|
||||||
|
self.__playpause_warden = False
|
||||||
'''
|
'''
|
||||||
List of callbacks that can be set
|
List of callbacks that can be set
|
||||||
|
Each callback by default receives a tuple argument, can be empty though
|
||||||
on_connected
|
on_connected
|
||||||
on_seek
|
on_seek
|
||||||
on_update_filename
|
on_update_filename
|
||||||
@ -90,9 +91,12 @@ class MPC_API:
|
|||||||
'''
|
'''
|
||||||
def pause(self):
|
def pause(self):
|
||||||
self.__mpc_ready_in_slave_mode()
|
self.__mpc_ready_in_slave_mode()
|
||||||
if(not self.is_paused()):
|
while(self.playstate == None):self.__mpc_ready_in_slave_mode()
|
||||||
|
if(not self.is_paused() and self.__playpause_warden == False):
|
||||||
|
self.__playpause_warden = True
|
||||||
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_PLAYPAUSE)
|
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_PLAYPAUSE)
|
||||||
while(not self.is_paused()): self.__mpc_ready_in_slave_mode()
|
while(not self.is_paused()): self.__mpc_ready_in_slave_mode()
|
||||||
|
self.__playpause_warden = False
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Play paused file
|
Play paused file
|
||||||
@ -100,10 +104,12 @@ class MPC_API:
|
|||||||
'''
|
'''
|
||||||
def unpause(self):
|
def unpause(self):
|
||||||
self.__mpc_ready_in_slave_mode()
|
self.__mpc_ready_in_slave_mode()
|
||||||
if(self.is_paused()):
|
while(self.playstate == None):self.__mpc_ready_in_slave_mode()
|
||||||
|
if(self.is_paused() and self.__playpause_warden == False):
|
||||||
|
self.__playpause_warden = True
|
||||||
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_PLAYPAUSE)
|
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_PLAYPAUSE)
|
||||||
while(self.is_paused()): self.__mpc_ready_in_slave_mode()
|
while(self.is_paused()): self.__mpc_ready_in_slave_mode()
|
||||||
|
self.__playpause_warden = False
|
||||||
'''
|
'''
|
||||||
Toggle play/pause
|
Toggle play/pause
|
||||||
Throws MPC_API.NoSlaveDetectedException if mpc window is not found
|
Throws MPC_API.NoSlaveDetectedException if mpc window is not found
|
||||||
@ -111,8 +117,12 @@ class MPC_API:
|
|||||||
def playpause(self):
|
def playpause(self):
|
||||||
self.__mpc_ready_in_slave_mode()
|
self.__mpc_ready_in_slave_mode()
|
||||||
tmp = self.playstate
|
tmp = self.playstate
|
||||||
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_PLAYPAUSE)
|
while(self.playstate == None):self.__mpc_ready_in_slave_mode()
|
||||||
while(tmp == self.playstate): self.__mpc_ready_in_slave_mode()
|
if(self.__playpause_warden == False):
|
||||||
|
self.__playpause_warden = True
|
||||||
|
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_PLAYPAUSE)
|
||||||
|
while(tmp == self.playstate): self.__mpc_ready_in_slave_mode()
|
||||||
|
self.__playpause_warden = False
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Asks mpc for it's current file position, if on_update_position callback is set
|
Asks mpc for it's current file position, if on_update_position callback is set
|
||||||
@ -134,7 +144,7 @@ class MPC_API:
|
|||||||
self.__mpc_ready_in_slave_mode()
|
self.__mpc_ready_in_slave_mode()
|
||||||
self.__seek_warden = True
|
self.__seek_warden = True
|
||||||
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_SETPOSITION, unicode(position))
|
self.__listener.SendCommand(MPC_API_COMMANDS.CMD_SETPOSITION, unicode(position))
|
||||||
while(self.__seek_warden): continue
|
while(self.__seek_warden): self.__mpc_ready_in_slave_mode()
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@param message: unicode string to display in player
|
@param message: unicode string to display in player
|
||||||
@ -189,7 +199,7 @@ class MPC_API:
|
|||||||
if(self.callbacks.on_update_playstate): self.callbacks.on_update_playstate((self.playstate,))
|
if(self.callbacks.on_update_playstate): self.callbacks.on_update_playstate((self.playstate,))
|
||||||
|
|
||||||
elif(cmd == MPC_API_COMMANDS.CMD_NOWPLAYING):
|
elif(cmd == MPC_API_COMMANDS.CMD_NOWPLAYING):
|
||||||
if(self.callbacks.on_file_ready): self.callbacks.on_file_ready()
|
if(self.callbacks.on_file_ready): self.callbacks.on_file_ready(())
|
||||||
self.fileplaying = value.split('|')[3].split('\\').pop()
|
self.fileplaying = value.split('|')[3].split('\\').pop()
|
||||||
if(self.callbacks.on_update_filename): self.callbacks.on_update_filename((self.fileplaying,))
|
if(self.callbacks.on_update_filename): self.callbacks.on_update_filename((self.fileplaying,))
|
||||||
self.fileduration = int(value.split('|')[4])
|
self.fileduration = int(value.split('|')[4])
|
||||||
@ -281,10 +291,12 @@ class MPC_API:
|
|||||||
|
|
||||||
def OnCopyData(self, hwnd, msg, wparam, lparam):
|
def OnCopyData(self, hwnd, msg, wparam, lparam):
|
||||||
pCDS = ctypes.cast(lparam, self.__PCOPYDATASTRUCT)
|
pCDS = ctypes.cast(lparam, self.__PCOPYDATASTRUCT)
|
||||||
|
# print ">>> 0x%X" % int(pCDS.contents.dwData), ctypes.wstring_at(pCDS.contents.lpData)
|
||||||
self.__mpc_api.handle_command(pCDS.contents.dwData, ctypes.wstring_at(pCDS.contents.lpData))
|
self.__mpc_api.handle_command(pCDS.contents.dwData, ctypes.wstring_at(pCDS.contents.lpData))
|
||||||
|
|
||||||
|
|
||||||
def SendCommand(self, cmd, message = u''):
|
def SendCommand(self, cmd, message = u''):
|
||||||
|
# print "<<< 0x%X" % int(cmd), message
|
||||||
if not win32gui.IsWindow(self.mpc_handle):
|
if not win32gui.IsWindow(self.mpc_handle):
|
||||||
raise MPC_API.NoSlaveDetectedException("MPC Slave Window not detected")
|
raise MPC_API.NoSlaveDetectedException("MPC Slave Window not detected")
|
||||||
cs = self.__COPYDATASTRUCT()
|
cs = self.__COPYDATASTRUCT()
|
||||||
|
|||||||
@ -1,15 +1,18 @@
|
|||||||
#coding:utf8
|
#coding:utf8
|
||||||
from ..mpc_api import MPC_API
|
from ..mpc_api import MPC_API
|
||||||
|
from twisted.internet import reactor
|
||||||
|
|
||||||
class MPCHCAPIPlayer(object):
|
class MPCHCAPIPlayer(object):
|
||||||
def __init__(self, manager, host = None):
|
def __init__(self, manager):
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.mpc_api = MPC_API()
|
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.mpc_api.callbacks.on_file_ready = lambda _: reactor.callLater(0.7,self.make_ping)
|
||||||
|
self.mpc_api.callbacks.on_update_filename = self.handle_updated_filename
|
||||||
def drop(self):
|
def drop(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -17,7 +20,10 @@ class MPCHCAPIPlayer(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def make_ping(self):
|
def make_ping(self):
|
||||||
|
self.manager.init_player(self)
|
||||||
|
self.pinged = True
|
||||||
self.ask_for_status()
|
self.ask_for_status()
|
||||||
|
self.mpc_api.callbacks.on_file_ready = None
|
||||||
|
|
||||||
def display_message(self, message):
|
def display_message(self, message):
|
||||||
try:
|
try:
|
||||||
@ -41,28 +47,26 @@ class MPCHCAPIPlayer(object):
|
|||||||
self.mpc_error()
|
self.mpc_error()
|
||||||
|
|
||||||
def ask_for_status(self):
|
def ask_for_status(self):
|
||||||
position = None
|
position = self.tmp_position if self.tmp_position else 0
|
||||||
filename = None
|
|
||||||
paused = None
|
paused = None
|
||||||
if(not self.pinged):
|
try:
|
||||||
self.manager.init_player(self)
|
if(self.mpc_api.is_file_ready()):
|
||||||
self.pinged = True
|
position = self.mpc_api.ask_for_current_position()
|
||||||
else:
|
paused = self.mpc_api.is_paused()
|
||||||
try:
|
position = float(position)
|
||||||
if(self.mpc_api.is_file_ready()):
|
self.tmp_position = position
|
||||||
position = self.mpc_api.ask_for_current_position()
|
self.manager.update_player_status(paused, position)
|
||||||
filename = self.mpc_api.fileplaying
|
else:
|
||||||
paused = self.mpc_api.is_paused()
|
self.manager.update_player_status(True, position)
|
||||||
|
except MPC_API.NoSlaveDetectedException:
|
||||||
position = float(position)
|
self.mpc_error()
|
||||||
self.tmp_position = position
|
|
||||||
if filename != self.tmp_filename:
|
def handle_updated_filename(self,filename):
|
||||||
self.tmp_filename = filename
|
self.filename = filename[0]
|
||||||
self.manager.update_filename(str(filename))
|
self.manager.update_filename(self.filename)
|
||||||
self.manager.update_player_status(paused, position)
|
self.mpc_api.seek(self.manager.get_global_position())
|
||||||
except MPC_API.NoSlaveDetectedException:
|
reactor.callLater(0.7, self.mpc_api.pause)
|
||||||
self.mpc_error()
|
|
||||||
|
|
||||||
def mpc_error(self):
|
def mpc_error(self):
|
||||||
if self.manager.running:
|
if self.manager.running:
|
||||||
print 'Failed to connect to MPC-HC API!'
|
print 'Failed to connect to MPC-HC API!'
|
||||||
@ -71,7 +75,6 @@ class MPCHCAPIPlayer(object):
|
|||||||
|
|
||||||
def run_mpc(manager, mpc_path, file_path, args):
|
def run_mpc(manager, mpc_path, file_path, args):
|
||||||
mpc = MPCHCAPIPlayer(manager)
|
mpc = MPCHCAPIPlayer(manager)
|
||||||
mpc.mpc_api.callbacks.on_file_ready = 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.callbacks.on_connected = lambda _: mpc.mpc_api.open_file(file_path) if(file_path) else None
|
||||||
mpc.mpc_api.start_mpc(mpc_path, args)
|
mpc.mpc_api.start_mpc(mpc_path, args)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user