1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-06 03:49:56 +02:00

First draft for "Play Next" feature

This commit is contained in:
Tan Chee Eng 2014-12-30 17:22:59 +08:00
parent cb9062c004
commit 7c5ec76f51
11 changed files with 88 additions and 3 deletions

BIN
images/icon_play_next.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

View file

@ -186,6 +186,12 @@ class Stream_Playlist
);
}
public static function check_autoplay_next()
{
// Currently only supported for web player
return (AmpConfig::get('ajax_load') && AmpConfig::get('play_type') == 'web_player');
}
public function generate_playlist($type, $redirect = false)
{
if (!count($this->urls)) {

View file

@ -211,6 +211,27 @@ class WebPlayer
return $addjs;
}
/**
* Get play_next javascript.
* @param \Playlist $playlist
* @param string $callback_container
* @return string
*/
public static function play_next_js($playlist, $callback_container='')
{
$addjs = "";
foreach ($playlist->urls as $item) {
if ($item->type == 'broadcast') {
// TODO: Figure out how this works
break;
} else {
$addjs .= $callback_container . "playNext(" . self::get_media_js_param($item) . ");";
}
}
return $addjs;
}
/**
* Get media javascript parameters.
* @param \playable_item $item

View file

@ -187,5 +187,24 @@ jPlayerPlaylist.prototype._highlight = function(index) {
}
};
jPlayerPlaylist.prototype.addAfter = function(media, idx) {
if (idx >= this.original.length || idx < 0) {
console.log("jPlayerPlaylist.addAfter: ERROR, Index out of bounds");
return;
}
$(this.cssSelector.playlist + " ul")
.find("li[name=" + idx + "]").after(this._createListItem(media)).end()
.find("li:last-child").hide().slideDown(this.options.playlistOptions.addTime);
this._updateControls();
this.original.splice(idx + 1, 0, media);
this.playlist.splice(idx + 1, 0, media);
if(this.original.length === 1) {
this.select(0);
}
};
$(document).ready(function() {
});

View file

@ -88,6 +88,9 @@ switch ($_REQUEST['action']) {
if (!empty($_REQUEST['append'])) {
$_SESSION['iframe']['target'] .= '&append=true';
}
if (!empty($_REQUEST['playnext'])) {
$_SESSION['iframe']['target'] .= '&playnext=true';
}
if ($_REQUEST['subtitle']) {
$_SESSION['iframe']['subtitle'] = $_REQUEST['subtitle'];
} else {

View file

@ -28,6 +28,7 @@
function PlayerFrame()
{
var appendmedia = false;
var playnext = false;
var $webplayer = $("#webplayer");
if ($webplayer.is(':visible')) {
<?php
@ -35,6 +36,10 @@ if ($_REQUEST['append']) {
?>
appendmedia = true;
<?php
} else if ($_REQUEST['playnext']) {
?>
playnext = true;
<?php
}
?>
}
@ -45,6 +50,8 @@ if ($_REQUEST['append']) {
if (appendmedia) {
<?php echo WebPlayer::add_media_js($this); ?>
} else if (playnext) {
<?php echo WebPlayer::play_next_js($this); ?>
} else {
$webplayer.show();
$.get('<?php echo AmpConfig::get('web_path'); ?>/web_player_embedded.php?playlist_id=<?php echo $this->id; ?>', function (data) {

View file

@ -45,6 +45,8 @@ function update_action()
var jplaylist = new Array();
var jtypes = new Array();
function addMedia(media)
{
var jpmedia = {};
@ -62,6 +64,24 @@ function addMedia(media)
jplaylist.add(jpmedia);
}
function playNext(media)
{
var jpmedia = {};
jpmedia['title'] = media['title'];
jpmedia['artist'] = media['artist'];
jpmedia[media['filetype']] = media['url'];
jpmedia['poster'] = media['poster'];
jpmedia['artist_id'] = media['artist_id'];
jpmedia['album_id'] = media['album_id'];
jpmedia['media_id'] = media['media_id'];
jpmedia['replaygain_track_gain'] = media['replaygain_track_gain'];
jpmedia['replaygain_track_peak'] = media['replaygain_track_peak'];
jpmedia['replaygain_album_gain'] = media['replaygain_album_gain'];
jpmedia['replaygain_album_peak'] = media['replaygain_album_peak'];
jplaylist.addAfter(jpmedia, jplaylist.current);
}
</script>
<script language="javascript" type="text/javascript">
function ExitPlayer()

View file

@ -100,6 +100,9 @@ foreach ($data as $row) {
<?php if (Stream_Playlist::check_autoplay_append()) { ?>
<?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&append=true','play_add', T_('Play last'),'addplay_song_' . $nb . '_' . $song->id); ?>
<?php } ?>
<?php if (Stream_Playlist::check_autoplay_next()) { ?>
<?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&playnext=true', 'play_next', T_('Play next'), 'nextplay_song_' . $nb . '_' . $song->id); ?>
<?php } ?>
<?php } ?>
</div>
</td>

View file

@ -62,6 +62,9 @@ $button_flip_state_id = 'button_flip_state_' . $song->id;
<?php if (Stream_Playlist::check_autoplay_append()) { ?>
<?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&append=true','play_add', T_('Play last'),'addplay_song_' . $song->id); ?>
<?php } ?>
<?php if (Stream_Playlist::check_autoplay_next()) { ?>
<?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&playnext=true','play_next', T_('Play next'),'nextplay_song_' . $song->id); ?>
<?php } ?>
<?php echo $song->show_custom_play_actions(); ?>
<?php } ?>
<?php echo Ajax::button('?action=basket&type=song&id=' . $song->id,'add', T_('Add to temporary playlist'),'add_song_' . $song->id); ?>

View file

@ -28,6 +28,9 @@
<?php if (Stream_Playlist::check_autoplay_append()) { ?>
<?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $libitem->id . '&append=true', 'play_add', T_('Play last'), 'addplay_song_' . $libitem->id); ?>
<?php } ?>
<?php if (Stream_Playlist::check_autoplay_next()) { ?>
<?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $libitem->id . '&playnext=true', 'play_next', T_('Play next'), 'nextplay_song_' . $libitem->id); ?>
<?php } ?>
<?php } ?>
</div>
</td>

View file

@ -883,8 +883,8 @@ table.tabledata .th-bottom:focus {
}
table.tabledata tbody .cel_play {
max-width: 40px;
min-width: 40px;
max-width: 60px;
min-width: 60px;
width: 40px !important;
text-align: right;
}