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

start a dashboard folder

This commit is contained in:
Luke Pulverenti 2016-08-22 14:28:24 -04:00
parent bcd2bd0f52
commit c043164de5
26 changed files with 182 additions and 95 deletions

View file

@ -1,14 +0,0 @@
define([], function () {
return function (view, params) {
var self = this;
view.addEventListener('viewbeforeshow', function (e) {
var elem = view.querySelector('#appVersionNumber');
elem.innerHTML = elem.innerHTML.replace('{0}', ConnectionManager.appVersion());
});
}
});

View file

@ -1,400 +0,0 @@
define(['serverNotifications', 'events', 'scripts/taskbutton', 'datetime', 'paper-icon-button-light'], function (serverNotifications, events, taskButton, datetime) {
var query = {
StartIndex: 0,
Limit: 50
};
var currentResult;
var page;
function parentWithClass(elem, className) {
while (!elem.classList || !elem.classList.contains(className)) {
elem = elem.parentNode;
if (!elem) {
return null;
}
}
return elem;
}
function showStatusMessage(id) {
var item = currentResult.Items.filter(function (i) {
return i.Id == id;
})[0];
Dashboard.alert({
title: getStatusText(item, false),
message: item.StatusMessage
});
}
function deleteOriginalFile(page, id) {
var item = currentResult.Items.filter(function (i) {
return i.Id == id;
})[0];
var message = Globalize.translate('MessageFileWillBeDeleted') + '<br/><br/>' + item.OriginalPath + '<br/><br/>' + Globalize.translate('MessageSureYouWishToProceed');
require(['confirm'], function (confirm) {
confirm(message, Globalize.translate('HeaderDeleteFile')).then(function () {
Dashboard.showLoadingMsg();
ApiClient.deleteOriginalFileFromOrganizationResult(id).then(function () {
Dashboard.hideLoadingMsg();
reloadItems(page, true);
}, Dashboard.processErrorResponse);
});
});
}
function organizeFileWithCorrections(page, item) {
showCorrectionPopup(page, item);
}
function showCorrectionPopup(page, item) {
require(['components/fileorganizer/fileorganizer'], function (fileorganizer) {
fileorganizer.show(item).then(function () {
reloadItems(page, false);
});
});
}
function organizeFile(page, id) {
var item = currentResult.Items.filter(function (i) {
return i.Id == id;
})[0];
if (!item.TargetPath) {
if (item.Type == "Episode") {
organizeFileWithCorrections(page, item);
}
return;
}
var message = Globalize.translate('MessageFollowingFileWillBeMovedFrom') + '<br/><br/>' + item.OriginalPath + '<br/><br/>' + Globalize.translate('MessageDestinationTo') + '<br/><br/>' + item.TargetPath;
if (item.DuplicatePaths.length) {
message += '<br/><br/>' + Globalize.translate('MessageDuplicatesWillBeDeleted');
message += '<br/><br/>' + item.DuplicatePaths.join('<br/>');
}
message += '<br/><br/>' + Globalize.translate('MessageSureYouWishToProceed');
require(['confirm'], function (confirm) {
confirm(message, Globalize.translate('HeaderOrganizeFile')).then(function () {
Dashboard.showLoadingMsg();
ApiClient.performOrganization(id).then(function () {
Dashboard.hideLoadingMsg();
reloadItems(page, true);
}, Dashboard.processErrorResponse);
});
});
}
function reloadItems(page, showSpinner) {
if (showSpinner) {
Dashboard.showLoadingMsg();
}
ApiClient.getFileOrganizationResults(query).then(function (result) {
currentResult = result;
renderResults(page, result);
Dashboard.hideLoadingMsg();
}, Dashboard.processErrorResponse);
}
function getStatusText(item, enhance) {
var status = item.Status;
var color = null;
if (status == 'SkippedExisting') {
status = Globalize.translate('StatusSkipped');
}
else if (status == 'Failure') {
color = '#cc0000';
status = Globalize.translate('StatusFailed');
}
if (status == 'Success') {
color = 'green';
status = Globalize.translate('StatusSuccess');
}
if (enhance) {
if (item.StatusMessage) {
return '<a style="color:' + color + ';" data-resultid="' + item.Id + '" href="#" class="btnShowStatusMessage">' + status + '</a>';
} else {
return '<span data-resultid="' + item.Id + '" style="color:' + color + ';">' + status + '</span>';
}
}
return status;
}
function renderResults(page, result) {
var rows = result.Items.map(function (item) {
var html = '';
html += '<tr id="row' + item.Id + '">';
html += renderItemRow(item);
html += '</tr>';
return html;
}).join('');
var resultBody = page.querySelector('.resultBody');
resultBody.innerHTML = rows;
resultBody.addEventListener('click', handleItemClick);
var pagingHtml = LibraryBrowser.getQueryPagingHtml({
startIndex: query.StartIndex,
limit: query.Limit,
totalRecordCount: result.TotalRecordCount,
showLimit: false,
updatePageSizeSetting: false
});
var topPaging = page.querySelector('.listTopPaging');
topPaging.innerHTML = pagingHtml;
var bottomPaging = page.querySelector('.listBottomPaging');
bottomPaging.innerHTML = pagingHtml;
var btnNextTop = topPaging.querySelector(".btnNextPage");
var btnNextBottom = bottomPaging.querySelector(".btnNextPage");
var btnPrevTop = topPaging.querySelector(".btnPreviousPage");
var btnPrevBottom = bottomPaging.querySelector(".btnPreviousPage");
btnNextTop.addEventListener('click', function () {
query.StartIndex += query.Limit;
reloadItems(page, true);
});
btnNextBottom.addEventListener('click', function () {
query.StartIndex += query.Limit;
reloadItems(page, true);
});
btnPrevTop.addEventListener('click', function () {
query.StartIndex -= query.Limit;
reloadItems(page, true);
});
btnPrevBottom.addEventListener('click', function () {
query.StartIndex -= query.Limit;
reloadItems(page, true);
});
var btnClearLog = page.querySelector('.btnClearLog');
if (result.TotalRecordCount) {
btnClearLog.classList.remove('hide');
} else {
btnClearLog.classList.add('hide');
}
}
function renderItemRow(item) {
var html = '';
html += '<td>';
var hide = item.IsInProgress ? '' : ' hide';
html += '<img src="css/images/throbber.gif" alt="" class="syncSpinner' + hide + '" style="vertical-align: middle;" />';
html += '</td>';
html += '<td data-title="Date">';
var date = datetime.parseISO8601Date(item.Date, true);
html += date.toLocaleDateString();
html += '</td>';
html += '<td data-title="Source" class="fileCell">';
var status = item.Status;
if (item.IsInProgress) {
html += '<span style="color:darkorange;">';
html += item.OriginalFileName;
html += '</span>';
}
else if (status == 'SkippedExisting') {
html += '<a data-resultid="' + item.Id + '" style="color:blue;" href="#" class="btnShowStatusMessage">';
html += item.OriginalFileName;
html += '</a>';
}
else if (status == 'Failure') {
html += '<a data-resultid="' + item.Id + '" style="color:red;" href="#" class="btnShowStatusMessage">';
html += item.OriginalFileName;
html += '</a>';
} else {
html += '<span style="color:green;">';
html += item.OriginalFileName;
html += '</span>';
}
html += '</td>';
html += '<td data-title="Destination" class="fileCell">';
html += item.TargetPath || '';
html += '</td>';
html += '<td class="organizerButtonCell">';
if (item.Status != 'Success') {
html += '<button type="button" is="paper-icon-button-light" data-resultid="' + item.Id + '" class="btnProcessResult organizerButton autoSize" title="' + Globalize.translate('ButtonOrganizeFile') + '"><i class="md-icon">folder</i></button>';
html += '<button type="button" is="paper-icon-button-light" data-resultid="' + item.Id + '" class="btnDeleteResult organizerButton autoSize" title="' + Globalize.translate('ButtonDeleteFile') + '"><i class="md-icon">delete</i></button>';
}
html += '</td>';
return html;
}
function handleItemClick(e) {
var id;
var buttonStatus = parentWithClass(e.target, 'btnShowStatusMessage');
if (buttonStatus) {
id = buttonStatus.getAttribute('data-resultid');
showStatusMessage(id);
}
var buttonOrganize = parentWithClass(e.target, 'btnProcessResult');
if (buttonOrganize) {
id = buttonOrganize.getAttribute('data-resultid');
organizeFile(e.view, id);
}
var buttonDelete = parentWithClass(e.target, 'btnDeleteResult');
if (buttonDelete) {
id = buttonDelete.getAttribute('data-resultid');
deleteOriginalFile(e.view, id);
}
}
function onServerEvent(e, apiClient, data) {
if (data) {
updateItemStatus(page, data);
} else {
reloadItems(page, false);
}
}
function updateItemStatus(page, item) {
var rowId = '#row' + item.Id;
var row = page.querySelector(rowId);
if (row) {
row.innerHTML = renderItemRow(item);
}
}
function getTabs() {
return [
{
href: 'autoorganizelog.html',
name: Globalize.translate('TabActivityLog')
},
{
href: 'autoorganizetv.html',
name: Globalize.translate('TabTV')
},
{
href: 'autoorganizesmart.html',
name: Globalize.translate('TabSmartMatches')
}];
}
return function (view, params) {
page = view;
var clearButton = view.querySelector('.btnClearLog');
clearButton.addEventListener('click', function () {
ApiClient.clearOrganizationLog().then(function () {
reloadItems(view, true);
}, Dashboard.processErrorResponse);
});
view.addEventListener('viewshow', function (e) {
LibraryMenu.setTabs('autoorganize', 0, getTabs);
reloadItems(view, true);
events.on(serverNotifications, 'AutoOrganizeUpdate', onServerEvent);
// on here
taskButton({
mode: 'on',
progressElem: view.querySelector('.organizeProgress'),
panel: view.querySelector('.organizeTaskPanel'),
taskKey: 'AutoOrganize',
button: view.querySelector('.btnOrganize')
});
});
view.addEventListener('viewhide', function (e) {
currentResult = null;
events.off(serverNotifications, 'AutoOrganizeUpdate', onServerEvent);
// off here
taskButton({
mode: 'off',
button: view.querySelector('.btnOrganize')
});
});
};
});

