mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-17 02:48:19 -07:00
Merge branch 'master' into remove_games
This commit is contained in:
commit
8d06ac275b
@ -18,6 +18,7 @@
|
||||
- [ViXXoR](https://github.com/ViXXoR)
|
||||
- [nkmerrill] (https://github.com/nkmerrill)
|
||||
- [TtheCreator] (https://github.com/Tthecreator)
|
||||
- [RazeLighter777](https://github.com/RazeLighter777)
|
||||
|
||||
# Emby Contributors
|
||||
|
||||
|
@ -1,219 +0,0 @@
|
||||
define(['globalize', 'apphost', 'loading', 'alert', 'emby-linkbutton'], function (globalize, appHost, loading, alert) {
|
||||
'use strict';
|
||||
|
||||
function resolvePromise() {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
function rejectPromise() {
|
||||
return Promise.reject();
|
||||
}
|
||||
|
||||
function showNewUserInviteMessage(result) {
|
||||
|
||||
if (!result.IsNewUserInvitation && !result.IsPending) {
|
||||
|
||||
// It was immediately approved
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var message = result.IsNewUserInvitation ?
|
||||
globalize.translate('sharedcomponents#MessageInvitationSentToNewUser', result.GuestDisplayName) :
|
||||
globalize.translate('sharedcomponents#MessageInvitationSentToUser', result.GuestDisplayName);
|
||||
|
||||
return alert({
|
||||
|
||||
text: message,
|
||||
title: globalize.translate('sharedcomponents#HeaderInvitationSent')
|
||||
|
||||
}).then(resolvePromise, resolvePromise);
|
||||
}
|
||||
|
||||
function inviteGuest(options) {
|
||||
|
||||
var apiClient = options.apiClient;
|
||||
|
||||
loading.show();
|
||||
|
||||
// Add/Update connect info
|
||||
return apiClient.ajax({
|
||||
|
||||
type: "POST",
|
||||
url: apiClient.getUrl('Connect/Invite'),
|
||||
dataType: 'json',
|
||||
data: options.guestOptions || {}
|
||||
|
||||
}).then(function (result) {
|
||||
|
||||
loading.hide();
|
||||
return showNewUserInviteMessage(result);
|
||||
|
||||
}, function (response) {
|
||||
|
||||
loading.hide();
|
||||
|
||||
var statusCode = response ? response.status : 0;
|
||||
|
||||
if (statusCode === 502) {
|
||||
return showConnectServerUnreachableErrorMessage().then(rejectPromise, rejectPromise);
|
||||
}
|
||||
else if (statusCode === 404) {
|
||||
// User doesn't exist
|
||||
return alert({
|
||||
text: globalize.translate('sharedcomponents#GuestUserNotFound')
|
||||
}).then(rejectPromise, rejectPromise);
|
||||
|
||||
} else if ((statusCode || 0) >= 500) {
|
||||
|
||||
// Unable to reach connect server ?
|
||||
return alert({
|
||||
text: globalize.translate('sharedcomponents#ErrorReachingEmbyConnect')
|
||||
}).then(rejectPromise, rejectPromise);
|
||||
|
||||
} else {
|
||||
|
||||
// status 400 = account not activated
|
||||
|
||||
// General error
|
||||
return showGuestGeneralErrorMessage().then(rejectPromise, rejectPromise);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function showGuestGeneralErrorMessage() {
|
||||
|
||||
var html;
|
||||
|
||||
if (appHost.supports('externallinks')) {
|
||||
html = globalize.translate('sharedcomponents#ErrorAddingGuestAccount1', '<a is="emby-linkbutton" class="button-link" href="https://emby.media/connect" target="_blank">https://emby.media/connect</a>');
|
||||
html += '<br/><br/>' + globalize.translate('sharedcomponents#ErrorAddingGuestAccount2', 'apps@emby.media');
|
||||
}
|
||||
|
||||
var text = globalize.translate('sharedcomponents#ErrorAddingGuestAccount1', 'https://emby.media/connect');
|
||||
text += '\n\n' + globalize.translate('sharedcomponents#ErrorAddingGuestAccount2', 'apps@emby.media');
|
||||
|
||||
return alert({
|
||||
text: text,
|
||||
html: html
|
||||
});
|
||||
}
|
||||
|
||||
function showConnectServerUnreachableErrorMessage() {
|
||||
|
||||
var text = globalize.translate('sharedcomponents#ErrorConnectServerUnreachable', 'https://connect.emby.media');
|
||||
|
||||
return alert({
|
||||
text: text
|
||||
});
|
||||
}
|
||||
|
||||
function showLinkUserErrorMessage(username, statusCode) {
|
||||
|
||||
var html;
|
||||
var text;
|
||||
|
||||
if (statusCode === 502) {
|
||||
return showConnectServerUnreachableErrorMessage();
|
||||
}
|
||||
else if (username) {
|
||||
|
||||
if (appHost.supports('externallinks')) {
|
||||
html = globalize.translate('sharedcomponents#ErrorAddingEmbyConnectAccount1', '<a is="emby-linkbutton" class="button-link" href="https://emby.media/connect" target="_blank">https://emby.media/connect</a>');
|
||||
html += '<br/><br/>' + globalize.translate('sharedcomponents#ErrorAddingEmbyConnectAccount2', 'apps@emby.media');
|
||||
}
|
||||
|
||||
text = globalize.translate('sharedcomponents#ErrorAddingEmbyConnectAccount1', 'https://emby.media/connect');
|
||||
text += '\n\n' + globalize.translate('sharedcomponents#ErrorAddingEmbyConnectAccount2', 'apps@emby.media');
|
||||
|
||||
} else {
|
||||
html = text = globalize.translate('sharedcomponents#DefaultErrorMessage');
|
||||
}
|
||||
|
||||
return alert({
|
||||
text: text,
|
||||
html: html
|
||||
});
|
||||
}
|
||||
|
||||
function updateUserLink(apiClient, user, newConnectUsername) {
|
||||
var currentConnectUsername = user.ConnectUserName || '';
|
||||
var enteredConnectUsername = newConnectUsername;
|
||||
|
||||
var linkUrl = apiClient.getUrl('Users/' + user.Id + '/Connect/Link');
|
||||
|
||||
if (currentConnectUsername && !enteredConnectUsername) {
|
||||
|
||||
// Remove connect info
|
||||
// Add/Update connect info
|
||||
return apiClient.ajax({
|
||||
|
||||
type: "DELETE",
|
||||
url: linkUrl
|
||||
|
||||
}).then(function () {
|
||||
|
||||
return alert({
|
||||
text: globalize.translate('sharedcomponents#MessageEmbyAccontRemoved'),
|
||||
title: globalize.translate('sharedcomponents#HeaderEmbyAccountRemoved'),
|
||||
|
||||
}).catch(resolvePromise);
|
||||
|
||||
}, function (response) {
|
||||
|
||||
var statusCode = response ? response.status : 0;
|
||||
|
||||
if (statusCode === 502) {
|
||||
return showConnectServerUnreachableErrorMessage().then(rejectPromise);
|
||||
}
|
||||
|
||||
return alert({
|
||||
text: globalize.translate('sharedcomponents#ErrorRemovingEmbyConnectAccount')
|
||||
|
||||
}).then(rejectPromise);
|
||||
});
|
||||
|
||||
}
|
||||
else if (currentConnectUsername !== enteredConnectUsername) {
|
||||
|
||||
// Add/Update connect info
|
||||
return apiClient.ajax({
|
||||
type: "POST",
|
||||
url: linkUrl,
|
||||
data: {
|
||||
ConnectUsername: enteredConnectUsername
|
||||
},
|
||||
dataType: 'json'
|
||||
|
||||
}).then(function (result) {
|
||||
|
||||
var msgKey = result.IsPending ? 'sharedcomponents#MessagePendingEmbyAccountAdded' : 'sharedcomponents#MessageEmbyAccountAdded';
|
||||
|
||||
return alert({
|
||||
text: globalize.translate(msgKey),
|
||||
title: globalize.translate('sharedcomponents#HeaderEmbyAccountAdded'),
|
||||
|
||||
}).catch(resolvePromise);
|
||||
|
||||
}, function (response) {
|
||||
|
||||
var statusCode = response ? response.status : 0;
|
||||
|
||||
if (statusCode === 502) {
|
||||
return showConnectServerUnreachableErrorMessage().then(rejectPromise);
|
||||
}
|
||||
|
||||
return showLinkUserErrorMessage('.', statusCode).then(rejectPromise);
|
||||
});
|
||||
|
||||
} else {
|
||||
return Promise.reject();
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
inviteGuest: inviteGuest,
|
||||
updateUserLink: updateUserLink,
|
||||
showLinkUserErrorMessage: showLinkUserErrorMessage,
|
||||
showConnectServerUnreachableErrorMessage: showConnectServerUnreachableErrorMessage
|
||||
};
|
||||
});
|
@ -211,11 +211,11 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
|
||||
}
|
||||
|
||||
if (user.Policy.EnableContentDownloading && appHost.supports('filedownload')) {
|
||||
//items.push({
|
||||
// name: Globalize.translate('ButtonDownload'),
|
||||
// id: 'download',
|
||||
// ironIcon: 'file-download'
|
||||
//});
|
||||
menuItems.push({
|
||||
name: Globalize.translate('ButtonDownload'),
|
||||
id: 'download',
|
||||
ironIcon: 'file-download'
|
||||
});
|
||||
}
|
||||
|
||||
if (user.Policy.EnableContentDownloading && appHost.supports('sync')) {
|
||||
@ -629,4 +629,4 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
|
||||
});
|
||||
};
|
||||
};
|
||||
});
|
||||
});
|
||||
|
@ -1,21 +1,12 @@
|
||||
{
|
||||
"AndroidUnlockRestoreHelp": "To restore your previous purchase, please ensure you're signed into the device with the same Google (or Amazon) account that originally made the purchase. Make sure the app store is enabled and not restricted by any parental controls, and ensure you have an active Internet connection. You'll only have to do this once to restore your previous purchase.",
|
||||
"CinemaModeConfigurationHelp": "Cinema mode brings the theatre experience straight to your living room with the ability to play trailers and custom intros before the main feature.",
|
||||
"ColorPrimaries": "Colour primaries",
|
||||
"ColorSpace": "Colour space",
|
||||
"ColorTransfer": "Colour transfer",
|
||||
"EnableColorCodedBackgrounds": "Enable colour-coded backgrounds",
|
||||
"ErrorAddingGuestAccount2": "If you're still having an issue, please send an e-mail to {0}, and include your e-mail address as well as theirs.",
|
||||
"ErrorAddingJellyfinConnectAccount2": "If you're still having an issue, please send an e-mail to {0} from the e-mail address used with the Jellyfin account.",
|
||||
"ErrorConnectServerUnreachable": "There was an error performing the requested operation. Your server is unable to contact our Jellyfin Connect Server at {0}. Please ensure your server has an active Internet connection and that the communications are being allowed by any firewall or security software you have installed.",
|
||||
"ErrorReachingJellyfinConnect": "There was an error reaching the Jellyfin Connect server. Please ensure you have an active Internet connection and try again.",
|
||||
"ErrorRemovingJellyfinConnectAccount": "There was an error removing the Jellyfin Connect account. Please ensure you have an active Internet connection and try again.",
|
||||
"Favorite": "Favourite",
|
||||
"Favorites": "Favourites",
|
||||
"GuestUserNotFound": "User not found. Please ensure the name is correct and try again. Alternatively, try entering their e-mail address.",
|
||||
"HDPrograms": "HD programmes",
|
||||
"HeaderEnabledFieldsHelp": "Untick a field to lock it and prevent its data from being changed.",
|
||||
"HeaderExternalIds": "External IDs:",
|
||||
"HeaderFavoriteAlbums": "Favourite Albums",
|
||||
"HeaderFavoriteArtists": "Favourite Artists",
|
||||
"HeaderFavoriteCollections": "Favourite Collections",
|
||||
@ -25,23 +16,12 @@
|
||||
"HeaderFavoriteShows": "Favourite Shows",
|
||||
"HeaderFavoriteSongs": "Favourite Songs",
|
||||
"HeaderFavoriteVideos": "Favourite Videos",
|
||||
"HeaderWaitingForWifi": "Waiting for Wi-Fi",
|
||||
"LabelDateTimeLocale": "Date/time locale:",
|
||||
"LabelSelectFolderGroupsHelp": "Folders that are unticked will be displayed by themselves in their own view.",
|
||||
"LabelTextBackgroundColor": "Text background colour:",
|
||||
"LabelTextColor": "Text colour:",
|
||||
"LabelWindowBackgroundColor": "Text background colour:",
|
||||
"LabelYear": "Year",
|
||||
"MessageInvitationSentToNewUser": "An email has been sent to {0}, inviting them to sign up with Jellyfin.",
|
||||
"MessagePendingJellyfinAccountAdded": "The Jellyfin account has been added to this user. An e-mail will be sent to the owner of the account. The invitation will need to be confirmed by clicking a link within the e-mail.",
|
||||
"MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognise that command.",
|
||||
"NewCollectionHelp": "Collections allow you to create personalised groupings of movies and other library content.",
|
||||
"PlaceFavoriteChannelsAtBeginning": "Place favourite channels at the beginning",
|
||||
"PlaybackErrorNotAllowed": "You're currently not authorised to play this content. Please contact your system administrator for details.",
|
||||
"PleaseEnterNameOrId": "Please enter a name or an external ID.",
|
||||
"Programs": "Programmes",
|
||||
"SeriesDisplayOrderHelp": "Order episodes by air date, DVD order, or absolute numbering.",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "These settings will not apply to graphical subtitles (PGS, DVD, etc.) or subtitles that have their own styles embedded (ASS/SSA).",
|
||||
"SyncUnwatchedVideosOnlyHelp": "Only unwatched videos will be downloaded and videos will be removed from the device as they are watched.",
|
||||
"WifiRequiredToDownload": "A Wi-Fi connection is required to continue downloading.",
|
||||
"Programs": "Programmes"
|
||||
}
|
||||
|
@ -1,58 +0,0 @@
|
||||
define(["dialogHelper", "loading", "require", "emby-input", "emby-button", "emby-checkbox", "paper-icon-button-light", "formDialogStyle", "emby-linkbutton"], function(dialogHelper, loading, require) {
|
||||
"use strict";
|
||||
|
||||
function renderLibrarySharingList(context, result) {
|
||||
var folderHtml = "";
|
||||
folderHtml += result.Items.map(function(i) {
|
||||
var currentHtml = "";
|
||||
return currentHtml += '<label><input is="emby-checkbox" class="chkShareFolder" type="checkbox" data-folderid="' + i.Id + '" checked="checked"/><span>' + i.Name + "</span></label>"
|
||||
}).join(""), context.querySelector(".librarySharingList").innerHTML = folderHtml
|
||||
}
|
||||
|
||||
function inviteUser(dlg) {
|
||||
loading.show();
|
||||
var shareExcludes = Array.prototype.filter.call(dlg.querySelectorAll(".chkShareFolder"), function(i) {
|
||||
return i.checked
|
||||
}).map(function(i) {
|
||||
return i.getAttribute("data-folderid")
|
||||
});
|
||||
require(["connectHelper"], function(connectHelper) {
|
||||
connectHelper.inviteGuest({
|
||||
apiClient: ApiClient,
|
||||
guestOptions: {
|
||||
ConnectUsername: dlg.querySelector("#txtConnectUsername").value,
|
||||
EnabledLibraries: shareExcludes.join(","),
|
||||
SendingUserId: Dashboard.getCurrentUserId(),
|
||||
EnableLiveTv: !1
|
||||
}
|
||||
}).then(function() {
|
||||
loading.hide(), dlg.submitted = !0, dialogHelper.close(dlg)
|
||||
})
|
||||
})
|
||||
}
|
||||
return {
|
||||
show: function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["text!./guestinviter.template.html"], function(template) {
|
||||
var dlg = dialogHelper.createDialog({
|
||||
removeOnClose: !0,
|
||||
size: "small"
|
||||
});
|
||||
dlg.classList.add("ui-body-a"), dlg.classList.add("background-theme-a"), dlg.classList.add("formDialog");
|
||||
var html = "";
|
||||
html += Globalize.translateDocument(template), dlg.innerHTML = html, dialogHelper.open(dlg), dlg.addEventListener("close", function() {
|
||||
dlg.submitted ? resolve() : reject()
|
||||
}), dlg.querySelector(".btnCancel").addEventListener("click", function(e) {
|
||||
dialogHelper.close(dlg)
|
||||
}), dlg.querySelector("form").addEventListener("submit", function(e) {
|
||||
return inviteUser(dlg), e.preventDefault(), !1
|
||||
}), ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
|
||||
IsHidden: !1
|
||||
})).then(function(result) {
|
||||
renderLibrarySharingList(dlg, result)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
@ -1,36 +0,0 @@
|
||||
<div class="formDialogHeader">
|
||||
<button is="paper-icon-button-light" class="btnCancel autoSize" tabindex="-1">
|
||||
<i class="md-icon"></i>
|
||||
</button>
|
||||
<h3 class="formDialogHeaderTitle">
|
||||
${HeaderInviteUser}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="formDialogContent scrollY">
|
||||
<div class="dialogContentInner dialog-content-centered">
|
||||
<form class="addUserForm" style="max-width: none;margin:1em 0 0;">
|
||||
|
||||
<div class="inputContainer">
|
||||
<input is="emby-input" type="text" id="txtConnectUsername" value="" label="${LabelConnectGuestUserName}" required />
|
||||
<div class="fieldDescription">
|
||||
<div>${LabelConnectGuestUserNameHelp}</div>
|
||||
<div style="margin-top: .25em;"><a is="emby-linkbutton" class="button-link" href="https://github.com/jellyfin/jellyfin" target="_blank">${ButtonLearnMoreAboutEmbyConnect}</a></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="checkboxListLabel">${HeaderShareMediaFolders}</h3>
|
||||
<div class="librarySharingList checkboxList paperList checkboxList-paperList">
|
||||
|
||||
</div>
|
||||
|
||||
<p class="fieldDescription" style="margin-top:.5em;">${MessageGuestSharingPermissionsHelp}</p>
|
||||
<br />
|
||||
|
||||
<div class="formDialogFooter">
|
||||
<button is="emby-button" type="submit" class="raised button-submit block formDialogFooterItem">
|
||||
<span>${ButtonSendInvitation}</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
@ -28,7 +28,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, l
|
||||
IsHidden: !1
|
||||
})).then(function(folders) {
|
||||
loadDeleteFolders(page, user, folders.Items)
|
||||
}), user.Policy.IsDisabled ? $(".disabledUserBanner", page).show() : $(".disabledUserBanner", page).hide(), "Guest" == user.ConnectLinkType ? ($("#fldConnectInfo", page).hide(), $("#txtUserName", page).prop("disabled", "disabled")) : ($("#txtUserName", page).prop("disabled", "").removeAttr("disabled"), $("#fldConnectInfo", page).show()), $(".lnkEditUserPreferences", page).attr("href", "mypreferencesmenu.html?userId=" + user.Id), libraryMenu.setTitle(user.Name), page.querySelector(".username").innerHTML = user.Name, $("#txtUserName", page).val(user.Name), $("#txtConnectUserName", page).val(currentUser.ConnectUserName), $("#chkIsAdmin", page).checked(user.Policy.IsAdministrator), $("#chkDisabled", page).checked(user.Policy.IsDisabled), $("#chkIsHidden", page).checked(user.Policy.IsHidden), $("#chkRemoteControlSharedDevices", page).checked(user.Policy.EnableSharedDeviceControl), $("#chkEnableRemoteControlOtherUsers", page).checked(user.Policy.EnableRemoteControlOfOtherUsers), $("#chkEnableDownloading", page).checked(user.Policy.EnableContentDownloading), $("#chkManageLiveTv", page).checked(user.Policy.EnableLiveTvManagement), $("#chkEnableLiveTvAccess", page).checked(user.Policy.EnableLiveTvAccess), $("#chkEnableMediaPlayback", page).checked(user.Policy.EnableMediaPlayback), $("#chkEnableAudioPlaybackTranscoding", page).checked(user.Policy.EnableAudioPlaybackTranscoding), $("#chkEnableVideoPlaybackTranscoding", page).checked(user.Policy.EnableVideoPlaybackTranscoding), $("#chkEnableVideoPlaybackRemuxing", page).checked(user.Policy.EnablePlaybackRemuxing), $("#chkRemoteAccess", page).checked(null == user.Policy.EnableRemoteAccess || user.Policy.EnableRemoteAccess), $("#chkEnableSyncTranscoding", page).checked(user.Policy.EnableSyncTranscoding), $("#chkEnableConversion", page).checked(user.Policy.EnableMediaConversion || !1), $("#chkEnableSharing", page).checked(user.Policy.EnablePublicSharing), $("#txtRemoteClientBitrateLimit", page).val(user.Policy.RemoteClientBitrateLimit / 1e6 || ""), loading.hide()
|
||||
}), user.Policy.IsDisabled ? $(".disabledUserBanner", page).show() : $(".disabledUserBanner", page).hide(), "Guest" == user.ConnectLinkType ? ($("#fldConnectInfo", page).hide(), $("#txtUserName", page).prop("disabled", "disabled")) : ($("#txtUserName", page).prop("disabled", "").removeAttr("disabled"), $("#fldConnectInfo", page).show()), $(".lnkEditUserPreferences", page).attr("href", "mypreferencesmenu.html?userId=" + user.Id), libraryMenu.setTitle(user.Name), page.querySelector(".username").innerHTML = user.Name, $("#txtUserName", page).val(user.Name), $("#chkIsAdmin", page).checked(user.Policy.IsAdministrator), $("#chkDisabled", page).checked(user.Policy.IsDisabled), $("#chkIsHidden", page).checked(user.Policy.IsHidden), $("#chkRemoteControlSharedDevices", page).checked(user.Policy.EnableSharedDeviceControl), $("#chkEnableRemoteControlOtherUsers", page).checked(user.Policy.EnableRemoteControlOfOtherUsers), $("#chkEnableDownloading", page).checked(user.Policy.EnableContentDownloading), $("#chkManageLiveTv", page).checked(user.Policy.EnableLiveTvManagement), $("#chkEnableLiveTvAccess", page).checked(user.Policy.EnableLiveTvAccess), $("#chkEnableMediaPlayback", page).checked(user.Policy.EnableMediaPlayback), $("#chkEnableAudioPlaybackTranscoding", page).checked(user.Policy.EnableAudioPlaybackTranscoding), $("#chkEnableVideoPlaybackTranscoding", page).checked(user.Policy.EnableVideoPlaybackTranscoding), $("#chkEnableVideoPlaybackRemuxing", page).checked(user.Policy.EnablePlaybackRemuxing), $("#chkRemoteAccess", page).checked(null == user.Policy.EnableRemoteAccess || user.Policy.EnableRemoteAccess), $("#chkEnableSyncTranscoding", page).checked(user.Policy.EnableSyncTranscoding), $("#chkEnableConversion", page).checked(user.Policy.EnableMediaConversion || !1), $("#chkEnableSharing", page).checked(user.Policy.EnablePublicSharing), $("#txtRemoteClientBitrateLimit", page).val(user.Policy.RemoteClientBitrateLimit / 1e6 || ""), loading.hide()
|
||||
}
|
||||
|
||||
function onSaveComplete(page, user) {
|
||||
|
@ -26,17 +26,26 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||
apiClient.ajax({
|
||||
type: "POST",
|
||||
data: {
|
||||
Name: form.querySelector("#txtUsername").value
|
||||
Name: form.querySelector("#txtUsername").value,
|
||||
Password: form.querySelector("#txtManualPassword").value
|
||||
},
|
||||
url: apiClient.getUrl("Startup/User"),
|
||||
dataType: "json"
|
||||
url: apiClient.getUrl("Startup/User")
|
||||
}).then(onUpdateUserComplete, function(response) {
|
||||
response && response.status;
|
||||
console.log(response);
|
||||
})
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
return submit(this), e.preventDefault(), !1
|
||||
var form = this;
|
||||
if (form.querySelector("#txtManualPassword").value != form.querySelector("#txtPasswordConfirm").value) {
|
||||
require(["toast"], function(toast) {
|
||||
toast(Globalize.translate("PasswordMatchError"));
|
||||
});
|
||||
} else {
|
||||
submit(form);
|
||||
}
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
function onViewShow() {
|
||||
@ -44,7 +53,9 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||
var page = this,
|
||||
apiClient = getApiClient();
|
||||
apiClient.getJSON(apiClient.getUrl("Startup/User")).then(function(user) {
|
||||
page.querySelector("#txtUsername").value = user.Name || "", loading.hide()
|
||||
page.querySelector("#txtUsername").value = user.Name || "";
|
||||
page.querySelector("#txtManualPassword").value = user.Password || "";
|
||||
loading.hide();
|
||||
})
|
||||
}
|
||||
return function(view, params) {
|
||||
|
@ -1,25 +1,9 @@
|
||||
{
|
||||
"AdditionalNotificationServices": "Browse the plugin catalogue to install additional notification services.",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Embedded subtitles can be extracted from videos and delivered to Jellyfin apps in plain text in order to help prevent video transcoding. On some systems, this can take a long time and cause video playback to stall during the extraction process. Disable this to have embedded subtitles burned in with video transcoding when they are not natively supported by the client device.",
|
||||
"AllowRemoteAccessHelp": "If unticked, all remote connections will be blocked.",
|
||||
"BrowsePluginCatalogMessage": "Browse our plugin catalogue to view available plugins.",
|
||||
"ButtonConfigurePinCode": "Configure PIN code",
|
||||
"ButtonResetEasyPassword": "Reset easy PIN code",
|
||||
"ButtonSignOut": "Sign out",
|
||||
"DefaultCameraUploadPathHelp": "Select a custom upload path. If left blank, a default folder will be used. If using a custom path, it will also need to be added as a library in Jellyfin library setup.",
|
||||
"DefaultMetadataLangaugeDescription": "These are your defaults and can be customised on a per-library basis.",
|
||||
"EasyPasswordHelp": "Your easy PIN code is used for offline access with supported Jellyfin apps, and can also be used for easy in-network sign in.",
|
||||
"ErrorAddingJellyfinConnectAccount2": "If you're still having a problem, please send an e-mail to {0}.",
|
||||
"ErrorGettingTvLineups": "There was an error downloading TV lineups. Please ensure your information is correct and try again.",
|
||||
"ExtractChapterImagesHelp": "Extracting chapter images will allow Jellyfin apps to display graphical scene selection menus. The process can be slow, CPU-intensive and may require several gigabytes of space. It runs when videos are discovered, and also as a nightly scheduled task. The schedule is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.",
|
||||
"FileReadCancelled": "The file read has been cancelled.",
|
||||
"HeaderApiKey": "API Key",
|
||||
"HeaderApiKeys": "API Keys",
|
||||
"HeaderApiKeysHelp": "External applications are required to have an API key in order to communicate with Jellyfin Server. Keys are issued by logging in with an Jellyfin account, or by manually granting the application a key.",
|
||||
"HeaderBlockItemsWithNoRating": "Block items with no or unrecognised rating information:",
|
||||
"HeaderBrandingHelp": "Customise the appearance of Jellyfin to fit the needs of your group or organisation.",
|
||||
"HeaderConfirmRevokeApiKey": "Revoke API Key",
|
||||
"HeaderEasyPinCode": "Easy PIN Code",
|
||||
"HeaderFavoriteAlbums": "Favourite Albums",
|
||||
"HeaderFavoriteArtists": "Favourite Artists",
|
||||
"HeaderFavoriteEpisodes": "Favourite Episodes",
|
||||
@ -27,91 +11,24 @@
|
||||
"HeaderFavoriteShows": "Favourite Shows",
|
||||
"HeaderFavoriteSongs": "Favourite Songs",
|
||||
"HeaderFavoriteVideos": "Favourite Videos",
|
||||
"HeaderHttpHeaders": "HTTP Headers",
|
||||
"HeaderNewApiKey": "New API Key",
|
||||
"HeaderPinCodeReset": "Reset PIN Code",
|
||||
"HeaderResponseProfileHelp": "Response profiles provide a way to customise information sent to the device when playing certain kinds of media.",
|
||||
"HeaderToAccessPleaseEnterEasyPinCode": "To access, please enter your easy PIN code",
|
||||
"HttpsRequiresCert": "To enable HTTPS for external connections, you will need to supply a trusted SSL certificate, such as Let's Encrypt.",
|
||||
"ImportFavoriteChannelsHelp": "If enabled, only channels that are marked as favourite on the tuner device will be imported.",
|
||||
"InviteAnJellyfinConnectUser": "Add a user by sending an e-mail invitation.",
|
||||
"JellyfinIntroDownloadMessage": "To download and install the free Jellyfin Server, visit {0}.",
|
||||
"JellyfinIntroDownloadMessageWithoutLink": "To download and install the free Jellyfin Server, visit the Jellyfin website.",
|
||||
"LabelBindToLocalNetworkAddressHelp": "Optional. Override the local IP address to bind the HTTP server to. If left empty, the server will bind to all available addresses. Changing this value requires restarting Jellyfin Server.",
|
||||
"LabelCameraUploadPathHelp": "Select a custom upload path. This will override any default settings set in the Camera Upload section. If left blank, a default folder will be used. If using a custom path, it will also need to be added as a library in Jellyfin library setup.",
|
||||
"LabelConnectGuestUserName": "Their Jellyfin Connect e-mail address or user name:",
|
||||
"LabelCustomCertificatePath": "Custom SSL certificate path:",
|
||||
"LabelCustomizeOptionsPerMediaType": "Customise for media type:",
|
||||
"LabelDateAddedBehavior": "Date added behaviour for new content:",
|
||||
"LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within series",
|
||||
"LabelEasyPinCode": "Easy PIN code:",
|
||||
"LabelEnableDlnaServer": "Enable DLNA server",
|
||||
"LabelEnableThisTunerHelp": "Untick to prevent importing channels from this tuner.",
|
||||
"LabelExternalDDNSHelp": "If you have a dynamic DNS, enter it here. Jellyfin apps will use it when connecting remotely. This field is required when used with a custom SSL certificate. Example: mydomain.com.",
|
||||
"LabelFanartApiKey": "Personal API key:",
|
||||
"LabelFileOrUrl": "File or URL:",
|
||||
"LabelH264Crf": "H.264 encoding CRF:",
|
||||
"LabelH264EncodingPreset": "H.264 encoding preset:",
|
||||
"LabelHttpsPort": "Local HTTPS port number:",
|
||||
"LabelHttpsPortHelp": "The TCP port number that Jellyfin's HTTPS server should bind to.",
|
||||
"LabelImportOnlyFavoriteChannels": "Restrict to channels marked as favourite",
|
||||
"LabelInNetworkSignInWithEasyPassword": "Enable in-network sign in with my easy PIN code",
|
||||
"LabelInNetworkSignInWithEasyPasswordHelp": "If enabled, you'll be able to use your easy PIN code to sign in to Jellyfin apps from inside your home network. Your regular password will only be needed away from home. If the PIN code is left blank, you won't need a password within your home network.",
|
||||
"LabelIpAddressValue": "IP address: {0}",
|
||||
"LabelKodiMetadataDateFormatHelp": "All dates within nfos will be read and written to using this format.",
|
||||
"LabelKodiMetadataUserHelp": "Enable this to save watch data to Nfo files for other applications to utilise.",
|
||||
"LabelLocalHttpServerPortNumber": "Local HTTP port number:",
|
||||
"LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.",
|
||||
"LabelManufacturerUrl": "Manufacturer URL",
|
||||
"LabelMaxBitrateHelp": "Specify a max bitrate in bandwidth constrained environments, or if the device imposes its own limit.",
|
||||
"LabelModelUrl": "Model URL",
|
||||
"LabelNewUserNameHelp": "Usernames can contain letters (a-z), numbers (0-9), dashes (-), underscores (_), apostrophes ('), and full stops (.)",
|
||||
"LabelOptionalM3uUrl": "M3U URL (optional):",
|
||||
"LabelPasswordRecoveryPinCode": "PIN code:",
|
||||
"LabelPinCode": "PIN code:",
|
||||
"LabelPublicHttpPort": "Public HTTP port number:",
|
||||
"LabelPublicHttpPortHelp": "The public port number that should be mapped to the local HTTP port.",
|
||||
"LabelPublicHttpsPort": "Public HTTPS port number:",
|
||||
"LabelPublicHttpsPortHelp": "The public port number that should be mapped to the local HTTPS port.",
|
||||
"LabelRemoteClientBitrateLimitHelp": "An optional per-stream bitrate limit for all out of network devices. This is useful to prevent devices from requesting a higher bitrate than your Internet connection can handle. This may result in increased CPU load on your server in order to transcode videos on the fly to a lower bitrate.",
|
||||
"LabelRunningOnPort": "Running on HTTP port {0}.",
|
||||
"LabelRunningOnPorts": "Running on HTTP port {0}, and HTTPS port {1}.",
|
||||
"LabelSkipIfAudioTrackPresentHelp": "Untick this to ensure all videos have subtitles, regardless of audio language.",
|
||||
"LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within series",
|
||||
"LabelUrl": "URL:",
|
||||
"LabelZipCode": "Post Code:",
|
||||
"LabelffmpegPathHelp": "The path to the ffmpeg application file or folder containing ffmpeg.",
|
||||
"LinkApi": "API",
|
||||
"MessageConfirmRevokeApiKey": "Are you sure you wish to revoke this API key? The application's connection to Jellyfin Server will be abruptly terminated.",
|
||||
"MessageForgotPasswordFileExpiration": "The reset PIN will expire at {0}.",
|
||||
"MessageInvalidForgotPasswordPin": "An invalid or expired PIN was entered. Please try again.",
|
||||
"MessagePluginInstallDisclaimer": "Plugins built by Jellyfin community members are a great way to enhance your Jellyfin experience with additional features and benefits. Before installing, please be aware of the effects they may have on your Jellyfin Server, such as longer library scans, additional background processing and decreased system stability.",
|
||||
"MessageNoCollectionsAvailable": "Collections allow you to enjoy personalised groupings of Movies, Series, Albums and Books. Click the + button to start creating Collections.",
|
||||
"NoNewDevicesFound": "No new devices found. To add a new tuner, close this dialogue and enter the device information manually.",
|
||||
"OptionAllowRemoteSharedDevicesHelp": "DLNA devices are considered shared until a user begins controlling it.",
|
||||
"OptionBlockLiveTvPrograms": "Live TV Programmes",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live TV programmes to be included within suggested content.",
|
||||
"OptionEnableFullSpeedConversionHelp": "By default, sync conversion is performed at a low speed to minimise resource consumption.",
|
||||
"OptionEnableTranscodingThrottleHelp": "Throttling will automatically adjust transcoding speed in order to minimise server CPU utilisation during playback.",
|
||||
"OptionFavorite": "Favourites",
|
||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "If enabled, these requests will be honoured but will ignore the byte range header.",
|
||||
"OptionMissingTvdbId": "Missing TheTVDB ID",
|
||||
"OptionProtocolHls": "HTTP Live Streaming",
|
||||
"OptionProtocolHttp": "HTTP",
|
||||
"OptionRequirePerfectSubtitleMatchHelp": "Requiring a perfect match will filter subtitles to include only those that have been tested and verified with your exact video file. Unticking this will increase the likelihood of subtitles being downloaded and will increase the chances of mistimed or incorrect subtitle text.",
|
||||
"PinCodeResetComplete": "The PIN code has been reset.",
|
||||
"PinCodeResetConfirmation": "Are you sure you wish to reset the PIN code?",
|
||||
"PluginInstalledMessage": "The plug-in has been successfully installed. Jellyfin Server will need to be restarted for changes to take effect.",
|
||||
"PluginTabAppClassic": "Jellyfin for Windows Media Centre",
|
||||
"Programs": "Programmes",
|
||||
"RequireHttps": "Require HTTPS for external connections",
|
||||
"RequireHttpsHelp": "If enabled, connections over HTTP will be redirected to HTTPS.",
|
||||
"ServerRestartNeededAfterPluginInstall": "Jellyfin Server will need to be restarted after installing a plug-in.",
|
||||
"SetupFFmpegHelp": "Jellyfin may require a library or application to convert certain media types. There are many different applications available, however, Jellyfin has been tested to work with FFmpeg. Jellyfin is in no way affiliated with FFmpeg, its ownership, code or distribution.",
|
||||
"SubtitleDownloadInstructions": "To manage subtitle downloading, click on a library in Jellyfin library setup and edit the subtitle downloading settings.",
|
||||
"SynologyUpdateInstructions": "Please login to DSM and go to Package Centre to update.",
|
||||
"TabCatalog": "Catalogue",
|
||||
"TabFavorites": "Favourites",
|
||||
"UserAgentHelp": "Supply a custom user-agent HTTP header, if necessary.",
|
||||
"ViewTypeMusicFavoriteAlbums": "Favourite Albums",
|
||||
"ViewTypeMusicFavoriteArtists": "Favourite Artists",
|
||||
"ViewTypeMusicFavoriteSongs": "Favourite Songs",
|
||||
@ -119,6 +36,5 @@
|
||||
"XmlTvKidsCategoriesHelp": "Programmes with these categories will be displayed as programmes for children. Separate multiple with '|'.",
|
||||
"XmlTvMovieCategoriesHelp": "Programmes with these categories will be displayed as movies. Separate multiple with '|'.",
|
||||
"XmlTvNewsCategoriesHelp": "Programmes with these categories will be displayed as news programmes. Separate multiple with '|'.",
|
||||
"XmlTvPathHelp": "A path to an XML TV file. Jellyfin will read this file and periodically check it for updates. You are responsible for creating and updating the file.",
|
||||
"XmlTvSportsCategoriesHelp": "Programmes with these categories will be displayed as sports programmes. Separate multiple with '|'.",
|
||||
"XmlTvSportsCategoriesHelp": "Programmes with these categories will be displayed as sports programmes. Separate multiple with '|'."
|
||||
}
|
||||
|
@ -1025,6 +1025,7 @@
|
||||
"LanNetworksHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be considered on local network when enforcing bandwidth restrictions. If set, all other IP addresses will be considered to be on the external network and will be subject to the external bandwidth restrictions. If left blank, only the server's subnet is considered to be on the local network.",
|
||||
"LatestFromLibrary": "Latest {0}",
|
||||
"LearnHowToCreateSynologyShares": "Learn how to share folders in Synology.",
|
||||
"LeaveBlankToNotSetAPassword": "Optional - leave blank to set no password",
|
||||
"LetterButtonAbbreviation": "A",
|
||||
"LibraryAccessHelp": "Select the media folders to share with this user. Administrators will be able to edit all folders using the metadata manager.",
|
||||
"LinkApi": "Api",
|
||||
|
@ -29,4 +29,4 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -16,6 +16,13 @@
|
||||
<input is="emby-input" type="text" id="txtUsername" label="${LabelYourFirstName}" required="required" />
|
||||
<div class="fieldDescription">${MoreUsersCanBeAddedLater}</div>
|
||||
</div>
|
||||
<div class="inputContainer">
|
||||
<input is="emby-input" id="txtManualPassword" type="password" label="${LabelPassword}" />
|
||||
<div class="fieldDescription">${LeaveBlankToNotSetAPassword}</div>
|
||||
</div>
|
||||
<div class="inputContainer">
|
||||
<input is="emby-input" id="txtPasswordConfirm" type="password" label="${LabelPasswordConfirm}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wizardNavigation">
|
||||
|
Loading…
Reference in New Issue
Block a user