type = $type; $this->_get_info(); /* Test for a connection */ $this->connect(); } // Localplay /** * _get_info * This functions takes the type and attempts to get all the * information needed to load it. Will log errors if there are * any failures, fatal errors will actually return something to the * gui */ function _get_info() { $this->_load_player(); } // _get_info /** * _load_player * This function attempts to load the player class that localplay * Will interface with in order to make all this magical stuf work * all LocalPlay modules should be located in /modules//.class.php */ function _load_player() { $filename = conf('prefix') . '/modules/localplay/' . $this->type . '.controller.php'; $include = require_once ($filename); if (!$include) { /* Throw Error Here */ } // include else { $class_name = "Ampache" . $this->type; $this->_player = new $class_name(); $function_map = $this->_player->function_map(); $this->_map_functions($function_map); } } // _load_player /** * has_function * This is used to check the function map and see if the current * player type supports the indicated function. */ function has_function($function_name) { /* Check the function map, if it's got a value it must * be possible */ if (strlen($this->_function_map) > 0) { return true; } return false; } // has_function /** * _map_functions * This takes the results from the loaded from the target player * and maps them to the defined functions that Ampache currently * supports, this is broken into require and optional componets * Failure of required componets will cause log entry and gui * warning. The value of the elements in the $data array should * be function names that are called on the action in question */ function _map_functions($data) { /* Required Functions */ $this->_function_map['add'] = $data['add']; $this->_function_map['delete'] = $data['delete']; $this->_function_map['play'] = $data['play']; $this->_function_map['stop'] = $data['stop']; $this->_function_map['connect'] = $data['connect']; /* Recommended Functions */ $this->_function_map['next'] = $data['next']; $this->_function_map['prev'] = $data['prev']; $this->_function_map['get_playlist'] = $data['get_playlist']; $this->_function_map['get_playing'] = $data['get_playing']; /* Optional Functions */ $this->_function_map['volume_set'] = $data['volume_set']; $this->_function_map['volume_up'] = $data['volume_up']; $this->_function_map['volume_down'] = $data['volume_down']; } // _map_functions /** * connect * This function attempts to connect to the localplay * player that we are using */ function connect() { $function = $this->_function_map['connect']; if (!$this->_player->$function()) { debug_event('localplay','Error Unable to connect, check ' . $this->type . ' controller','1'); return false; } return true; } // connect /** * play * This function passes NULL and calls the play function of the player * object */ function play() { $function = $this->_function_map['play']; if (!$this->_player->$function()) { debug_event('localplay','Error Unable to start playback, check ' . $this->type . ' controller','1'); return false; } return true; } // play /** * stop * This functions passes NULl and calls the stop function of the player * object, it should recieve a true/false boolean value */ function stop() { $function = $this->_function_map['stop']; if (!$this->_player->$function()) { debug_event('localplay','Error Unable to stop playback, check ' . $this->type . ' controller','1'); return false; } return true; } // stop /** * add * This function takes an array of song_ids and then passes the full URL * to the player, this is a required function. */ function add($songs) { /* Call the Function Specified in the Function Map */ } // add } //end localplay class ?>