View file

@ -1,177 +0,0 @@
define(['listViewStyle'], function () {
var query = {
StartIndex: 0,
Limit: 100000
};
var currentResult;
function parentWithClass(elem, className) {
while (!elem.classList || !elem.classList.contains(className)) {
elem = elem.parentNode;
if (!elem) {
return null;
}
}
return elem;
}
function reloadList(page) {
Dashboard.showLoadingMsg();
ApiClient.getSmartMatchInfos(query).then(function (infos) {
currentResult = infos;
populateList(page, infos);
Dashboard.hideLoadingMsg();
}, function () {
Dashboard.hideLoadingMsg();
});
}
function populateList(page, result) {
var infos = result.Items;
if (infos.length > 0) {
infos = infos.sort(function (a, b) {
a = a.OrganizerType + " " + (a.DisplayName || a.ItemName);
b = b.OrganizerType + " " + (b.DisplayName || b.ItemName);
if (a == b) {
return 0;
}
if (a < b) {
return -1;
}
return 1;
});
}
var html = "";
if (infos.length) {
html += '<div class="paperList">';
}
for (var i = 0, length = infos.length; i < length; i++) {
var info = infos[i];
html += '<div class="listItem">';
html += '<div class="listItemIconContainer">';
html += '<i class="listItemIcon md-icon">folder</i>';
html += '</div>';
html += '<div class="listItemBody">';
html += "<h2 class='listItemBodyText'>" + (info.DisplayName || info.ItemName) + "</h2>";
html += '</div>';
html += '</div>';
var matchStringIndex = 0;
html += info.MatchStrings.map(function (m) {
var matchStringHtml = '';
matchStringHtml += '<div class="listItem">';
matchStringHtml += '<div class="listItemBody" style="padding: .1em 1em .4em 5.5em; min-height: 1.5em;">';
matchStringHtml += "<div class='listItemBodyText secondary'>" + m + "</div>";
matchStringHtml += '</div>';
matchStringHtml += '<button type="button" is="emby-button" class="btnDeleteMatchEntry" style="padding: 0;" data-index="' + i + '" data-matchindex="' + matchStringIndex + '" title="' + Globalize.translate('ButtonDelete') + '"><i class="md-icon">delete</i></button>';
matchStringHtml += '</div>';
matchStringIndex++;
return matchStringHtml;
}).join('');
}
if (infos.length) {
html += "</div>";
}
var matchInfos = page.querySelector('.divMatchInfos');
matchInfos.innerHTML = html;
}
function getTabs() {
return [
{
href: 'autoorganizelog.html',
name: Globalize.translate('TabActivityLog')
},
{
href: 'autoorganizetv.html',
name: Globalize.translate('TabTV')
},
{
href: 'autoorganizesmart.html',
name: Globalize.translate('TabSmartMatches')
}];
}
return function (view, params) {
var self = this;
var divInfos = view.querySelector('.divMatchInfos');
divInfos.addEventListener('click', function (e) {
var button = parentWithClass(e.target, 'btnDeleteMatchEntry');
if (button) {
var index = parseInt(button.getAttribute('data-index'));
var matchIndex = parseInt(button.getAttribute('data-matchindex'));
var info = currentResult.Items[index];
var entries = [
{
Name: info.ItemName,
Value: info.MatchStrings[matchIndex]
}];
ApiClient.deleteSmartMatchEntries(entries).then(function () {
reloadList(view);
}, Dashboard.processErrorResponse);
}
});
view.addEventListener('viewshow', function (e) {
LibraryMenu.setTabs('autoorganize', 2, getTabs);
Dashboard.showLoadingMsg();
reloadList(view);
});
view.addEventListener('viewhide', function (e) {
currentResult = null;
});
};
});

View file

