public function execute($_options = array())
{
if ($this->getType() == 'info') {
return;
}
try {
$eqLogic = $this->getEqLogic();
$sonos = sonos3::getSonos();
$controller = sonos3::getControllerByIp($eqLogic->getLogicalId());
if ($this->getLogicalId() == 'play') {
if ($eqLogic->getConfiguration('model') == 'PLAYBAR') {
$state = $eqLogic->getCmd(null, 'state');
$track_title = $eqLogic->getCmd(null, 'track_title');
if (is_object($state) && is_object($track_title)) {
if ($track_title->execCmd(null, 2) == __('Aucun', __FILE__) && $state->execCmd(null, 2) == __('Lecture', __FILE__)) {
return $controller->unmute();
}
}
}
$controller->play();
}
if ($this->getLogicalId() == 'stop') {
if ($eqLogic->getConfiguration('model') == 'PLAYBAR') {
$state = $eqLogic->getCmd(null, 'state');
$track_title = $eqLogic->getCmd(null, 'track_title');
if (is_object($state) && is_object($track_title)) {
if ($track_title->execCmd(null, 2) == __('Aucun', __FILE__) && $state->execCmd(null, 2) == __('Lecture', __FILE__)) {
return $controller->mute();
}
}
}
$controller->pause();
}
if ($this->getLogicalId() == 'pause') {
if ($eqLogic->getConfiguration('model') == 'PLAYBAR') {
$state = $eqLogic->getCmd(null, 'state');
$track_title = $eqLogic->getCmd(null, 'track_title');
if (is_object($state) && is_object($track_title)) {
if ($cmd_track_title->execCmd(null, 2) == __('Aucun', __FILE__) && $state->execCmd(null, 2) == __('Lecture', __FILE__)) {
return $controller->mute();
}
}
}
$controller->pause();
}
if ($this->getLogicalId() == 'previous') {
$controller->previous();
}
if ($this->getLogicalId() == 'next') {
$controller->next();
}
if ($this->getLogicalId() == 'mute') {
$controller->mute();
}
if ($this->getLogicalId() == 'unmute') {
$controller->unmute();
}
if ($this->getLogicalId() == 'repeat') {
$controller->setRepeat(!$controller->getRepeat());
}
if ($this->getLogicalId() == 'shuffle') {
$controller->setShuffle(!$controller->getShuffle());
}
if ($this->getLogicalId() == 'setVolume') {
if ($_options['slider'] < 0) {
$_options['slider'] = 0;
}
if ($_options['slider'] > 100) {
$_options['slider'] = 100;
}
$controller->setVolume($_options['slider']);
}
if ($this->getLogicalId() == 'play_playlist') {
if (!$controller->isUsingQueue()) {
$controller->useQueue();
}
$queue = $controller->getQueue();
$playlist = $sonos->getPlaylistByName(trim(trim($_options['title']), '"'));
if ($playlist == null) {
foreach ($sonos->getPlaylists() as $playlist_search) {
if (str_replace(' ', ' ', $playlist_search->getName()) == $_options['title']) {
$playlist = $playlist_search;
break;
}
}
}
if ($playlist == null) {
throw new Exception(__('Playlist non trouvé : ', __FILE__) . trim($_options['title']));
}
$tracks = $playlist->getTracks();
$queue->clear();
if (count($tracks) > 1) {
if (isset($_options['message']) && $_options['message'] == 'random') {
shuffle($tracks);
}
$queue->addTrack($tracks[0]);
$controller->play();
unset($tracks[0]);
$queue->addTracks($tracks);
} else {
$queue->addTracks($tracks);
$controller->play();
}
}
if ($this->getLogicalId() == 'play_radio') {
$radio = $sonos->getRadio();
$stations = $radio->getFavouriteStations();
if ($stations->getName() == $_options['title']) {
$controller->useStream($show)->play();
}
}
if ($this->getLogicalId() == 'add_speaker') {
$speaker = $sonos->getSpeakerByRoom($_options['title']);
$controller->addSpeaker($speaker);
}
if ($this->getLogicalId() == 'remove_speaker') {
$speaker = $sonos->getSpeakerByRoom($_options['title']);
$controller->removeSpeaker($speaker);
}
if ($this->getLogicalId() == 'tts') {
$path = explode('/', trim(config::byKey('tts_path', 'sonos3'), '/'));
$server = new Server(config::byKey('tts_host', 'sonos3'), config::byKey('tts_username', 'sonos3'), config::byKey('tts_password', 'sonos3'));
$share = $server->getShare($path[0]);
$adapter = new SmbAdapter($share);
$filesystem = new Filesystem($adapter);
$folder = array_pop($path);
$directory = new Directory($filesystem, config::byKey('tts_host', 'sonos3') . '/' . implode('/', $path), $folder);
if (config::byKey('ttsProvider', 'sonos3') != 'voxygen' && strlen($_options['message']) > 100) {
$_options['message'] = substr($_options['message'], 0, 100);
}
$track = new TextToSpeech(trim($_options['message']), $directory, new GoogleProvider());
$track->setLanguage("fr");
$track->setProvider(new VoxygenProvider());
$track->getProvider()->setVoice(config::byKey('ttsVoxygenVoice', 'sonos3', 'Helene'));
if ($_options['title'] != '' && is_numeric($_options['title'])) {
$controller->interrupt($track, $_options['title']);
} else {
$controller->interrupt($track);
}
} else {
sonos3::pull($eqLogic->getId());
}
} catch (Exception $e) {
log::add('sonos', 'info', $e->getMessage());
}
}