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:
parent
a70c83de3c
commit
d97c459ea1
1 changed files with 114 additions and 106 deletions
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue