1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

add shuffle and instant mix commands

This commit is contained in:
Luke Pulverenti 2014-03-29 14:20:42 -04:00
parent 813826b03b
commit 92050a79b1
5 changed files with 74 additions and 63 deletions

View file

@ -289,9 +289,7 @@
showPlayMenu: function (positionTo, itemId, itemType, isFolder, mediaType, resumePositionTicks) { showPlayMenu: function (positionTo, itemId, itemType, isFolder, mediaType, resumePositionTicks) {
var isPlaying = MediaPlayer.isPlaying(); if (!resumePositionTicks && mediaType != "Audio" && !isFolder) {
if (!isPlaying && !resumePositionTicks && mediaType != "Audio" && !isFolder) {
MediaController.play(itemId); MediaController.play(itemId);
return; return;
} }

View file

@ -175,6 +175,20 @@
showLibraryMenu: showLibraryMenu showLibraryMenu: showLibraryMenu
}; };
function updateCastIcon() {
var info = MediaController.getPlayerInfo();
if (info.isLocalPlayer) {
$('.btnCast').addClass('btnDefaultCast').removeClass('btnActiveCast');
} else {
$('.btnCast').removeClass('btnDefaultCast').addClass('btnActiveCast');
}
}
$(document).on('pageinit', ".libraryPage", function () { $(document).on('pageinit', ".libraryPage", function () {
var page = this; var page = this;
@ -211,6 +225,8 @@
}); });
} }
updateCastIcon();
}).on('pageshow', ".libraryPage", function () { }).on('pageshow', ".libraryPage", function () {
var page = this; var page = this;
@ -228,17 +244,7 @@
$(function() { $(function() {
$(MediaController).on('playerchange', function () { $(MediaController).on('playerchange', function () {
updateCastIcon();
var info = MediaController.getPlayerInfo();
if (info.isLocalPlayer) {
$('.btnCast').addClass('btnDefaultCast').removeClass('btnActiveCast');
} else {
$('.btnCast').removeClass('btnDefaultCast').addClass('btnActiveCast');
}
}); });
}); });

View file

@ -19,7 +19,9 @@
name: currentPlayer.name, name: currentPlayer.name,
isLocalPlayer: currentPlayer.isLocalPlayer, isLocalPlayer: currentPlayer.isLocalPlayer,
targetInfo: currentTargetInfo id: currentTargetInfo.id,
deviceName: currentTargetInfo.deviceName,
playableMediaTypes: currentTargetInfo.playableMediaTypes
}; };
}; };
@ -124,7 +126,7 @@
return true; return true;
} }
return currentPlayer.canPlayMediaType(item.MediaType); return self.getPlayerInfo().playableMediaTypes.indexOf(item.MediaType) != -1;
}; };
self.canQueueMediaType = function (mediaType) { self.canQueueMediaType = function (mediaType) {
@ -132,11 +134,6 @@
return currentPlayer.canQueueMediaType(mediaType); return currentPlayer.canQueueMediaType(mediaType);
}; };
self.isPlaying = function () {
return currentPlayer.isPlaying();
};
self.getLocalPlayer = function () { self.getLocalPlayer = function () {
return currentPlayer.isLocalPlayer ? return currentPlayer.isLocalPlayer ?
@ -151,7 +148,7 @@
window.MediaController = new mediaController(); window.MediaController = new mediaController();
function onWebSocketMessageReceived(msg) { function onWebSocketMessageReceived(e, msg) {
var localPlayer = msg.MessageType === "Play" || msg.MessageType === "Play" ? var localPlayer = msg.MessageType === "Play" || msg.MessageType === "Play" ?
MediaController.getLocalPlayer() : MediaController.getLocalPlayer() :
@ -212,11 +209,17 @@
var id = 'radioPlayerTarget' + i; var id = 'radioPlayerTarget' + i;
var isChecked = target.id == playerInfo.targetInfo.id; var isChecked = target.id == playerInfo.id;
var checkedHtml = isChecked ? ' checked="checked"' : ''; var checkedHtml = isChecked ? ' checked="checked"' : '';
html += '<input type="radio" class="radioSelectPlayerTarget" name="radioSelectPlayerTarget" data-playername="' + target.playerName + '" data-targetid="' + target.id + '" data-targetname="' + target.name + '" id="' + id + '" value="' + target.id + '"' + checkedHtml + '>'; html += '<input type="radio" class="radioSelectPlayerTarget" name="radioSelectPlayerTarget" data-mediatypes="' + target.playableMediaTypes.join(',') + '" data-playername="' + target.playerName + '" data-targetid="' + target.id + '" data-targetname="' + target.name + '" id="' + id + '" value="' + target.id + '"' + checkedHtml + '>';
html += '<label for="' + id + '">' + target.name + '</label>'; html += '<label for="' + id + '" style="font-weight:normal;">' + target.name;
if (target.appName) {
html += '<br/><span style="color:#bbb;">' + target.appName + '</span>';
}
html += '</label>';
} }
html += '</fieldset>'; html += '</fieldset>';
@ -249,10 +252,12 @@
var playerName = this.getAttribute('data-playername'); var playerName = this.getAttribute('data-playername');
var targetId = this.getAttribute('data-targetid'); var targetId = this.getAttribute('data-targetid');
var targetName = this.getAttribute('data-targetname'); var targetName = this.getAttribute('data-targetname');
var playableMediaTypes = this.getAttribute('data-mediatypes').split(',');
MediaController.setActivePlayer(playerName, { MediaController.setActivePlayer(playerName, {
id: targetId, id: targetId,
name: targetName name: targetName,
playableMediaTypes: playableMediaTypes
}); });
}); });