@ -1,181 +0,0 @@
define([], function () {
function getEpisodeFileName(value, enableMultiEpisode) {
var seriesName = "Series Name";
var episodeTitle = "Episode Four";
var result = value.replace('%sn', seriesName)
.replace('%s.n', seriesName.replace(' ', '.'))
.replace('%s_n', seriesName.replace(' ', '_'))
.replace('%s', '1')
.replace('%0s', '01')
.replace('%00s', '001')
.replace('%ext', 'mkv')
.replace('%en', episodeTitle)
.replace('%e.n', episodeTitle.replace(' ', '.'))
.replace('%e_n', episodeTitle.replace(' ', '_'));
if (enableMultiEpisode) {
result = result
.replace('%ed', '5')
.replace('%0ed', '05')
.replace('%00ed', '005');
}
return result
.replace('%e', '4')
.replace('%0e', '04')
.replace('%00e', '004');
}
function loadPage(view, config) {
var tvOptions = config.TvOptions;
view.querySelector('#chkEnableTvSorting').checked = tvOptions.IsEnabled;
view.querySelector('#chkOverwriteExistingEpisodes').checked = tvOptions.OverwriteExistingEpisodes;
view.querySelector('#chkDeleteEmptyFolders').checked = tvOptions.DeleteEmptyFolders;
view.querySelector('#txtMinFileSize').value = tvOptions.MinFileSizeMb;
view.querySelector('#txtSeasonFolderPattern').value = tvOptions.SeasonFolderPattern;
view.querySelector('#txtSeasonZeroName').value = tvOptions.SeasonZeroFolderName;
view.querySelector('#txtWatchFolder').value = tvOptions.WatchLocations[0] || '';
view.querySelector('#txtEpisodePattern').value = tvOptions.EpisodeNamePattern;
view.querySelector('#txtMultiEpisodePattern').value = tvOptions.MultiEpisodeNamePattern;
view.querySelector('#txtDeleteLeftOverFiles').value = tvOptions.LeftOverFileExtensionsToDelete.join(';');
view.querySelector('#copyOrMoveFile').value = tvOptions.CopyOriginalFile.toString();
}
function onSubmit(view) {
ApiClient.getNamedConfiguration('autoorganize').then(function (config) {
var tvOptions = config.TvOptions;
tvOptions.IsEnabled = view.querySelector('#chkEnableTvSorting').checked;
tvOptions.OverwriteExistingEpisodes = view.querySelector('#chkOverwriteExistingEpisodes').checked;
tvOptions.DeleteEmptyFolders = view.querySelector('#chkDeleteEmptyFolders').checked;
tvOptions.MinFileSizeMb = view.querySelector('#txtMinFileSize').value;
tvOptions.SeasonFolderPattern = view.querySelector('#txtSeasonFolderPattern').value;
tvOptions.SeasonZeroFolderName = view.querySelector('#txtSeasonZeroName').value;
tvOptions.EpisodeNamePattern = view.querySelector('#txtEpisodePattern').value;
tvOptions.MultiEpisodeNamePattern = view.querySelector('#txtMultiEpisodePattern').value;
tvOptions.LeftOverFileExtensionsToDelete = view.querySelector('#txtDeleteLeftOverFiles').value.split(';');
var watchLocation = view.querySelector('#txtWatchFolder').value;
tvOptions.WatchLocations = watchLocation ? [watchLocation] : [];
tvOptions.CopyOriginalFile = view.querySelector('#copyOrMoveFile').value;
ApiClient.updateNamedConfiguration('autoorganize', config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse);
});
return false;
}
function getTabs() {
return [
{
href: 'autoorganizelog.html',
name: Globalize.translate('TabActivityLog')
},
{
href: 'autoorganizetv.html',
name: Globalize.translate('TabTV')
},
{
href: 'autoorganizesmart.html',
name: Globalize.translate('TabSmartMatches')
}];
}
return function (view, params) {
function updateSeasonPatternHelp() {
var value = view.querySelector('#txtSeasonFolderPattern').value;
value = value.replace('%s', '1').replace('%0s', '01').replace('%00s', '001');
var replacementHtmlResult = Globalize.translate('OrganizePatternResult').replace('{0}', value);
view.querySelector('.seasonFolderFieldDescription').innerHTML = replacementHtmlResult;
}
function updateEpisodePatternHelp() {
var value = view.querySelector('#txtEpisodePattern').value;
var fileName = getEpisodeFileName(value, false);
var replacementHtmlResult = Globalize.translate('OrganizePatternResult').replace('{0}', fileName);
view.querySelector('.episodePatternDescription').innerHTML = replacementHtmlResult;
}
function updateMultiEpisodePatternHelp() {
var value = view.querySelector('#txtMultiEpisodePattern').value;
var fileName = getEpisodeFileName(value, false);
var replacementHtmlResult = Globalize.translate('OrganizePatternResult').replace('{0}', fileName);
view.querySelector('.multiEpisodePatternDescription').innerHTML = replacementHtmlResult;
}
function selectWatchFolder(e) {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
view.querySelector('#txtWatchFolder').value = path;
}
picker.close();
},
header: Globalize.translate('HeaderSelectWatchFolder'),
instruction: Globalize.translate('HeaderSelectWatchFolderHelp')
});
});
}
view.querySelector('#txtSeasonFolderPattern').addEventListener('change', updateSeasonPatternHelp);
view.querySelector('#txtSeasonFolderPattern').addEventListener('keyup', updateSeasonPatternHelp);
view.querySelector('#txtEpisodePattern').addEventListener('change', updateEpisodePatternHelp);
view.querySelector('#txtEpisodePattern').addEventListener('keyup', updateEpisodePatternHelp);
view.querySelector('#txtMultiEpisodePattern').addEventListener('change', updateMultiEpisodePatternHelp);
view.querySelector('#txtMultiEpisodePattern').addEventListener('keyup', updateMultiEpisodePatternHelp);
view.querySelector('#btnSelectWatchFolder').addEventListener('click', selectWatchFolder);
view.querySelector('.libraryFileOrganizerForm').addEventListener('submit', function (e) {
e.preventDefault();
onSubmit(view);
return false;
});
view.addEventListener('viewshow', function (e) {
LibraryMenu.setTabs('autoorganize', 1, getTabs);
ApiClient.getNamedConfiguration('autoorganize').then(function (config) {
loadPage(view, config);
updateSeasonPatternHelp();
updateEpisodePatternHelp();
updateMultiEpisodePatternHelp();
});
});
};
});

View file

@ -0,0 +1,95 @@
define(['appSettings'], function (appSettings) {
function loadForm(page, user) {
var uploadServers = appSettings.cameraUploadServers();
page.querySelector('.uploadServerList').innerHTML = ConnectionManager.getSavedServers().map(function (s) {
var checkedHtml = uploadServers.indexOf(s.Id) == -1 ? '' : ' checked';
var html = '<label><input type="checkbox" is="emby-checkbox"' + checkedHtml + ' class="chkUploadServer" data-id="' + s.Id + '"/><span>' + s.Name + '</span></label>';
return html;
}).join('');
Dashboard.hideLoadingMsg();
}
function saveUser(page, user) {
var chkUploadServer = page.querySelectorAll('.chkUploadServer');
var cameraUploadServers = [];
for (var i = 0, length = chkUploadServer.length; i < length; i++) {
if (chkUploadServer[i].checked) {
cameraUploadServers.push(chkUploadServer[i].getAttribute('data-id'));
}
}
appSettings.cameraUploadServers(cameraUploadServers);
Dashboard.hideLoadingMsg();
require(['toast'], function (toast) {
toast(Globalize.translate('SettingsSaved'));
});
if (cameraUploadServers.length || syncPath) {
if (window.MainActivity) {
MainActivity.authorizeStorage();
}
}
}
return function (view, params) {
view.querySelector('form').addEventListener('submit', function (e) {
Dashboard.showLoadingMsg();
var userId = getParameterByName('userId') || Dashboard.getCurrentUserId();
ApiClient.getUser(userId).then(function (user) {
saveUser(view, user);
});
// Disable default form submission
e.preventDefault();
return false;
});
view.querySelector('#btnSelectSyncPath').addEventListener('click', function () {
require(['nativedirectorychooser'], function () {
NativeDirectoryChooser.chooseDirectory().then(function (path) {
if (path) {
view.querySelector('#txtSyncPath').value = path;
}
});
});
});
view.addEventListener('viewshow', function () {
var page = this;
Dashboard.showLoadingMsg();
var userId = getParameterByName('userId') || Dashboard.getCurrentUserId();
ApiClient.getUser(userId).then(function (user) {
loadForm(page, user);
});
if (AppInfo.supportsSyncPathSetting) {
page.querySelector('.fldSyncPath').classList.remove('hide');
} else {
page.querySelector('.fldSyncPath').classList.add('hide');
}
});
};
});

View file

@ -1,147 +0,0 @@
define(['jQuery'], function ($) {
function loadPage(page, config) {
$('.chkMovies', page).checked(config.EnableIntrosForMovies);
$('.chkEpisodes', page).checked(config.EnableIntrosForEpisodes);
$('.chkMyMovieTrailers', page).checked(config.EnableIntrosFromMoviesInLibrary);
$('.chkUpcomingTheaterTrailers', page).checked(config.EnableIntrosFromUpcomingTrailers);
$('.chkUpcomingDvdTrailers', page).checked(config.EnableIntrosFromUpcomingDvdMovies);
$('.chkUpcomingStreamingTrailers', page).checked(config.EnableIntrosFromUpcomingStreamingMovies);
$('.chkOtherTrailers', page).checked(config.EnableIntrosFromSimilarMovies);
$('.chkUnwatchedOnly', page).checked(!config.EnableIntrosForWatchedContent);
$('.chkEnableParentalControl', page).checked(config.EnableIntrosParentalControl);
$('#txtCustomIntrosPath', page).val(config.CustomIntroPath || '');
$('#txtCodecIntrosPath', page).val(config.MediaInfoIntroPath || '');
$('#txtNumTrailers', page).val(config.TrailerLimit);
Dashboard.hideLoadingMsg();
}
function onSubmit() {
Dashboard.showLoadingMsg();
var form = this;
var page = $(form).parents('.page');
ApiClient.getNamedConfiguration("cinemamode").then(function (config) {
config.CustomIntroPath = $('#txtCustomIntrosPath', page).val();
config.MediaInfoIntroPath = $('#txtCodecIntrosPath', page).val();
config.TrailerLimit = $('#txtNumTrailers', page).val();
config.EnableIntrosForMovies = $('.chkMovies', page).checked();
config.EnableIntrosForEpisodes = $('.chkEpisodes', page).checked();
config.EnableIntrosFromMoviesInLibrary = $('.chkMyMovieTrailers', page).checked();
config.EnableIntrosForWatchedContent = !$('.chkUnwatchedOnly', page).checked();
config.EnableIntrosParentalControl = $('.chkEnableParentalControl', page).checked();
config.EnableIntrosFromUpcomingTrailers = $('.chkUpcomingTheaterTrailers', page).checked();
config.EnableIntrosFromUpcomingDvdMovies = $('.chkUpcomingDvdTrailers', page).checked();
config.EnableIntrosFromUpcomingStreamingMovies = $('.chkUpcomingStreamingTrailers', page).checked();
config.EnableIntrosFromSimilarMovies = $('.chkOtherTrailers', page).checked();
ApiClient.updateNamedConfiguration("cinemamode", config).then(Dashboard.processServerConfigurationUpdateResult);
});
// Disable default form submission
return false;
}
function getTabs() {
return [
{
href: 'cinemamodeconfiguration.html',
name: Globalize.translate('TabCinemaMode')
},
{
href: 'playbackconfiguration.html',
name: Globalize.translate('TabResumeSettings')
},
{
href: 'streamingsettings.html',
name: Globalize.translate('TabStreaming')
},
{
href: 'encodingsettings.html',
name: Globalize.translate('TabTranscoding')
}];
}
$(document).on('pageinit', "#cinemaModeConfigurationPage", function () {
var page = this;
$('#btnSelectCustomIntrosPath', page).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
$('#txtCustomIntrosPath', page).val(path);
}
picker.close();
},
header: Globalize.translate('HeaderSelectCustomIntrosPath')
});
});
});
$('#btnSelectCodecIntrosPath', page).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
$('#txtCodecIntrosPath', page).val(path);
}
picker.close();
},
header: Globalize.translate('HeaderSelectCodecIntrosPath')
});
});
});
$('.cinemaModeConfigurationForm').off('submit', onSubmit).on('submit', onSubmit);
if (!AppInfo.enableSupporterMembership) {
page.querySelector('.lnkSupporterLearnMore').href = '#';
page.querySelector('.lnkSupporterLearnMore').addEventListener('click', function (e) {
e.preventDefault();
return false;
});
}
}).on('pageshow', "#cinemaModeConfigurationPage", function () {
LibraryMenu.setTabs('playback', 0, getTabs);
Dashboard.showLoadingMsg();
var page = this;
ApiClient.getNamedConfiguration("cinemamode").then(function (config) {
loadPage(page, config);
});
});
});

View file

@ -1,195 +0,0 @@
define(['jQuery'], function ($) {
var brandingConfigKey = "branding";
var currentBrandingOptions;
var currentLanguage;
function loadPage(page, config, languageOptions, systemInfo) {
var os = systemInfo.OperatingSystem.toLowerCase();
if (os.indexOf('windows') != -1) {
$('#windowsStartupDescription', page).show();
} else {
$('#windowsStartupDescription', page).hide();
}
if (systemInfo.SupportsAutoRunAtStartup) {
$('#fldRunAtStartup', page).show();
} else {
$('#fldRunAtStartup', page).hide();
}
page.querySelector('#txtServerName').value = config.ServerName || '';
page.querySelector('#txtCachePath').value = config.CachePath || '';
$('#selectLocalizationLanguage', page).html(languageOptions.map(function (l) {
return '<option value="' + l.Value + '">' + l.Name + '</option>';
})).val(config.UICulture);
currentLanguage = config.UICulture;
$('#chkUsageData', page).checked(config.EnableAnonymousUsageReporting);
$('#chkRunAtStartup', page).checked(config.RunAtStartup);
if (systemInfo.CanSelfUpdate) {
$('.fldAutomaticUpdates', page).show();
$('.lnlAutomaticUpdateLevel', page).html(Globalize.translate('LabelAutomaticUpdateLevel'));
} else {
$('.fldAutomaticUpdates', page).hide();
$('.lnlAutomaticUpdateLevel', page).html(Globalize.translate('LabelAutomaticUpdateLevelForPlugins'));
}
$('#chkEnableAutomaticServerUpdates', page).checked(config.EnableAutoUpdate);
$('#chkEnableAutomaticRestart', page).checked(config.EnableAutomaticRestart);
if (systemInfo.CanSelfRestart) {
$('#fldEnableAutomaticRestart', page).show();
} else {
$('#fldEnableAutomaticRestart', page).hide();
}
$('#selectAutomaticUpdateLevel', page).val(config.SystemUpdateLevel).trigger('change');
$('#chkEnableDashboardResponseCache', page).checked(config.EnableDashboardResponseCaching);
$('#chkEnableMinification', page).checked(config.EnableDashboardResourceMinification);
$('#txtDashboardSourcePath', page).val(config.DashboardSourcePath).trigger('change');
Dashboard.hideLoadingMsg();
}
function onSubmit() {
Dashboard.showLoadingMsg();
var form = this;
var page = $(form).parents('.page');
ApiClient.getServerConfiguration().then(function (config) {
config.ServerName = form.querySelector('#txtServerName').value;
config.UICulture = $('#selectLocalizationLanguage', form).val();
config.CachePath = form.querySelector('#txtCachePath').value;
var requiresReload = false;
if (config.UICulture != currentLanguage) {
requiresReload = true;
}
config.EnableAnonymousUsageReporting = $('#chkUsageData', form).checked();
config.RunAtStartup = $('#chkRunAtStartup', form).checked();
config.SystemUpdateLevel = $('#selectAutomaticUpdateLevel', form).val();
config.EnableAutomaticRestart = $('#chkEnableAutomaticRestart', form).checked();
config.EnableAutoUpdate = $('#chkEnableAutomaticServerUpdates', form).checked();
config.EnableDashboardResourceMinification = $('#chkEnableMinification', form).checked();
config.EnableDashboardResponseCaching = $('#chkEnableDashboardResponseCache', form).checked();
config.DashboardSourcePath = $('#txtDashboardSourcePath', form).val();
ApiClient.updateServerConfiguration(config).then(function () {
ApiClient.getNamedConfiguration(brandingConfigKey).then(function (brandingConfig) {
brandingConfig.LoginDisclaimer = form.querySelector('#txtLoginDisclaimer').value;
brandingConfig.CustomCss = form.querySelector('#txtCustomCss').value;
if (currentBrandingOptions && brandingConfig.CustomCss != currentBrandingOptions.CustomCss) {
requiresReload = true;
}
ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(Dashboard.processServerConfigurationUpdateResult);
if (requiresReload && !AppInfo.isNativeApp) {
window.location.reload(true);
}
});
});
});
// Disable default form submission
return false;
}
return function (view, params) {
$('#selectAutomaticUpdateLevel', view).on('change', function () {
if (this.value == "Dev") {
$('#devBuildWarning', view).show();
} else {
$('#devBuildWarning', view).hide();
}
});
$('#btnSelectCachePath', view).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
view.querySelector('#txtCachePath').value = path;
}
picker.close();
},
header: Globalize.translate('HeaderSelectServerCachePath'),
instruction: Globalize.translate('HeaderSelectServerCachePathHelp')
});
});
});
$('#btnSelectDashboardSourcePath', view).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
view.querySelector('#txtDashboardSourcePath').value = path;
}
picker.close();
}
});
});
});
$('.dashboardGeneralForm', view).off('submit', onSubmit).on('submit', onSubmit);
view.addEventListener('viewshow', function () {
var promise1 = ApiClient.getServerConfiguration();
var promise2 = ApiClient.getJSON(ApiClient.getUrl("Localization/Options"));
var promise3 = ApiClient.getSystemInfo();
Promise.all([promise1, promise2, promise3]).then(function (responses) {
loadPage(view, responses[0], responses[1], responses[2]);
});
ApiClient.getNamedConfiguration(brandingConfigKey).then(function (config) {
currentBrandingOptions = config;
view.querySelector('#txtLoginDisclaimer').value = config.LoginDisclaimer || '';
view.querySelector('#txtCustomCss').value = config.CustomCss || '';
});
});
};
});

View file

