Beispiel #1
0
 public static function _musicMetadata($prmPath, $prmQuery = '')
 {
     $root = 'amp://music';
     $pathreq = explode('/', $prmPath);
     if ($pathreq[0] == '' && count($pathreq) > 0) {
         array_shift($pathreq);
     }
     $meta = null;
     switch ($pathreq[0]) {
         case 'artists':
             switch (count($pathreq)) {
                 case 1:
                     $counts = Catalog::count_medias();
                     $meta = array('id' => $root . '/artists', 'parentID' => $root, 'restricted' => '1', 'childCount' => $counts['artists'], 'dc:title' => T_('Artists'), 'upnp:class' => 'object.container');
                     break;
                 case 2:
                     $artist = new Artist($pathreq[1]);
                     if ($artist->id) {
                         $artist->format();
                         $meta = self::_itemArtist($artist, $root . '/artists');
                     }
                     break;
             }
             break;
         case 'albums':
             switch (count($pathreq)) {
                 case 1:
                     $counts = Catalog::count_medias();
                     $meta = array('id' => $root . '/albums', 'parentID' => $root, 'restricted' => '1', 'childCount' => $counts['albums'], 'dc:title' => T_('Albums'), 'upnp:class' => 'object.container');
                     break;
                 case 2:
                     $album = new Album($pathreq[1]);
                     if ($album->id) {
                         $album->format();
                         $meta = self::_itemAlbum($album, $root . '/albums');
                     }
                     break;
             }
             break;
         case 'songs':
             switch (count($pathreq)) {
                 case 1:
                     $counts = Catalog::count_medias();
                     $meta = array('id' => $root . '/songs', 'parentID' => $root, 'restricted' => '1', 'childCount' => $counts['songs'], 'dc:title' => T_('Songs'), 'upnp:class' => 'object.container');
                     break;
                 case 2:
                     $song = new Song($pathreq[1]);
                     if ($song->id) {
                         $song->format();
                         $meta = self::_itemSong($song, $root . '/songs');
                     }
                     break;
             }
             break;
         case 'playlists':
             switch (count($pathreq)) {
                 case 1:
                     $counts = Catalog::count_medias();
                     $meta = array('id' => $root . '/playlists', 'parentID' => $root, 'restricted' => '1', 'childCount' => $counts['playlists'], 'dc:title' => T_('Playlists'), 'upnp:class' => 'object.container');
                     break;
                 case 2:
                     $playlist = new Playlist($pathreq[1]);
                     if ($playlist->id) {
                         $playlist->format();
                         $meta = self::_itemPlaylist($playlist, $root . '/playlists');
                     }
                     break;
             }
             break;
         case 'smartplaylists':
             switch (count($pathreq)) {
                 case 1:
                     $counts = Catalog::count_medias();
                     $meta = array('id' => $root . '/smartplaylists', 'parentID' => $root, 'restricted' => '1', 'childCount' => $counts['smartplaylists'], 'dc:title' => T_('Smart Playlists'), 'upnp:class' => 'object.container');
                     break;
                 case 2:
                     $playlist = new Search($pathreq[1], 'song');
                     if ($playlist->id) {
                         $playlist->format();
                         $meta = self::_itemSmartPlaylist($playlist, $root . '/smartplaylists');
                     }
                     break;
             }
             break;
         default:
             $meta = array('id' => $root, 'parentID' => '0', 'restricted' => '1', 'childCount' => '5', 'dc:title' => T_('Music'), 'upnp:class' => 'object.container');
             break;
     }
     return $meta;
 }
Beispiel #2
0
 public static function base_library()
 {
     $p = self::tlv('dmap.itemid', Daap_Api::BASE_LIBRARY);
     $p .= self::tlv('dmap.persistentid', Daap_Api::BASE_LIBRARY);
     $p .= self::tlv('dmap.itemname', 'Music');
     $p .= self::tlv('daap.baseplaylist', 1);
     $stats = Catalog::count_medias();
     $p .= self::tlv('dmap.itemcount', $stats['songs']);
     return self::tlv('dmap.listingitem', $p);
 }
