Ejemplo n.º 1
0
 public static function library_parts($params)
 {
     $n = count($params);
     if ($n > 0) {
         $key = $params[0];
         if ($n == 2) {
             $file = $params[1];
             $id = Plex_XML_Data::getAmpacheId($key);
             if (Plex_XML_Data::isSong($key)) {
                 $media = new Song($id);
                 if ($media->id) {
                     $url = Song::play_url($id, '', 'api', true);
                     self::stream_url($url);
                 } else {
                     self::createError(404);
                 }
             } elseif (Plex_XML_Data::isVideo($key)) {
                 $media = new Video($id);
                 if ($media->id) {
                     $url = Video::play_url($id, '', 'api', true);
                     self::stream_url($url);
                 } else {
                     self::createError(404);
                 }
             }
         } elseif ($n == 1) {
             if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
                 if (isset($_GET['subtitleStreamID'])) {
                     $lang_code = dechex(hex2bin(substr($_GET['subtitleStreamID'], 0, 2)));
                     $_SESSION['iframe']['subtitle'] = $lang_code;
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * download
  * Downloads a given media file.
  * Takes the file id in parameter.
  */
 public static function download($input)
 {
     self::check_version($input, "1.0.0", true);
     $fileid = self::check_parameter($input, 'id', true);
     $url = Song::play_url(Subsonic_XML_Data::getAmpacheId($fileid), '&action=download' . '&client=' . rawurlencode($input['c']) . '&noscrobble=1', 'api', function_exists('curl_version'));
     self::follow_stream($url);
 }
Ejemplo n.º 3
0
 /**
  * download
  * Downloads a given media file.
  * Takes the file id in parameter.
  */
 public static function download($input)
 {
     self::check_version($input, "1.0.0", true);
     $fileid = self::check_parameter($input, 'id', true);
     $url = Song::play_url(Subsonic_XML_Data::getAmpacheId($fileid), '&action=download' . '&client=' . $input['c']);
     self::follow_stream($url);
 }
Ejemplo n.º 4
0
 /**
  * exports the catalog
  * it exports all songs in the database to the given export type.
  */
 public static function export($type, $catalog_id = '')
 {
     // Select all songs in catalog
     $params = array();
     if ($catalog_id) {
         $sql = 'SELECT `id` FROM `song` ' . "WHERE `catalog`= ? " . 'ORDER BY `album`, `track`';
         $params[] = $catalog_id;
     } else {
         $sql = 'SELECT `id` FROM `song` ORDER BY `album`, `track`';
     }
     $db_results = Dba::read($sql, $params);
     switch ($type) {
         case 'itunes':
             echo xml_get_header('itunes');
             while ($results = Dba::fetch_assoc($db_results)) {
                 $song = new Song($results['id']);
                 $song->format();
                 $xml = array();
                 $xml['key'] = $results['id'];
                 $xml['dict']['Track ID'] = intval($results['id']);
                 $xml['dict']['Name'] = $song->title;
                 $xml['dict']['Artist'] = $song->f_artist_full;
                 $xml['dict']['Album'] = $song->f_album_full;
                 $xml['dict']['Total Time'] = intval($song->time) * 1000;
                 // iTunes uses milliseconds
                 $xml['dict']['Track Number'] = intval($song->track);
                 $xml['dict']['Year'] = intval($song->year);
                 $xml['dict']['Date Added'] = date("Y-m-d\\TH:i:s\\Z", $song->addition_time);
                 $xml['dict']['Bit Rate'] = intval($song->bitrate / 1000);
                 $xml['dict']['Sample Rate'] = intval($song->rate);
                 $xml['dict']['Play Count'] = intval($song->played);
                 $xml['dict']['Track Type'] = "URL";
                 $xml['dict']['Location'] = Song::play_url($song->id);
                 echo xoutput_from_array($xml, 1, 'itunes');
                 // flush output buffer
             }
             // while result
             echo xml_get_footer('itunes');
             break;
         case 'csv':
             echo "ID,Title,Artist,Album,Length,Track,Year,Date Added,Bitrate,Played,File\n";
             while ($results = Dba::fetch_assoc($db_results)) {
                 $song = new Song($results['id']);
                 $song->format();
                 echo '"' . $song->id . '","' . $song->title . '","' . $song->f_artist_full . '","' . $song->f_album_full . '","' . $song->f_time . '","' . $song->f_track . '","' . $song->year . '","' . date("Y-m-d\\TH:i:s\\Z", $song->addition_time) . '","' . $song->f_bitrate . '","' . $song->played . '","' . $song->file . "\n";
             }
             break;
     }
     // end switch
 }
Ejemplo n.º 5
0
 public static function library_parts($params)
 {
     $n = count($params);
     if ($n == 2) {
         $key = $params[0];
         $file = $params[1];
         $id = Plex_XML_Data::getAmpacheId($key);
         $song = new Song($id);
         if ($song->id) {
             $url = Song::play_url($id);
             self::stream_url($url);
         } else {
             self::createError(404);
         }
     }
 }
Ejemplo n.º 6
0
 /**
  * databases
  */
 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.persistentid', 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.databasesongs');
             $o = self::catalog_songs();
             $o = self::tlv('daap.databasesongs', $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) + 1);
             $o .= self::tlv('dmap.returnedcount', count($playlists) + count($searches) + 1);
             $l = self::base_library();
             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::BASE_LIBRARY) {
                 $o = self::catalog_songs();
                 $o = self::tlv('daap.playlistsongs', $o);
             } else {
                 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.playlistsongs', $o);
                 } else {
                     self::createApiError('daap.playlistsongs', 500, 'Invalid playlist id: ' . $id);
                 }
             }
         }
     }
     self::apiOutput($o);
 }