@ -1,138 +0,0 @@
define(['jQuery'], function ($) {
function onSubmit() {
var form = this;
var localAddress = form.querySelector('#txtLocalAddress').value;
var enableUpnp = $('#chkEnableUpnp', form).checked();
confirmSelections(localAddress, enableUpnp, function () {
Dashboard.showLoadingMsg();
ApiClient.getServerConfiguration().then(function (config) {
config.HttpServerPortNumber = $('#txtPortNumber', form).val();
config.PublicPort = $('#txtPublicPort', form).val();
config.PublicHttpsPort = $('#txtPublicHttpsPort', form).val();
config.EnableHttps = $('#chkEnableHttps', form).checked();
config.HttpsPortNumber = $('#txtHttpsPort', form).val();
config.EnableUPnP = enableUpnp;
config.WanDdns = $('#txtDdns', form).val();
config.CertificatePath = $('#txtCertificatePath', form).val();
config.LocalNetworkAddresses = localAddress ? [localAddress] : [];
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse);
});
});
// Disable default form submission
return false;
}
function confirmSelections(localAddress, enableUpnp, callback) {
if (localAddress || !enableUpnp) {
require(['alert'], function (alert) {
alert({
title: Globalize.translate('TitleHostingSettings'),
text: Globalize.translate('SettingsWarning')
}).then(callback);
});
} else {
callback();
}
}
function getTabs() {
return [
{
href: 'dashboardhosting.html',
name: Globalize.translate('TabHosting')
},
{
href: 'serversecurity.html',
name: Globalize.translate('TabSecurity')
}];
}
return function (view, params) {
var self = this;
function loadPage(page, config) {
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
$('#txtPublicPort', page).val(config.PublicPort);
$('#txtPublicHttpsPort', page).val(config.PublicHttpsPort);
page.querySelector('#txtLocalAddress').value = config.LocalNetworkAddresses[0] || '';
var chkEnableHttps = page.querySelector('#chkEnableHttps');
chkEnableHttps.checked = config.EnableHttps;
$('#txtHttpsPort', page).val(config.HttpsPortNumber);
$('#txtDdns', page).val(config.WanDdns || '');
var txtCertificatePath = page.querySelector('#txtCertificatePath');
txtCertificatePath.value = config.CertificatePath || '';
$('#chkEnableUpnp', page).checked(config.EnableUPnP);
onCertPathChange.call(txtCertificatePath);
Dashboard.hideLoadingMsg();
}
function onCertPathChange() {
if (this.value) {
view.querySelector('#txtDdns').setAttribute('required', 'required');
} else {
view.querySelector('#txtDdns').removeAttribute('required');
}
}
$('#btnSelectCertPath', view).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
includeFiles: true,
includeDirectories: true,
callback: function (path) {
if (path) {
$('#txtCertificatePath', view).val(path);
}
picker.close();
},
header: Globalize.translate('HeaderSelectCertificatePath')
});
});
});
$('.dashboardHostingForm').off('submit', onSubmit).on('submit', onSubmit);
view.querySelector('#txtCertificatePath').addEventListener('change', onCertPathChange);
view.addEventListener('viewshow', function (e) {
LibraryMenu.setTabs('adminadvanced', 0, getTabs);
Dashboard.showLoadingMsg();
ApiClient.getServerConfiguration().then(function (config) {
loadPage(view, config);
});
});
};
});

View file

@ -1,100 +0,0 @@
define(['jQuery'], function ($) {
function load(page, config) {
$('#txtUploadPath', page).val(config.CameraUploadPath || '');
$('#chkSubfolder', page).checked(config.EnableCameraUploadSubfolders);
}
function loadData(page) {
Dashboard.showLoadingMsg();
ApiClient.getNamedConfiguration("devices").then(function (config) {
load(page, config);
Dashboard.hideLoadingMsg();
});
}
function save(page) {
ApiClient.getNamedConfiguration("devices").then(function (config) {
config.CameraUploadPath = $('#txtUploadPath', page).val();
config.EnableCameraUploadSubfolders = $('#chkSubfolder', page).checked();
ApiClient.updateNamedConfiguration("devices", config).then(Dashboard.processServerConfigurationUpdateResult);
});
}
function onSubmit() {
var form = this;
var page = $(form).parents('.page');
save(page);
return false;
}
function getTabs() {
return [
{
href: 'syncactivity.html',
name: Globalize.translate('TabSyncJobs')
},
{
href: 'devicesupload.html',
name: Globalize.translate('TabCameraUpload')
},
{
href: 'appservices.html?context=sync',
name: Globalize.translate('TabServices')
},
{
href: 'syncsettings.html',
name: Globalize.translate('TabSettings')
}];
}
$(document).on('pageinit', "#devicesUploadPage", function () {
var page = this;
$('#btnSelectUploadPath', page).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
$('#txtUploadPath', page).val(path);
}
picker.close();
},
header: Globalize.translate('HeaderSelectUploadPath')
});
});
});
$('.devicesUploadForm').off('submit', onSubmit).on('submit', onSubmit);
}).on('pageshow', "#devicesUploadPage", function () {
LibraryMenu.setTabs('syncadmin', 1, getTabs);
var page = this;
loadData(page);
});
});

View file

@ -1,61 +0,0 @@
define(['globalize'], function (globalize) {
function getTabs() {
return [
{
href: 'library.html',
name: globalize.translate('TabFolders')
},
{
href: 'librarydisplay.html',
name: globalize.translate('TabDisplay')
},
{
href: 'librarypathmapping.html',
name: globalize.translate('TabPathSubstitution')
},
{
href: 'librarysettings.html',
name: globalize.translate('TabAdvanced')
}];
}
return function (view, params) {
var self = this;
view.querySelector('form').addEventListener('submit', function (e) {
Dashboard.showLoadingMsg();
var form = this;
ApiClient.getServerConfiguration().then(function (config) {
config.EnableFolderView = form.querySelector('.chkFolderView').checked;
config.EnableGroupingIntoCollections = form.querySelector('.chkGroupMoviesIntoCollections').checked;
config.DisplaySpecialsWithinSeasons = form.querySelector('.chkDisplaySpecialsWithinSeasons').checked;
config.DisplayCollectionsView = form.querySelector('.chkDisplayCollectionView').checked;
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
});
e.preventDefault();
return false;
});
function loadData() {
ApiClient.getServerConfiguration().then(function (config) {
view.querySelector('.chkFolderView').checked = config.EnableFolderView;
view.querySelector('.chkGroupMoviesIntoCollections').checked = config.EnableGroupingIntoCollections;
view.querySelector('.chkDisplaySpecialsWithinSeasons').checked = config.DisplaySpecialsWithinSeasons;
view.querySelector('.chkDisplayCollectionView').checked = config.DisplayCollectionsView;
});
}
view.addEventListener('viewshow', function () {
LibraryMenu.setTabs('librarysetup', 1, getTabs);
loadData();
});
};
});

View file

