async def player_command(self, player_id, cmd:str, cmd_args=None):
''' issue command on player (play, pause, next, previous, stop, power, volume, mute) '''
- if not player_id in self._players or not player_id in self._chromecasts:
- return
- try:
- if cmd == 'play':
- self._players[player_id].powered = True
- if self._chromecasts[player_id].media_controller.status.player_is_playing:
- pass
- elif self._chromecasts[player_id].media_controller.status.player_is_paused:
- self._chromecasts[player_id].media_controller.play()
- else:
- await self.__resume_queue(player_id)
- await self.mass.player.update_player(self._players[player_id])
- elif cmd == 'pause':
- self._chromecasts[player_id].media_controller.pause()
- elif cmd == 'stop':
- self._chromecasts[player_id].media_controller.stop()
- elif cmd == 'next':
- enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0
- if enable_crossfade:
- await self.__play_stream_queue(player_id, self._player_queue_index[player_id]+1)
- else:
- self._chromecasts[player_id].media_controller.queue_next()
- elif cmd == 'previous':
- enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0
- if enable_crossfade:
- await self.__play_stream_queue(player_id, self._player_queue_index[player_id]-1)
- else:
- self._chromecasts[player_id].media_controller.queue_prev()
- elif cmd == 'power' and cmd_args == 'off':
- self._players[player_id].powered = False
- if not self._players[player_id].group_parent:
- self._chromecasts[player_id].quit_app() # power is not supported so send quit_app instead
- await self.mass.player.update_player(self._players[player_id])
- elif cmd == 'power':
- self._players[player_id].powered = True
- await self.mass.player.update_player(self._players[player_id])
- elif cmd == 'volume':
- new_volume = try_parse_int(cmd_args)
- self._chromecasts[player_id].set_volume(new_volume/100)
- self._players[player_id].volume_level = new_volume
- await self.mass.player.update_player(self._players[player_id])
- elif cmd == 'mute' and cmd_args == 'off':
- self._chromecasts[player_id].set_volume_muted(False)
- elif cmd == 'mute':
- self._chromecasts[player_id].set_volume_muted(True)
- except pychromecast.error.NotConnected:
- # CC is not connected, trigger rescan
+ if (not player_id in self._chromecasts or
+ not self._chromecasts[player_id].socket_client or
+ not self._chromecasts[player_id].socket_client.is_connected):
LOGGER.warning("command %s failed - %s is disconnected, rescan triggered" %(cmd, self._players[player_id].name))
self.mass.event_loop.create_task(self.__chromecast_discovery())
+ return
+ if cmd == 'play':
+ self._players[player_id].powered = True
+ if self._chromecasts[player_id].media_controller.status.player_is_playing:
+ pass
+ elif self._chromecasts[player_id].media_controller.status.player_is_paused:
+ self._chromecasts[player_id].media_controller.play()
+ else:
+ await self.__resume_queue(player_id)
+ await self.mass.player.update_player(self._players[player_id])
+ elif cmd == 'pause':
+ self._chromecasts[player_id].media_controller.pause()
+ elif cmd == 'stop':
+ self._chromecasts[player_id].media_controller.stop()
+ elif cmd == 'next':
+ enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0
+ if enable_crossfade:
+ await self.__play_stream_queue(player_id, self._player_queue_index[player_id]+1)
+ else:
+ self._chromecasts[player_id].media_controller.queue_next()
+ elif cmd == 'previous':
+ enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0
+ if enable_crossfade:
+ await self.__play_stream_queue(player_id, self._player_queue_index[player_id]-1)
+ else:
+ self._chromecasts[player_id].media_controller.queue_prev()
+ elif cmd == 'power' and cmd_args == 'off':
+ self._players[player_id].powered = False
+ if not self._players[player_id].group_parent:
+ self._chromecasts[player_id].quit_app() # power is not supported so send quit_app instead
+ await self.mass.player.update_player(self._players[player_id])
+ elif cmd == 'power':
+ self._players[player_id].powered = True
+ await self.mass.player.update_player(self._players[player_id])
+ elif cmd == 'volume':
+ new_volume = try_parse_int(cmd_args)
+ self._chromecasts[player_id].set_volume(new_volume/100)
+ self._players[player_id].volume_level = new_volume
+ await self.mass.player.update_player(self._players[player_id])
+ elif cmd == 'mute' and cmd_args == 'off':
+ self._chromecasts[player_id].set_volume_muted(False)
+ elif cmd == 'mute':
+ self._chromecasts[player_id].set_volume_muted(True)
async def player_queue(self, player_id, offset=0, limit=50):
''' return the current items in the player's queue '''
'''
play media on a player
'''
+ if (not player_id in self._chromecasts or
+ not self._chromecasts[player_id].socket_client or
+ not self._chromecasts[player_id].socket_client.is_connected):
+ LOGGER.warning("command %s failed - %s is disconnected, rescan triggered" %(cmd, self._players[player_id].name))
+ self.mass.event_loop.create_task(self.__chromecast_discovery())
+ return
+
castplayer = self._chromecasts[player_id]
cur_queue_index = self._player_queue_index.get(player_id, 0)
enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0