View file

@ -30,8 +30,9 @@
var targets = [{ var targets = [{
name: 'My Browser', name: 'My Browser',
id: self.name, id: ApiClient.deviceId(),
playerName: self.name playerName: self.name,
playableMediaTypes: ['Audio', 'Video']
}]; }];
return targets; return targets;
@ -299,19 +300,6 @@
return params; return params;
}; };
self.canPlayMediaType = function (mediaType) {
if (mediaType === "Video") {
return true;
}
if (mediaType === "Audio") {
return true;
}
return false;
};
self.canQueueMediaType = function (mediaType) { self.canQueueMediaType = function (mediaType) {
return currentItem && currentItem.MediaType == mediaType; return currentItem && currentItem.MediaType == mediaType;
@ -1114,12 +1102,7 @@
window.MediaPlayer = new mediaPlayer(); window.MediaPlayer = new mediaPlayer();
window.MediaController.registerPlayer(window.MediaPlayer); window.MediaController.registerPlayer(window.MediaPlayer);
window.MediaController.setActivePlayer(window.MediaPlayer, { window.MediaController.setActivePlayer(window.MediaPlayer, window.MediaPlayer.getTargets()[0]);
id: window.MediaPlayer.name,
name: window.MediaPlayer.name
});
})(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window); })(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window);

View file

@ -411,6 +411,27 @@
window.RemoteControl = new remoteControl(); window.RemoteControl = new remoteControl();
function sendPlayCommand(options, playType) {
var sessionId = MediaController.getPlayerInfo().id;
var ids = options.ids || options.items.map(function (i) {
return i.Id;
});
var remoteOptions = {
ItemIds: ids.join(','),
PlayCommand: playType
};
if (options.startPositionTicks) {
remoteOptions.startPositionTicks = options.startPositionTicks;
}
ApiClient.sendPlayCommand(sessionId, remoteOptions);
}
function remoteControlPlayer() { function remoteControlPlayer() {
var self = this; var self = this;
@ -419,36 +440,32 @@
self.play = function (options) { self.play = function (options) {
sendPlayCommand(options, 'PlayNow');
}; };
self.shuffle = function (id) { self.shuffle = function (id) {
sendPlayCommand({ ids: [id] }, 'PlayShuffle');
}; };
self.instantMix = function (id) { self.instantMix = function (id) {
sendPlayCommand({ ids: [id] }, 'PlayInstantMix');
}; };
self.queue = function (options) { self.queue = function (options) {
sendPlayCommand(options, 'PlayNext');
}; };
self.queueNext = function (options) { self.queueNext = function (options) {
}; sendPlayCommand(options, 'PlayLast');
self.isPlaying = function () {
};
self.canPlayMediaType = function (mediaType) {
return false;
}; };
self.canQueueMediaType = function (mediaType) { self.canQueueMediaType = function (mediaType) {
return false; return mediaType == 'Audio' || mediaType == 'Video';
}; };
self.getTargets = function () { self.getTargets = function () {
@ -461,21 +478,23 @@
}).done(function (sessions) { }).done(function (sessions) {
var targets = sessions.filter(function(s) { var targets = sessions.filter(function (s) {
return s.DeviceId != ApiClient.deviceId(); return s.DeviceId != ApiClient.deviceId();
}).map(function(s) { }).map(function (s) {
return { return {
name: s.DeviceName, name: s.DeviceName,
id: s.Id, id: s.Id,
playerName: self.name playerName: self.name,
appName: s.Client,
playableMediaTypes: s.PlayableMediaTypes
}; };
}); });
deferred.resolveWith(null, [targets]); deferred.resolveWith(null, [targets]);
}).fail(function() { }).fail(function () {
deferred.reject(); deferred.reject();
}); });