@ -1,212 +0,0 @@
define(['jQuery'], function ($) {
function loadPage(page, config) {
if (config.MergeMetadataAndImagesByName) {
$('.fldImagesByName', page).hide();
} else {
$('.fldImagesByName', page).show();
}
$('#txtSeasonZeroName', page).val(config.SeasonZeroDisplayName);
$('#selectEnableRealtimeMonitor', page).val(config.EnableLibraryMonitor);
$('#chkSaveMetadataHidden', page).checked(config.SaveMetadataHidden);
$('#txtMetadataPath', page).val(config.MetadataPath || '');
$('#chkPeopleActors', page).checked(config.PeopleMetadataOptions.DownloadActorMetadata);
$('#chkPeopleComposers', page).checked(config.PeopleMetadataOptions.DownloadComposerMetadata);
$('#chkPeopleDirectors', page).checked(config.PeopleMetadataOptions.DownloadDirectorMetadata);
$('#chkPeopleProducers', page).checked(config.PeopleMetadataOptions.DownloadProducerMetadata);
$('#chkPeopleWriters', page).checked(config.PeopleMetadataOptions.DownloadWriterMetadata);
$('#chkPeopleOthers', page).checked(config.PeopleMetadataOptions.DownloadOtherPeopleMetadata);
$('#chkPeopleGuestStars', page).checked(config.PeopleMetadataOptions.DownloadGuestStarMetadata);
Dashboard.hideLoadingMsg();
}
function loadMetadataConfig(page, config) {
$('#selectDateAdded', page).val((config.UseFileCreationTimeForDateAdded ? '1' : '0'));
}
function loadFanartConfig(page, config) {
$('#txtFanartApiKey', page).val(config.UserApiKey || '');
}
function loadChapters(page, config, providers) {
$('#chkChaptersMovies', page).checked(config.EnableMovieChapterImageExtraction);
$('#chkChaptersEpisodes', page).checked(config.EnableEpisodeChapterImageExtraction);
$('#chkChaptersOtherVideos', page).checked(config.EnableOtherVideoChapterImageExtraction);
$('#chkExtractChaptersDuringLibraryScan', page).checked(config.ExtractDuringLibraryScan);
Dashboard.hideLoadingMsg();
}
function saveFanart(form) {
ApiClient.getNamedConfiguration("fanart").then(function (config) {
config.UserApiKey = $('#txtFanartApiKey', form).val();
ApiClient.updateNamedConfiguration("fanart", config);
});
}
function saveMetadata(form) {
ApiClient.getNamedConfiguration("metadata").then(function (config) {
config.UseFileCreationTimeForDateAdded = $('#selectDateAdded', form).val() == '1';
ApiClient.updateNamedConfiguration("metadata", config);
});
}
function saveChapters(form) {
ApiClient.getNamedConfiguration("chapters").then(function (config) {
config.EnableMovieChapterImageExtraction = $('#chkChaptersMovies', form).checked();
config.EnableEpisodeChapterImageExtraction = $('#chkChaptersEpisodes', form).checked();
config.EnableOtherVideoChapterImageExtraction = $('#chkChaptersOtherVideos', form).checked();
config.ExtractDuringLibraryScan = $('#chkExtractChaptersDuringLibraryScan', form).checked();
ApiClient.updateNamedConfiguration("chapters", config);
});
}
function onSubmit() {
Dashboard.showLoadingMsg();
var form = this;
ApiClient.getServerConfiguration().then(function (config) {
config.SeasonZeroDisplayName = $('#txtSeasonZeroName', form).val();
config.EnableLibraryMonitor = $('#selectEnableRealtimeMonitor', form).val();
config.SaveMetadataHidden = $('#chkSaveMetadataHidden', form).checked();
config.EnableTvDbUpdates = $('#chkEnableTvdbUpdates', form).checked();
config.EnableTmdbUpdates = $('#chkEnableTmdbUpdates', form).checked();
config.EnableFanArtUpdates = $('#chkEnableFanartUpdates', form).checked();
config.MetadataPath = $('#txtMetadataPath', form).val();
config.FanartApiKey = $('#txtFanartApiKey', form).val();
config.PeopleMetadataOptions.DownloadActorMetadata = $('#chkPeopleActors', form).checked();
config.PeopleMetadataOptions.DownloadComposerMetadata = $('#chkPeopleComposers', form).checked();
config.PeopleMetadataOptions.DownloadDirectorMetadata = $('#chkPeopleDirectors', form).checked();
config.PeopleMetadataOptions.DownloadGuestStarMetadata = $('#chkPeopleGuestStars', form).checked();
config.PeopleMetadataOptions.DownloadProducerMetadata = $('#chkPeopleProducers', form).checked();
config.PeopleMetadataOptions.DownloadWriterMetadata = $('#chkPeopleWriters', form).checked();
config.PeopleMetadataOptions.DownloadOtherPeopleMetadata = $('#chkPeopleOthers', form).checked();
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
});
saveChapters(form);
saveMetadata(form);
saveFanart(form);
// Disable default form submission
return false;
}
function getTabs() {
return [
{
href: 'library.html',
name: Globalize.translate('TabFolders')
},
{
href: 'librarydisplay.html',
name: Globalize.translate('TabDisplay')
},
{
href: 'librarypathmapping.html',
name: Globalize.translate('TabPathSubstitution')
},
{
href: 'librarysettings.html',
name: Globalize.translate('TabAdvanced')
}];
}
return function (view, params) {
var self = this;
$('#btnSelectMetadataPath', view).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
callback: function (path) {
if (path) {
$('#txtMetadataPath', view).val(path);
}
picker.close();
},
header: Globalize.translate('HeaderSelectMetadataPath'),
instruction: Globalize.translate('HeaderSelectMetadataPathHelp')
});
});
});
$('.librarySettingsForm').off('submit', onSubmit).on('submit', onSubmit);
ApiClient.getSystemInfo().then(function (systemInfo) {
if (systemInfo.SupportsLibraryMonitor) {
view.querySelector('.fldLibraryMonitor').classList.remove('hide');
} else {
view.querySelector('.fldLibraryMonitor').classList.add('hide');
}
});
view.addEventListener('viewshow', function () {
LibraryMenu.setTabs('librarysetup', 3, getTabs);
Dashboard.showLoadingMsg();
var page = this;
ApiClient.getServerConfiguration().then(function (config) {
loadPage(page, config);
});
ApiClient.getNamedConfiguration("metadata").then(function (metadata) {
loadMetadataConfig(page, metadata);
});
ApiClient.getNamedConfiguration("fanart").then(function (metadata) {
loadFanartConfig(page, metadata);
});
var promise1 = ApiClient.getNamedConfiguration("chapters");
var promise2 = ApiClient.getJSON(ApiClient.getUrl("Providers/Chapters"));
Promise.all([promise1, promise2]).then(function (responses) {
loadChapters(page, responses[0], responses[1]);
});
});
};
});

View file

@ -1,135 +0,0 @@
define([], function () {
function reload(page, providerId) {
page.querySelector('.txtDevicePath').value = '';
if (providerId) {
ApiClient.getNamedConfiguration("livetv").then(function (config) {
var info = config.TunerHosts.filter(function (i) {
return i.Id == providerId;
})[0];
page.querySelector('.txtDevicePath').value = info.Url || '';
page.querySelector('.txtM3uUrl').value = info.M3UUrl || '';
page.querySelector('.chkEnabled').checked = info.IsEnabled;
});
}
}
function fillInfoFromPage(page, info) {
info.Url = page.querySelector('.txtDevicePath').value;
info.M3UUrl = page.querySelector('.txtM3uUrl').value;
info.IsEnabled = page.querySelector('.chkEnabled').checked;
info.DiseqC = page.querySelector('.selectDiseqC').value;
info.SourceA = page.querySelector('.selectSourceA').value;
info.SourceB = page.querySelector('.selectSourceB').value;
info.SourceC = page.querySelector('.selectSourceC').value;
info.SourceD = page.querySelector('.selectSourceD').value;
}
function submitTunerInfo(page, info) {
ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl('LiveTv/TunerHosts'),
data: JSON.stringify(info),
contentType: "application/json"
}).then(function () {
Dashboard.processServerConfigurationUpdateResult();
Dashboard.navigate('livetvstatus.html');
}, function () {
Dashboard.hideLoadingMsg();
Dashboard.alert({
message: Globalize.translate('ErrorSavingTvProvider')
});
});
}
function populateMappings(view) {
ApiClient.getJSON(ApiClient.getUrl('LiveTv/TunerHosts/Satip/IniMappings')).then(function (mappings) {
var optionsHtml = mappings.map(function (m) {
return '<option value="' + m.Value + '">' + m.Name + '</option>';
}).join('');
optionsHtml = '<option value="">' + Globalize.translate('OptionNone') + '</option>' + optionsHtml;
view.querySelector('.selectSourceA').innerHTML = optionsHtml;
view.querySelector('.selectSourceB').innerHTML = optionsHtml;
view.querySelector('.selectSourceC').innerHTML = optionsHtml;
view.querySelector('.selectSourceD').innerHTML = optionsHtml;
});
}
return function (view, params) {
function submitForm() {
Dashboard.showLoadingMsg();
var id = params.id;
if (id) {
ApiClient.getNamedConfiguration("livetv").then(function (config) {
var info = config.TunerHosts.filter(function (i) {
return i.Id == id;
})[0];
fillInfoFromPage(view, info);
submitTunerInfo(view, info);
});
} else {
var info = {
Type: 'satip'
};
fillInfoFromPage(view, info);
submitTunerInfo(view, info);
}
}
function onSelectDiseqCChange(e) {
var select = e.target;
var value = select.value;
if (value) {
view.querySelector('.fldSourceB').classList.remove('hide');
} else {
view.querySelector('.fldSourceB').classList.add('hide');
}
if (value == 'diseqc1') {
view.querySelector('.fldSourceC').classList.remove('hide');
view.querySelector('.fldSourceD').classList.remove('hide');
} else {
view.querySelector('.fldSourceC').classList.add('hide');
view.querySelector('.fldSourceD').classList.add('hide');
}
}
view.querySelector('form').addEventListener('submit', function (e) {
submitForm();
e.preventDefault();
return false;
});
view.querySelector('.selectDiseqC').addEventListener('change', onSelectDiseqCChange);
populateMappings(view);
view.addEventListener('viewshow', function (e) {
var providerId = params.id;
reload(view, providerId);
});
}
});

