1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/controllers/dashboard/users/userlibraryaccess.js

179 lines
7.5 KiB
JavaScript
Raw Normal View History

define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading, libraryMenu, globalize) {
2020-05-04 12:44:12 +02:00
'use strict';
2018-10-23 01:05:09 +03:00
function triggerChange(select) {
2020-05-04 12:44:12 +02:00
var evt = document.createEvent('HTMLEvents');
evt.initEvent('change', false, true);
select.dispatchEvent(evt);
2018-10-23 01:05:09 +03:00
}
function loadMediaFolders(page, user, mediaFolders) {
2020-05-04 12:44:12 +02:00
var html = '';
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderLibraries') + '</h3>';
html += '<div class="checkboxList paperList checkboxList-paperList">';
2018-10-23 01:05:09 +03:00
for (var i = 0, length = mediaFolders.length; i < length; i++) {
var folder = mediaFolders[i];
var isChecked = user.Policy.EnableAllFolders || -1 != user.Policy.EnabledFolders.indexOf(folder.Id);
2020-05-04 12:44:12 +02:00
var checkedAttribute = isChecked ? ' checked="checked"' : '';
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + '><span>' + folder.Name + '</span></label>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
html += '</div>';
page.querySelector('.folderAccess').innerHTML = html;
var chkEnableAllFolders = page.querySelector('#chkEnableAllFolders');
chkEnableAllFolders.checked = user.Policy.EnableAllFolders;
triggerChange(chkEnableAllFolders);
2018-10-23 01:05:09 +03:00
}
function loadChannels(page, user, channels) {
2020-05-04 12:44:12 +02:00
var html = '';
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderChannels') + '</h3>';
html += '<div class="checkboxList paperList checkboxList-paperList">';
2018-10-23 01:05:09 +03:00
for (var i = 0, length = channels.length; i < length; i++) {
var folder = channels[i];
var isChecked = user.Policy.EnableAllChannels || -1 != user.Policy.EnabledChannels.indexOf(folder.Id);
2020-05-04 12:44:12 +02:00
var checkedAttribute = isChecked ? ' checked="checked"' : '';
html += '<label><input type="checkbox" is="emby-checkbox" class="chkChannel" data-id="' + folder.Id + '" ' + checkedAttribute + '><span>' + folder.Name + '</span></label>';
}
2020-05-04 12:44:12 +02:00
html += '</div>';
$('.channelAccess', page).show().html(html);
if (channels.length) {
2020-05-04 12:44:12 +02:00
$('.channelAccessContainer', page).show();
} else {
2020-05-04 12:44:12 +02:00
$('.channelAccessContainer', page).hide();
2018-10-23 01:05:09 +03:00
}
$('#chkEnableAllChannels', page).checked = user.Policy.EnableAllChannels;
2018-10-23 01:05:09 +03:00
}
function loadDevices(page, user, devices) {
2020-05-04 12:44:12 +02:00
var html = '';
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderDevices') + '</h3>';
html += '<div class="checkboxList paperList checkboxList-paperList">';
2018-10-23 01:05:09 +03:00
for (var i = 0, length = devices.length; i < length; i++) {
var device = devices[i];
2020-05-04 12:44:12 +02:00
var checkedAttribute = user.Policy.EnableAllDevices || -1 != user.Policy.EnabledDevices.indexOf(device.Id) ? ' checked="checked"' : '';
html += '<label><input type="checkbox" is="emby-checkbox" class="chkDevice" data-id="' + device.Id + '" ' + checkedAttribute + '><span>' + device.Name + ' - ' + device.AppName + '</span></label>';
}
2020-05-04 12:44:12 +02:00
html += '</div>';
$('.deviceAccess', page).show().html(html);
$('#chkEnableAllDevices', page).checked = user.Policy.EnableAllDevices;
if (user.Policy.IsAdministrator) {
2020-05-04 12:44:12 +02:00
page.querySelector('.deviceAccessContainer').classList.add('hide');
} else {
2020-05-04 12:44:12 +02:00
page.querySelector('.deviceAccessContainer').classList.remove('hide');
2018-10-23 01:05:09 +03:00
}
}
function loadUser(page, user, loggedInUser, mediaFolders, channels, devices) {
2020-05-04 12:44:12 +02:00
page.querySelector('.username').innerHTML = user.Name;
libraryMenu.setTitle(user.Name);
loadChannels(page, user, channels);
loadMediaFolders(page, user, mediaFolders);
loadDevices(page, user, devices);
loading.hide();
2018-10-23 01:05:09 +03:00
}
function onSaveComplete(page) {
loading.hide();
2020-05-04 12:44:12 +02:00
require(['toast'], function (toast) {
toast(globalize.translate('SettingsSaved'));
});
2018-10-23 01:05:09 +03:00
}
function saveUser(user, page) {
user.Policy.EnableAllFolders = $('#chkEnableAllFolders', page).checked;
2020-05-04 12:44:12 +02:00
user.Policy.EnabledFolders = user.Policy.EnableAllFolders ? [] : $('.chkFolder', page).get().filter(function (c) {
return c.checked;
}).map(function (c) {
2020-05-04 12:44:12 +02:00
return c.getAttribute('data-id');
});
user.Policy.EnableAllChannels = $('#chkEnableAllChannels', page).checked;
2020-05-04 12:44:12 +02:00
user.Policy.EnabledChannels = user.Policy.EnableAllChannels ? [] : $('.chkChannel', page).get().filter(function (c) {
return c.checked;
}).map(function (c) {
2020-05-04 12:44:12 +02:00
return c.getAttribute('data-id');
});
user.Policy.EnableAllDevices = $('#chkEnableAllDevices', page).checked;
2020-05-04 12:44:12 +02:00
user.Policy.EnabledDevices = user.Policy.EnableAllDevices ? [] : $('.chkDevice', page).get().filter(function (c) {
return c.checked;
}).map(function (c) {
2020-05-04 12:44:12 +02:00
return c.getAttribute('data-id');
});
user.Policy.BlockedChannels = null;
user.Policy.BlockedMediaFolders = null;
ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
onSaveComplete(page);
});
2018-10-23 01:05:09 +03:00
}
function onSubmit() {
2020-05-04 12:44:12 +02:00
var page = $(this).parents('.page');
2018-10-23 01:05:09 +03:00
loading.show();
2020-05-04 12:44:12 +02:00
var userId = getParameterByName('userId');
ApiClient.getUser(userId).then(function (result) {
saveUser(result, page);
});
return false;
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
$(document).on('pageinit', '#userLibraryAccessPage', function () {
2018-10-23 01:05:09 +03:00
var page = this;
2020-05-04 12:44:12 +02:00
$('#chkEnableAllDevices', page).on('change', function () {
if (this.checked) {
2020-05-04 12:44:12 +02:00
$('.deviceAccessListContainer', page).hide();
} else {
2020-05-04 12:44:12 +02:00
$('.deviceAccessListContainer', page).show();
}
});
2020-05-04 12:44:12 +02:00
$('#chkEnableAllChannels', page).on('change', function () {
if (this.checked) {
2020-05-04 12:44:12 +02:00
$('.channelAccessListContainer', page).hide();
} else {
2020-05-04 12:44:12 +02:00
$('.channelAccessListContainer', page).show();
}
});
2020-05-04 12:44:12 +02:00
page.querySelector('#chkEnableAllFolders').addEventListener('change', function () {
if (this.checked) {
2020-05-04 12:44:12 +02:00
page.querySelector('.folderAccessListContainer').classList.add('hide');
} else {
2020-05-04 12:44:12 +02:00
page.querySelector('.folderAccessListContainer').classList.remove('hide');
}
});
2020-05-04 12:44:12 +02:00
$('.userLibraryAccessForm').off('submit', onSubmit).on('submit', onSubmit);
}).on('pageshow', '#userLibraryAccessPage', function () {
2018-10-23 01:05:09 +03:00
var page = this;
loading.show();
var promise1;
2020-05-04 12:44:12 +02:00
var userId = getParameterByName('userId');
if (userId) {
promise1 = ApiClient.getUser(userId);
} else {
2018-10-23 01:05:09 +03:00
var deferred = $.Deferred();
deferred.resolveWith(null, [{
Configuration: {}
}]);
promise1 = deferred.promise();
2018-10-23 01:05:09 +03:00
}
var promise2 = Dashboard.getCurrentUser();
2020-05-04 12:44:12 +02:00
var promise4 = ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
IsHidden: false
}));
2020-05-04 12:44:12 +02:00
var promise5 = ApiClient.getJSON(ApiClient.getUrl('Channels'));
var promise6 = ApiClient.getJSON(ApiClient.getUrl('Devices'));
Promise.all([promise1, promise2, promise4, promise5, promise6]).then(function (responses) {
loadUser(page, responses[0], responses[1], responses[2].Items, responses[3].Items, responses[4].Items);
});
});
});