Beispiel #3
0
 /**
  * update
  *
  */
 public static function databases($input)
 {
     //$revision = $_GET['revision-number'];
     $o = '';
     // Database list
     if (count($input) == 0) {
         self::check_session('daap.serverdatabases');
         $o = self::tlv('dmap.status', 200);
         $o .= self::tlv('dmap.updatetype', 0);
         $o .= self::tlv('dmap.specifiedtotalcount', 1);
         $o .= self::tlv('dmap.returnedcount', 1);
         $r = self::tlv('dmap.itemid', 1);
         $r .= self::tlv('dmap.itemname', 'Ampache');
         $counts = Catalog::count_medias();
         $r .= self::tlv('dmap.itemcount', $counts['songs']);
         $r .= self::tlv('dmap.containercount', count(Playlist::get_playlists()));
         $r = self::tlv('dmap.listingitem', $r);
         $o .= self::tlv('dmap.listing', $r);
         $o = self::tlv('daap.serverdatabases', $o);
     } elseif (count($input) == 2) {
         if ($input[1] == 'items') {
             // Songs list
             self::check_session('daap.playlistsongs');
             //$type = $_GET['type'];
             $meta = explode(',', strtolower($_GET['meta']));
             $o = self::tlv('dmap.status', 200);
             $o .= self::tlv('dmap.updatetype', 0);
             $songs = array();
             $catalogs = Catalog::get_catalogs();
             foreach ($catalogs as $catalog_id) {
                 $catalog = Catalog::create_from_id($catalog_id);
                 $songs = array_merge($songs, $catalog->get_songs());
             }
             $o .= self::tlv('dmap.specifiedtotalcount', count($songs));
             $o .= self::tlv('dmap.returnedcount', count($songs));
             $o .= self::tlv('dmap.listing', self::tlv_songs($songs, $meta));
             $o = self::tlv('daap.playlistsongs', $o);
         } elseif ($input[1] == 'containers') {
             // Playlist list
             self::check_session('daap.databaseplaylists');
             $o = self::tlv('dmap.status', 200);
             $o .= self::tlv('dmap.updatetype', 0);
             $playlists = Playlist::get_playlists();
             $searches = Search::get_searches();
             $o .= self::tlv('dmap.specifiedtotalcount', count($playlists) + count($searches));
             $o .= self::tlv('dmap.returnedcount', count($playlists) + count($searches));
             $l = '';
             foreach ($playlists as $playlist_id) {
                 $playlist = new Playlist($playlist_id);
                 $playlist->format();
                 $l .= self::tlv_playlist($playlist);
             }
             foreach ($searches as $search_id) {
                 $playlist = new Search($search_id, 'song');
                 $playlist->format();
                 $l .= self::tlv_playlist($playlist);
             }
             $o .= self::tlv('dmap.listing', $l);
             $o = self::tlv('daap.databaseplaylists', $o);
         }
     } elseif (count($input) == 3) {
         // Stream
         if ($input[1] == 'items') {
             $finfo = explode('.', $input[2]);
             if (count($finfo) == 2) {
                 $id = intval($finfo[0]);
                 $type = $finfo[1];
                 $params = '';
                 $headers = apache_request_headers();
                 $client = $headers['User-Agent'];
                 if (!empty($client)) {
                     $params .= '&client=' . $client;
                 }
                 $params .= '&transcode_to=' . $type;
                 $url = Song::play_url($id, $params, 'api', true);
                 self::follow_stream($url);
                 exit;
             }
         }
     } elseif (count($input) == 4) {
         // Playlist
         if ($input[1] == 'containers' && $input[3] == 'items') {
             $id = intval($input[2]);
             self::check_session('daap.playlistsongs');
             if ($id > Daap_Api::AMPACHEID_SMARTPL) {
                 $id -= Daap_Api::AMPACHEID_SMARTPL;
                 $playlist = new Search($id, 'song');
             } else {
                 $playlist = new Playlist($id);
             }
             if ($playlist->id) {
                 $meta = explode(',', strtolower($_GET['meta']));
                 $o = self::tlv('dmap.status', 200);
                 $o .= self::tlv('dmap.updatetype', 0);
                 $items = $playlist->get_items();
                 $song_ids = array();
                 foreach ($items as $item) {
                     if ($item['object_type'] == 'song') {
                         $song_ids[] = $item['object_id'];
                     }
                 }
                 if (AmpConfig::get('memory_cache')) {
                     Song::build_cache($song_ids);
                 }
                 $songs = array();
                 foreach ($song_ids as $song_id) {
                     $songs[] = new Song($song_id);
                 }
                 $o .= self::tlv('dmap.specifiedtotalcount', count($songs));
                 $o .= self::tlv('dmap.returnedcount', count($songs));
                 $o .= self::tlv('dmap.listing', self::tlv_songs($songs, $meta));
                 $o = self::tlv('daap.databaseplaylists', $o);
             } else {
                 self::createApiError('daap.playlistsongs', 500, 'Invalid playlist id: ' . $id);
             }
         }
     }
     self::apiOutput($o);
 }