View file

@ -1,78 +0,0 @@
define(['datetime', 'listViewStyle'], function (datetime) {
return function (view, params) {
view.querySelector('#chkDebugLog').addEventListener('change', function () {
ApiClient.getServerConfiguration().then(function (config) {
config.EnableDebugLevelLogging = view.querySelector('#chkDebugLog').checked;
ApiClient.updateServerConfiguration(config);
});
});
view.addEventListener('viewbeforeshow', function () {
Dashboard.showLoadingMsg();
var apiClient = ApiClient;
apiClient.getJSON(apiClient.getUrl('System/Logs')).then(function (logs) {
var html = '';
html += '<div class="paperList">';
html += logs.map(function (log) {
var logUrl = apiClient.getUrl('System/Logs/Log', {
name: log.Name
});
logUrl += "&api_key=" + apiClient.accessToken();
var logHtml = '';
logHtml += '<div class="listItem">';
logHtml += '<a item-icon class="clearLink" href="' + logUrl + '" target="_blank">';
logHtml += '<i class="md-icon listItemIcon">schedule</i>';
logHtml += "</a>";
logHtml += '<div class="listItemBody two-line">';
logHtml += '<a class="clearLink" href="' + logUrl + '" target="_blank">';
logHtml += "<h3 class='listItemBodyText'>" + log.Name + "</h3>";
var date = datetime.parseISO8601Date(log.DateModified, true);
var text = date.toLocaleDateString();
text += ' ' + datetime.getDisplayTime(date);
logHtml += '<div class="listItemBodyText secondary">' + text + '</div>';
logHtml += "</a>";
logHtml += '</div>';
logHtml += '</div>';
return logHtml;
})
.join('');
html += '</div>';
view.querySelector('.serverLogs').innerHTML = html;
Dashboard.hideLoadingMsg();
});
apiClient.getServerConfiguration().then(function (config) {
view.querySelector('#chkDebugLog').checked = config.EnableDebugLevelLogging;
});
});
};
});

View file

