1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-03 17:59:21 +02:00
ampache/modules/class/stream.php
Karl 'vollmerk' Vollmer bcad40a05a New Import
2005-06-09 16:34:40 +00:00

291 lines
9.1 KiB
PHP

<?php
/*
Copyright (c) 2001 - 2005 Ampache.org
All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*!
@header Stream Class
*/
class Stream {
/* Variables from DB */
var $type;
var $web_path;
var $songs = array();
var $sess;
/*!
@function stream
@discussion constructor for the stream class
*/
function Stream($type='m3u', $song_ids=0) {
$this->type = $type;
$this->songs = $song_ids;
$this->web_path = conf('web_path');
if (conf('force_http_play')) {
$port = conf('http_port');
$this->web_path = preg_replace("/https/", "http",$this->web_path);
$this->web_path = preg_replace("/:\d+/",":$port",$this->web_path);
}
$this->sess = session_id();
$this->user_id = $_SESSION['userdata']['id'];
} //constructor
/*!
@function start
@discussion runs this and depending on the type passed it will
call the correct function
*/
function start() {
$methods = get_class_methods('Stream');
$create_function = "create_" . $this->type;
if (in_array($create_function,$methods)) {
$this->{$create_function}();
}
// Assume M3u incase they've pooched the type
else {
$this->create_m3u();
}
} // start
/*!
@function create_simplem3u
@discussion this creates a simple m3u
without any of the extended information
*/
function create_simple_m3u() {
header("Cache-control: public");
header("Content-Disposition: filename=playlist.m3u");
header("Content-Type: audio/x-mpegurl;");
foreach ($this->songs as $song_id) {
$song = new Song($song_id);
if ($song->type == ".flac") { $song->type = ".ogg"; }
if($GLOBALS['user']->prefs['play_type'] == 'downsample') {
$ds = $GLOBALS['user']->prefs['sample_rate'];
}
echo "$this->web_path/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&stupidwinamp=." . $song->type . "\n";
} // end foreach
} // simple_m3u
/*!
@function create_m3u
@discussion creates an m3u file
*/
function create_m3u() {
// Send the client an m3u playlist
header("Cache-control: public");
header("Content-Disposition: filename=playlist.m3u");
header("Content-Type: audio/x-mpegurl;");
echo "#EXTM3U\n";
foreach($this->songs as $song_id) {
$song = new Song($song_id);
$song->format_song();
if ($song->type == ".flac") { $song->type = ".ogg"; }
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
echo "#EXTINF:$song->time,$song_name\n";
$sess = $_COOKIE[libglue_param('sess_name')];
if($GLOBALS['user']->prefs['play_type'] == 'downsample') {
$ds = $GLOBALS['user']->prefs['sample_rate'];
}
echo "$this->web_path/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&name=/" . rawurlencode($song_name) . "\n";
} // end foreach
} // create_m3u
/*!
@function create_pls
@discussion creates a pls file
*/
function create_pls() {
// Send the client a pls playlist
header("Cache-control: public");
header("Content-Disposition: filename=playlist.pls");
header("Content-Type: audio/x-scpls;");
echo "[Playlist]\n";
echo "NumberOfEntries=" . count($this->songs) . "\n";
foreach ($this->songs as $song_id) {
$i++;
$song = new Song($song_id);
$song->format_song();
if ($song->type == ".flac") { $song->type = ".ogg"; }
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
if($GLOBALS['user']->prefs['play_type'] == 'downsample') {
$ds = $GLOBALS['user']->prefs['sample_rate'];
}
$song_url = $this->web_path . "/play/index.php?song=$song_id&uid=$this->user_id&sid=$this->sess&ds=$ds&stupidwinamp=." . $song->type;
echo "File" . $i . "=$song_url\n";
echo "Title" . $i . "=$song_name\n";
echo "Length" . $i . "=-1\n";
} // end foreach songs
echo "Version=2\n";
} // create_pls
/*!
@function create_asx
@discussion creates an ASZ playlist (Thx Samir Kuthiala)
*/
function create_asx() {
header("Cache-control: public");
header("Content-Disposition: filename=playlist.asx");
header("Content-Type: video/x-ms-asf;");
echo "<ASX version = \"3.0\" BANNERBAR=\"AUTO\">\n";
echo "<TITLE>Ampache ASX Playlist</TITLE>";
foreach ($this->songs as $song_id) {
$song = new Song($song_id);
$song->format_song();
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
echo "<ENTRY>\n";
echo "<TITLE>".$song->f_album_full ." - ". $song->f_artist_full ." - ". $song->title ."</TITLE>\n";
echo "<AUTHOR>".$song->f_artist_full."</AUTHOR>\n";
$sess = $_COOKIE[libglue_param('sess_name')];
if ($GLOBALS['user']->prefs['play_type'] == 'downsample') {
$ds = $GLOBALS['user']->prefs['sample_rate'];
}
echo "<REF HREF = \"". conf('web_path') . "/play/index.php?song=$song_id&uid=$this->user_id&sid=$sess&ds=$ds&name=/" . rawurlencode($song_name) . "\" />\n";
echo "</ENTRY>\n";
} // end foreach
echo "</ASX>\n";
} // create_asx
/*!
@function create_icecast2
@discussion pushes an icecast stream
*/
function create_icecast2() {
echo "ICECAST2<br>\n";
// Play the song locally using local play configuration
if (count($this->songs) > 0) {
echo "ICECAST2<br>\n";
exec("killall ices");
$filename = conf('icecast_tracklist');
echo "$filename " . _("Opened for writting") . "<br>\n";
/* Open the file for writting */
if (!$handle = @fopen($filename, "w")) {
log_event($_SESSION['userdata']['username'],"icecast","Fopen: $filename Failed");
echo _("Error, cannot write") . " $filename<br>\n";
exit;
}
/* Foreach through songs */
foreach($this->songs as $song_id) {
$song = new Song($song_id);
echo "$song->file<br>\n";
$line = "$song->file\n";
if (!fwrite($handle, $line)) {
log_event($_SESSION['userdata']['username'],"icecast","Fwrite: Unabled to write $line into $filename");
echo _("Error, cannot write song in file") . " $song->file --&gt; $filename";
exit;
} // if write fails
} // foreach songs
echo $filename . " " . _("Closed after write") . "<br>\n";
fclose($handle);
$cmd = conf('icecast_command');
$cmd = str_replace("%FILE%", $filename, $cmd);
if (conf('debug')) {
log_event($_SESSION['userdata']['username'],"icecast","Exec: $cmd");
}
exec($cmd);
exit;
} // if songs
} // create_icecast2
/*!
@function create_local_play
@discussion pushes out localplay mojo
*/
function create_local_play() {
foreach($this->songs as $song_id) {
$song = new Song($song_id);
$song->format_song();
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
$url = escapeshellarg("$this->web_path/play/?song=$song_id&uid=$this->user_id&sid=$this->sess&name=" . rawurlencode($song_name));
$localplay_add = conf('localplay_add');
$localplay_add = str_replace("%URL%", $url, $localplay_add);
if (conf('debug')) {
log_event($_SESSION['userdata']['username'],"localplay","Exec: $localplay_add");
}
exec($localplay_add);
header("Location: " . conf('web_path') . "/index.php");
}
} // create_localplay
/*!
@function create_mpd
@discussion function that passes information to
MPD
*/
function create_mpd() {
/* Create the MPD object */
$myMpd = @new mpd(conf('mpd_host'),conf('mpd_port'),conf('mpd_pass'));
/* Add the files to the MPD playlist */
addToPlaylist($myMpd,$this->songs);
header ("Location: " . return_referer());
} // create_mpd
/*!
@function create_slim
@discussion this function passes the correct mojo to the slim
class which is in turn passed to the slimserver
*/
function create_slim() {
} // create_slim
} //end of stream class
?>