Ejemplo n.º 7
0
 public static function _itemSong($song, $parent)
 {
     $api_session = AmpConfig::get('require_session') ? Stream::get_session() : false;
     $art_url = Art::url($song->album, 'album', $api_session);
     $fileTypesByExt = self::_getFileTypes();
     $arrFileType = $fileTypesByExt[$song->type];
     return array('id' => 'amp://music/songs/' . $song->id, 'parentID' => $parent, 'restricted' => '1', 'dc:title' => self::_replaceSpecialSymbols($song->f_title), 'upnp:class' => isset($arrFileType['class']) ? $arrFileType['class'] : 'object.item.unknownItem', 'upnp:albumArtURI' => $art_url, 'upnp:artist' => self::_replaceSpecialSymbols($song->f_artist), 'upnp:album' => self::_replaceSpecialSymbols($song->f_album), 'upnp:genre' => Tag::get_display($song->tags, false, 'song'), 'upnp:originalTrackNumber' => $song->track, 'res' => Song::play_url($song->id, '', 'api'), 'protocolInfo' => $arrFileType['mime'], 'size' => $song->size, 'duration' => $song->f_time_h . '.0', 'bitrate' => $song->bitrate, 'sampleFrequency' => $song->rate, 'description' => self::_replaceSpecialSymbols($song->comment));
 }
Ejemplo n.º 8
0
 /**
  * democratic
  *
  * This handles creating an xml document for democratic items, this can be a little complicated
  * due to the votes and all of that
  *
  * @param    array    $object_ids    Object IDs
  * @return    string    return xml
  */
 public static function democratic($object_ids = array())
 {
     if (!is_array($object_ids)) {
         $object_ids = array();
     }
     $democratic = Democratic::get_current_playlist();
     $string = '';
     foreach ($object_ids as $row_id => $data) {
         $song = new $data['object_type']($data['object_id']);
         $song->format();
         //FIXME: This is duplicate code and so wrong, functions need to be improved
         $tag = new Tag($song->tags['0']);
         $song->genre = $tag->id;
         $song->f_genre = $tag->name;
         $tag_string = self::tags_string($song->tags);
         $rating = new Rating($song->id, 'song');
         $art_url = Art::url($song->album, 'album', $_REQUEST['auth']);
         $string .= "<song id=\"" . $song->id . "\">\n" . "\t<title><![CDATA[" . $song->title . "]]></title>\n" . "\t<artist id=\"" . $song->artist . "\"><![CDATA[" . $song->f_artist_full . "]]></artist>\n" . "\t<album id=\"" . $song->album . "\"><![CDATA[" . $song->f_album_full . "]]></album>\n" . "\t<genre id=\"" . $song->genre . "\"><![CDATA[" . $song->f_genre . "]]></genre>\n" . $tag_string . "\t<track>" . $song->track . "</track>\n" . "\t<time>" . $song->time . "</time>\n" . "\t<mime>" . $song->mime . "</mime>\n" . "\t<url><![CDATA[" . Song::play_url($song->id, '', 'api') . "]]></url>\n" . "\t<size>" . $song->size . "</size>\n" . "\t<art><![CDATA[" . $art_url . "]]></art>\n" . "\t<preciserating>" . $rating->get_user_rating() . "</preciserating>\n" . "\t<rating>" . $rating->get_user_rating() . "</rating>\n" . "\t<averagerating>" . $rating->get_average_rating() . "</averagerating>\n" . "\t<vote>" . $democratic->get_vote($row_id) . "</vote>\n" . "</song>\n";
     }
     // end foreach
     $final = self::_header() . $string . self::_footer();
     return $final;
 }
Ejemplo n.º 9
0
    if (AmpConfig::get('share')) {
        ?>
                <?php 
        Share::display_ui('song', $song->id, false);
        ?>
            <?php 
    }
    ?>
        <?php 
}
?>
        <?php 
if (Access::check_function('download')) {
    ?>
            <a rel="nohtml" href="<?php 
    echo Song::play_url($song->id);
    ?>
"><?php 
    echo UI::get_icon('link', T_('Link'));
    ?>
</a>
            <a rel="nohtml" href="<?php 
    echo AmpConfig::get('web_path');
    ?>
/stream.php?action=download&amp;song_id=<?php 
    echo $song->id;
    ?>
"><?php 
    echo UI::get_icon('download', T_('Download'));
    ?>
</a>