@ -5,17 +5,6 @@
page.querySelector('#txtSyncPath').value = appSettings.syncPath() || '';
page.querySelector('#chkWifi').checked = appSettings.syncOnlyOnWifi();
var uploadServers = appSettings.cameraUploadServers();
page.querySelector('.uploadServerList').innerHTML = ConnectionManager.getSavedServers().map(function (s) {
var checkedHtml = uploadServers.indexOf(s.Id) == -1 ? '' : ' checked';
var html = '<label><input type="checkbox" is="emby-checkbox"' + checkedHtml + ' class="chkUploadServer" data-id="' + s.Id + '"/><span>' + s.Name + '</span></label>';
return html;
}).join('');
Dashboard.hideLoadingMsg();
}
@ -26,17 +15,6 @@
appSettings.syncPath(syncPath);
appSettings.syncOnlyOnWifi(page.querySelector('#chkWifi').checked);
var chkUploadServer = page.querySelectorAll('.chkUploadServer');
var cameraUploadServers = [];
for (var i = 0, length = chkUploadServer.length; i < length; i++) {
if (chkUploadServer[i].checked) {
cameraUploadServers.push(chkUploadServer[i].getAttribute('data-id'));
}
}
appSettings.cameraUploadServers(cameraUploadServers);
Dashboard.hideLoadingMsg();
require(['toast'], function (toast) {
toast(Globalize.translate('SettingsSaved'));

View file

@ -692,7 +692,7 @@ var Dashboard = {
// The native app can handle a little bit more than safari
if (AppInfo.isNativeApp) {
quality -= 5;
quality -= 10;
} else {
quality -= 20;
}
@ -1127,10 +1127,6 @@ var AppInfo = {};
elem.classList.add('supporterMembershipDisabled');
}
if (AppInfo.isNativeApp) {
elem.classList.add('nativeApp');
}
if (!AppInfo.enableHomeFavorites) {
elem.classList.add('homeFavoritesDisabled');
}
@ -1255,15 +1251,6 @@ var AppInfo = {};
webAnimations: bowerPath + '/web-animations-js/web-animations-next-lite.min'
};
if (navigator.webkitPersistentStorage) {
paths.imageFetcher = embyWebComponentsBowerPath + "/images/persistentimagefetcher";
paths.imageFetcher = embyWebComponentsBowerPath + "/images/basicimagefetcher";
} else if (Dashboard.isRunningInCordova()) {
paths.imageFetcher = 'cordova/imagestore';
} else {
paths.imageFetcher = embyWebComponentsBowerPath + "/images/basicimagefetcher";
}
paths.hlsjs = bowerPath + "/hls.js/dist/hls.min";
if ((window.chrome && window.chrome.sockets) || Dashboard.isRunningInCordova()) {
@ -1690,6 +1677,12 @@ var AppInfo = {};
var embyWebComponentsBowerPath = bowerPath + '/emby-webcomponents';
if (Dashboard.isRunningInCordova() && browser.safari) {
define("imageFetcher", ['cordova/ios/imagestore'], returnFirstDependency);
} else {
define("imageFetcher", [embyWebComponentsBowerPath + "/images/basicimagefetcher"], returnFirstDependency);
}
var preferNativeAlerts = browser.mobile || browser.tv || browser.xboxOne;
// use native alerts if preferred and supported (not supported in opera tv)
if (preferNativeAlerts && window.alert) {
@ -1737,9 +1730,9 @@ var AppInfo = {};
if (Dashboard.isRunningInCordova() && browserInfo.android) {
if (MainActivity.getChromeVersion() >= 48) {
define("audiorenderer", ["scripts/htmlmediarenderer"]);
//window.VlcAudio = true;
//define("audiorenderer", ["cordova/android/vlcplayer"]);
//define("audiorenderer", ["scripts/htmlmediarenderer"]);
window.VlcAudio = true;
define("audiorenderer", ["cordova/android/vlcplayer"]);
} else {
window.VlcAudio = true;
define("audiorenderer", ["cordova/android/vlcplayer"]);
@ -1892,7 +1885,7 @@ var AppInfo = {};
path: '/about.html',
dependencies: [],
autoFocus: false,
controller: 'scripts/aboutpage',
controller: 'dashboard/aboutpage',
roles: 'admin'
});
@ -1913,14 +1906,14 @@ var AppInfo = {};
defineRoute({
path: '/autoorganizelog.html',
dependencies: ['scripts/taskbutton', 'autoorganizetablecss'],
controller: 'scripts/autoorganizelog',
controller: 'dashboard/autoorganizelog',
roles: 'admin'
});
defineRoute({
path: '/autoorganizesmart.html',
dependencies: ['emby-button'],
controller: 'scripts/autoorganizesmart',
controller: 'dashboard/autoorganizesmart',
autoFocus: false,
roles: 'admin'
});
@ -1928,7 +1921,7 @@ var AppInfo = {};
defineRoute({
path: '/autoorganizetv.html',
dependencies: ['emby-checkbox', 'emby-input', 'emby-button', 'emby-select', 'emby-collapse'],
controller: 'scripts/autoorganizetv',
controller: 'dashboard/autoorganizetv',
autoFocus: false,
roles: 'admin'
});
@ -1980,7 +1973,7 @@ var AppInfo = {};
defineRoute({
path: '/dashboardgeneral.html',
dependencies: ['emby-collapse', 'emby-textarea', 'emby-input', 'paper-checkbox'],
controller: 'scripts/dashboardgeneral',
controller: 'dashboard/dashboardgeneral',
autoFocus: false,
roles: 'admin'
});
@ -1990,7 +1983,7 @@ var AppInfo = {};
dependencies: ['paper-checkbox', 'emby-input', 'emby-button'],
autoFocus: false,
roles: 'admin',
controller: 'scripts/dashboardhosting'
controller: 'dashboard/dashboardhosting'
});
defineRoute({
@ -2156,7 +2149,7 @@ var AppInfo = {};
dependencies: ['emby-button', 'paper-checkbox'],
autoFocus: false,
roles: 'admin',
controller: 'scripts/librarydisplay'
controller: 'dashboard/librarydisplay'
});
defineRoute({
@ -2171,7 +2164,7 @@ var AppInfo = {};
dependencies: ['emby-collapse', 'emby-input', 'paper-checkbox', 'emby-button', 'emby-select'],
autoFocus: false,
roles: 'admin',
controller: 'scripts/librarysettings'
controller: 'dashboard/librarysettings'
});
defineRoute({
@ -2240,14 +2233,14 @@ var AppInfo = {};
dependencies: ['emby-input', 'paper-checkbox'],
autoFocus: false,
roles: 'admin',
controller: 'scripts/livetvtunerprovider-satip'
controller: 'dashboard/livetvtunerprovider-satip'
});
defineRoute({
path: '/log.html',
dependencies: ['emby-checkbox'],
roles: 'admin',
controller: 'scripts/logpage'
controller: 'dashboard/logpage'
});
defineRoute({
@ -2356,6 +2349,14 @@ var AppInfo = {};
controller: 'scripts/mysync'
});
defineRoute({
path: '/camerauploadsettings.html',
dependencies: [],
autoFocus: false,
transition: 'fade',
controller: 'scripts/camerauploadsettings'
});
defineRoute({
path: '/mysyncjob.html',
dependencies: [],
@ -2596,7 +2597,7 @@ var AppInfo = {};
dependencies: ['dashboardcss', 'emby-button', 'emby-input', 'emby-select'],
autoFocus: false,
anonymous: true,
controller: 'scripts/wizardcomponents'
controller: 'dashboard/wizardcomponents'
});
defineRoute({
@ -2604,7 +2605,7 @@ var AppInfo = {};
dependencies: ['emby-button', 'dashboardcss'],
autoFocus: false,
anonymous: true,
controller: 'scripts/wizardfinishpage'
controller: 'dashboard/wizardfinishpage'
});
defineRoute({
@ -2707,7 +2708,6 @@ var AppInfo = {};
if (browserInfo.android) {
deps.push('cordova/android/androidcredentials');
deps.push('cordova/android/links');
}
}
@ -2781,14 +2781,8 @@ var AppInfo = {};
postInitDependencies.push('bower_components/emby-webcomponents/input/api');
if (!browserInfo.tv) {
if (navigator.serviceWorker) {
try {
navigator.serviceWorker.register('serviceworker.js');
} catch (err) {
console.log('Error registering serviceWorker: ' + err);
}
}
registerServiceWorker();
if (window.Notification) {
postInitDependencies.push('bower_components/emby-webcomponents/notifications/notifications');
}
@ -2800,6 +2794,24 @@ var AppInfo = {};
});
}
function registerServiceWorker() {
if (navigator.serviceWorker) {
try {
navigator.serviceWorker.register('serviceworker.js').then(function () {
return navigator.serviceWorker.ready;
}).then(function (reg) {
// https://github.com/WICG/BackgroundSync/blob/master/explainer.md
return reg.sync.register('emby-sync');
});
} catch (err) {
console.log('Error registering serviceWorker: ' + err);
}
}
}
function upgradeLayouts() {
if (!AppInfo.enableAppLayouts) {
Dashboard.getPluginSecurityInfo().then(function (info) {

View file

@ -1,142 +0,0 @@
define([], function () {
function goNext() {
require(['scripts/wizardcontroller'], function (wizardcontroller) {
wizardcontroller.navigateToService();
});
}
function loadDownloadInfo(view) {
var instructions = '';
ApiClient.getSystemInfo().then(function (systemInfo) {
if (systemInfo.OperatingSystem == 'Windows') {
view.querySelector('.fldSelectEncoderPathType').classList.add('hide');
} else {
view.querySelector('.fldSelectEncoderPathType').classList.remove('hide');
}
if (systemInfo.OperatingSystem == 'Windows' && systemInfo.SystemArchitecture != 'Arm') {
view.querySelector('.suggestedLocation').innerHTML = Globalize.translate('FFmpegSuggestedDownload', '<a target="_blank" href="https://ffmpeg.zeranoe.com/builds">https://ffmpeg.zeranoe.com</a>');
if (systemInfo.SystemArchitecture == 'X86') {
instructions = 'Download FFmpeg 32-Bit Static';
}
else if (systemInfo.SystemArchitecture == 'X64') {
instructions = 'Download FFmpeg 64-Bit Static';
}
} else if (systemInfo.OperatingSystem == 'Linux' && systemInfo.SystemArchitecture != 'Arm') {
view.querySelector('.suggestedLocation').innerHTML = Globalize.translate('FFmpegSuggestedDownload', '<a target="_blank" href="http://johnvansickle.com/ffmpeg">http://johnvansickle.com/ffmpeg</a>');
if (systemInfo.SystemArchitecture == 'X86') {
instructions = 'Download x86 build';
}
else if (systemInfo.SystemArchitecture == 'X64') {
instructions = 'Download x86_64 build';
}
} else if (systemInfo.OperatingSystem == 'Osx' && systemInfo.SystemArchitecture == 'X64') {
view.querySelector('.suggestedLocation').innerHTML = Globalize.translate('FFmpegSuggestedDownload', '<a target="_blank" href="http://evermeet.cx/ffmpeg">http://evermeet.cx/ffmpeg</a>');
instructions = 'Download both ffmpeg and ffprobe, and extract them to the same folder.';
} else {
view.querySelector('.suggestedLocation').innerHTML = Globalize.translate('FFmpegSuggestedDownload', '<a target="_blank" href="http://ffmpeg.org">https://ffmpeg.org/download.html</a>');
}
view.querySelector('.downloadInstructions').innerHTML = instructions;
var selectEncoderPath = view.querySelector('#selectEncoderPath');
selectEncoderPath.value = 'Custom';
onSelectEncoderPathChange.call(selectEncoderPath);
});
}
function onSaveEncodingPathFailure(response) {
var msg = '';
// This is a fallback that handles both 404 and 400 (no path entered)
msg = Globalize.translate('FFmpegSavePathNotFound');
require(['alert'], function (alert) {
alert(msg);
});
}
function parentWithClass(elem, className) {
while (!elem.classList || !elem.classList.contains(className)) {
elem = elem.parentNode;
if (!elem) {
return null;
}
}
return elem;
}
function onSelectEncoderPathChange(e) {
var page = parentWithClass(this, 'page');
if (this.value == 'Custom') {
page.querySelector('.fldEncoderPath').classList.remove('hide');
} else {
page.querySelector('.fldEncoderPath').classList.add('hide');
}
}
return function (view, params) {
view.querySelector('#btnSelectEncoderPath').addEventListener("click", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
includeFiles: true,
callback: function (path) {
if (path) {
view.querySelector('.txtEncoderPath').value = path;
}
picker.close();
}
});
});
});
view.querySelector('form').addEventListener('submit', function (e) {
var form = this;
ApiClient.ajax({
url: ApiClient.getUrl('System/MediaEncoder/Path'),
type: 'POST',
data: {
Path: form.querySelector('.txtEncoderPath').value,
PathType: 'Custom'
}
}).then(goNext, onSaveEncodingPathFailure);
e.preventDefault();
return false;
});
view.querySelector('#selectEncoderPath').addEventListener('change', onSelectEncoderPathChange);
view.addEventListener('viewbeforeshow', function (e) {
loadDownloadInfo(view);
});
};
});

View file

@ -1,26 +0,0 @@
define(['loading'], function (loading) {
function onFinish() {
loading.show();
ApiClient.ajax({
url: ApiClient.getUrl('Startup/Complete'),
type: 'POST'
}).then(function () {
Dashboard.navigate('dashboard.html');
loading.hide();
});
}
return function (view, params) {
var self = this;
view.querySelector('.btnWizardNext').addEventListener('click', onFinish);
};
});