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

Check permission in multiselect

This commit is contained in:
David Ullmer 2021-10-03 17:59:28 +02:00
parent a70c83de3c
commit d97c459ea1
No known key found for this signature in database
GPG key ID: 4AEABE3359D5883C

View file

@ -8,6 +8,7 @@ import ServerConnections from '../ServerConnections';
import alert from '../alert'; import alert from '../alert';
import playlistEditor from '../playlisteditor/playlisteditor'; import playlistEditor from '../playlisteditor/playlisteditor';
import confirm from '../confirm/confirm'; import confirm from '../confirm/confirm';
import itemHelper from '../itemHelper';
/* eslint-disable indent */ /* eslint-disable indent */
@ -170,129 +171,136 @@ import confirm from '../confirm/confirm';
const apiClient = ServerConnections.currentApiClient(); const apiClient = ServerConnections.currentApiClient();
apiClient.getCurrentUser().then(user => { apiClient.getCurrentUser().then(user => {
const menuItems = []; // get first selected item to perform metadata refresh permission check
apiClient.getItem(apiClient.getCurrentUserId(), selectedItems[0]).then(firstItem => {
const menuItems = [];
menuItems.push({
name: globalize.translate('AddToCollection'),
id: 'addtocollection',
icon: 'add'
});
menuItems.push({
name: globalize.translate('AddToPlaylist'),
id: 'playlist',
icon: 'playlist_add'
});
// TODO: Be more dynamic based on what is selected
if (user.Policy.EnableContentDeletion) {
menuItems.push({ menuItems.push({
name: globalize.translate('Delete'), name: globalize.translate('AddToCollection'),
id: 'delete', id: 'addtocollection',
icon: 'delete' icon: 'add'
}); });
}
if (user.Policy.EnableContentDownloading && appHost.supports('filedownload')) {
// Disabled because there is no callback for this item
/*
menuItems.push({ menuItems.push({
name: globalize.translate('Download'), name: globalize.translate('AddToPlaylist'),
id: 'download', id: 'playlist',
icon: 'file_download' icon: 'playlist_add'
}); });
*/
}
if (user.Policy.IsAdministrator) { // TODO: Be more dynamic based on what is selected
if (user.Policy.EnableContentDeletion) {
menuItems.push({
name: globalize.translate('Delete'),
id: 'delete',
icon: 'delete'
});
}
if (user.Policy.EnableContentDownloading && appHost.supports('filedownload')) {
// Disabled because there is no callback for this item
/*
menuItems.push({
name: globalize.translate('Download'),
id: 'download',
icon: 'file_download'
});
*/
}
if (user.Policy.IsAdministrator) {
menuItems.push({
name: globalize.translate('GroupVersions'),
id: 'groupvideos',
icon: 'call_merge'
});
}
menuItems.push({ menuItems.push({
name: globalize.translate('GroupVersions'), name: globalize.translate('MarkPlayed'),
id: 'groupvideos', id: 'markplayed',
icon: 'call_merge' icon: 'check_box'
}); });
}
menuItems.push({ menuItems.push({
name: globalize.translate('MarkPlayed'), name: globalize.translate('MarkUnplayed'),
id: 'markplayed', id: 'markunplayed',
icon: 'check_box' icon: 'check_box_outline_blank'
}); });
menuItems.push({ // this assues that if the user can refresh metadata for the first item
name: globalize.translate('MarkUnplayed'), // they can refresh metadata for all items
id: 'markunplayed', if (itemHelper.canRefreshMetadata(firstItem, user)) {
icon: 'check_box_outline_blank' menuItems.push({
}); name: globalize.translate('RefreshMetadata'),
id: 'refresh',
icon: 'refresh'
});
}
menuItems.push({ import('../actionSheet/actionSheet').then((actionsheet) => {
name: globalize.translate('RefreshMetadata'), actionsheet.show({
id: 'refresh', items: menuItems,
icon: 'refresh' positionTo: e.target,
}); callback: function (id) {
const items = selectedItems.slice(0);
const serverId = apiClient.serverInfo().Id;
import('../actionSheet/actionSheet').then((actionsheet) => { switch (id) {
actionsheet.show({ case 'addtocollection':
items: menuItems, import('../collectionEditor/collectionEditor').then(({default: collectionEditor}) => {
positionTo: e.target, new collectionEditor({
callback: function (id) { items: items,
const items = selectedItems.slice(0); serverId: serverId
const serverId = apiClient.serverInfo().Id; });
});
switch (id) { hideSelections();
case 'addtocollection': dispatchNeedsRefresh();
import('../collectionEditor/collectionEditor').then(({default: collectionEditor}) => { break;
new collectionEditor({ case 'playlist':
new playlistEditor({
items: items, items: items,
serverId: serverId serverId: serverId
}); });
}); hideSelections();
hideSelections(); dispatchNeedsRefresh();
dispatchNeedsRefresh(); break;
break; case 'delete':
case 'playlist': deleteItems(apiClient, items).then(dispatchNeedsRefresh);
new playlistEditor({ hideSelections();
items: items, dispatchNeedsRefresh();
serverId: serverId break;
}); case 'groupvideos':
hideSelections(); combineVersions(apiClient, items);
dispatchNeedsRefresh(); break;
break; case 'markplayed':
case 'delete': items.forEach(itemId => {
deleteItems(apiClient, items).then(dispatchNeedsRefresh); apiClient.markPlayed(apiClient.getCurrentUserId(), itemId);
hideSelections(); });
dispatchNeedsRefresh(); hideSelections();
break; dispatchNeedsRefresh();
case 'groupvideos': break;
combineVersions(apiClient, items); case 'markunplayed':
break; items.forEach(itemId => {
case 'markplayed': apiClient.markUnplayed(apiClient.getCurrentUserId(), itemId);
items.forEach(itemId => { });
apiClient.markPlayed(apiClient.getCurrentUserId(), itemId); hideSelections();
}); dispatchNeedsRefresh();
hideSelections(); break;
dispatchNeedsRefresh(); case 'refresh':
break; import('../refreshdialog/refreshdialog').then(({default: refreshDialog}) => {
case 'markunplayed': new refreshDialog({
items.forEach(itemId => { itemIds: items,
apiClient.markUnplayed(apiClient.getCurrentUserId(), itemId); serverId: serverId
}); }).show();
hideSelections(); });
dispatchNeedsRefresh(); hideSelections();
break; dispatchNeedsRefresh();
case 'refresh': break;
import('../refreshdialog/refreshdialog').then(({default: refreshDialog}) => { default:
new refreshDialog({ break;
itemIds: items, }
serverId: serverId
}).show();
});
hideSelections();
dispatchNeedsRefresh();
break;
default:
break;
} }
} });
}); });
}); });
}); });