mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 11:28:23 -07:00
168 lines
4.2 KiB
JavaScript
168 lines
4.2 KiB
JavaScript
define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter'], function (playbackManager, inputManager, connectionManager, embyRouter) {
|
|
|
|
function playAllFromHere(card, serverId) {
|
|
var cards = card.parentNode.querySelectorAll('.itemAction[data-id]');
|
|
var ids = [];
|
|
|
|
var foundCard = false;
|
|
for (var i = 0, length = cards.length; i < length; i++) {
|
|
if (cards[i] == card) {
|
|
foundCard = true;
|
|
}
|
|
if (foundCard) {
|
|
ids.push(cards[i].getAttribute('data-id'));
|
|
}
|
|
}
|
|
playbackManager.play({
|
|
ids: ids,
|
|
serverId: serverId
|
|
});
|
|
}
|
|
|
|
function showSlideshow(startItemId, serverId) {
|
|
|
|
var apiClient = connectionManager.getApiClient(serverId);
|
|
var userId = apiClient.getCurrentUserId();
|
|
|
|
return apiClient.getItem(userId, startItemId).then(function (item) {
|
|
|
|
return apiClient.getItems(userId, {
|
|
|
|
MediaTypes: 'Photo',
|
|
Filters: 'IsNotFolder',
|
|
ParentId: item.ParentId
|
|
|
|
}).then(function (result) {
|
|
|
|
var items = result.Items;
|
|
|
|
var index = items.map(function (i) {
|
|
return i.Id;
|
|
|
|
}).indexOf(startItemId);
|
|
|
|
if (index == -1) {
|
|
index = 0;
|
|
}
|
|
|
|
require(['slideshow'], function (slideshow) {
|
|
|
|
var newSlideShow = new slideshow({
|
|
showTitle: false,
|
|
cover: false,
|
|
items: items,
|
|
startIndex: index,
|
|
interval: 8000,
|
|
interactive: true
|
|
});
|
|
|
|
newSlideShow.show();
|
|
});
|
|
|
|
});
|
|
});
|
|
}
|
|
|
|
function showItem(options) {
|
|
|
|
if (options.Type == 'Photo') {
|
|
|
|
showSlideshow(options.Id, options.ServerId);
|
|
return;
|
|
}
|
|
|
|
embyRouter.showItem(options);
|
|
}
|
|
|
|
function executeAction(card, action) {
|
|
var id = card.getAttribute('data-id');
|
|
var serverId = card.getAttribute('data-serverid');
|
|
var type = card.getAttribute('data-type');
|
|
var isfolder = card.getAttribute('data-isfolder') == 'true';
|
|
|
|
if (action == 'link') {
|
|
showItem({
|
|
Id: id,
|
|
Type: type,
|
|
IsFolder: isfolder,
|
|
ServerId: serverId
|
|
});
|
|
}
|
|
|
|
else if (action == 'instantmix') {
|
|
playbackManager.instantMix(id, serverId);
|
|
}
|
|
|
|
else if (action == 'play') {
|
|
|
|
var startPositionTicks = parseInt(card.getAttribute('data-startpositionticks') || '0');
|
|
|
|
playbackManager.play({
|
|
ids: [id],
|
|
startPositionTicks: startPositionTicks,
|
|
serverId: serverId
|
|
});
|
|
}
|
|
|
|
else if (action == 'playallfromhere') {
|
|
playAllFromHere(card, serverId);
|
|
}
|
|
|
|
else if (action == 'setplaylistindex') {
|
|
|
|
}
|
|
}
|
|
|
|
function onClick(e) {
|
|
var card = parentWithClass(e.target, 'itemAction');
|
|
|
|
if (card) {
|
|
var action = card.getAttribute('data-action');
|
|
|
|
if (action) {
|
|
executeAction(card, action);
|
|
}
|
|
}
|
|
}
|
|
|
|
function parentWithClass(elem, className) {
|
|
|
|
while (!elem.classList || !elem.classList.contains(className)) {
|
|
elem = elem.parentNode;
|
|
|
|
if (!elem) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return elem;
|
|
}
|
|
|
|
function onCommand(e) {
|
|
var cmd = e.detail.command;
|
|
|
|
if (cmd == 'play') {
|
|
var card = parentWithClass(e.target, 'itemAction');
|
|
|
|
if (card) {
|
|
executeAction(card, cmd);
|
|
}
|
|
}
|
|
}
|
|
|
|
function on(context) {
|
|
context.addEventListener('click', onClick);
|
|
inputManager.on(context, onCommand);
|
|
}
|
|
|
|
function off(context) {
|
|
context.removeEventListener('click', onClick);
|
|
inputManager.off(context, onCommand);
|
|
}
|
|
|
|
return {
|
|
on: on,
|
|
off: off
|
|
};
|
|
|
|
}); |