mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into remove-wan-ddns
This commit is contained in:
commit
a272a6fcd5
78 changed files with 1810 additions and 9978 deletions
60
.ci/azure-pipelines.yml
Normal file
60
.ci/azure-pipelines.yml
Normal file
|
@ -0,0 +1,60 @@
|
|||
trigger:
|
||||
batch: true
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
- release-*
|
||||
tags:
|
||||
include:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
- job: main_build
|
||||
displayName: 'Main Build'
|
||||
|
||||
dependsOn: lint
|
||||
condition: succeeded()
|
||||
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
displayName: 'Install Node.js'
|
||||
inputs:
|
||||
versionSpec: '10.x'
|
||||
|
||||
- script: |
|
||||
yarn install
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
- script: |
|
||||
yarn pack --filename jellyfin-web.tgz
|
||||
displayName: 'Build package'
|
||||
|
||||
- task: PublishPipelineArtifact@1
|
||||
displayName: 'Publish package'
|
||||
condition: succeeded()
|
||||
inputs:
|
||||
targetPath: '$(Build.SourcesDirectory)/jellyfin-web.tgz'
|
||||
artifactName: 'jellyfin-web'
|
||||
|
||||
- job: lint
|
||||
displayName: 'Lint'
|
||||
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
displayName: 'Install Node.js'
|
||||
inputs:
|
||||
versionSpec: '10.x'
|
||||
|
||||
- script: |
|
||||
yarn install
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
- script: |
|
||||
yarn run lint
|
||||
displayName: 'Run ESLint'
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
kind: pipeline
|
||||
name: eslint
|
||||
|
||||
steps:
|
||||
- name: run
|
||||
image: nextcloudci/eslint:eslint-1
|
||||
commands:
|
||||
- ./run-eslint.sh
|
|
@ -1,6 +1,7 @@
|
|||
.editorconfig
|
||||
.ci
|
||||
.gitattributes
|
||||
.github
|
||||
.drone.yml
|
||||
.eslintrc.yml
|
||||
run-eslint.sh
|
||||
webpack.config.js
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
- [Oddstr13](https://github.com/oddstr13)
|
||||
- [petermcneil](https://github.com/petermcneil)
|
||||
- [lewazo](https://github.com/lewazo)
|
||||
- [Raghu Saxena](https://github.com/ckcr4lyf)
|
||||
- [Nickbert7](https://github.com/Nickbert7)
|
||||
|
||||
# Emby Contributors
|
||||
|
||||
|
|
|
@ -14,12 +14,13 @@
|
|||
"webpack-cli": "^3.2.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"jstree": "^3.3.7"
|
||||
"jstree": "^3.3.7",
|
||||
"hls.js": "^0.12.4"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "webpack --mode development",
|
||||
"build": "webpack --mode production",
|
||||
"lint": "eslint src",
|
||||
"lint": "eslint \"src\"",
|
||||
"prepare": "webpack --mode production"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
# used this pull request for reference
|
||||
# https://github.com/nextcloud/spreed/pull/48
|
||||
ESLINT=$(which eslint || true)
|
||||
if [ -z "$ESLINT" ]
|
||||
then
|
||||
echo "could not find eslint in $PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo checking scripts with $ESLINT
|
||||
find -name "*.js" -print0 | xargs -0 $ESLINT
|
||||
|
||||
# use this line to test changes locally
|
||||
#find src -name "*.js" -exec sh -c 'npx eslint $1' -- {} \;
|
8745
src/bower_components/hlsjs/dist/hls.min.js
vendored
8745
src/bower_components/hlsjs/dist/hls.min.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"folders":
|
||||
[
|
||||
{
|
||||
"path": ".",
|
||||
"folder_exclude_patterns": [
|
||||
".git",
|
||||
"node_modules",
|
||||
"dist",
|
||||
"lib"
|
||||
],
|
||||
"file_exclude_patterns": [
|
||||
".gitignore",
|
||||
"hls.js.sublime-project",
|
||||
"hls.js.sublime-workspace"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -4,6 +4,11 @@
|
|||
// Use define from require.js not webpack's define
|
||||
var _define = window.define;
|
||||
|
||||
// jstree
|
||||
var jstree = require("jstree");
|
||||
require("jstree/dist/themes/default/style.css");
|
||||
_define("jstree", ["jQuery"], function() { return jstree; });
|
||||
|
||||
// hlsjs
|
||||
var hlsjs = require("hls.js");
|
||||
_define("hlsjs", function() { return hlsjs; });
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
font-weight: inherit;
|
||||
box-shadow: none;
|
||||
flex-shrink: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.actionSheetMenuItem:focus {
|
||||
|
|
|
@ -313,7 +313,7 @@ define(["appSettings", "browser", "events", "htmlMediaHelper"], function (appSet
|
|||
var deviceId;
|
||||
var deviceName;
|
||||
var appName = "Jellyfin Web";
|
||||
var appVersion = "10.3.6";
|
||||
var appVersion = "10.4.0";
|
||||
var visibilityChange;
|
||||
var visibilityState;
|
||||
|
||||
|
|
|
@ -18,13 +18,13 @@ define(['dialog', 'globalize'], function (dialog, globalize) {
|
|||
items.push({
|
||||
name: options.cancelText || globalize.translate('ButtonCancel'),
|
||||
id: 'cancel',
|
||||
type: options.primary === 'cancel' ? 'submit' : 'cancel'
|
||||
type: 'cancel'
|
||||
});
|
||||
|
||||
items.push({
|
||||
name: options.confirmText || globalize.translate('ButtonOk'),
|
||||
id: 'ok',
|
||||
type: options.primary === 'cancel' ? 'cancel' : 'submit'
|
||||
type: options.primary === 'delete' ? 'delete' : 'submit'
|
||||
});
|
||||
|
||||
options.buttons = items;
|
||||
|
|
|
@ -27,7 +27,7 @@ define(['connectionManager', 'confirm', 'appRouter', 'globalize'], function (con
|
|||
title: title,
|
||||
text: msg,
|
||||
confirmText: globalize.translate('Delete'),
|
||||
primary: 'cancel'
|
||||
primary: 'delete'
|
||||
|
||||
}).then(function () {
|
||||
|
||||
|
|
|
@ -119,6 +119,7 @@
|
|||
<option value="tv">${TV}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${DisplayModeHelp}</div>
|
||||
<div class="fieldDescription">${LabelPleaseRestart}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer hide selectSkinContainer">
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
display: inline-flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
margin: 0 .29em;
|
||||
margin: 0 0.3em;
|
||||
text-align: center;
|
||||
font-size: inherit;
|
||||
font-family: inherit;
|
||||
|
@ -15,11 +15,11 @@
|
|||
user-select: none;
|
||||
cursor: pointer;
|
||||
z-index: 0;
|
||||
padding: .86em 1em;
|
||||
padding: 0.9em 1em;
|
||||
vertical-align: middle;
|
||||
border: 0;
|
||||
vertical-align: middle;
|
||||
border-radius: .2em;
|
||||
border-radius: 0.2em;
|
||||
/* These are getting an outline in opera tv browsers, which run chrome 30 */
|
||||
outline: none !important;
|
||||
position: relative;
|
||||
|
@ -29,6 +29,13 @@
|
|||
text-decoration: none;
|
||||
/* Not crazy about this but it normalizes heights between anchors and buttons */
|
||||
line-height: 1.35;
|
||||
transform-origin: center;
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.emby-button.show-focus:focus {
|
||||
transform: scale(1.4);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.emby-button::-moz-focus-inner {
|
||||
|
@ -54,17 +61,6 @@
|
|||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.emby-button-focusscale {
|
||||
transition: transform 180ms ease-out !important;
|
||||
-webkit-transform-origin: center center;
|
||||
transform-origin: center center;
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
transform: scale(1.16);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.emby-button > i {
|
||||
/* For non-fab buttons that have icons */
|
||||
font-size: 1.36em;
|
||||
|
@ -77,7 +73,7 @@
|
|||
.fab {
|
||||
display: inline-flex;
|
||||
border-radius: 50%;
|
||||
padding: .6em;
|
||||
padding: 0.6em;
|
||||
box-sizing: border-box;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
@ -125,14 +121,22 @@
|
|||
/* Disable webkit tap highlighting */
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
justify-content: center;
|
||||
transform-origin: center;
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
transform: scale(1.6);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.paper-icon-button-light::-moz-focus-inner {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.paper-icon-button-light[disabled] {
|
||||
opacity: .3;
|
||||
.paper-icon-button-light:disabled {
|
||||
opacity: 0.3;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.paper-icon-button-light > i {
|
||||
|
@ -159,17 +163,6 @@
|
|||
z-index: 1;
|
||||
}
|
||||
|
||||
.icon-button-focusscale {
|
||||
transition: transform 180ms ease-out !important;
|
||||
-webkit-transform-origin: center center;
|
||||
transform-origin: center center;
|
||||
}
|
||||
|
||||
.icon-button-focusscale:focus {
|
||||
transform: scale(1.3);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.btnFilterWithBubble {
|
||||
position: relative;
|
||||
}
|
||||
|
@ -180,7 +173,6 @@
|
|||
background: #444;
|
||||
top: 0;
|
||||
right: 0;
|
||||
/* padding: .5em; */
|
||||
width: 1.6em;
|
||||
height: 1.6em;
|
||||
z-index: 100000000;
|
||||
|
|
|
@ -21,30 +21,23 @@ define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css
|
|||
}
|
||||
|
||||
EmbyButtonPrototype.createdCallback = function () {
|
||||
|
||||
if (this.classList.contains('emby-button')) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.classList.add('emby-button');
|
||||
|
||||
// TODO replace all instances of element-showfocus with this method
|
||||
if (layoutManager.tv) {
|
||||
if (this.getAttribute('data-focusscale') !== 'false') {
|
||||
this.classList.add('emby-button-focusscale');
|
||||
}
|
||||
this.classList.add('emby-button-tv');
|
||||
// handles all special css for tv layout
|
||||
// this method utilizes class chaining
|
||||
this.classList.add('show-focus');
|
||||
}
|
||||
};
|
||||
|
||||
EmbyButtonPrototype.attachedCallback = function () {
|
||||
|
||||
if (this.tagName === 'A') {
|
||||
|
||||
dom.removeEventListener(this, 'click', onAnchorClick, {
|
||||
});
|
||||
|
||||
dom.addEventListener(this, 'click', onAnchorClick, {
|
||||
});
|
||||
dom.removeEventListener(this, 'click', onAnchorClick, {});
|
||||
dom.addEventListener(this, 'click', onAnchorClick, {});
|
||||
|
||||
if (this.getAttribute('data-autohide') === 'true') {
|
||||
if (appHost.supports('externallinks')) {
|
||||
|
@ -57,9 +50,7 @@ define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css
|
|||
};
|
||||
|
||||
EmbyButtonPrototype.detachedCallback = function () {
|
||||
|
||||
dom.removeEventListener(this, 'click', onAnchorClick, {
|
||||
});
|
||||
dom.removeEventListener(this, 'click', onAnchorClick, {});
|
||||
};
|
||||
|
||||
EmbyLinkButtonPrototype.createdCallback = EmbyButtonPrototype.createdCallback;
|
||||
|
@ -75,6 +66,5 @@ define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css
|
|||
extends: 'a'
|
||||
});
|
||||
|
||||
// For extension purposes
|
||||
return EmbyButtonPrototype;
|
||||
});
|
||||
|
|
|
@ -4,11 +4,10 @@ define(['layoutManager', 'css!./emby-button', 'registerElement'], function (layo
|
|||
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype);
|
||||
|
||||
EmbyButtonPrototype.createdCallback = function () {
|
||||
|
||||
this.classList.add('paper-icon-button-light');
|
||||
|
||||
if (layoutManager.tv) {
|
||||
this.classList.add('icon-button-focusscale');
|
||||
this.classList.add('show-focus');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -73,13 +73,12 @@
|
|||
}
|
||||
|
||||
.emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-checked {
|
||||
/* background-color set by theme */
|
||||
/*background-color: #52B54B;*/
|
||||
/* background color set by theme */
|
||||
display: flex !important;
|
||||
}
|
||||
|
||||
.emby-checkbox:checked + span + .checkboxOutline > .checkboxIcon-unchecked {
|
||||
/* background-color set by theme */
|
||||
/* background color set by theme */
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
@ -94,7 +93,7 @@
|
|||
|
||||
.checkboxList > .emby-checkbox-label {
|
||||
display: flex;
|
||||
margin: .5em 0;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
|
||||
.checkboxList-verticalwrap {
|
||||
|
|
|
@ -4,7 +4,6 @@ define(['browser', 'dom', 'css!./emby-checkbox', 'registerElement'], function (b
|
|||
var EmbyCheckboxPrototype = Object.create(HTMLInputElement.prototype);
|
||||
|
||||
function onKeyDown(e) {
|
||||
|
||||
// Don't submit form on enter
|
||||
if (e.keyCode === 13) {
|
||||
e.preventDefault();
|
||||
|
@ -22,7 +21,6 @@ define(['browser', 'dom', 'css!./emby-checkbox', 'registerElement'], function (b
|
|||
var enableRefreshHack = browser.tizen || browser.orsay || browser.operaTv || browser.web0s ? true : false;
|
||||
|
||||
function forceRefresh(loading) {
|
||||
|
||||
var elem = this.parentNode;
|
||||
|
||||
elem.style.webkitAnimationName = 'repaintChrome';
|
||||
|
@ -36,7 +34,6 @@ define(['browser', 'dom', 'css!./emby-checkbox', 'registerElement'], function (b
|
|||
}
|
||||
|
||||
EmbyCheckboxPrototype.attachedCallback = function () {
|
||||
|
||||
if (this.getAttribute('data-embycheckbox') === 'true') {
|
||||
return;
|
||||
}
|
||||
|
@ -68,7 +65,6 @@ define(['browser', 'dom', 'css!./emby-checkbox', 'registerElement'], function (b
|
|||
this.addEventListener('keydown', onKeyDown);
|
||||
|
||||
if (enableRefreshHack) {
|
||||
|
||||
forceRefresh.call(this, true);
|
||||
dom.addEventListener(this, 'click', forceRefresh, {
|
||||
passive: true
|
||||
|
@ -86,7 +82,6 @@ define(['browser', 'dom', 'css!./emby-checkbox', 'registerElement'], function (b
|
|||
};
|
||||
|
||||
EmbyCheckboxPrototype.detachedCallback = function () {
|
||||
|
||||
this.removeEventListener('keydown', onKeyDown);
|
||||
|
||||
dom.removeEventListener(this, 'click', forceRefresh, {
|
||||
|
|
|
@ -70,8 +70,8 @@ _:-ms-input-placeholder {
|
|||
|
||||
.mdl-slider::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
width: 1.8em;
|
||||
height: 1.8em;
|
||||
width: 1.2em;
|
||||
height: 1.2em;
|
||||
box-sizing: border-box;
|
||||
border-radius: 50%;
|
||||
background: #00a4dc;
|
||||
|
@ -80,11 +80,11 @@ _:-ms-input-placeholder {
|
|||
}
|
||||
|
||||
.mdl-slider-hoverthumb::-webkit-slider-thumb {
|
||||
transform: scale(.7, .7);
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.mdl-slider:hover::-webkit-slider-thumb {
|
||||
transform: none;
|
||||
transform: scale(1.6);
|
||||
}
|
||||
|
||||
.slider-no-webkit-thumb::-webkit-slider-thumb {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
background: transparent;
|
||||
box-shadow: none;
|
||||
cursor: pointer;
|
||||
outline: none !important;
|
||||
outline: none;
|
||||
width: auto;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
|
@ -10,36 +10,25 @@
|
|||
vertical-align: middle;
|
||||
flex-shrink: 0;
|
||||
margin: 0;
|
||||
padding: 1em .9em;
|
||||
padding: 1em 0.9em;
|
||||
position: relative;
|
||||
height: auto;
|
||||
min-width: initial;
|
||||
line-height: initial;
|
||||
border-radius: 0 !important;
|
||||
border-radius: 0;
|
||||
overflow: hidden;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/*.emby-tab-button-active {
|
||||
color: #52B54B;
|
||||
.emby-tab-button.show-focus:focus {
|
||||
/* these buttons are small so scale larger than usual */
|
||||
transform: scale(1.6) !important;
|
||||
background: 0 !important;
|
||||
}
|
||||
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #fff;
|
||||
}*/
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
/*color: #52B54B;*/
|
||||
transform: scale(1.32);
|
||||
transform-origin: center center;
|
||||
}
|
||||
|
||||
.emby-tabs-slider {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.emby-tab-button-ripple-effect {
|
||||
background: rgba(0,0,0,.7) !important;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.tabContent:not(.is-active) {
|
||||
|
|
|
@ -424,7 +424,7 @@
|
|||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
border-radius: .15em !important;
|
||||
transform: none !important;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<option value="horizontal">${Horizontal}</option>
|
||||
<option value="vertical">${Vertical}</option>
|
||||
</select>
|
||||
<div class="fieldDescription">Changes take effect after signing out or restarting the app.</div>
|
||||
<div class="fieldDescription">${LabelPleaseRestart}</div>
|
||||
</div>
|
||||
|
||||
<div class="selectContainer">
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
define(['dialogHelper', 'layoutManager', 'globalize', 'require', 'events', 'homescreenSettings', 'paper-icon-button-light', 'css!./../formdialog'], function (dialogHelper, layoutManager, globalize, require, events, HomescreenSettings) {
|
||||
'use strict';
|
||||
|
||||
function centerFocus(elem, horiz, on) {
|
||||
require(['scrollHelper'], function (scrollHelper) {
|
||||
var fn = on ? 'on' : 'off';
|
||||
scrollHelper.centerFocus[fn](elem, horiz);
|
||||
});
|
||||
}
|
||||
|
||||
function show(options) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
require(['text!./homescreensettingsdialog.template.html'], function (template) {
|
||||
|
||||
var dialogOptions = {
|
||||
removeOnClose: true,
|
||||
scrollY: false
|
||||
};
|
||||
|
||||
if (layoutManager.tv) {
|
||||
dialogOptions.size = 'fullscreen';
|
||||
} else {
|
||||
dialogOptions.size = 'medium-tall';
|
||||
}
|
||||
|
||||
var dlg = dialogHelper.createDialog(dialogOptions);
|
||||
|
||||
dlg.classList.add('formDialog');
|
||||
|
||||
var html = '';
|
||||
var submitted = false;
|
||||
|
||||
html += globalize.translateDocument(template, 'core');
|
||||
|
||||
dlg.innerHTML = html;
|
||||
|
||||
if (layoutManager.tv) {
|
||||
centerFocus(dlg.querySelector('.formDialogContent'), false, true);
|
||||
}
|
||||
|
||||
var homescreenSettingsInstance = new HomescreenSettings({
|
||||
serverId: options.serverId,
|
||||
userId: options.userId,
|
||||
element: dlg.querySelector('.settingsContent'),
|
||||
userSettings: options.userSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false
|
||||
});
|
||||
|
||||
dialogHelper.open(dlg);
|
||||
|
||||
dlg.addEventListener('close', function () {
|
||||
|
||||
if (layoutManager.tv) {
|
||||
centerFocus(dlg.querySelector('.formDialogContent'), false, false);
|
||||
}
|
||||
|
||||
if (submitted) {
|
||||
resolve();
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
});
|
||||
|
||||
dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
|
||||
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
|
||||
dlg.querySelector('.btnSave').addEventListener('click', function (e) {
|
||||
|
||||
submitted = true;
|
||||
homescreenSettingsInstance.submit();
|
||||
});
|
||||
|
||||
events.on(homescreenSettingsInstance, 'saved', function () {
|
||||
submitted = true;
|
||||
dialogHelper.close(dlg);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
show: show
|
||||
};
|
||||
});
|
|
@ -1,22 +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">
|
||||
${HeaderDisplaySettings}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="formDialogContent smoothScrollY">
|
||||
<div class="dialogContentInner dialog-content-centered">
|
||||
|
||||
<div class="settingsContent">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="formDialogFooter">
|
||||
<button is="emby-button" type="button" class="raised button-submit block formDialogFooterItem btnSave">
|
||||
<span>${Save}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -328,7 +328,7 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
|
|||
|
||||
html += cardBuilder.getCardsHtml({
|
||||
items: userViews,
|
||||
shape: enableScrollX() ? 'overflowSmallBackdrop' : shape,
|
||||
shape: getThumbShape(),
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
overlayText: false,
|
||||
|
|
|
@ -203,7 +203,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
|
|||
|
||||
text: globalize.translate('ConfirmDeleteImage'),
|
||||
confirmText: globalize.translate('Delete'),
|
||||
primary: 'cancel'
|
||||
primary: 'delete'
|
||||
|
||||
}).then(afterConfirm);
|
||||
});
|
||||
|
|
|
@ -221,6 +221,7 @@ define(['datetime', 'itemHelper', 'css!./indicators.css', 'material-icons'], fun
|
|||
});
|
||||
|
||||
return {
|
||||
getProgressHtml: getProgressHtml,
|
||||
getProgressBarHtml: getProgressBarHtml,
|
||||
getPlayedIndicatorHtml: getPlayedIndicator,
|
||||
getChildCountIndicatorHtml: getChildCountIndicatorHtml,
|
||||
|
|
|
@ -26,7 +26,7 @@ define(["dialogHelper", "require", "layoutManager", "globalize", "userSettings",
|
|||
if (version.Path && user && user.Policy.IsAdministrator) {
|
||||
html += createAttribute(globalize.translate("MediaInfoPath"), version.Path) + "<br/>";
|
||||
}
|
||||
if (version.Size && user && user.Policy.IsAdministrator) {
|
||||
if (version.Size) {
|
||||
var size = (version.Size / (1024 * 1024)).toFixed(0) + " MB";
|
||||
html += createAttribute(globalize.translate("MediaInfoSize"), size) + "<br/>";
|
||||
}
|
||||
|
|
|
@ -134,6 +134,11 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
name: globalize.translate('Download'),
|
||||
id: 'download'
|
||||
});
|
||||
|
||||
commands.push({
|
||||
name: globalize.translate('CopyStreamURL'),
|
||||
id: 'copy-stream'
|
||||
});
|
||||
}
|
||||
|
||||
var canEdit = itemHelper.canEdit(user, item);
|
||||
|
@ -305,6 +310,26 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
getResolveFunction(getResolveFunction(resolve, id), id)();
|
||||
});
|
||||
break;
|
||||
case 'copy-stream':
|
||||
var downloadHref = apiClient.getItemDownloadUrl(itemId);
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.value = downloadHref;
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
try {
|
||||
document.execCommand('copy');
|
||||
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('CopyStreamURLSuccess'));
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("Failed to copy to clipboard");
|
||||
}
|
||||
|
||||
document.body.removeChild(textArea);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'editsubtitles':
|
||||
require(['subtitleEditor'], function (subtitleEditor) {
|
||||
subtitleEditor.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
|
|
|
@ -39,8 +39,16 @@
|
|||
}
|
||||
|
||||
.listItem-border {
|
||||
border-bottom-width: .1em;
|
||||
border-bottom-style: solid;
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-width: 0 0 0.1em 0;
|
||||
border-style: solid;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.listItem-border.show-focus:focus {
|
||||
transform: scale(1.0) !important;
|
||||
}
|
||||
|
||||
.listItemImage, .listItemIcon, .listItemAside {
|
||||
|
@ -126,21 +134,20 @@
|
|||
}
|
||||
|
||||
.listItemImageButton:hover {
|
||||
transform: scale(1.2, 1.2);
|
||||
transform: scale(1.2, 1.2);
|
||||
}
|
||||
|
||||
.listItemImageButton-icon {
|
||||
background: rgba(0,0,0,.4);
|
||||
border: .08em solid currentColor;
|
||||
border: 0.1em solid currentColor;
|
||||
border-radius: 100em;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: .21em;
|
||||
padding: 0.2em;
|
||||
}
|
||||
|
||||
@media all and (max-width: 64em) {
|
||||
|
||||
.listItemImage-large {
|
||||
width: 33.75vw;
|
||||
height: 22.5vw;
|
||||
|
@ -148,7 +155,7 @@
|
|||
}
|
||||
|
||||
.listItemImageButton {
|
||||
font-size: 1.02em !important;
|
||||
font-size: 1em !important;
|
||||
}
|
||||
|
||||
.listItemBody {
|
||||
|
@ -157,7 +164,6 @@
|
|||
}
|
||||
|
||||
@media all and (max-width: 50em) {
|
||||
|
||||
.listItemBody {
|
||||
padding-right: .5em;
|
||||
}
|
||||
|
@ -245,14 +251,12 @@
|
|||
}
|
||||
|
||||
@media all and (max-width: 50em) {
|
||||
|
||||
.listItem .endsAt, .listItem .criticRating, .listItem-overview {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (min-width: 50em) {
|
||||
|
||||
.listItem-bottomoverview {
|
||||
display: none !important;
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ define(["loading", "dialogHelper", "dom", "components/libraryoptionseditor/libra
|
|||
title: Globalize.translate("HeaderRemoveMediaLocation"),
|
||||
text: Globalize.translate("MessageConfirmRemoveMediaLocation"),
|
||||
confirmText: Globalize.translate("ButtonDelete"),
|
||||
primary: "cancel"
|
||||
primary: "delete"
|
||||
}).then(function() {
|
||||
var refreshAfterChange = currentOptions.refresh;
|
||||
ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).then(function() {
|
||||
|
|
|
@ -1643,7 +1643,9 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
|
|||
|
||||
self.disableShowingSubtitleOffset = function(player) {
|
||||
player = player || self._currentPlayer;
|
||||
player.disableShowingSubtitleOffset();
|
||||
if (player.disableShowingSubtitleOffset) {
|
||||
player.disableShowingSubtitleOffset();
|
||||
}
|
||||
}
|
||||
|
||||
self.isShowingSubtitleOffsetEnabled = function(player) {
|
||||
|
@ -1658,12 +1660,16 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
|
|||
|
||||
self.setSubtitleOffset = function (value, player) {
|
||||
player = player || self._currentPlayer;
|
||||
player.setSubtitleOffset(value);
|
||||
if (player.setSubtitleOffset) {
|
||||
player.setSubtitleOffset(value);
|
||||
}
|
||||
};
|
||||
|
||||
self.getPlayerSubtitleOffset = function(player) {
|
||||
player = player || self._currentPlayer;
|
||||
return player.getSubtitleOffset();
|
||||
if (player.getPlayerSubtitleOffset) {
|
||||
return player.getSubtitleOffset();
|
||||
}
|
||||
}
|
||||
|
||||
self.canHandleOffsetOnCurrentSubtitle = function(player) {
|
||||
|
|
|
@ -132,7 +132,7 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
if (videoCodec) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Video codec:',
|
||||
label: globalize.translate("LabelVideoCodec"),
|
||||
value: session.TranscodingInfo.IsVideoDirect ? (videoCodec.toUpperCase() + ' (direct)') : videoCodec.toUpperCase()
|
||||
});
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
if (audioCodec) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Audio codec:',
|
||||
label: globalize.translate("LabelAudioCodec"),
|
||||
value: session.TranscodingInfo.IsAudioDirect ? (audioCodec.toUpperCase() + ' (direct)') : audioCodec.toUpperCase()
|
||||
});
|
||||
}
|
||||
|
@ -157,28 +157,28 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
if (totalBitrate) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Bitrate:',
|
||||
label: globalize.translate("LabelBitrate"),
|
||||
value: getDisplayBitrate(totalBitrate)
|
||||
});
|
||||
}
|
||||
if (session.TranscodingInfo.CompletionPercentage) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Transcoding progress:',
|
||||
label: globalize.translate("LabelTranscodingProgress"),
|
||||
value: session.TranscodingInfo.CompletionPercentage.toFixed(1) + '%'
|
||||
});
|
||||
}
|
||||
if (session.TranscodingInfo.Framerate) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Transcoding framerate:',
|
||||
label: globalize.translate("LabelTranscodingFramerate"),
|
||||
value: session.TranscodingInfo.Framerate + ' fps'
|
||||
});
|
||||
}
|
||||
if (session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Reason for transcoding:',
|
||||
label: globalize.translate("LabelReasonForTranscoding"),
|
||||
value: session.TranscodingInfo.TranscodeReasons.map(translateReason).join('<br/>')
|
||||
});
|
||||
}
|
||||
|
@ -196,24 +196,42 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
}
|
||||
}
|
||||
|
||||
function getReadableSize(size) {
|
||||
if (size >= 1073741824) {
|
||||
return parseFloat((size / 1073741824).toFixed(1)) + ' GiB';
|
||||
} else if (size >= 1048576) {
|
||||
return parseFloat((size / 1048576).toFixed(1)) + ' MiB';
|
||||
} else {
|
||||
return Math.floor(size / 1024) + ' KiB';
|
||||
}
|
||||
}
|
||||
|
||||
function getMediaSourceStats(session, player, displayPlayMethod) {
|
||||
|
||||
var sessionStats = [];
|
||||
|
||||
var mediaSource = playbackManager.currentMediaSource(player) || {};
|
||||
var totalBitrate = mediaSource.Bitrate;
|
||||
var mediaFileSize = mediaSource.Size;
|
||||
|
||||
if (mediaSource.Container) {
|
||||
sessionStats.push({
|
||||
label: 'Container:',
|
||||
label: globalize.translate("LabelProfileContainer"),
|
||||
value: mediaSource.Container
|
||||
});
|
||||
}
|
||||
|
||||
if (mediaFileSize) {
|
||||
sessionStats.push({
|
||||
label: globalize.translate("LabelSize"),
|
||||
value: getReadableSize(mediaFileSize)
|
||||
});
|
||||
}
|
||||
|
||||
if (totalBitrate) {
|
||||
|
||||
sessionStats.push({
|
||||
label: 'Bitrate:',
|
||||
label: globalize.translate("LabelBitrate"),
|
||||
value: getDisplayBitrate(totalBitrate)
|
||||
});
|
||||
}
|
||||
|
@ -249,14 +267,14 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
|
||||
if (videoInfos.length) {
|
||||
sessionStats.push({
|
||||
label: 'Video codec:',
|
||||
label: globalize.translate("LabelVideoCodec"),
|
||||
value: videoInfos.join(' ')
|
||||
});
|
||||
}
|
||||
|
||||
if (videoStream.BitRate) {
|
||||
sessionStats.push({
|
||||
label: 'Video bitrate:',
|
||||
label: globalize.translate("LabelVideoBitrate"),
|
||||
value: getDisplayBitrate(videoStream.BitRate)
|
||||
});
|
||||
}
|
||||
|
@ -273,35 +291,35 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
|
||||
if (audioInfos.length) {
|
||||
sessionStats.push({
|
||||
label: 'Audio codec:',
|
||||
label: globalize.translate("LabelAudioCodec"),
|
||||
value: audioInfos.join(' ')
|
||||
});
|
||||
}
|
||||
|
||||
if (audioStream.BitRate) {
|
||||
sessionStats.push({
|
||||
label: 'Audio bitrate:',
|
||||
label: globalize.translate("LabelAudioBitrate"),
|
||||
value: getDisplayBitrate(audioStream.BitRate)
|
||||
});
|
||||
}
|
||||
|
||||
if (audioChannels) {
|
||||
sessionStats.push({
|
||||
label: 'Audio channels:',
|
||||
label: globalize.translate("LabelAudioChannels"),
|
||||
value: audioChannels
|
||||
});
|
||||
}
|
||||
|
||||
if (audioStream.SampleRate) {
|
||||
sessionStats.push({
|
||||
label: 'Audio sample rate:',
|
||||
label: globalize.translate("LabelAudioSampleRate"),
|
||||
value: audioStream.SampleRate + ' Hz'
|
||||
});
|
||||
}
|
||||
|
||||
if (audioStream.BitDepth) {
|
||||
sessionStats.push({
|
||||
label: 'Audio bit depth:',
|
||||
label: globalize.translate("LabelAudioBitDepth"),
|
||||
value: audioStream.BitDepth
|
||||
});
|
||||
}
|
||||
|
@ -328,12 +346,12 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
|
|||
};
|
||||
|
||||
baseCategory.stats.unshift({
|
||||
label: 'Play method:',
|
||||
label: globalize.translate("LabelPlayMethod"),
|
||||
value: displayPlayMethod
|
||||
});
|
||||
|
||||
baseCategory.stats.unshift({
|
||||
label: 'Player:',
|
||||
label: globalize.translate("LabelPlayer"),
|
||||
value: player.name
|
||||
});
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
|
|||
confirm({
|
||||
|
||||
text: globalize.translate('MessageConfirmRecordingCancellation'),
|
||||
primary: 'cancel',
|
||||
primary: 'delete',
|
||||
confirmText: globalize.translate('HeaderCancelRecording'),
|
||||
cancelText: globalize.translate('HeaderKeepRecording')
|
||||
|
||||
|
@ -62,7 +62,7 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
|
|||
confirm({
|
||||
|
||||
text: globalize.translate('MessageConfirmRecordingCancellation'),
|
||||
primary: 'cancel',
|
||||
primary: 'delete',
|
||||
confirmText: globalize.translate('HeaderCancelSeries'),
|
||||
cancelText: globalize.translate('HeaderKeepSeries')
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
|
|||
title: globalize.translate('ConfirmDeletion'),
|
||||
text: msg,
|
||||
confirmText: globalize.translate('Delete'),
|
||||
primary: 'cancel'
|
||||
primary: 'delete'
|
||||
|
||||
}).then(function () {
|
||||
|
||||
|
|
|
@ -71,13 +71,12 @@ html {
|
|||
background: #f0f0f0
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: #00a4dc;
|
||||
background-color: rgba(0,164,220, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
|
@ -102,6 +101,11 @@ html {
|
|||
background: #0cb0e8
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
.checkboxLabel {
|
||||
color: inherit
|
||||
}
|
||||
|
@ -341,24 +345,25 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(0, 0, 0, .5)
|
||||
}
|
||||
|
||||
.emby-tab-button-active,
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
.emby-tab-button-active {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.emby-tab-button:hover {
|
||||
color: #fff;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -413,7 +418,7 @@ html {
|
|||
color: #00a4dc
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -453,3 +458,7 @@ html {
|
|||
.card:focus .card-focuscontent {
|
||||
border-color: #00a4dc
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
|
|
@ -58,13 +58,12 @@ html {
|
|||
}
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: #00a4dc;
|
||||
background-color: rgba(0,164,220, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
|
@ -89,6 +88,11 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
.checkboxLabel {
|
||||
color: inherit
|
||||
}
|
||||
|
@ -327,27 +331,25 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .4)
|
||||
}
|
||||
|
||||
.emby-tab-button-active {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #fff
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
.emby-tab-button:hover {
|
||||
color: #00a4dc;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -401,7 +403,7 @@ html {
|
|||
color: #00a4dc
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -464,3 +466,7 @@ html {
|
|||
.timeslotHeaders-desktop::-webkit-scrollbar {
|
||||
height: .7em
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
|
|
@ -39,13 +39,12 @@ html {
|
|||
background-color: rgba(0, 0, 0, .86)
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: #00a4dc;
|
||||
background-color: rgba(0,164,220, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
|
@ -70,6 +69,11 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
.checkboxLabel {
|
||||
color: inherit
|
||||
}
|
||||
|
@ -304,28 +308,25 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .4)
|
||||
}
|
||||
|
||||
.emby-tab-button-active {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .4)
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
color: #fff;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.emby-tab-button:hover {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -379,7 +380,7 @@ html {
|
|||
color: #00a4dc
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -442,3 +443,7 @@ html {
|
|||
.timeslotHeaders-desktop::-webkit-scrollbar {
|
||||
height: .7em
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
|
|
@ -39,13 +39,12 @@ html {
|
|||
background-color: rgba(0, 0, 0, .86)
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: #52b54b;
|
||||
background-color: rgba(82, 181, 75, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #52b54b;
|
||||
}
|
||||
|
||||
|
@ -70,6 +69,11 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
.checkboxLabel {
|
||||
color: inherit
|
||||
}
|
||||
|
@ -304,27 +308,25 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #52b54b;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .4)
|
||||
}
|
||||
|
||||
.emby-tab-button-active {
|
||||
color: #52b54b
|
||||
}
|
||||
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
color: #52b54b;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #52b54b;
|
||||
}
|
||||
|
||||
.emby-tab-button:hover {
|
||||
color: #52b54b;
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -378,7 +380,7 @@ html {
|
|||
color: #52b54b
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #52b54b;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -441,3 +443,7 @@ html {
|
|||
.timeslotHeaders-desktop::-webkit-scrollbar {
|
||||
height: .7em
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
|
|
@ -55,13 +55,12 @@ html {
|
|||
background-color: #f0f0f0
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: #00a4dc;
|
||||
background-color: rgba(0,164,220, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
|
@ -85,6 +84,11 @@ html {
|
|||
background: #0cb0e8
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
.checkboxLabel {
|
||||
color: inherit
|
||||
}
|
||||
|
@ -323,27 +327,25 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .5)
|
||||
}
|
||||
|
||||
.emby-tab-button-active {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
color: #00a4dc;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.emby-tab-button:hover {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -397,7 +399,7 @@ html {
|
|||
color: #00a4dc
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -437,3 +439,7 @@ html {
|
|||
.card:focus .card-focuscontent {
|
||||
border-color: #00a4dc
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
|
|
@ -58,13 +58,12 @@ html {
|
|||
}
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: rgb(12, 232, 214);
|
||||
background-color: rgba(0,164,220, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #ff77f1;
|
||||
}
|
||||
|
||||
|
@ -144,6 +143,11 @@ a[data-role=button] {
|
|||
background: #ff77f1
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
#btnResetPassword,
|
||||
.btnForgotPassword,
|
||||
.btnCancel,
|
||||
|
@ -420,27 +424,25 @@ a[data-role=button] {
|
|||
color: #f8f8fe
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #8ae9c1;
|
||||
color: #f8f8fe
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .4)
|
||||
}
|
||||
|
||||
.emby-tab-button-active {
|
||||
color: #f8f8fe
|
||||
color: #f8f8fe;
|
||||
}
|
||||
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
color: #f8f8fe
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #ff77f1;
|
||||
}
|
||||
|
||||
.emby-tab-button:hover {
|
||||
color: #ff77f1;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -494,7 +496,7 @@ a[data-role=button] {
|
|||
color: #ff77f1
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #48C3C8;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -569,3 +571,7 @@ a[data-role=button] {
|
|||
background-color: #dbe6ff;
|
||||
color: #0e0f2d;
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #dbe6ff
|
||||
}
|
||||
|
|
|
@ -64,13 +64,12 @@ html {
|
|||
background: rgba(17, 98, 164, .9)
|
||||
}
|
||||
|
||||
.paper-icon-button-light:hover {
|
||||
.paper-icon-button-light:hover:not(:disabled) {
|
||||
color: #00a4dc;
|
||||
background-color: rgba(0,164,220, .2);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
.paper-icon-button-light:focus {
|
||||
.paper-icon-button-light.show-focus:focus {
|
||||
color: #00a4dc;
|
||||
}
|
||||
|
||||
|
@ -95,6 +94,11 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.button-delete {
|
||||
background: rgb(247, 0, 0);
|
||||
color: rgba(255, 255, 255, .87)
|
||||
}
|
||||
|
||||
.checkboxLabel {
|
||||
color: inherit
|
||||
}
|
||||
|
@ -325,24 +329,25 @@ html {
|
|||
color: #fff
|
||||
}
|
||||
|
||||
.emby-button-focusscale:focus {
|
||||
.emby-button.show-focus:focus {
|
||||
background: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button {
|
||||
color: #999;
|
||||
color: rgba(255, 255, 255, .5)
|
||||
}
|
||||
|
||||
.emby-tab-button-active,
|
||||
.emby-tab-button-active.emby-button-tv {
|
||||
.emby-tab-button-active {
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.emby-tab-button.emby-button-tv:focus {
|
||||
.emby-tab-button.show-focus:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.emby-tab-button:hover {
|
||||
color: #fff;
|
||||
background: 0 0
|
||||
}
|
||||
|
||||
.channelPrograms,
|
||||
|
@ -397,7 +402,7 @@ html {
|
|||
color: #00a4dc
|
||||
}
|
||||
|
||||
.guide-date-tab-button.emby-button-tv:focus {
|
||||
.guide-date-tab-button.show-focus:focus {
|
||||
background-color: #00a4dc;
|
||||
color: #fff
|
||||
}
|
||||
|
@ -456,3 +461,7 @@ html {
|
|||
-webkit-border-radius: 2px;
|
||||
background: center no-repeat rgba(255, 255, 255, .7)
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
color: #00a4dc
|
||||
}
|
||||
|
|
|
@ -3,10 +3,11 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
|
|||
|
||||
function loadPage(page, config, languageOptions, systemInfo) {
|
||||
page.querySelector("#txtServerName").value = systemInfo.ServerName;
|
||||
$("#chkAutoRunWebApp", page).checked(config.AutoRunWebApp);
|
||||
if (systemInfo.CanLaunchWebBrowser) {
|
||||
page.querySelector("#fldRunWebAppAtStartup").classList.remove("hide");
|
||||
page.querySelector("#fldAutoRunWebApp").classList.remove("hide");
|
||||
} else {
|
||||
page.querySelector("#fldRunWebAppAtStartup").classList.add("hide");
|
||||
page.querySelector("#fldAutoRunWebApp").classList.add("hide");
|
||||
}
|
||||
page.querySelector("#txtCachePath").value = systemInfo.CachePath || "";
|
||||
$("#txtMetadataPath", page).val(systemInfo.InternalMetadataPath || "");
|
||||
|
@ -46,6 +47,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
|
|||
config.MetadataPath = $("#txtMetadataPath", form).val();
|
||||
config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val();
|
||||
var requiresReload = (config.UICulture !== currentLanguage);
|
||||
config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked();
|
||||
config.EnableAutomaticRestart = $("#chkEnableAutomaticRestart", form).checked();
|
||||
config.EnableAutoUpdate = $("#chkEnableAutomaticServerUpdates", form).checked();
|
||||
ApiClient.updateServerConfiguration(config).then(function() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "scripts/imagehelper", "humanedate", "listViewStyle", "emby-button", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper) {
|
||||
define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "scripts/imagehelper", "indicators", "humanedate", "listViewStyle", "emby-button", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper, indicators) {
|
||||
"use strict";
|
||||
|
||||
function buttonEnabled(elem, enabled) {
|
||||
|
@ -12,27 +12,23 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
|
||||
function showPlaybackInfo(btn, session) {
|
||||
require(["alert"], function (alert) {
|
||||
var showTranscodeReasons;
|
||||
var title;
|
||||
var text = [];
|
||||
var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
|
||||
var isDirectStream = "DirectStream" === displayPlayMethod;
|
||||
var isTranscode = "Transcode" === displayPlayMethod;
|
||||
|
||||
if (isDirectStream) {
|
||||
var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
|
||||
if (displayPlayMethod === "DirectStream") {
|
||||
title = globalize.translate("DirectStreaming");
|
||||
text.push(globalize.translate("DirectStreamHelp1"));
|
||||
text.push("<br/>");
|
||||
text.push(globalize.translate("DirectStreamHelp2"));
|
||||
} else if (isTranscode) {
|
||||
} else if (displayPlayMethod === "Transcode") {
|
||||
title = globalize.translate("Transcoding");
|
||||
text.push(globalize.translate("MediaIsBeingConverted"));
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
|
||||
text.push("<br/>");
|
||||
text.push(globalize.translate("LabelReasonForTranscoding"));
|
||||
session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) {
|
||||
text.push(globalize.translate("" + transcodeReason));
|
||||
text.push(globalize.translate(transcodeReason));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -240,29 +236,24 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
var nowPlayingItem = session.NowPlayingItem;
|
||||
var className = "scalableCard card activeSession backdropCard backdropCard-scalable";
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
||||
className += " transcodingSession";
|
||||
}
|
||||
|
||||
html += '<div class="' + className + '" id="' + rowId + '">';
|
||||
html += '<div class="cardBox visualCardBox">';
|
||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
html += '<div class="cardContent">';
|
||||
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem);
|
||||
|
||||
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem);
|
||||
if (imgUrl) {
|
||||
html += '<div class="sessionNowPlayingContent sessionNowPlayingContent-withbackground"';
|
||||
html += ' data-src="' + imgUrl + '" style="display:inline-block;background-image:url(\'' + imgUrl + "');\"";
|
||||
html += ' data-src="' + imgUrl + '" style="display:inline-block;background-image:url(\'' + imgUrl + "');\"></div>";
|
||||
} else {
|
||||
html += '<div class="sessionNowPlayingContent"';
|
||||
html += '<div class="sessionNowPlayingContent"></div>';
|
||||
}
|
||||
|
||||
html += "></div>";
|
||||
html += '<div class="sessionNowPlayingInnerContent">';
|
||||
html += '<div class="sessionAppInfo">';
|
||||
var clientImage = DashboardPage.getClientImage(session);
|
||||
|
||||
var clientImage = DashboardPage.getClientImage(session);
|
||||
if (clientImage) {
|
||||
html += clientImage;
|
||||
}
|
||||
|
@ -272,7 +263,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
html += '<div class="sessionAppSecondaryText">' + DashboardPage.getAppSecondaryText(session) + "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '<div class="sessionNowPlayingTime">' + DashboardPage.getSessionNowPlayingTime(session) + "</div>";
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.Framerate) {
|
||||
html += '<div class="sessionTranscodingFramerate">' + session.TranscodingInfo.Framerate + " fps</div>";
|
||||
|
@ -280,20 +270,28 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
html += '<div class="sessionTranscodingFramerate"></div>';
|
||||
}
|
||||
|
||||
html += '<div class="sessionNowPlayingDetails">'
|
||||
var nowPlayingName = DashboardPage.getNowPlayingName(session);
|
||||
html += '<div class="sessionNowPlayingInfo" data-imgsrc="' + nowPlayingName.image + '">';
|
||||
html += nowPlayingName.html;
|
||||
html += "</div>";
|
||||
html += '<div class="sessionNowPlayingTime">' + DashboardPage.getSessionNowPlayingTime(session) + "</div>";
|
||||
html += '</div>'
|
||||
|
||||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
html += '<progress class="playbackProgress" min="0" max="100" value="' + 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks + '"></progress>';
|
||||
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
|
||||
html += indicators.getProgressHtml(percent, { containerClass: "playbackProgress" });
|
||||
} else {
|
||||
html += '<progress class="playbackProgress hide" min="0" max="100"></progress>';
|
||||
// need to leave the element in just in case the device starts playback
|
||||
html += indicators.getProgressHtml(0, { containerClass: "playbackProgress hide" });
|
||||
}
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
||||
html += '<progress class="transcodingProgress" min="0" max="100" value="' + session.TranscodingInfo.CompletionPercentage.toFixed(1) + '"></progress>';
|
||||
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
|
||||
html += indicators.getProgressHtml(percent, { containerClass: "transcodingProgress" });
|
||||
} else {
|
||||
html += '<progress class="transcodingProgress hide" min="0" max="100"></progress>';
|
||||
// same issue as playbackProgress element above
|
||||
html += indicators.getProgressHtml(0, { containerClass: "transcodingProgress hide" });
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
|
@ -316,8 +314,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
html += '<div class="flex align-items-center justify-content-center">';
|
||||
var userImage = DashboardPage.getUserImage(session);
|
||||
html += userImage ? '<img style="height:1.71em;border-radius:50px;margin-right:.5em;" src="' + userImage + '" />' : '<div style="height:1.71em;"></div>';
|
||||
html += '<div class="sessionUserName" style="text-transform:uppercase;">';
|
||||
html += DashboardPage.getUsersHtml(session) || " ";
|
||||
html += '<div class="sessionUserName">';
|
||||
html += DashboardPage.getUsersHtml(session);
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
|
@ -328,7 +326,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
|
||||
parentElement.insertAdjacentHTML("beforeend", html);
|
||||
var deadSessionElem = parentElement.querySelector(".deadSession");
|
||||
|
||||
if (deadSessionElem) {
|
||||
deadSessionElem.parentNode.removeChild(deadSessionElem);
|
||||
}
|
||||
|
@ -398,13 +395,12 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
}
|
||||
if (showTranscodingInfo) {
|
||||
var line = [];
|
||||
|
||||
if (session.TranscodingInfo) {
|
||||
if (session.TranscodingInfo.Bitrate) {
|
||||
if (session.TranscodingInfo.Bitrate > 1e6) {
|
||||
line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps");
|
||||
} else {
|
||||
line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " kbps");
|
||||
line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " Kbps");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -426,7 +422,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
}
|
||||
}
|
||||
|
||||
return html || " ";
|
||||
return html;
|
||||
},
|
||||
getSessionNowPlayingTime: function (session) {
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
|
@ -436,7 +432,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
if (session.PlayState.PositionTicks) {
|
||||
html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks);
|
||||
} else {
|
||||
html += "--:--:--";
|
||||
html += "0:00";
|
||||
}
|
||||
|
||||
html += " / ";
|
||||
|
@ -444,10 +440,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks);
|
||||
} else {
|
||||
html += "--:--:--";
|
||||
html += "0:00";
|
||||
}
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
return html;
|
||||
|
@ -488,15 +482,13 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
maxWidth: 130,
|
||||
type: "Logo"
|
||||
});
|
||||
} else {
|
||||
if (nowPlayingItem.ParentLogoImageTag) {
|
||||
imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, {
|
||||
tag: nowPlayingItem.ParentLogoImageTag,
|
||||
maxHeight: 24,
|
||||
maxWidth: 130,
|
||||
type: "Logo"
|
||||
});
|
||||
}
|
||||
} else if (nowPlayingItem.ParentLogoImageTag) {
|
||||
imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, {
|
||||
tag: nowPlayingItem.ParentLogoImageTag,
|
||||
maxHeight: 24,
|
||||
maxWidth: 130,
|
||||
type: "Logo"
|
||||
});
|
||||
}
|
||||
|
||||
if (imgUrl) {
|
||||
|
@ -510,7 +502,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
},
|
||||
getUsersHtml: function (session) {
|
||||
var html = [];
|
||||
|
||||
if (session.UserId) {
|
||||
html.push(session.UserName);
|
||||
}
|
||||
|
@ -534,8 +525,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
},
|
||||
updateSession: function (row, session) {
|
||||
row.classList.remove("deadSession");
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
if (nowPlayingItem) {
|
||||
row.classList.add("playingSession");
|
||||
} else {
|
||||
|
@ -555,7 +546,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
}
|
||||
|
||||
var btnSessionPlayPause = row.querySelector(".btnSessionPlayPause");
|
||||
|
||||
if (session.ServerId && nowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId()) {
|
||||
btnSessionPlayPause.classList.remove("hide");
|
||||
row.querySelector(".btnSessionStop").classList.remove("hide");
|
||||
|
@ -572,7 +562,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
|
||||
row.querySelector(".sessionNowPlayingStreamInfo").innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session);
|
||||
row.querySelector(".sessionNowPlayingTime").innerHTML = DashboardPage.getSessionNowPlayingTime(session);
|
||||
row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session) || " ";
|
||||
row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session);
|
||||
row.querySelector(".sessionAppSecondaryText").innerHTML = DashboardPage.getAppSecondaryText(session);
|
||||
row.querySelector(".sessionTranscodingFramerate").innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + " fps" : "";
|
||||
var nowPlayingName = DashboardPage.getNowPlayingName(session);
|
||||
|
@ -584,27 +574,19 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
}
|
||||
|
||||
var playbackProgressElem = row.querySelector(".playbackProgress");
|
||||
|
||||
if (playbackProgressElem) {
|
||||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
var position = session.PlayState.PositionTicks || 0;
|
||||
var value = 100 * position / nowPlayingItem.RunTimeTicks;
|
||||
playbackProgressElem.classList.remove("hide");
|
||||
playbackProgressElem.value = value;
|
||||
} else {
|
||||
playbackProgressElem.classList.add("hide");
|
||||
}
|
||||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
|
||||
html += indicators.getProgressHtml(percent, { containerClass: "playbackProgress" });
|
||||
} else {
|
||||
html += indicators.getProgressHtml(0, { containerClass: "playbackProgress hide" });
|
||||
}
|
||||
|
||||
var transcodingProgress = row.querySelector(".transcodingProgress");
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
||||
row.classList.add("transcodingSession");
|
||||
transcodingProgress.value = session.TranscodingInfo.CompletionPercentage;
|
||||
transcodingProgress.classList.remove("hide");
|
||||
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
|
||||
html += indicators.getProgressHtml(percent, { containerClass: "transcodingProgress" });
|
||||
} else {
|
||||
transcodingProgress.classList.add("hide");
|
||||
row.classList.remove("transcodingSession");
|
||||
html += indicators.getProgressHtml(0, { containerClass: "transcodingProgress hide" });
|
||||
}
|
||||
|
||||
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || "";
|
||||
|
@ -692,6 +674,14 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
});
|
||||
}
|
||||
|
||||
if (item && item.AlbumPrimaryImageTag) {
|
||||
return ApiClient.getScaledImageUrl(item.AlbumId, {
|
||||
type: "Primary",
|
||||
width: 275,
|
||||
tag: item.AlbumPrimaryImageTag
|
||||
});
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
systemUpdateTaskKey: "SystemUpdateTask",
|
||||
|
@ -707,7 +697,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
title: globalize.translate("HeaderRestart"),
|
||||
text: globalize.translate("MessageConfirmRestart"),
|
||||
confirmText: globalize.translate("ButtonRestart"),
|
||||
primary: "cancel"
|
||||
primary: "delete"
|
||||
}).then(function () {
|
||||
var page = dom.parentWithClass(btn, "page");
|
||||
buttonEnabled(page.querySelector("#btnRestartServer"), false);
|
||||
|
@ -722,7 +712,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
title: globalize.translate("HeaderShutdown"),
|
||||
text: globalize.translate("MessageConfirmShutdown"),
|
||||
confirmText: globalize.translate("ButtonShutdown"),
|
||||
primary: "cancel"
|
||||
primary: "delete"
|
||||
}).then(function () {
|
||||
var page = dom.parentWithClass(btn, "page");
|
||||
buttonEnabled(page.querySelector("#btnRestartServer"), false);
|
||||
|
@ -787,7 +777,6 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
loading.show();
|
||||
pollForInfo(page, apiClient);
|
||||
DashboardPage.startInterval(apiClient);
|
||||
// TODO we currently don't support packages and thus these events are useless
|
||||
events.on(serverNotifications, "RestartRequired", onRestartRequired);
|
||||
events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown);
|
||||
events.on(serverNotifications, "ServerRestarting", onServerRestarting);
|
||||
|
|
|
@ -12,7 +12,7 @@ define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "hu
|
|||
text: msg,
|
||||
title: globalize.translate("HeaderDeleteDevice"),
|
||||
confirmText: globalize.translate("ButtonDelete"),
|
||||
primary: "cancel"
|
||||
primary: "delete"
|
||||
}).then(function() {
|
||||
loading.show(), ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
|
|
|
@ -10,7 +10,7 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function($, loa
|
|||
$("#selectThreadCount", page).val(config.EncodingThreadCount);
|
||||
$("#txtDownMixAudioBoost", page).val(config.DownMixAudioBoost);
|
||||
page.querySelector(".txtEncoderPath").value = config.EncoderAppPathDisplay || "";
|
||||
$("#txtTranscodingTempPath", page).val(config.TranscodingTempPath || "");
|
||||
$("#txtTranscodingTempPath", page).val(systemInfo.TranscodingTempPath || "");
|
||||
$("#txtVaapiDevice", page).val(config.VaapiDevice || "");
|
||||
page.querySelector("#selectH264Preset").value = config.H264Preset || "";
|
||||
page.querySelector("#txtH264Crf").value = config.H264Crf || "";
|
||||
|
|
|
@ -108,6 +108,15 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
|||
overlayMoreButton: !0,
|
||||
action: "instantmix",
|
||||
coverImage: !0
|
||||
}, {
|
||||
name: "HeaderFavoriteBooks",
|
||||
types: "Book",
|
||||
shape: getPosterShape(),
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
overlayPlayButton: true,
|
||||
overlayText: false,
|
||||
centerText: true
|
||||
}]
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
|||
confirm({
|
||||
title: globalize.translate("UninstallPluginHeader"),
|
||||
text: msg,
|
||||
primary: "cancel",
|
||||
primary: "delete",
|
||||
confirmText: globalize.translate("UninstallPluginHeader")
|
||||
}).then(function() {
|
||||
loading.show();
|
||||
|
|
|
@ -235,7 +235,20 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
var name = itemHelper.getDisplayName(item, {
|
||||
includeParentInfo: !1
|
||||
});
|
||||
html && !parentNameLast ? html += '<h3 class="itemName" style="margin: .25em 0 .5em;">' + name + "</h3>" : html = parentNameLast ? '<h1 class="itemName" style="margin: .1em 0 .25em;">' + name + "</h1>" + html : '<h1 class="itemName" style="margin: .1em 0 .5em;">' + name + "</h1>" + html, container.innerHTML = html, html.length ? container.classList.remove("hide") : container.classList.add("hide")
|
||||
|
||||
var offset = parentNameLast ? ".25em" : ".5em";
|
||||
if (html && !parentNameLast) {
|
||||
html += '<h3 class="itemName" style="margin: .25em 0 .5em;">' + name + '</h3>';
|
||||
} else {
|
||||
html = '<h1 class="itemName" style="margin: .1em 0 ' + offset + ';">' + name + "</h1>" + html;
|
||||
}
|
||||
|
||||
if (item.OriginalTitle && item.OriginalTitle != item.Name) {
|
||||
html += '<h4 class="itemName" style="margin: -' + offset + ' 0 0">' + item.OriginalTitle + '</h4>';
|
||||
}
|
||||
|
||||
container.innerHTML = html;
|
||||
html.length ? container.classList.remove("hide") : container.classList.add("hide")
|
||||
}
|
||||
|
||||
function setTrailerButtonVisibility(page, item) {
|
||||
|
@ -361,7 +374,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
|
||||
function renderLogo(page, item, apiClient) {
|
||||
var url = logoImageUrl(item, apiClient, {
|
||||
maxWidth: 300
|
||||
maxWidth: 400
|
||||
}),
|
||||
detailLogo = page.querySelector(".detailLogo");
|
||||
url ? (detailLogo.classList.remove("hide"), detailLogo.classList.add("lazy"), detailLogo.setAttribute("data-src", url), imageLoader.lazyImage(detailLogo)) : detailLogo.classList.add("hide")
|
||||
|
@ -380,6 +393,18 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
}
|
||||
}
|
||||
|
||||
function renderUserInfo(page, item) {
|
||||
var lastPlayedElement = page.querySelector(".itemLastPlayed");
|
||||
|
||||
if (item.UserData && item.UserData.LastPlayedDate) {
|
||||
lastPlayedElement.classList.remove("hide");
|
||||
var datePlayed = datetime.parseISO8601Date(item.UserData.LastPlayedDate);
|
||||
lastPlayedElement.innerHTML = globalize.translate("DatePlayed") + " " + datetime.toLocaleDateString(datePlayed) + " " + datetime.getDisplayTime(datePlayed);
|
||||
} else {
|
||||
lastPlayedElement.classList.add("hide");
|
||||
}
|
||||
}
|
||||
|
||||
function renderLinks(linksElem, item) {
|
||||
var html = [];
|
||||
if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) {
|
||||
|
@ -404,7 +429,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
detectRatio = !1;
|
||||
imageTags.Primary ? (url = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Primary",
|
||||
maxHeight: 360,
|
||||
maxHeight: 460,
|
||||
tag: item.ImageTags.Primary
|
||||
}), detectRatio = !0) : item.BackdropImageTags && item.BackdropImageTags.length ? (url = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Backdrop",
|
||||
|
@ -531,22 +556,64 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
}
|
||||
|
||||
function renderDetails(page, item, apiClient, context, isStatic) {
|
||||
renderSimilarItems(page, item, context), renderMoreFromSeason(page, item, apiClient), renderMoreFromArtist(page, item, apiClient), renderDirector(page, item, apiClient, context, isStatic), renderGenres(page, item, apiClient, context, isStatic), renderChannelGuide(page, apiClient, item);
|
||||
renderSimilarItems(page, item, context);
|
||||
renderMoreFromSeason(page, item, apiClient);
|
||||
renderMoreFromArtist(page, item, apiClient);
|
||||
renderDirector(page, item, apiClient, context, isStatic);
|
||||
renderGenres(page, item, apiClient, context, isStatic);
|
||||
renderChannelGuide(page, apiClient, item);
|
||||
|
||||
var taglineElement = page.querySelector(".tagline");
|
||||
item.Taglines && item.Taglines.length ? (taglineElement.classList.remove("hide"), taglineElement.innerHTML = item.Taglines[0]) : taglineElement.classList.add("hide");
|
||||
var overview = page.querySelector(".overview"),
|
||||
externalLinksElem = page.querySelector(".itemExternalLinks");
|
||||
"Season" !== item.Type && "MusicAlbum" !== item.Type && "MusicArtist" !== item.Type || (overview.classList.add("detailsHiddenOnMobile"), externalLinksElem.classList.add("detailsHiddenOnMobile")), renderOverview([overview], item);
|
||||
var i, length, itemMiscInfo = page.querySelectorAll(".itemMiscInfo-primary");
|
||||
for (i = 0, length = itemMiscInfo.length; i < length; i++) mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, {
|
||||
interactive: !0,
|
||||
episodeTitle: !1,
|
||||
subtitles: !1
|
||||
}), itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type ? itemMiscInfo[i].classList.remove("hide") : itemMiscInfo[i].classList.add("hide");
|
||||
for (itemMiscInfo = page.querySelectorAll(".itemMiscInfo-secondary"), i = 0, length = itemMiscInfo.length; i < length; i++) mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, {
|
||||
interactive: !0
|
||||
}), itemMiscInfo[i].innerHTML ? itemMiscInfo[i].classList.remove("hide") : itemMiscInfo[i].classList.add("hide");
|
||||
reloadUserDataButtons(page, item), renderLinks(externalLinksElem, item), renderTags(page, item), renderSeriesAirTime(page, item, isStatic)
|
||||
if (item.Taglines && item.Taglines.length) {
|
||||
taglineElement.classList.remove("hide");
|
||||
taglineElement.innerHTML = item.Taglines[0];
|
||||
} else {
|
||||
taglineElement.classList.add("hide");
|
||||
}
|
||||
|
||||
var overview = page.querySelector(".overview");
|
||||
var externalLinksElem = page.querySelector(".itemExternalLinks");
|
||||
|
||||
if ("Season" !== item.Type && "MusicAlbum" !== item.Type && "MusicArtist" !== item.Type) {
|
||||
overview.classList.add("detailsHiddenOnMobile");
|
||||
externalLinksElem.classList.add("detailsHiddenOnMobile");
|
||||
}
|
||||
renderOverview([overview], item);
|
||||
|
||||
var i, itemMiscInfo;
|
||||
itemMiscInfo = page.querySelectorAll(".itemMiscInfo-primary");
|
||||
for (i = 0; i < itemMiscInfo.length; i++) {
|
||||
mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, {
|
||||
interactive: !0,
|
||||
episodeTitle: !1,
|
||||
subtitles: !1
|
||||
});
|
||||
|
||||
if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) {
|
||||
itemMiscInfo[i].classList.remove("hide");
|
||||
} else {
|
||||
itemMiscInfo[i].classList.add("hide");
|
||||
}
|
||||
}
|
||||
|
||||
itemMiscInfo = page.querySelectorAll(".itemMiscInfo-secondary")
|
||||
for (i = 0; i < itemMiscInfo.length; i++) {
|
||||
mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, {
|
||||
interactive: !0
|
||||
})
|
||||
|
||||
if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) {
|
||||
itemMiscInfo[i].classList.remove("hide");
|
||||
} else {
|
||||
itemMiscInfo[i].classList.add("hide");
|
||||
}
|
||||
}
|
||||
|
||||
reloadUserDataButtons(page, item);
|
||||
renderLinks(externalLinksElem, item);
|
||||
renderUserInfo(page, item);
|
||||
renderTags(page, item);
|
||||
renderSeriesAirTime(page, item, isStatic)
|
||||
}
|
||||
|
||||
function enableScrollX() {
|
||||
|
|
|
@ -1,48 +1,61 @@
|
|||
define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "globalize", "dom", "indicators", "scripts/imagehelper", "cardStyle", "emby-itemrefreshindicator"], function($, appHost, taskButton, loading, libraryMenu, globalize, dom, indicators, imageHelper) {
|
||||
define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "globalize", "dom", "indicators", "scripts/imagehelper", "cardStyle", "emby-itemrefreshindicator"], function ($, appHost, taskButton, loading, libraryMenu, globalize, dom, indicators, imageHelper) {
|
||||
"use strict";
|
||||
|
||||
function addVirtualFolder(page) {
|
||||
require(["medialibrarycreator"], function(medialibrarycreator) {
|
||||
(new medialibrarycreator).show({
|
||||
collectionTypeOptions: getCollectionTypeOptions().filter(function(f) {
|
||||
require(["medialibrarycreator"], function (medialibrarycreator) {
|
||||
new medialibrarycreator().show({
|
||||
collectionTypeOptions: getCollectionTypeOptions().filter(function (f) {
|
||||
return !f.hidden;
|
||||
}),
|
||||
refresh: shouldRefreshLibraryAfterChanges(page)
|
||||
}).then(function(hasChanges) {
|
||||
hasChanges && reloadLibrary(page);
|
||||
})
|
||||
})
|
||||
}).then(function (hasChanges) {
|
||||
if (hasChanges) {
|
||||
reloadLibrary(page);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function editVirtualFolder(page, virtualFolder) {
|
||||
require(["medialibraryeditor"], function(medialibraryeditor) {
|
||||
(new medialibraryeditor).show({
|
||||
require(["medialibraryeditor"], function (medialibraryeditor) {
|
||||
new medialibraryeditor().show({
|
||||
refresh: shouldRefreshLibraryAfterChanges(page),
|
||||
library: virtualFolder
|
||||
}).then(function(hasChanges) {
|
||||
hasChanges && reloadLibrary(page);
|
||||
})
|
||||
})
|
||||
}).then(function (hasChanges) {
|
||||
if (hasChanges) {
|
||||
reloadLibrary(page);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function deleteVirtualFolder(page, virtualFolder) {
|
||||
var msg = globalize.translate("MessageAreYouSureYouWishToRemoveMediaFolder");
|
||||
|
||||
if (virtualFolder.Locations.length) {
|
||||
msg += "<br/><br/>" + globalize.translate("MessageTheFollowingLocationWillBeRemovedFromLibrary") + "<br/><br/>";
|
||||
msg += virtualFolder.Locations.join("<br/>");
|
||||
}
|
||||
require(["confirm"], function(confirm) {
|
||||
confirm(msg, globalize.translate("HeaderRemoveMediaFolder")).then(function() {
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm({
|
||||
|
||||
text: msg,
|
||||
title: globalize.translate('HeaderRemoveMediaFolder'),
|
||||
confirmText: globalize.translate('Delete'),
|
||||
primary: 'delete'
|
||||
|
||||
}).then(function () {
|
||||
var refreshAfterChange = shouldRefreshLibraryAfterChanges(page);
|
||||
ApiClient.removeVirtualFolder(virtualFolder.Name, refreshAfterChange).then(function() {
|
||||
ApiClient.removeVirtualFolder(virtualFolder.Name, refreshAfterChange).then(function () {
|
||||
reloadLibrary(page);
|
||||
})
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function refreshVirtualFolder(page, virtualFolder) {
|
||||
require(["refreshDialog"], function(refreshDialog) {
|
||||
require(["refreshDialog"], function (refreshDialog) {
|
||||
new refreshDialog({
|
||||
itemIds: [virtualFolder.ItemId],
|
||||
serverId: ApiClient.serverId(),
|
||||
|
@ -52,14 +65,14 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
}
|
||||
|
||||
function renameVirtualFolder(page, virtualFolder) {
|
||||
require(["prompt"], function(prompt) {
|
||||
require(["prompt"], function (prompt) {
|
||||
prompt({
|
||||
label: globalize.translate("LabelNewName"),
|
||||
confirmText: globalize.translate("ButtonRename")
|
||||
}).then(function(newName) {
|
||||
}).then(function (newName) {
|
||||
if (newName && newName != virtualFolder.Name) {
|
||||
var refreshAfterChange = shouldRefreshLibraryAfterChanges(page);
|
||||
ApiClient.renameVirtualFolder(virtualFolder.Name, newName, refreshAfterChange).then(function() {
|
||||
ApiClient.renameVirtualFolder(virtualFolder.Name, newName, refreshAfterChange).then(function () {
|
||||
reloadLibrary(page);
|
||||
});
|
||||
}
|
||||
|
@ -97,24 +110,29 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
id: "refresh",
|
||||
ironIcon: "refresh"
|
||||
});
|
||||
require(["actionsheet"], function(actionsheet) {
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: elem,
|
||||
callback: function(resultId) {
|
||||
callback: function (resultId) {
|
||||
switch (resultId) {
|
||||
case "edit":
|
||||
editVirtualFolder(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "editimages":
|
||||
editImages(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "rename":
|
||||
renameVirtualFolder(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "delete":
|
||||
deleteVirtualFolder(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "refresh":
|
||||
refreshVirtualFolder(page, virtualFolder);
|
||||
}
|
||||
|
@ -125,7 +143,7 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
|
||||
function reloadLibrary(page) {
|
||||
loading.show();
|
||||
ApiClient.getVirtualFolders().then(function(result) {
|
||||
ApiClient.getVirtualFolders().then(function (result) {
|
||||
reloadVirtualFolders(page, result);
|
||||
});
|
||||
}
|
||||
|
@ -148,36 +166,40 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
|
||||
for (var i = 0; i < virtualFolders.length; i++) {
|
||||
var virtualFolder = virtualFolders[i];
|
||||
html += getVirtualFolderHtml(page, virtualFolder, i)
|
||||
html += getVirtualFolderHtml(page, virtualFolder, i);
|
||||
}
|
||||
|
||||
var divVirtualFolders = page.querySelector("#divVirtualFolders");
|
||||
divVirtualFolders.innerHTML = html;
|
||||
divVirtualFolders.classList.add("itemsContainer");
|
||||
divVirtualFolders.classList.add("vertical-wrap");
|
||||
$(".btnCardMenu", divVirtualFolders).on("click", function() {
|
||||
$(".btnCardMenu", divVirtualFolders).on("click", function () {
|
||||
showCardMenu(page, this, virtualFolders);
|
||||
});
|
||||
divVirtualFolders.querySelector(".addLibrary").addEventListener("click", function() {
|
||||
divVirtualFolders.querySelector(".addLibrary").addEventListener("click", function () {
|
||||
addVirtualFolder(page);
|
||||
});
|
||||
$(".editLibrary", divVirtualFolders).on("click", function() {
|
||||
$(".editLibrary", divVirtualFolders).on("click", function () {
|
||||
var card = $(this).parents(".card")[0];
|
||||
var index = parseInt(card.getAttribute("data-index"));
|
||||
var virtualFolder = virtualFolders[index];
|
||||
virtualFolder.ItemId && editVirtualFolder(page, virtualFolder);
|
||||
|
||||
if (virtualFolder.ItemId) {
|
||||
editVirtualFolder(page, virtualFolder);
|
||||
}
|
||||
});
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function editImages(page, virtualFolder) {
|
||||
require(["imageEditor"], function(imageEditor) {
|
||||
require(["imageEditor"], function (imageEditor) {
|
||||
imageEditor.show({
|
||||
itemId: virtualFolder.ItemId,
|
||||
serverId: ApiClient.serverId()
|
||||
}).then(function() {
|
||||
}).then(function () {
|
||||
reloadLibrary(page);
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function getLink(text, url) {
|
||||
|
@ -214,25 +236,32 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
name: globalize.translate("FolderTypeUnset"),
|
||||
value: "mixed",
|
||||
message: globalize.translate("MessageUnsetContentHelp")
|
||||
}]
|
||||
}];
|
||||
}
|
||||
|
||||
function getVirtualFolderHtml(page, virtualFolder, index) {
|
||||
var html = "";
|
||||
var style = "";
|
||||
page.classList.contains("wizardPage") && (style += "min-width:33.3%;");
|
||||
|
||||
if (page.classList.contains("wizardPage")) {
|
||||
style += "min-width:33.3%;";
|
||||
}
|
||||
|
||||
html += '<div class="card backdropCard scalableCard backdropCard-scalable" style="' + style + '" data-index="' + index + '" data-id="' + virtualFolder.ItemId + '">';
|
||||
html += '<div class="cardBox visualCardBox">';
|
||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
html += '<div class="cardContent">';
|
||||
var imgUrl = "";
|
||||
|
||||
if (virtualFolder.PrimaryImageItemId) {
|
||||
imgUrl = ApiClient.getScaledImageUrl(virtualFolder.PrimaryImageItemId, {
|
||||
type: "Primary"
|
||||
});
|
||||
}
|
||||
|
||||
var hasCardImageContainer;
|
||||
|
||||
if (imgUrl) {
|
||||
html += '<div class="cardImageContainer editLibrary" style="cursor:pointer;background-image:url(\'' + imgUrl + "');\">";
|
||||
hasCardImageContainer = true;
|
||||
|
@ -241,38 +270,60 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
html += '<i class="cardImageIcon-small md-icon">' + (virtualFolder.icon || imageHelper.getLibraryIcon(virtualFolder.CollectionType)) + "</i>";
|
||||
hasCardImageContainer = true;
|
||||
}
|
||||
|
||||
if (hasCardImageContainer) {
|
||||
html += '<div class="cardIndicators backdropCardIndicators">';
|
||||
html += '<div is="emby-itemrefreshindicator"' + (virtualFolder.RefreshProgress || virtualFolder.RefreshStatus && "Idle" !== virtualFolder.RefreshStatus ? "" : ' class="hide"') + ' data-progress="' + (virtualFolder.RefreshProgress || 0) + '" data-status="' + virtualFolder.RefreshStatus + '"></div>';
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
}
|
||||
|
||||
if (!imgUrl && virtualFolder.showNameWithIcon) {
|
||||
html += '<h3 class="cardImageContainer addLibrary" style="position:absolute;top:0;left:0;right:0;bottom:0;cursor:pointer;flex-direction:column;">';
|
||||
html += '<i class="cardImageIcon-small md-icon">' + (virtualFolder.icon || imageHelper.getLibraryIcon(virtualFolder.CollectionType)) + "</i>";
|
||||
virtualFolder.showNameWithIcon && (html += '<div style="margin:1em 0;position:width:100%;">', html += virtualFolder.Name, html += "</div>");
|
||||
|
||||
if (virtualFolder.showNameWithIcon) {
|
||||
html += '<div style="margin:1em 0;position:width:100%;">';
|
||||
html += virtualFolder.Name;
|
||||
html += "</div>";
|
||||
}
|
||||
|
||||
html += "</h3>";
|
||||
}
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
||||
|
||||
// always show menu unless explicitly hidden
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">'; // always show menu unless explicitly hidden
|
||||
|
||||
if (virtualFolder.showMenu !== false) {
|
||||
html += '<div style="text-align:right; float:right;padding-top:5px;">';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><i class="md-icon"></i></button>';
|
||||
html += "</div>";
|
||||
}
|
||||
|
||||
html += "<div class='cardText'>";
|
||||
virtualFolder.showNameWithIcon ? html += " " : html += virtualFolder.Name;
|
||||
|
||||
if (virtualFolder.showNameWithIcon) {
|
||||
html += " ";
|
||||
} else {
|
||||
html += virtualFolder.Name;
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
var typeName = getCollectionTypeOptions().filter(function(t) {
|
||||
return t.value == virtualFolder.CollectionType
|
||||
var typeName = getCollectionTypeOptions().filter(function (t) {
|
||||
return t.value == virtualFolder.CollectionType;
|
||||
})[0];
|
||||
typeName = typeName ? typeName.name : globalize.translate("FolderTypeUnset");
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
virtualFolder.showType === false ? html += " " : html += typeName;
|
||||
|
||||
if (virtualFolder.showType === false) {
|
||||
html += " ";
|
||||
} else {
|
||||
html += typeName;
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
|
||||
if (virtualFolder.showLocations === false) {
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += " ";
|
||||
|
@ -286,6 +337,7 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
html += globalize.translate("NumLocationsValue", virtualFolder.Locations.length);
|
||||
html += "</div>";
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
|
@ -305,18 +357,18 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
}, {
|
||||
href: "metadatanfo.html",
|
||||
name: globalize.translate("TabNfoSettings")
|
||||
}]
|
||||
}];
|
||||
}
|
||||
|
||||
window.WizardLibraryPage = {
|
||||
next: function() {
|
||||
Dashboard.navigate("wizardsettings.html")
|
||||
next: function () {
|
||||
Dashboard.navigate("wizardsettings.html");
|
||||
}
|
||||
};
|
||||
pageClassOn("pageshow", "mediaLibraryPage", function() {
|
||||
pageClassOn("pageshow", "mediaLibraryPage", function () {
|
||||
reloadLibrary(this);
|
||||
});
|
||||
pageIdOn("pageshow", "mediaLibraryPage", function() {
|
||||
pageIdOn("pageshow", "mediaLibraryPage", function () {
|
||||
libraryMenu.setTabs("librarysetup", 0, getTabs);
|
||||
var page = this;
|
||||
taskButton({
|
||||
|
@ -326,7 +378,7 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
|||
button: page.querySelector(".btnRefresh")
|
||||
});
|
||||
});
|
||||
pageIdOn("pagebeforehide", "mediaLibraryPage", function() {
|
||||
pageIdOn("pagebeforehide", "mediaLibraryPage", function () {
|
||||
var page = this;
|
||||
taskButton({
|
||||
mode: "off",
|
||||
|
|
|
@ -140,31 +140,31 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
|||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: Globalize.translate("OptionNameSort"),
|
||||
id: "SortName"
|
||||
id: "SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionImdbRating"),
|
||||
id: "CommunityRating,SortName"
|
||||
id: "CommunityRating,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionCriticRating"),
|
||||
id: "CriticRating,SortName"
|
||||
id: "CriticRating,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName"
|
||||
id: "DateCreated,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionDatePlayed"),
|
||||
id: "DatePlayed,SortName"
|
||||
id: "DatePlayed,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionParentalRating"),
|
||||
id: "OfficialRating,SortName"
|
||||
id: "OfficialRating,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionPlayCount"),
|
||||
id: "PlayCount,SortName"
|
||||
id: "PlayCount,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionReleaseDate"),
|
||||
id: "PremiereDate,SortName"
|
||||
id: "PremiereDate,SortName,ProductionYear"
|
||||
}, {
|
||||
name: Globalize.translate("OptionRuntime"),
|
||||
id: "Runtime,SortName"
|
||||
id: "Runtime,SortName,ProductionYear"
|
||||
}],
|
||||
callback: function() {
|
||||
query.StartIndex = 0, userSettings.saveQuerySettings(savedQueryKey, query), itemsContainer.refreshItems()
|
||||
|
@ -189,7 +189,7 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
|||
savedQueryKey = params.topParentId + "-" + options.mode,
|
||||
savedViewKey = savedQueryKey + "-view",
|
||||
query = {
|
||||
SortBy: "SortName",
|
||||
SortBy: "SortName,ProductionYear",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Movie",
|
||||
Recursive: !0,
|
||||
|
|
|
@ -13,7 +13,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, l
|
|||
}
|
||||
|
||||
function loadAuthProviders(page, user, providers) {
|
||||
providers.length > 1 && !user.Policy.IsAdministrator ? page.querySelector(".fldSelectLoginProvider").classList.remove("hide") : page.querySelector(".fldSelectLoginProvider").classList.add("hide");
|
||||
providers.length > 1 ? page.querySelector(".fldSelectLoginProvider").classList.remove("hide") : page.querySelector(".fldSelectLoginProvider").classList.add("hide");
|
||||
var currentProviderId = user.Policy.AuthenticationProviderId;
|
||||
page.querySelector(".selectLoginProvider").innerHTML = providers.map(function(provider) {
|
||||
var selected = provider.Id === currentProviderId || providers.length < 2 ? " selected" : "";
|
||||
|
@ -22,11 +22,7 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, l
|
|||
}
|
||||
|
||||
function loadPasswordResetProviders(page, user, providers) {
|
||||
if (providers.length > 1 && !user.Policy.IsAdministrator) {
|
||||
page.querySelector(".fldSelectPasswordResetProvider").classList.remove("hide");
|
||||
} else {
|
||||
page.querySelector(".fldSelectPasswordResetProvider").classList.add("hide");
|
||||
}
|
||||
providers.length > 1 ? page.querySelector(".fldSelectPasswordResetProvider").classList.remove("hide") : page.querySelector(".fldSelectPasswordResetProvider").classList.add("hide");
|
||||
var currentProviderId = user.Policy.PasswordResetProviderId;
|
||||
page.querySelector(".selectPasswordResetProvider").innerHTML = providers.map(function(provider) {
|
||||
var selected = (provider.Id === currentProviderId || providers.length < 2) ? " selected" : "";
|
||||
|
|
|
@ -9,7 +9,7 @@ define(["loading", "dom", "globalize", "humanedate", "paper-icon-button-light",
|
|||
title: globalize.translate("DeleteUser"),
|
||||
text: msg,
|
||||
confirmText: globalize.translate("ButtonDelete"),
|
||||
primary: "cancel"
|
||||
primary: "delete"
|
||||
}).then(function () {
|
||||
loading.show();
|
||||
ApiClient.deleteUser(id).then(function () {
|
||||
|
|
|
@ -272,10 +272,9 @@ div[data-role=controlgroup] a.ui-btn-active {
|
|||
position: relative
|
||||
}
|
||||
|
||||
.sessionAppInfo,
|
||||
.sessionNowPlayingInfo {
|
||||
padding: .5em;
|
||||
overflow: hidden
|
||||
.sessionAppInfo {
|
||||
padding: 0.5em;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.sessionCardButtons {
|
||||
|
@ -317,105 +316,60 @@ div[data-role=controlgroup] a.ui-btn-active {
|
|||
max-width: 200px
|
||||
}
|
||||
|
||||
.sessionNowPlayingInfo {
|
||||
.sessionNowPlayingDetails {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 11px;
|
||||
max-width: 50%;
|
||||
-o-text-overflow: ellipsis;
|
||||
text-overflow: ellipsis
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sessionNowPlayingInfo {
|
||||
flex-grow: 1;
|
||||
text-overflow: ellipsis;
|
||||
padding: 0.8em 0.5em;
|
||||
}
|
||||
|
||||
.sessionAppInfo img {
|
||||
max-width: 32px;
|
||||
max-height: 32px;
|
||||
margin-right: 5px
|
||||
}
|
||||
|
||||
.activeSession .playbackProgress {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 7px;
|
||||
width: 100%;
|
||||
opacity: .95
|
||||
}
|
||||
|
||||
.activeSession:not(.playingSession) .sessionNowPlayingInfo {
|
||||
bottom: 0
|
||||
max-width: 40px;
|
||||
max-height: 40px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.sessionNowPlayingTime {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 19px
|
||||
flex-shrink: 0;
|
||||
align-self: flex-end;
|
||||
text-overflow: ellipsis;
|
||||
padding: 0.8em 0.5em;
|
||||
}
|
||||
|
||||
.sessionNowPlayingStreamInfo {
|
||||
white-space: nowrap
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.activeSession .playbackProgress,
|
||||
.activeSession .transcodingProgress {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 5px;
|
||||
height: 6px;
|
||||
width: 100%;
|
||||
opacity: .9;
|
||||
position: absolute
|
||||
}
|
||||
|
||||
.playbackProgress,
|
||||
.transcodingProgress {
|
||||
appearance: none;
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
margin: 0 5px 0 0;
|
||||
height: 14px;
|
||||
border: 0 solid #222;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
width: 50px;
|
||||
background: #000 !important
|
||||
margin: 0px;
|
||||
width: 100%;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.playbackProgress::-webkit-progress-bar,
|
||||
.transcodingProgress::-webkit-progress-bar {
|
||||
background: #000
|
||||
.playbackProgress > div {
|
||||
z-index: 1000;
|
||||
background-color: #00a4dc;
|
||||
}
|
||||
|
||||
.transcodingSession .playbackProgress {
|
||||
bottom: 5px
|
||||
}
|
||||
|
||||
.transcodingProgress::-moz-progress-bar {
|
||||
border-radius: .3em;
|
||||
background-color: #dd4919
|
||||
}
|
||||
|
||||
.transcodingProgress::-webkit-progress-value {
|
||||
-webkit-border-radius: .3em;
|
||||
border-radius: .3em;
|
||||
background-color: #dd4919
|
||||
}
|
||||
|
||||
.transcodingProgress[aria-valuenow]:before {
|
||||
-webkit-border-radius: .3em;
|
||||
border-radius: .3em;
|
||||
background-color: #dd4919
|
||||
}
|
||||
|
||||
.playbackProgress::-moz-progress-bar {
|
||||
background-color: #00a4dc
|
||||
}
|
||||
|
||||
.playbackProgress::-webkit-progress-value {
|
||||
background-color: #00a4dc
|
||||
}
|
||||
|
||||
.playbackProgress[aria-valuenow]:before {
|
||||
background-color: #00a4dc
|
||||
.transcodingProgress > div {
|
||||
background-color: #dd4919;
|
||||
}
|
||||
|
||||
@media all and (max-width:34.375em) {
|
||||
|
|
|
@ -47,6 +47,10 @@
|
|||
background: #00a4dc !important
|
||||
}
|
||||
|
||||
.metadataSidebarIcon {
|
||||
margin-right: .4em
|
||||
}
|
||||
|
||||
@media all and (min-width:50em) {
|
||||
.editPageSidebar {
|
||||
position: fixed;
|
||||
|
|
|
@ -70,11 +70,10 @@ div[data-role=page] {
|
|||
.page,
|
||||
.pageWithAbsoluteTabs .pageTabContent {
|
||||
/* provides room for the music controls */
|
||||
padding-bottom: 5em !important
|
||||
padding-bottom: 5em !important;
|
||||
}
|
||||
|
||||
@media all and (min-width:50em) {
|
||||
|
||||
.readOnlyContent,
|
||||
form {
|
||||
max-width: 54em
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="fldRunWebAppAtStartup" class="checkboxContainer checkboxContainer-withDescription hide">
|
||||
<div id="fldAutoRunWebApp" class="checkboxContainer checkboxContainer-withDescription hide">
|
||||
<label>
|
||||
<input is="emby-checkbox" type="checkbox" id="chkRunWebAppAtStartup" />
|
||||
<input is="emby-checkbox" type="checkbox" id="chkAutoRunWebApp" />
|
||||
<span>${LaunchWebAppOnStartup}</span>
|
||||
</label>
|
||||
<div class="fieldDescription checkboxFieldDescription">
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
<div class="selectContainer">
|
||||
<select is="emby-select" id="selectVideoDecoder" label="${LabelHardwareAccelerationType}">
|
||||
<option value="">${OptionNone}</option>
|
||||
<option value="amf">AMD AMF (experimental)</option>
|
||||
<option value="qsv">Intel Quick Sync (experimental)</option>
|
||||
<option value="mediacodec">MediaCodec Android (experimental)</option>
|
||||
<option value="omx">OpenMAX OMX (experimental)</option>
|
||||
<option value="nvenc">Nvidia NVENC (experimental)</option>
|
||||
<option value="vaapi">Video Acceleration API (VA API) (experimental)</option>
|
||||
<option value="h264_v4l2m2m">Exynos V4L2 MFC Encoder (experimental)</option>
|
||||
<option value="amf">AMD AMF</option>
|
||||
<option value="qsv">Intel Quick Sync</option>
|
||||
<option value="mediacodec">MediaCodec Android</option>
|
||||
<option value="omx">OpenMAX OMX</option>
|
||||
<option value="nvenc">Nvidia NVENC</option>
|
||||
<option value="vaapi">Video Acceleration API (VAAPI)</option>
|
||||
<option value="h264_v4l2m2m">Exynos V4L2 MFC</option>
|
||||
</select>
|
||||
<div class="fieldDescription">${LabelHardwareAccelerationTypeHelp}</div>
|
||||
</div>
|
||||
|
|
|
@ -30,6 +30,10 @@
|
|||
|
||||
</div>
|
||||
|
||||
<div class="itemMiscInfo nativeName hide">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="itemMiscInfo itemMiscInfo-primary" style="margin: .7em 0;font-size:92%;">
|
||||
|
||||
</div>
|
||||
|
@ -191,6 +195,7 @@
|
|||
</div>
|
||||
|
||||
<div class="detailSectionContent">
|
||||
<div class="itemLastPlayed hide"></div>
|
||||
|
||||
<p class="itemGenres"></p>
|
||||
<h3 class="tagline"></h3>
|
||||
|
@ -202,6 +207,7 @@
|
|||
<div class="itemTags hide" style="margin: .7em 0;font-size:92%;">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="itemExternalLinks hide" style="margin: .7em 0;font-size:92%;">
|
||||
|
||||
</div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div class="readOnlyContent" style="margin: 0 auto;">
|
||||
<div class="verticalSection verticalSection-extrabottompadding">
|
||||
<h2 class="sectionTitle headerUsername" style="padding-left:.25em;"></h2>
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="#" class="lnkMyProfile listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkMyProfile listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">person</i>
|
||||
<div class="listItemBody">
|
||||
|
@ -13,7 +13,7 @@
|
|||
</div>
|
||||
</a>
|
||||
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="#" class="lnkDisplayPreferences listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkDisplayPreferences listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">tv</i>
|
||||
<div class="listItemBody">
|
||||
|
@ -22,7 +22,7 @@
|
|||
</div>
|
||||
</a>
|
||||
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="#" class="lnkHomePreferences listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkHomePreferences listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">home</i>
|
||||
<div class="listItemBody">
|
||||
|
@ -31,7 +31,7 @@
|
|||
</div>
|
||||
</a>
|
||||
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="#" class="lnkLanguagePreferences listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkLanguagePreferences listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">play_circle_filled</i>
|
||||
<div class="listItemBody">
|
||||
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
</a>
|
||||
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="#" class="lnkSubtitlePreferences listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkSubtitlePreferences listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">closed_caption</i>
|
||||
<div class="listItemBody">
|
||||
|
@ -70,7 +70,7 @@
|
|||
</div>
|
||||
<div class="userSection verticalSection verticalSection-extrabottompadding">
|
||||
<h2 class="sectionTitle" style="padding-left:.25em;">${HeaderUser}</h2>
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="selectserver.html" class="selectServer hide listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="selectserver.html" class="selectServer hide listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">wifi</i>
|
||||
<div class="listItemBody">
|
||||
|
@ -78,7 +78,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<a is="emby-linkbutton" style="display:block; padding: 0; margin:0;" data-ripple="false" href="#" class="btnLogout listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="btnLogout listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">exit_to_app</i>
|
||||
<div class="listItemBody">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(["datetime", "jQuery", "material-icons"], function(datetime, $) {
|
||||
define(["datetime", "jQuery", "material-icons"], function (datetime, $) {
|
||||
"use strict";
|
||||
|
||||
function getNode(item, folderState, selected) {
|
||||
|
@ -7,7 +7,7 @@ define(["datetime", "jQuery", "material-icons"], function(datetime, $) {
|
|||
id: item.Id,
|
||||
text: htmlName,
|
||||
state: {
|
||||
opened: item.IsFolder && "open" == folderState,
|
||||
opened: item.IsFolder && folderState == "open",
|
||||
selected: selected
|
||||
},
|
||||
li_attr: {
|
||||
|
@ -15,211 +15,326 @@ define(["datetime", "jQuery", "material-icons"], function(datetime, $) {
|
|||
collectiontype: item.CollectionType
|
||||
}
|
||||
};
|
||||
return item.IsFolder ? (node.children = [{
|
||||
text: "Loading...",
|
||||
icon: !1
|
||||
}], node.icon = !1) : node.icon = !1, node.state.opened && (node.li_attr.loadedFromServer = !0), selected && (selectedNodeId = item.Id), node
|
||||
if (item.IsFolder) {
|
||||
node.children = [{
|
||||
text: "Loading...",
|
||||
icon: false
|
||||
}];
|
||||
node.icon = false;
|
||||
} else {
|
||||
node.icon = false;
|
||||
}
|
||||
if (node.state.opened) {
|
||||
node.li_attr.loadedFromServer = true;
|
||||
}
|
||||
if (selected) {
|
||||
selectedNodeId = item.Id;
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
function getNodeInnerHtml(item) {
|
||||
var name = item.Name;
|
||||
item.Number && (name = item.Number + " - " + name), null != item.IndexNumber && "Season" != item.Type && (name = item.IndexNumber + " - " + name);
|
||||
if (item.Number) {
|
||||
name = item.Number + " - " + name;
|
||||
}
|
||||
if (item.IndexNumber != null && item.Type != "Season") {
|
||||
name = item.IndexNumber + " - " + name;
|
||||
}
|
||||
var htmlName = "<div class='editorNode'>";
|
||||
return item.LockData && (htmlName += '<i class="md-icon">lock</i>'), htmlName += name, htmlName += "</div>"
|
||||
if (item.IsFolder) {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">folder</i>';
|
||||
}
|
||||
else if (item.MediaType === "Video") {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">movie</i>';
|
||||
}
|
||||
else if (item.MediaType === "Audio") {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">audiotrack</i>';
|
||||
}
|
||||
else if (item.Type === "TvChannel") {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">live_tv</i>';
|
||||
}
|
||||
else if (item.MediaType === "Photo") {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">photo</i>';
|
||||
}
|
||||
else if (item.MediaType === "Book") {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">book</i>';
|
||||
}
|
||||
if (item.LockData) {
|
||||
htmlName += '<i class="md-icon metadataSidebarIcon">lock</i>';
|
||||
}
|
||||
htmlName += name;
|
||||
htmlName += "</div>";
|
||||
return htmlName;
|
||||
}
|
||||
|
||||
function loadChildrenOfRootNode(page, scope, callback) {
|
||||
ApiClient.getLiveTvChannels({
|
||||
limit: 0
|
||||
}).then(function(result) {
|
||||
}).then(function (result) {
|
||||
var nodes = [];
|
||||
nodes.push({
|
||||
id: "MediaFolders",
|
||||
text: Globalize.translate("HeaderMediaFolders"),
|
||||
state: {
|
||||
opened: !0
|
||||
opened: true
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: "mediafolders",
|
||||
loadedFromServer: !0
|
||||
loadedFromServer: true
|
||||
},
|
||||
icon: !1
|
||||
}), result.TotalRecordCount && nodes.push({
|
||||
id: "livetv",
|
||||
text: Globalize.translate("HeaderLiveTV"),
|
||||
state: {
|
||||
opened: !1
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: "livetv"
|
||||
},
|
||||
children: [{
|
||||
text: "Loading...",
|
||||
icon: !1
|
||||
}],
|
||||
icon: !1
|
||||
}), callback.call(scope, nodes), nodesToLoad.push("MediaFolders")
|
||||
})
|
||||
icon: false
|
||||
});
|
||||
if (result.TotalRecordCount) {
|
||||
nodes.push({
|
||||
id: "livetv",
|
||||
text: Globalize.translate("HeaderLiveTV"),
|
||||
state: {
|
||||
opened: false
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: "livetv"
|
||||
},
|
||||
children: [{
|
||||
text: "Loading...",
|
||||
icon: false
|
||||
}],
|
||||
icon: false
|
||||
});
|
||||
}
|
||||
callback.call(scope, nodes);
|
||||
nodesToLoad.push("MediaFolders");
|
||||
});
|
||||
}
|
||||
|
||||
function loadLiveTvChannels(openItems, callback) {
|
||||
ApiClient.getLiveTvChannels({
|
||||
AddCurrentProgram: !1
|
||||
}).then(function(result) {
|
||||
var nodes = result.Items.map(function(i) {
|
||||
return getNode(i, -1 == openItems.indexOf(i.Id) ? "closed" : "open", !1)
|
||||
AddCurrentProgram: false
|
||||
}).then(function (result) {
|
||||
var nodes = result.Items.map(function (i) {
|
||||
var state = openItems.indexOf(i.Id) == -1 ? "closed" : "open";
|
||||
return getNode(i, state, false);
|
||||
});
|
||||
callback(nodes)
|
||||
})
|
||||
callback(nodes);
|
||||
});
|
||||
}
|
||||
|
||||
function loadMediaFolders(page, scope, openItems, callback) {
|
||||
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).then(function(result) {
|
||||
var nodes = result.Items.map(function(n) {
|
||||
return getNode(n, -1 == openItems.indexOf(n.Id) ? "closed" : "open", !1)
|
||||
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).then(function (result) {
|
||||
var nodes = result.Items.map(function (n) {
|
||||
var state = openItems.indexOf(n.Id) == -1 ? "closed" : "open";
|
||||
return getNode(n, state, false);
|
||||
});
|
||||
callback.call(scope, nodes);
|
||||
for (var i = 0, length = nodes.length; i < length; i++) nodes[i].state.opened && nodesToLoad.push(nodes[i].id)
|
||||
})
|
||||
for (var i = 0, length = nodes.length; i < length; i++) {
|
||||
if (nodes[i].state.opened) {
|
||||
nodesToLoad.push(nodes[i].id);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function loadNode(page, scope, node, openItems, selectedId, currentUser, callback) {
|
||||
var id = node.id;
|
||||
if ("#" == id) return void loadChildrenOfRootNode(page, scope, callback);
|
||||
if ("livetv" == id) return void loadLiveTvChannels(openItems, callback);
|
||||
if ("MediaFolders" == id) return void loadMediaFolders(page, scope, openItems, callback);
|
||||
if (id == "#") {
|
||||
loadChildrenOfRootNode(page, scope, callback);
|
||||
return;
|
||||
}
|
||||
if (id == "livetv") {
|
||||
loadLiveTvChannels(id, openItems, callback);
|
||||
return;
|
||||
}
|
||||
if (id == "MediaFolders") {
|
||||
loadMediaFolders(page, scope, openItems, callback);
|
||||
return;
|
||||
}
|
||||
var query = {
|
||||
ParentId: id,
|
||||
Fields: "Settings",
|
||||
IsVirtualUnaired: !1,
|
||||
IsMissing: !1,
|
||||
EnableTotalRecordCount: !1,
|
||||
EnableImages: !1,
|
||||
EnableUserData: !1
|
||||
},
|
||||
itemtype = node.li_attr.itemtype;
|
||||
"Season" != itemtype && "Series" != itemtype && (query.SortBy = "SortName"), ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function(result) {
|
||||
var nodes = result.Items.map(function(n) {
|
||||
return getNode(n, -1 == openItems.indexOf(n.Id) ? "closed" : "open", n.Id == selectedId)
|
||||
ParentId: id,
|
||||
Fields: "Settings",
|
||||
IsVirtualUnaired: false,
|
||||
IsMissing: false,
|
||||
EnableTotalRecordCount: false,
|
||||
EnableImages: false,
|
||||
EnableUserData: false
|
||||
};
|
||||
var itemtype = node.li_attr.itemtype;
|
||||
if (itemtype != "Season" && itemtype != "Series") {
|
||||
query.SortBy = "SortName";
|
||||
}
|
||||
ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
|
||||
var nodes = result.Items.map(function (n) {
|
||||
var state = openItems.indexOf(n.Id) == -1 ? "closed" : "open";
|
||||
return getNode(n, state, n.Id == selectedId);
|
||||
});
|
||||
callback.call(scope, nodes);
|
||||
for (var i = 0, length = nodes.length; i < length; i++) nodes[i].state.opened && nodesToLoad.push(nodes[i].id)
|
||||
})
|
||||
for (var i = 0, length = nodes.length; i < length; i++) {
|
||||
if (nodes[i].state.opened) {
|
||||
nodesToLoad.push(nodes[i].id);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function scrollToNode(id) {
|
||||
var elem = $("#" + id)[0];
|
||||
elem && elem.scrollIntoView()
|
||||
if (elem) {
|
||||
elem.scrollIntoView();
|
||||
}
|
||||
}
|
||||
|
||||
function initializeTree(page, currentUser, openItems, selectedId) {
|
||||
require(["jstree"], function() {
|
||||
initializeTreeInternal(page, currentUser, openItems, selectedId)
|
||||
})
|
||||
require(["jstree"], function () {
|
||||
initializeTreeInternal(page, currentUser, openItems, selectedId);
|
||||
});
|
||||
}
|
||||
|
||||
function onNodeSelect(event, data) {
|
||||
var node = data.node,
|
||||
eventData = {
|
||||
id: node.id,
|
||||
itemType: node.li_attr.itemtype,
|
||||
serverItemType: node.li_attr.serveritemtype,
|
||||
collectionType: node.li_attr.collectiontype
|
||||
};
|
||||
"livetv" != eventData.itemType && "mediafolders" != eventData.itemType ? (this.dispatchEvent(new CustomEvent("itemclicked", {
|
||||
detail: eventData,
|
||||
bubbles: !0,
|
||||
cancelable: !1
|
||||
})), document.querySelector(".editPageSidebar").classList.add("editPageSidebar-withcontent")) : document.querySelector(".editPageSidebar").classList.remove("editPageSidebar-withcontent")
|
||||
var node = data.node;
|
||||
var eventData = {
|
||||
id: node.id,
|
||||
itemType: node.li_attr.itemtype,
|
||||
serverItemType: node.li_attr.serveritemtype,
|
||||
collectionType: node.li_attr.collectiontype
|
||||
};
|
||||
if (eventData.itemType != "livetv" && eventData.itemType != "mediafolders") {
|
||||
{
|
||||
this.dispatchEvent(new CustomEvent("itemclicked", {
|
||||
detail: eventData,
|
||||
bubbles: true,
|
||||
cancelable: false
|
||||
}));
|
||||
}
|
||||
document.querySelector(".editPageSidebar").classList.add("editPageSidebar-withcontent");
|
||||
} else {
|
||||
document.querySelector(".editPageSidebar").classList.remove("editPageSidebar-withcontent");
|
||||
}
|
||||
}
|
||||
|
||||
function onNodeOpen(event, data) {
|
||||
var page = $(this).parents(".page")[0],
|
||||
node = data.node;
|
||||
node.children && node.children && loadNodesToLoad(page, node), node.li_attr && "#" != node.id && !node.li_attr.loadedFromServer && (node.li_attr.loadedFromServer = !0, $.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback))
|
||||
var page = $(this).parents(".page")[0];
|
||||
var node = data.node;
|
||||
if (node.children && node.children) {
|
||||
loadNodesToLoad(page, node);
|
||||
}
|
||||
if (node.li_attr && node.id != "#" && !node.li_attr.loadedFromServer) {
|
||||
node.li_attr.loadedFromServer = true;
|
||||
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
||||
}
|
||||
}
|
||||
|
||||
function onNodeLoad(event, data) {
|
||||
var page = $(this).parents(".page")[0],
|
||||
node = data.node;
|
||||
node.children && node.children && loadNodesToLoad(page, node), node.li_attr && "#" != node.id && !node.li_attr.loadedFromServer && (node.li_attr.loadedFromServer = !0, $.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback))
|
||||
var page = $(this).parents(".page")[0];
|
||||
var node = data.node;
|
||||
if (node.children && node.children) {
|
||||
loadNodesToLoad(page, node);
|
||||
}
|
||||
if (node.li_attr && node.id != "#" && !node.li_attr.loadedFromServer) {
|
||||
node.li_attr.loadedFromServer = true;
|
||||
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
||||
}
|
||||
}
|
||||
|
||||
function initializeTreeInternal(page, currentUser, openItems, selectedId) {
|
||||
nodesToLoad = [], selectedNodeId = null, $.jstree.destroy(), $(".libraryTree", page).jstree({
|
||||
plugins: ["wholerow"],
|
||||
nodesToLoad = [];
|
||||
selectedNodeId = null;
|
||||
$.jstree.destroy();
|
||||
$(".libraryTree", page).jstree({
|
||||
"plugins": ["wholerow"],
|
||||
core: {
|
||||
// Disable animations because jQuery slim does not support them
|
||||
animation: false,
|
||||
check_callback: true,
|
||||
data: function(node, callback) {
|
||||
loadNode(page, this, node, openItems, selectedId, currentUser, callback)
|
||||
data: function (node, callback) {
|
||||
loadNode(page, this, node, openItems, selectedId, currentUser, callback);
|
||||
},
|
||||
themes: {
|
||||
variant: "large"
|
||||
}
|
||||
}
|
||||
}).off("select_node.jstree", onNodeSelect).on("select_node.jstree", onNodeSelect).off("open_node.jstree", onNodeOpen).on("open_node.jstree", onNodeOpen).off("load_node.jstree", onNodeLoad).on("load_node.jstree", onNodeLoad)
|
||||
}).off("select_node.jstree", onNodeSelect).on("select_node.jstree", onNodeSelect).off("open_node.jstree", onNodeOpen).on("open_node.jstree", onNodeOpen).off("load_node.jstree", onNodeLoad).on("load_node.jstree", onNodeLoad);
|
||||
}
|
||||
|
||||
function loadNodesToLoad(page, node) {
|
||||
for (var children = node.children, i = 0, length = children.length; i < length; i++) {
|
||||
var child = children[i]; - 1 != nodesToLoad.indexOf(child) && (nodesToLoad = nodesToLoad.filter(function(n) {
|
||||
return n != child
|
||||
}), $.jstree.reference(".libraryTree", page).load_node(child, loadNodeCallback))
|
||||
var children = node.children;
|
||||
for (var i = 0, length = children.length; i < length; i++) {
|
||||
var child = children[i];
|
||||
if (nodesToLoad.indexOf(child) != -1) {
|
||||
nodesToLoad = nodesToLoad.filter(function (n) {
|
||||
return n != child;
|
||||
});
|
||||
$.jstree.reference(".libraryTree", page).load_node(child, loadNodeCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function loadNodeCallback(node) {
|
||||
selectedNodeId && node.children && -1 != node.children.indexOf(selectedNodeId) && setTimeout(function() {
|
||||
scrollToNode(selectedNodeId)
|
||||
}, 500)
|
||||
if (selectedNodeId && node.children && node.children.indexOf(selectedNodeId) != -1) {
|
||||
setTimeout(function () {
|
||||
scrollToNode(selectedNodeId);
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
|
||||
function updateEditorNode(page, item) {
|
||||
var elem = $("#" + item.Id + ">a", page)[0];
|
||||
if (null != elem && ($(".editorNode", elem).remove(), $(elem).append(getNodeInnerHtml(item)), item.IsFolder)) {
|
||||
var tree = jQuery.jstree._reference(".libraryTree"),
|
||||
currentNode = tree._get_node(null, !1);
|
||||
tree.refresh(currentNode)
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
$(".editorNode", elem).remove();
|
||||
$(elem).append(getNodeInnerHtml(item));
|
||||
if (item.IsFolder) {
|
||||
var tree = jQuery.jstree._reference(".libraryTree");
|
||||
var currentNode = tree._get_node(null, false);
|
||||
tree.refresh(currentNode);
|
||||
}
|
||||
}
|
||||
|
||||
function setCurrentItemId(id) {
|
||||
itemId = id
|
||||
itemId = id;
|
||||
}
|
||||
|
||||
function getCurrentItemId() {
|
||||
if (itemId) return itemId;
|
||||
if (itemId) {
|
||||
return itemId;
|
||||
}
|
||||
var url = window.location.hash || window.location.href;
|
||||
return getParameterByName("id", url)
|
||||
return getParameterByName("id", url);
|
||||
}
|
||||
var selectedNodeId, nodesToLoad = [];
|
||||
$(document).on("itemsaved", ".metadataEditorPage", function(e, item) {
|
||||
updateEditorNode(this, item)
|
||||
}).on("pagebeforeshow", ".metadataEditorPage", function() {
|
||||
require(["css!css/metadataeditor.css"])
|
||||
}).on("pagebeforeshow", ".metadataEditorPage", function() {
|
||||
var nodesToLoad = [];
|
||||
var selectedNodeId;
|
||||
$(document).on("itemsaved", ".metadataEditorPage", function (e, item) {
|
||||
updateEditorNode(this, item);
|
||||
}).on("pagebeforeshow", ".metadataEditorPage", function () {
|
||||
require(["css!css/metadataeditor.css"]);
|
||||
}).on("pagebeforeshow", ".metadataEditorPage", function () {
|
||||
var page = this;
|
||||
Dashboard.getCurrentUser().then(function(user) {
|
||||
Dashboard.getCurrentUser().then(function (user) {
|
||||
var id = getCurrentItemId();
|
||||
id ? ApiClient.getAncestorItems(id, user.Id).then(function(ancestors) {
|
||||
var ids = ancestors.map(function(i) {
|
||||
return i.Id
|
||||
if (id) {
|
||||
ApiClient.getAncestorItems(id, user.Id).then(function (ancestors) {
|
||||
var ids = ancestors.map(function (i) {
|
||||
return i.Id;
|
||||
});
|
||||
initializeTree(page, user, ids, id);
|
||||
});
|
||||
initializeTree(page, user, ids, id)
|
||||
}) : initializeTree(page, user, [])
|
||||
})
|
||||
}).on("pagebeforehide", ".metadataEditorPage", function() {
|
||||
$(".libraryTree", this).off("select_node.jstree", onNodeSelect).off("open_node.jstree", onNodeOpen).off("load_node.jstree", onNodeLoad)
|
||||
} else {
|
||||
initializeTree(page, user, []);
|
||||
}
|
||||
});
|
||||
}).on("pagebeforehide", ".metadataEditorPage", function () {
|
||||
var page = this;
|
||||
$(".libraryTree", page).off("select_node.jstree", onNodeSelect).off("open_node.jstree", onNodeOpen).off("load_node.jstree", onNodeLoad);
|
||||
});
|
||||
var itemId;
|
||||
window.MetadataEditor = {
|
||||
getItemPromise: function() {
|
||||
getItemPromise: function () {
|
||||
var currentItemId = getCurrentItemId();
|
||||
return currentItemId ? ApiClient.getItem(Dashboard.getCurrentUserId(), currentItemId) : ApiClient.getRootFolder(Dashboard.getCurrentUserId())
|
||||
if (currentItemId) {
|
||||
return ApiClient.getItem(Dashboard.getCurrentUserId(), currentItemId);
|
||||
}
|
||||
return ApiClient.getRootFolder(Dashboard.getCurrentUserId());
|
||||
},
|
||||
getCurrentItemId: getCurrentItemId,
|
||||
setCurrentItemId: setCurrentItemId
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -713,7 +713,6 @@ var AppInfo = {};
|
|||
pluginManager: componentsPath + "/pluginManager",
|
||||
packageManager: componentsPath + "/packagemanager"
|
||||
};
|
||||
paths.hlsjs = bowerPath + "/hlsjs/dist/hls.min";
|
||||
paths.flvjs = "thirdparty/flvjs/flv.min";
|
||||
paths.shaka = "thirdparty/shaka/shaka-player.compiled";
|
||||
define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency);
|
||||
|
@ -783,7 +782,6 @@ var AppInfo = {};
|
|||
define("displaySettings", [componentsPath + "/displaysettings/displaysettings"], returnFirstDependency);
|
||||
define("playbackSettings", [componentsPath + "/playbacksettings/playbacksettings"], returnFirstDependency);
|
||||
define("homescreenSettings", [componentsPath + "/homescreensettings/homescreensettings"], returnFirstDependency);
|
||||
define("homescreenSettingsDialog", [componentsPath + "/homescreensettings/homescreensettingsdialog"], returnFirstDependency);
|
||||
define("playbackManager", [componentsPath + "/playback/playbackmanager"], getPlaybackManager);
|
||||
define("layoutManager", [componentsPath + "/layoutManager", "apphost"], getLayoutManager);
|
||||
define("homeSections", [componentsPath + "/homesections/homesections"], returnFirstDependency);
|
||||
|
@ -819,7 +817,7 @@ var AppInfo = {};
|
|||
}
|
||||
},
|
||||
bundles: {
|
||||
bundle: ["jstree"]
|
||||
bundle: ["jstree", "hlsjs"]
|
||||
},
|
||||
urlArgs: urlArgs,
|
||||
paths: paths,
|
||||
|
|
|
@ -516,7 +516,7 @@
|
|||
"LabelSerialNumber": "الرقم التسلسلي",
|
||||
"LabelSeriesRecordingPath": "مسار تسجيل المسلسلات (خيارية):",
|
||||
"LabelServerHost": "المضيف:",
|
||||
"LabelServerHostHelp": "192.168.1.100 أو https://myserver.com",
|
||||
"LabelServerHostHelp": "192.168.1.100:8096 أو https://myserver.com",
|
||||
"LabelServerPort": "المنفذ:",
|
||||
"LabelSkipIfAudioTrackPresent": "تخطّىإن كان المقطع الصوتي الافتراضي يتوافق مع اللغة المنزلة",
|
||||
"LabelSkipIfAudioTrackPresentHelp": "لا تختر هذه لكي تؤكد وجود ترجمة لجميع الفيديوهات، بغض النظر عن لغة الصوت.",
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
"CriticRating": "Kritiker Bewertung",
|
||||
"CustomDlnaProfilesHelp": "Erstelle ein benutzerdefiniertes Profil für ein neues Zielgerät, oder um ein vorhandenes Systemprofil zu überschreiben.",
|
||||
"DateAdded": "Hinzugefügt am",
|
||||
"DatePlayed": "Gesehen am",
|
||||
"DatePlayed": "Abgespielt am",
|
||||
"DeathDateValue": "Gestorben: {0}",
|
||||
"Default": "Standard",
|
||||
"DefaultErrorMessage": "Es gab einen Fehler beim verarbeiten der Anfrage. Bitte versuche es später erneut.",
|
||||
|
@ -1293,6 +1293,8 @@
|
|||
"ButtonTrailer": "Trailer",
|
||||
"ButtonWebsite": "Webseite",
|
||||
"ChangingMetadataImageSettingsNewContent": "Änderungen an Metadaten- und Artwork-Einstellungen betreffen nur der Bibliothek neu hinzugefügte Inhalte. Um diese Änderungen auf existierende Medien anzuwenden müssen die Metadaten manuell aktualisiert werden.",
|
||||
"CopyStreamURL": "Kopiere Streaminglink",
|
||||
"CopyStreamURLSuccess": "Link erfolgreich kopiert.",
|
||||
"Desktop": "Desktop",
|
||||
"Download": "Download",
|
||||
"Extras": "Extras",
|
||||
|
@ -1410,6 +1412,7 @@
|
|||
"Whitelist": "Erlaubt",
|
||||
"AuthProviderHelp": "Auswählen eines Authentifizierungsanbieter, der zur Authentifizierung des Passworts dieses Benutzes verwendet werden soll",
|
||||
"Features": "Features",
|
||||
"HeaderFavoriteBooks": "Lieblingsbücher",
|
||||
"HeaderFavoriteMovies": "Lieblingsfilme",
|
||||
"HeaderFavoriteShows": "Lieblingsserien",
|
||||
"HeaderFavoriteEpisodes": "Lieblingsepisoden",
|
||||
|
@ -1438,5 +1441,9 @@
|
|||
"PasswordResetProviderHelp": "Wählen Sie einen Password Reset Provider, der verwendet werden soll, wenn dieser Benutzer ein Passwort zurücksetzen möchte",
|
||||
"Box": "Box",
|
||||
"HeaderHome": "Home",
|
||||
"HeaderHomeSettings": "Home Einstellungen"
|
||||
"HeaderHomeSettings": "Home Einstellungen",
|
||||
"LabelAudioCodec": "Audiocodec:",
|
||||
"LabelAudioChannels": "Audiokanäle:",
|
||||
"HeaderTypeImageFetchers": "{0} Bildquellen",
|
||||
"CopyStreamURL": "Stream URL kopieren"
|
||||
}
|
||||
|
|
|
@ -385,6 +385,7 @@
|
|||
"HeaderEpisodes": "Episodes",
|
||||
"HeaderError": "Error",
|
||||
"HeaderExternalIds": "External IDs:",
|
||||
"HeaderFavoriteBooks": "Favourite Books",
|
||||
"HeaderFavoriteMovies": "Favourite Movies",
|
||||
"HeaderFavoriteShows": "Favourite Shows",
|
||||
"HeaderFavoriteEpisodes": "Favourite Episodes",
|
||||
|
@ -452,5 +453,7 @@
|
|||
"HeaderPassword": "Password",
|
||||
"HeaderPasswordReset": "Password Reset",
|
||||
"HeaderPaths": "Paths",
|
||||
"HeaderPendingInvitations": "Pending Invitations"
|
||||
"HeaderPendingInvitations": "Pending Invitations",
|
||||
"CopyStreamURL": "Copy Stream URL",
|
||||
"CopyStreamURLSuccess": "URL copied successfully."
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
"AllEpisodes": "All episodes",
|
||||
"AllLanguages": "All languages",
|
||||
"AllLibraries": "All libraries",
|
||||
"AllowHWTranscodingHelp": "If enabled, allow the tuner to transcode streams on the fly. This may help reduce transcoding required by Jellyfin Server.",
|
||||
"AllowHWTranscodingHelp": "Allow the tuner to transcode streams on the fly. This may help reduce transcoding required by the server.",
|
||||
"AllowMediaConversion": "Allow media conversion",
|
||||
"AllowMediaConversionHelp": "Grant or deny access to the convert media feature.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Allow subtitle extraction on the fly",
|
||||
|
@ -39,7 +39,7 @@
|
|||
"AspectRatio": "Aspect ratio",
|
||||
"AttributeNew": "New",
|
||||
"Audio": "Audio",
|
||||
"AuthProviderHelp": "Select an Authentication Provider to be used to authenticate this user's password",
|
||||
"AuthProviderHelp": "Select an Authentication Provider to be used to authenticate this user's password.",
|
||||
"Auto": "Auto",
|
||||
"AutoBasedOnLanguageSetting": "Auto (based on language setting)",
|
||||
"Backdrop": "Backdrop",
|
||||
|
@ -55,7 +55,7 @@
|
|||
"BoxRear": "Box (rear)",
|
||||
"Browse": "Browse",
|
||||
"BrowsePluginCatalogMessage": "Browse our plugin catalog to view available plugins.",
|
||||
"BurnSubtitlesHelp": "Determines if the server should burn in subtitles when converting video depending on the subtitles format. Avoiding burning in subtitles will improve server performance. Select Auto to burn image based formats (e.g. VOBSUB, PGS, SUB/IDX, etc.) as well as certain ASS/SSA subtitles.",
|
||||
"BurnSubtitlesHelp": "Determines if the server should burn in subtitles when converting video depending on the subtitle format. Avoiding burning in subtitles will improve server performance. Select Auto to burn image based formats (VOBSUB, PGS, SUB/IDX, etc) and certain ASS/SSA subtitles.",
|
||||
"ButtonAdd": "Add",
|
||||
"ButtonAddMediaLibrary": "Add Media Library",
|
||||
"ButtonAddScheduledTaskTrigger": "Add Trigger",
|
||||
|
@ -160,6 +160,8 @@
|
|||
"Connect": "Connect",
|
||||
"ContinueWatching": "Continue watching",
|
||||
"Continuing": "Continuing",
|
||||
"CopyStreamURL": "Copy Stream URL",
|
||||
"CopyStreamURLSuccess": "URL copied successfully.",
|
||||
"CriticRating": "Critic rating",
|
||||
"CustomDlnaProfilesHelp": "Create a custom profile to target a new device or override a system profile.",
|
||||
"DateAdded": "Date added",
|
||||
|
@ -182,7 +184,7 @@
|
|||
"DetectingDevices": "Detecting devices",
|
||||
"DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.",
|
||||
"DirectPlaying": "Direct playing",
|
||||
"DirectStreamHelp1": "The media is compatible with the device regarding resolution and media type (H.264, AC3, etc.), but is in an incompatible file container (.mkv, .avi, .wmv, etc.). The video will be re-packaged on the fly before streaming it to the device.",
|
||||
"DirectStreamHelp1": "The media is compatible with the device regarding resolution and media type (H.264, AC3, etc), but is in an incompatible file container (mkv, avi, wmv, etc). The video will be re-packaged on the fly before streaming it to the device.",
|
||||
"DirectStreamHelp2": "Direct Streaming a file uses very little processing power without any loss in video quality.",
|
||||
"DirectStreaming": "Direct streaming",
|
||||
"Director": "Director",
|
||||
|
@ -196,7 +198,7 @@
|
|||
"DisplayInMyMedia": "Display on home screen",
|
||||
"DisplayInOtherHomeScreenSections": "Display in home screen sections such as latest media and continue watching",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "This must also be enabled for TV libraries in Jellyfin Server setup.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "This must also be enabled for TV libraries in the server configuration.",
|
||||
"DisplayModeHelp": "Select the type of screen you're running Jellyfin on.",
|
||||
"DoNotRecord": "Do not record",
|
||||
"Down": "Down",
|
||||
|
@ -209,24 +211,24 @@
|
|||
"EditImages": "Edit images",
|
||||
"EditMetadata": "Edit metadata",
|
||||
"EditSubtitles": "Edit subtitles",
|
||||
"EnableBackdrops": "Enable backdrops",
|
||||
"EnableBackdropsHelp": "If enabled, backdrops will be displayed in the background of some pages while browsing the library.",
|
||||
"EnableCinemaMode": "Enable cinema mode",
|
||||
"EnableColorCodedBackgrounds": "Enable color coded backgrounds",
|
||||
"EnableDisplayMirroring": "Enable display mirroring",
|
||||
"EnableExternalVideoPlayers": "Enable external video players",
|
||||
"EnableBackdrops": "Backdrops",
|
||||
"EnableBackdropsHelp": "Display backdrops in the background of some pages while browsing the library.",
|
||||
"EnableCinemaMode": "Cinema mode",
|
||||
"EnableColorCodedBackgrounds": "Color coded backgrounds",
|
||||
"EnableDisplayMirroring": "Display mirroring",
|
||||
"EnableExternalVideoPlayers": "External video players",
|
||||
"EnableExternalVideoPlayersHelp": "An external player menu will be shown when starting video playback.",
|
||||
"EnableHardwareEncoding": "Enable hardware encoding",
|
||||
"EnableNextVideoInfoOverlay": "Enable next video info during playback",
|
||||
"EnableNextVideoInfoOverlay": "Show next video info during playback",
|
||||
"EnableNextVideoInfoOverlayHelp": "At the end of a video, display info about the next video coming up in the current playlist.",
|
||||
"EnablePhotos": "Enable photos",
|
||||
"EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.",
|
||||
"EnablePhotos": "Display photos",
|
||||
"EnablePhotosHelp": "Images will be detected and displayed alongside other media files.",
|
||||
"EnableStreamLooping": "Auto-loop live streams",
|
||||
"EnableStreamLoopingHelp": "Enable this if live streams only contain a few seconds of data and need to be continuously requested. Enabling this when not needed may cause problems.",
|
||||
"EnableThemeSongs": "Enable theme songs",
|
||||
"EnableThemeSongsHelp": "If enabled, theme songs will be played in the background while browsing the library.",
|
||||
"EnableThemeVideos": "Enable theme videos",
|
||||
"EnableThemeVideosHelp": "If enabled, theme videos will be played in the background while browsing the library.",
|
||||
"EnableThemeSongs": "Theme songs",
|
||||
"EnableThemeSongsHelp": "Play theme songs in the background while browsing the library.",
|
||||
"EnableThemeVideos": "Theme videos",
|
||||
"EnableThemeVideosHelp": "Play theme videos in the background while browsing the library.",
|
||||
"Ended": "Ended",
|
||||
"EndsAtValue": "Ends at {0}",
|
||||
"Episodes": "Episodes",
|
||||
|
@ -242,7 +244,7 @@
|
|||
"EveryNDays": "Every {0} days",
|
||||
"ExitFullscreen": "Exit full screen",
|
||||
"ExtraLarge": "Extra large",
|
||||
"ExtractChapterImagesHelp": "Extracting chapter images will allow clients 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.",
|
||||
"ExtractChapterImagesHelp": "Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, resource 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.",
|
||||
"Extras": "Extras",
|
||||
"FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.",
|
||||
"FastForward": "Fast-forward",
|
||||
|
@ -257,9 +259,9 @@
|
|||
"FolderTypeBooks": "Books",
|
||||
"FolderTypeMovies": "Movies",
|
||||
"FolderTypeMusic": "Music",
|
||||
"FolderTypeMusicVideos": "Music videos",
|
||||
"FolderTypeTvShows": "TV Shows",
|
||||
"FolderTypeUnset": "Mixed content",
|
||||
"FolderTypeMusicVideos": "Music Videos",
|
||||
"FolderTypeTvShows": "Shows",
|
||||
"FolderTypeUnset": "Mixed Content",
|
||||
"Folders": "Folders",
|
||||
"ForAdditionalLiveTvOptions": "For additional Live TV providers, click on the Services tab to see the available options.",
|
||||
"FormatValue": "Format: {0}",
|
||||
|
@ -351,6 +353,7 @@
|
|||
"HeaderEpisodes": "Episodes",
|
||||
"HeaderError": "Error",
|
||||
"HeaderExternalIds": "External IDs:",
|
||||
"HeaderFavoriteBooks": "Favorite Books",
|
||||
"HeaderFavoriteMovies": "Favorite Movies",
|
||||
"HeaderFavoriteShows": "Favorite Shows",
|
||||
"HeaderFavoriteEpisodes": "Favorite Episodes",
|
||||
|
@ -541,7 +544,7 @@
|
|||
"LabelAll": "All",
|
||||
"LabelAllowHWTranscoding": "Allow hardware transcoding",
|
||||
"LabelAllowServerAutoRestart": "Allow the server to restart automatically to apply updates",
|
||||
"LabelAllowServerAutoRestartHelp": "The server will only restart during idle periods, when no users are active.",
|
||||
"LabelAllowServerAutoRestartHelp": "The server will only restart during idle periods when no users are active.",
|
||||
"LabelAllowedRemoteAddresses": "Remote IP address filter:",
|
||||
"LabelAllowedRemoteAddressesMode": "Remote IP address filter mode:",
|
||||
"LabelAppName": "App name",
|
||||
|
@ -549,15 +552,21 @@
|
|||
"LabelArtists": "Artists:",
|
||||
"LabelArtistsHelp": "Separate multiple using ;",
|
||||
"LabelAudio": "Audio:",
|
||||
"LabelAudioBitDepth": "Audio bit depth:",
|
||||
"LabelAudioBitrate": "Audio bitrate:",
|
||||
"LabelAudioChannels": "Audio channels:",
|
||||
"LabelAudioCodec": "Audio codec:",
|
||||
"LabelAudioLanguagePreference": "Preferred audio language:",
|
||||
"LabelAudioSampleRate": "Audio sample rate:",
|
||||
"LabelAuthProvider": "Authentication Provider:",
|
||||
"LabelAutomaticallyRefreshInternetMetadataEvery": "Automatically refresh metadata from the internet:",
|
||||
"LabelBindToLocalNetworkAddress": "Bind to local network address:",
|
||||
"LabelBindToLocalNetworkAddressHelp": "Optional. Override the local IP address to bind the http server to. If left empty, the server will bind to all availabile addresses. Changing this value requires restarting Jellyfin Server.",
|
||||
"LabelBirthDate": "Birth date:",
|
||||
"LabelBirthYear": "Birth year:",
|
||||
"LabelBitrate": "Bitrate:",
|
||||
"LabelBlastMessageInterval": "Alive message interval (seconds)",
|
||||
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between server alive messages.",
|
||||
"LabelBlastMessageIntervalHelp": "Determines the duration in seconds between blast alive messages.",
|
||||
"LabelBlockContentWithTags": "Block items with tags:",
|
||||
"LabelBurnSubtitles": "Burn subtitles:",
|
||||
"LabelCache": "Cache:",
|
||||
|
@ -601,7 +610,7 @@
|
|||
"LabelDisplayOrder": "Display order:",
|
||||
"LabelDisplaySpecialsWithinSeasons": "Display specials within seasons they aired in",
|
||||
"LabelDownMixAudioScale": "Audio boost when downmixing:",
|
||||
"LabelDownMixAudioScaleHelp": "Boost audio when downmixing. Set to 1 to preserve original volume value.",
|
||||
"LabelDownMixAudioScaleHelp": "Boost audio when downmixing. A value of one will preserve the original volume.",
|
||||
"LabelDownloadLanguages": "Download languages:",
|
||||
"LabelDropImageHere": "Drop image here, or click to browse.",
|
||||
"LabelDropShadow": "Drop shadow:",
|
||||
|
@ -619,7 +628,7 @@
|
|||
"LabelEnableDlnaDebugLoggingHelp": "Create large log files and should only be used as needed for troubleshooting purposes.",
|
||||
"LabelEnableDlnaPlayTo": "Enable DLNA Play To",
|
||||
"LabelEnableDlnaPlayToHelp": "Detect devices within your network and offer the ability to remote control them.",
|
||||
"LabelEnableDlnaServer": "Enable Dlna server",
|
||||
"LabelEnableDlnaServer": "Enable DLNA server",
|
||||
"LabelEnableDlnaServerHelp": "Allows UPnP devices on your network to browse and play content.",
|
||||
"LabelEnableHardwareDecodingFor": "Enable hardware decoding for:",
|
||||
"LabelEnableRealtimeMonitor": "Enable real time monitoring",
|
||||
|
@ -633,22 +642,22 @@
|
|||
"LabelBaseUrl": "Base URL:",
|
||||
"LabelBaseUrlHelp": "You can add a custom subdirectory here to access the server from a more unique URL.",
|
||||
"LabelExtractChaptersDuringLibraryScan": "Extract chapter images during the library scan",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "Generate chapter images when videos are imported during the library scan. Otherwise, they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.",
|
||||
"LabelFailed": "Failed",
|
||||
"LabelFileOrUrl": "File or url:",
|
||||
"LabelFileOrUrl": "File or URL:",
|
||||
"LabelFinish": "Finish",
|
||||
"LabelFolder": "Folder:",
|
||||
"LabelFont": "Font:",
|
||||
"LabelForgotPasswordUsernameHelp": "Enter your username, if you remember it.",
|
||||
"LabelFormat": "Format:",
|
||||
"LabelFriendlyName": "Friendly name:",
|
||||
"LabelServerNameHelp": "This name will be used to identify this server. If left blank, the computer name will be used.",
|
||||
"LabelServerNameHelp": "This name will be used to identify the server and will default to the server's computer name.",
|
||||
"LabelGroupMoviesIntoCollections": "Group movies into collections",
|
||||
"LabelGroupMoviesIntoCollectionsHelp": "When displaying movie lists, movies belonging to a collection will be displayed as one grouped item.",
|
||||
"LabelH264Crf": "H264 encoding CRF:",
|
||||
"LabelH264EncodingPreset": "H264 encoding preset:",
|
||||
"LabelHardwareAccelerationType": "Hardware acceleration:",
|
||||
"LabelHardwareAccelerationTypeHelp": "Only available on supported systems.",
|
||||
"LabelHardwareAccelerationTypeHelp": "This is an experimental feature only available on supported systems.",
|
||||
"LabelHomeNetworkQuality": "Home network quality:",
|
||||
"LabelHomeScreenSectionValue": "Home screen section {0}:",
|
||||
"LabelHttpsPort": "Local HTTPS port number:",
|
||||
|
@ -662,20 +671,20 @@
|
|||
"LabelImageType": "Image type:",
|
||||
"LabelImportOnlyFavoriteChannels": "Restrict to channels marked as favorite",
|
||||
"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.",
|
||||
"LabelInNetworkSignInWithEasyPasswordHelp": "Use the easy pin code to sign in to clients within your local 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.",
|
||||
"LabelInternetQuality": "Internet quality:",
|
||||
"LabelKeepUpTo": "Keep up to:",
|
||||
"LabelKidsCategories": "Children's categories:",
|
||||
"LabelKodiMetadataDateFormat": "Release date format:",
|
||||
"LabelKodiMetadataDateFormatHelp": "All dates within nfo's will be read and written to using this format.",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs",
|
||||
"LabelKodiMetadataDateFormatHelp": "All dates within NFO files will be parsed using this format.",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "Copy extrafanart to extrathumbs field",
|
||||
"LabelKodiMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Kodi skin compatibility.",
|
||||
"LabelKodiMetadataEnablePathSubstitution": "Enable path substitution",
|
||||
"LabelKodiMetadataEnablePathSubstitutionHelp": "Enables path substitution of image paths using the server's path substitution settings.",
|
||||
"LabelKodiMetadataSaveImagePaths": "Save image paths within nfo files",
|
||||
"LabelKodiMetadataSaveImagePathsHelp": "This is recommended if you have image file names that don't conform to Kodi guidelines.",
|
||||
"LabelKodiMetadataUser": "Save user watch data to nfo's for:",
|
||||
"LabelKodiMetadataUserHelp": "Enable this to save watch data to NFO files for other applications to utilize.",
|
||||
"LabelKodiMetadataUser": "Save user watch data to NFO files for:",
|
||||
"LabelKodiMetadataUserHelp": "Save watch data to NFO files for other applications to utilize.",
|
||||
"LabelLanNetworks": "LAN networks:",
|
||||
"LabelLanguage": "Language:",
|
||||
"LabelLineup": "Lineup:",
|
||||
|
@ -686,7 +695,7 @@
|
|||
"LabelLoginDisclaimerHelp": "A message that will be displayed at the bottom of the login page.",
|
||||
"LabelLogs": "Logs:",
|
||||
"LabelManufacturer": "Manufacturer",
|
||||
"LabelManufacturerUrl": "Manufacturer url",
|
||||
"LabelManufacturerUrl": "Manufacturer URL",
|
||||
"LabelMatchType": "Match type:",
|
||||
"LabelMaxBackdropsPerItem": "Maximum number of backdrops per item:",
|
||||
"LabelMaxChromecastBitrate": "Chromecast streaming quality:",
|
||||
|
@ -717,11 +726,11 @@
|
|||
"LabelModelDescription": "Model description",
|
||||
"LabelModelName": "Model name",
|
||||
"LabelModelNumber": "Model number",
|
||||
"LabelModelUrl": "Model url",
|
||||
"LabelModelUrl": "Model URL",
|
||||
"LabelMonitorUsers": "Monitor activity from:",
|
||||
"LabelMovieCategories": "Movie categories:",
|
||||
"LabelMoviePrefix": "Movie prefix:",
|
||||
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so that Jellyfin can handle it properly.",
|
||||
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so the server can handle it properly.",
|
||||
"LabelMovieRecordingPath": "Movie recording path (optional):",
|
||||
"LabelMusicStreamingTranscodingBitrate": "Music transcoding bitrate:",
|
||||
"LabelMusicStreamingTranscodingBitrateHelp": "Specify a max bitrate when streaming music",
|
||||
|
@ -751,7 +760,10 @@
|
|||
"LabelPersonRoleHelp": "Example: Ice cream truck driver",
|
||||
"LabelPlaceOfBirth": "Place of birth:",
|
||||
"LabelPlayDefaultAudioTrack": "Play default audio track regardless of language",
|
||||
"LabelPlayer": "Player:",
|
||||
"LabelPlaylist": "Playlist:",
|
||||
"LabelPlayMethod": "Play method:",
|
||||
"LabelPleaseRestart": "Changes will take effect after manually reloading the web client.",
|
||||
"LabelPostProcessor": "Post-processing application:",
|
||||
"LabelPostProcessorArguments": "Post-processor command line arguments:",
|
||||
"LabelPostProcessorArgumentsHelp": "Use {path} as the path to the recording file.",
|
||||
|
@ -796,10 +808,11 @@
|
|||
"LabelSerialNumber": "Serial number",
|
||||
"LabelSeriesRecordingPath": "Series recording path (optional):",
|
||||
"LabelServerHost": "Host:",
|
||||
"LabelServerHostHelp": "192.168.1.100 or https://myserver.com",
|
||||
"LabelServerHostHelp": "192.168.1.100:8096 or https://myserver.com",
|
||||
"LabelServerName": "Server name:",
|
||||
"LabelServerPort": "Port:",
|
||||
"LabelSimultaneousConnectionLimit": "Simultaneous stream limit:",
|
||||
"LabelSize": "Size:",
|
||||
"LabelSkin": "Skin:",
|
||||
"LabelSkipBackLength": "Skip back length:",
|
||||
"LabelSkipForwardLength": "Skip forward length:",
|
||||
|
@ -839,10 +852,12 @@
|
|||
"LabelTranscodingAudioCodec": "Audio codec:",
|
||||
"LabelTranscodingContainer": "Container:",
|
||||
"LabelTranscodePath": "Transcode path:",
|
||||
"LabelTranscodingTempPathHelp": "This folder contains working files used by the transcoder. Specify a custom path, or leave empty to use the default within the server's data folder.",
|
||||
"LabelTranscodingTempPathHelp": "Specify a custom path for the transcode files served to clients. Leave blank to use the server default.",
|
||||
"LabelTranscodes": "Transcodes:",
|
||||
"LabelTranscodingFramerate": "Transcoding framerate:",
|
||||
"LabelTranscodingProgress": "Transcoding progress:",
|
||||
"LabelTranscodingThreadCount": "Transcoding thread count:",
|
||||
"LabelTranscodingThreadCountHelp": "Select the maximum number of threads to use when transcoding. Reducing the thread count will lower cpu usage but may not convert fast enough for a smooth playback experience.",
|
||||
"LabelTranscodingThreadCountHelp": "Select the maximum number of threads to use when transcoding. Reducing the thread count will lower CPU usage but may not convert fast enough for a smooth playback experience.",
|
||||
"LabelTranscodingVideoCodec": "Video codec:",
|
||||
"LabelTriggerType": "Trigger Type:",
|
||||
"LabelTunerIpAddress": "Tuner IP Address:",
|
||||
|
@ -868,10 +883,12 @@
|
|||
"DashboardOperatingSystem": "Operating System: {0}",
|
||||
"DashboardArchitecture": "Architecture: {0}",
|
||||
"LabelVideo": "Video:",
|
||||
"LabelVideoBitrate": "Video bitrate:",
|
||||
"LabelVideoCodec": "Video codec:",
|
||||
"LabelWeb": "Web: ",
|
||||
"LabelXDlnaCap": "X-Dlna cap:",
|
||||
"LabelXDlnaCap": "X-DLNA cap:",
|
||||
"LabelXDlnaCapHelp": "Determines the content of the X_DLNACAP element in the urn:schemas-dlna-org:device-1-0 namespace.",
|
||||
"LabelXDlnaDoc": "X-Dlna doc:",
|
||||
"LabelXDlnaDoc": "X-DLNA doc:",
|
||||
"LabelXDlnaDocHelp": "Determines the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.",
|
||||
"LabelYear": "Year:",
|
||||
"LabelYourFirstName": "Your first name:",
|
||||
|
@ -986,7 +1003,7 @@
|
|||
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
|
||||
"MinutesAfter": "minutes after",
|
||||
"MinutesBefore": "minutes before",
|
||||
"Mobile": "Mobile / Tablet",
|
||||
"Mobile": "Mobile",
|
||||
"Monday": "Monday",
|
||||
"MoreFromValue": "More from {0}",
|
||||
"MoreUsersCanBeAddedLater": "More users can be added later from within the dashboard.",
|
||||
|
@ -1024,7 +1041,7 @@
|
|||
"OneChannel": "One channel",
|
||||
"OnlyForcedSubtitles": "Only forced subtitles",
|
||||
"OnlyForcedSubtitlesHelp": "Only subtitles marked as forced will be loaded.",
|
||||
"OnlyImageFormats": "Only image formats (VOBSUB, PGS, SUB, etc.)",
|
||||
"OnlyImageFormats": "Only image formats (VOBSUB, PGS, SUB, etc)",
|
||||
"Option3D": "3D",
|
||||
"OptionAdminUsers": "Administrators",
|
||||
"OptionAlbum": "Album",
|
||||
|
@ -1075,7 +1092,7 @@
|
|||
"OptionDisableUserHelp": "If disabled the server will not allow any connections from this user. Existing connections will be abruptly terminated.",
|
||||
"OptionDislikes": "Dislikes",
|
||||
"OptionDisplayFolderView": "Display a folder view to show plain media folders",
|
||||
"OptionDisplayFolderViewHelp": "If enabled, Jellyfin apps will display a Folders category alongside your media library. This is useful if you'd like to have plain folder views.",
|
||||
"OptionDisplayFolderViewHelp": "Display folders alongside your other media libraries. This can be useful if you'd like to have a plain folder view.",
|
||||
"OptionDownloadArtImage": "Art",
|
||||
"OptionDownloadBackImage": "Back",
|
||||
"OptionDownloadBannerImage": "Banner",
|
||||
|
@ -1094,7 +1111,7 @@
|
|||
"OptionEnableAccessToAllLibraries": "Enable access to all libraries",
|
||||
"OptionEnableAutomaticServerUpdates": "Enable automatic server updates",
|
||||
"OptionEnableExternalContentInSuggestions": "Enable external content in suggestions",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live tv programs to be included within suggested content.",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Allow internet trailers and live TV programs to be included within suggested content.",
|
||||
"OptionEnableForAllTuners": "Enable for all tuner devices",
|
||||
"OptionEnableM2tsMode": "Enable M2ts mode",
|
||||
"OptionEnableM2tsModeHelp": "Enable m2ts mode when encoding to mpegts.",
|
||||
|
@ -1113,8 +1130,8 @@
|
|||
"OptionHasTrailer": "Trailer",
|
||||
"OptionHideUser": "Hide this user from login screens",
|
||||
"OptionHideUserFromLoginHelp": "Useful for private or hidden administrator accounts. The user will need to sign in manually by entering their username and password.",
|
||||
"OptionHlsSegmentedSubtitles": "Hls segmented subtitles",
|
||||
"OptionHomeVideos": "Home videos & photos",
|
||||
"OptionHlsSegmentedSubtitles": "HLS segmented subtitles",
|
||||
"OptionHomeVideos": "Photos",
|
||||
"OptionIgnoreTranscodeByteRangeRequests": "Ignore transcode byte range requests",
|
||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "If enabled, these requests will be honored but will ignore the byte range header.",
|
||||
"OptionImdbRating": "IMDb Rating",
|
||||
|
@ -1123,7 +1140,7 @@
|
|||
"OptionLikes": "Likes",
|
||||
"OptionList": "List",
|
||||
"OptionLoginAttemptsBeforeLockout": "Determines how many incorrect login attempts can be made before lockout occurs.",
|
||||
"OptionLoginAttemptsBeforeLockoutHelp": "A value of zero means inheriting the default of three attempts for normal users and five for admin. Setting this to -1 will disable the feature.",
|
||||
"OptionLoginAttemptsBeforeLockoutHelp": "A value of zero means inheriting the default of three attempts for normal users and five for administrators. Setting this to -1 will disable the feature.",
|
||||
"OptionMax": "Max",
|
||||
"OptionMissingEpisode": "Missing Episodes",
|
||||
"OptionMonday": "Monday",
|
||||
|
@ -1308,7 +1325,7 @@
|
|||
"StopRecording": "Stop recording",
|
||||
"Studios": "Studios",
|
||||
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "These settings also apply to any Chromecast playback started by this device.",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "These settings will not apply to graphical subtitles (PGS, DVD, etc), or subtitles that have their own styles embedded (ASS/SSA).",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "These settings will not apply to graphical subtitles (PGS, DVD, etc) or ASS/SSA subtitles that embed their own styles.",
|
||||
"SubtitleDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority.",
|
||||
"SubtitleOffset": "Subtitle Offset",
|
||||
"Subtitles": "Subtitles",
|
||||
|
|
|
@ -765,7 +765,7 @@
|
|||
"LabelSerialNumber": "Número de serie",
|
||||
"LabelSeriesRecordingPath": "Ruta para grabaciones de Series (Opcional):",
|
||||
"LabelServerHost": "Servidor:",
|
||||
"LabelServerHostHelp": "192.168.1.100 O https://miservidor.com",
|
||||
"LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com",
|
||||
"LabelServerPort": "Puerto:",
|
||||
"LabelSimultaneousConnectionLimit": "Limite de transmisiones simultaneas:",
|
||||
"LabelSkin": "Piel:",
|
||||
|
|
|
@ -1409,7 +1409,7 @@
|
|||
"MediaInfoStreamTypeData": "Données",
|
||||
"MediaInfoStreamTypeSubtitle": "Sous-titres",
|
||||
"MediaInfoStreamTypeVideo": "Video",
|
||||
"AuthProviderHelp": "Sélectionnez le fournisseur d'authentification à utiliser pour identifier cet utilisateur par mot de passe",
|
||||
"AuthProviderHelp": "Sélectionner un fournisseur d'authentification pour authentifier le mot de passe de cet utilisateur",
|
||||
"PasswordResetProviderHelp": "Choisissez un Fournisseur de réinitialisation de mot de passe à utiliser lorsqu'un utilisateur demande la réinitialisation de son mot de passe",
|
||||
"HeaderHome": "Accueil",
|
||||
"HeaderHomeSettings": "Paramètre d'Accueil",
|
||||
|
|
|
@ -93,18 +93,18 @@
|
|||
"Dislike": "Nem tettszik",
|
||||
"Display": "Megjelenítés",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Hiányzó évad epizódok megjelenítése",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Ezt engedélyezni kell a Jellyfin Szerver beállításban lévő TV könyvtárak esetében is.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Ezt engedélyezni kell a szerver beállításában lévő TV könyvtárak esetében is.",
|
||||
"Down": "Le",
|
||||
"Download": "Letöltés",
|
||||
"Edit": "Szerkesztés",
|
||||
"EditImages": "Képek szerkesztése",
|
||||
"EditMetadata": "Metaadat szerkesztés",
|
||||
"EditSubtitles": "Feliratok szerkesztése",
|
||||
"EnableBackdrops": "Háttérképek engedélyezve",
|
||||
"EnableBackdropsHelp": "Ha engedélyezve van, akkor a háttérképek a könyvtár böngészése közben néhány oldal hátterében jelennek meg.",
|
||||
"EnableBackdrops": "Háttérképek",
|
||||
"EnableBackdropsHelp": "A háttérképek a könyvtár böngészése közben néhány oldal hátterében jelennek meg.",
|
||||
"EnableHardwareEncoding": "Hardveres kódolás engedélyezése",
|
||||
"EnableThemeSongs": "Főcím dalok engedélyezése",
|
||||
"EnableThemeSongsHelp": "Ha engedélyezve van, a főcím dalok a háttérben játszódnak le a könyvtár böngészése közben.",
|
||||
"EnableThemeSongs": "Főcím dalok",
|
||||
"EnableThemeSongsHelp": "Főcím dalok lejátszása háttérben a könyvtár böngészése közben.",
|
||||
"EndsAtValue": "Várható befejezés {0}",
|
||||
"Episodes": "Epizódok",
|
||||
"ExitFullscreen": "Kilépés a teljes képernyőből",
|
||||
|
@ -117,9 +117,9 @@
|
|||
"FolderTypeBooks": "Könyvek",
|
||||
"FolderTypeMovies": "Filmek",
|
||||
"FolderTypeMusic": "Zenék",
|
||||
"FolderTypeMusicVideos": "Zenei videók",
|
||||
"FolderTypeTvShows": "TV Műsorok",
|
||||
"FolderTypeUnset": "Vegyes tartalom",
|
||||
"FolderTypeMusicVideos": "Zenei Videók",
|
||||
"FolderTypeTvShows": "Műsorok",
|
||||
"FolderTypeUnset": "Vegyes Tartalom",
|
||||
"Folders": "Könyvtárak",
|
||||
"Friday": "Péntek",
|
||||
"Fullscreen": "Teljes képernyő",
|
||||
|
@ -678,15 +678,15 @@
|
|||
"DownloadsValue": "{0} letöltés",
|
||||
"DrmChannelsNotImported": "A csatornák DRM-el nem kerülnek importálásra.",
|
||||
"DropShadow": "Árnyék",
|
||||
"EasyPasswordHelp": "Az egyszerű PIN kódot az offline hozzáféréshez használják a támogatott Jellyfin alkalmazásokban, valamint hálózaton belüli bejelentkezéshez is használható.",
|
||||
"EnableCinemaMode": "Cinema Mode engedélyezése",
|
||||
"EnableColorCodedBackgrounds": "Színes kódolt háttérképek engedélyezése",
|
||||
"EnableDisplayMirroring": "Kijelző tükrözés engedélyezése",
|
||||
"EnableExternalVideoPlayers": "Külső videolejátszók engedélyezése",
|
||||
"EasyPasswordHelp": "Az egyszerű PIN kódot az offline hozzáféréshez használják a támogatott kliens alkalmazásokban, valamint hálózaton belüli bejelentkezéshez is használható.",
|
||||
"EnableCinemaMode": "Cinema Mode",
|
||||
"EnableColorCodedBackgrounds": "Színkódolt háttérképek",
|
||||
"EnableDisplayMirroring": "Kijelző tükrözés",
|
||||
"EnableExternalVideoPlayers": "Külső videolejátszók",
|
||||
"EnableExternalVideoPlayersHelp": "A külső lejátszó menü a videó indításakor jelenik meg.",
|
||||
"EnableNextVideoInfoOverlay": "A következő videó adatainak megjelenítése lejátszás közben",
|
||||
"EnableNextVideoInfoOverlayHelp": "A videó végén megjeleníti az aktuális lejátszási listában lévő következő videó adatait.",
|
||||
"EnablePhotos": "Fotók engedélyezése",
|
||||
"EnablePhotos": "Fotók megjelenítése",
|
||||
"EnablePhotosHelp": "A fényképeket a médiafájlok mellett észleli és megjeleníti.",
|
||||
"Ended": "Befejeződött",
|
||||
"ErrorAddingMediaPathToVirtualFolder": "Hiba történt a média elérésekor. Kérlek győződjön meg róla, hogy az elérési út érvényes és a Jellyfin szerver hozzáfér az adott helyhez.",
|
||||
|
@ -801,8 +801,8 @@
|
|||
"Shows": "Műsorok",
|
||||
"Songs": "Dalok",
|
||||
"ValueSpecialEpisodeName": "Special - {0}",
|
||||
"EnableThemeVideos": "Videók témájának engedélyezése",
|
||||
"EnableThemeVideosHelp": "Ha engedélyezve van, a videó témája a háttérben játszódik le a könyvtár böngészése közben.",
|
||||
"EnableThemeVideos": "Videók témák",
|
||||
"EnableThemeVideosHelp": "Videó témájának lejátszása háttérben a könyvtár böngészése közben.",
|
||||
"HeaderBlockItemsWithNoRating": "Blokkolja azokat az elemeket amelyek tiltott, vagy nem felismerhető minősítésűek:",
|
||||
"HeaderSchedule": "Ütemezés",
|
||||
"HeaderSeriesStatus": "Sorozat állapot",
|
||||
|
@ -863,8 +863,8 @@
|
|||
"LabelCertificatePasswordHelp": "Ha a tanúsítványhoz jelszó szükséges, írd ide.",
|
||||
"LabelChannels": "Csatornák:",
|
||||
"LabelCustomCertificatePath": "Egyéni SSL tanúsítvány elérési útvonala:",
|
||||
"LabelCustomCss": "Egyéni css:",
|
||||
"LabelCustomCssHelp": "Egyéni css módosítások a webes felülethez.",
|
||||
"LabelCustomCss": "Egyedi CSS:",
|
||||
"LabelCustomCssHelp": "Egyedi CSS stílusok alkalmazása a webes felülethez.",
|
||||
"LabelCustomizeOptionsPerMediaType": "A média típusának testreszabása:",
|
||||
"LabelDeathDate": "Halálának dátuma:",
|
||||
"LabelDefaultScreen": "Alapértelmezett képernyő:",
|
||||
|
@ -1370,5 +1370,17 @@
|
|||
"LabelLocalHttpServerPortNumberHelp": "A TCP port száma, melyen a Jellyfin HTTP szerver figyel.",
|
||||
"UserAgentHelp": "Adj meg egy egyedi http user-agent fejlécet, amennyiben szükséges.",
|
||||
"XmlDocumentAttributeListHelp": "Ezek a tulajdonságok minden xml válaszüzenet gyökér elemére alkalmazásra kerülnek.",
|
||||
"Thumb": "Thumb"
|
||||
"Thumb": "Thumb",
|
||||
"MediaInfoStreamTypeData": "Adat",
|
||||
"MediaInfoStreamTypeEmbeddedImage": "Beágyazott kép",
|
||||
"LabelBitrate": "Bitráta:",
|
||||
"LabelAudioSampleRate": "Audió mintavételi ráta:",
|
||||
"LabelAudioCodec": "Audió kódek:",
|
||||
"LabelAudioChannels": "Audió csatorna:",
|
||||
"LabelAudioBitrate": "Audió bitráta:",
|
||||
"LabelAudioBitDepth": "Audió bitmélység:",
|
||||
"HeaderFavoriteBooks": "Kedvenc Könyvek",
|
||||
"CopyStreamURLSuccess": "URL másolása sikeres.",
|
||||
"CopyStreamURL": "Stream URL másolása",
|
||||
"PlaybackData": "Lejátszási adatok"
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Actor": "Attore",
|
||||
"Add": "Aggiungi",
|
||||
"AddItemToCollectionHelp": "Aggiungi elementi alle collezioni ricercandoli e utilizzando il pulsante destro del mouse o toccare i menu per aggiungerli a una raccolta.",
|
||||
"AddToCollection": "Aggiungi ad una collezione",
|
||||
"AddToCollection": "Aggiunto alla collezione",
|
||||
"AddToPlayQueue": "Aggiungi alla coda di riproduzione",
|
||||
"AddToPlaylist": "Aggiungi alla playlist",
|
||||
"AddedOnValue": "Aggiunto {0}",
|
||||
|
@ -1320,8 +1320,8 @@
|
|||
"AuthProviderHelp": "Selezionare un Authentication Provider da utilizzare per autenticare la password dell'utente",
|
||||
"HeaderFavoriteMovies": "Film Preferiti",
|
||||
"HeaderFavoriteShows": "Serie TV Preferite",
|
||||
"HeaderFavoriteEpisodes": "Episodi Favoriti",
|
||||
"HeaderFavoriteAlbums": "Album Favoriti",
|
||||
"HeaderFavoriteEpisodes": "Episodi Preferiti",
|
||||
"HeaderFavoriteAlbums": "Album preferiti",
|
||||
"HeaderFavoriteArtists": "Artisti Preferiti",
|
||||
"HeaderFavoriteSongs": "Brani Preferiti",
|
||||
"HeaderFavoriteVideos": "Video Preferiti",
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
"AllEpisodes": "Barlyq bólimder",
|
||||
"AllLanguages": "Barlyq tilder",
|
||||
"AllLibraries": "Barlyq tasyǵyshhanalar",
|
||||
"AllowHWTranscodingHelp": "Qosylǵanda, aǵyndardy naqty ýaqytta qaıta kodtaýǵa túnerge múmkindik beredi. Bul Jellyfin Server arqyly qaıta kodtaý talabyn azaıtýǵa kómektesýi múmkin.",
|
||||
"AllowHWTranscodingHelp": "Aǵyndardy naqty ýaqytta qaıta kodtaýǵa túnerge múmkindik beredi. Bul server arqyly qaıta kodtaý talabyn azaıtýǵa kómektesýi múmkin.",
|
||||
"AllowMediaConversion": "Tasyǵyshderekterdi túrlendirýge ruqsat etý",
|
||||
"AllowMediaConversionHelp": "Tasyǵyshderekterdi túrlendirý ereksheligine qatynaý úshin jol berý nemese tıym salý.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Naqty ýaqytta sýbtıtrlerdi shyǵarýǵa ruqsat etý",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Beıne qaıta kodtaýyna tıym salýǵa kómektesý úshin endirilgen sýbtıtrler beıneden shyǵarylyp, Jellyfin qoldanbalaryna kádimgi mátinge pishiminde jetkizilý múmkin. Keıbir júıelerde buǵan uzaq ýaqyt ketýi jáne shyǵarý úrdisi barysynda beıne oınatý toqtatylýy múmkin. Tutynǵysh qurylǵyda olarǵa qoldaý kórsetilmegen kezde, beıne qaıta kodtalý arqyly endirilgen sýbtıtrler jazylýy úshin ony óshirińiz.",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Beıne qaıta kodtaýyna tıym salýǵa kómektesý úshin endirilgen sýbtıtrler beıneden shyǵarylyp, klıentterge kádimgi mátinben jetkizilý múmkin. Keıbir júıelerde buǵan uzaq ýaqyt ketýi jáne shyǵarý úrdisi barysynda beıne oınatý toqtatylýy múmkin. Tutynǵysh qurylǵyda olarǵa qoldaý kórsetilmegen kezde, beıne qaıta kodtalý arqyly endirilgen sýbtıtrler jazylýy úshin ony óshirińiz.",
|
||||
"AllowRemoteAccess": "Osy Jellyfin Serverine syrtqy qosylymdar úshin ruqsat etý.",
|
||||
"AllowRemoteAccessHelp": "Eger jalaýsha alastalǵan bolsa, baryq syrtqy baılanystar qursaýlanady.",
|
||||
"AllowedRemoteAddressesHelp": "Qashyqtan qosylýǵa ruqsat etiletin jeliler úshin útirlermen bólingen IP-mekenjaılarynyń tizbesi nemese IP/netmask jazbalar Eger bos qaldyrylsa, barlyq qashyqtaǵy mekenjaılarǵa ruqsat etiledi.",
|
||||
|
@ -56,7 +56,7 @@
|
|||
"BoxRear": "Qorap arty",
|
||||
"Browse": "Sharlaý",
|
||||
"BrowsePluginCatalogMessage": "Qoljetimdi plagındermen tanysý úshin plagın tizimdemesin sholyńyz.",
|
||||
"BurnSubtitlesHelp": "Sýbtıtrler pishimine baılanysty beıneni túrlendirgen kezde server sýbtıtrlerdi jazyýyn anyqtaıdy. Sýbtıtrler jazýdy qashqaqtaý serverdiń ónimdiligin jaqsartady. Sýretke negizdelgen pishimderdi (mysaly, VOBSUB, PGS, SUB/IDX j.t.b.), sondaı-aq keıbir ASS/SSA sýbtıtrlerin jazý úshin Avtomattyny tańdańyz",
|
||||
"BurnSubtitlesHelp": "Sýbtıtrler pishimine baılanysty beıneni túrlendirgen kezde server sýbtıtrlerdi jazyýyn anyqtaıdy. Sýbtıtrler jazýdy qashqaqtaý serverdiń ónimdiligin jaqsartady. Sýretke negizdelgen pishimderdi (VOBSUB, PGS, SUB/IDX j.t.b.) jáne keıbir ASS/SSA sýbtıtrlerin jazý úshin Avtomattyny tańdańyz.",
|
||||
"ButtonAdd": "Ústeý",
|
||||
"ButtonAddMediaLibrary": "Tasyǵyshhanany ústeý",
|
||||
"ButtonAddScheduledTaskTrigger": "Trıggerdi ústeý",
|
||||
|
@ -187,7 +187,7 @@
|
|||
"DetectingDevices": "Qurylǵylardy tabýda",
|
||||
"DeviceAccessHelp": "Bul tek qana biregeı anyqtalýy múmkin qurylǵylar úshin qoldanylady jáne sholǵyshpen qantynaýǵa tyıym salmaıdy. Paıdalanýshy qurylǵysynan qatynaýdy súzgileýi jańa qurylǵylardy munda bekitilgenshe deıin paıdalanýǵa tyıym salady.",
|
||||
"DirectPlaying": "Tikeleı oınatýda",
|
||||
"DirectStreamHelp1": "Ajyratymdylyq pen tasyǵyshderekter túrine (H.264, AC3, t.b.) qatysty tasyǵyshderekter qurylǵyǵa sáıkes keledi, biraq syıyspaıtyn faıl konteınerinde (.mkv, .avi, .wmv jáne t.b.) bolyp tur. Qurylǵyǵa taratpas buryn, beıne naqty ýaqytta qaıta jınaqtalady.",
|
||||
"DirectStreamHelp1": "Ajyratymdylyq pen tasyǵyshderekter túrine (H.264, AC3, t.b.) qatysty tasyǵyshderekter qurylǵyǵa sáıkes keledi, biraq syıyspaıtyn faıl konteınerinde (mkv, avi, wmv jáne t.b.) bolyp tur. Qurylǵyǵa taratpas buryn, beıne naqty ýaqytta qaıta jınaqtalady.",
|
||||
"DirectStreamHelp2": "Faıldy tikeleı taratý beıne sapasyn joǵaltpaı óte az esepteý qýatyn paıdalanady.",
|
||||
"DirectStreaming": "Tikeleı tasymaldanýda",
|
||||
"Director": "Rejısór",
|
||||
|
@ -201,7 +201,7 @@
|
|||
"DisplayInMyMedia": "Basqy ekranda beınelenedi",
|
||||
"DisplayInOtherHomeScreenSections": "Basqy ekran bólimderinde beıneleý (mys. Eń sońǵy tasyǵyshderekter jáne Kórýdi jalǵastyrý)",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Joq bólimderdi maýsym ishinde beıneleý",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Bul sondaı-aq Jellyfin Server ornatýyndaǵy TD tasyǵyshhanalary úshin qosýly bolýy kerek.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Bul sondaı-aq server konfıgýrasýasyndaǵy TD tasyǵyshhanalary úshin qosýlýy qajet.",
|
||||
"DisplayModeHelp": "Jellyfin iske qosylǵanda ekran túrin tańdańyz.",
|
||||
"DoNotRecord": "Jazýǵa bolmaıdy",
|
||||
"Down": "Tómenge",
|
||||
|
@ -209,29 +209,29 @@
|
|||
"DownloadsValue": "{0} júkteý",
|
||||
"DrmChannelsNotImported": "DRM bar arnalar shetten ákelinbeıdi.",
|
||||
"DropShadow": "Kóleńkeli",
|
||||
"EasyPasswordHelp": "Ońaıtylǵan PIN-kodyńyz qoldaýdaǵy Jellyfin qoldanbalarynan derbes qatynaý úshin paıdalanylady, jáne jeli ishinde ońaıtylyp kirý úshin paıdalanylýy múmkin.",
|
||||
"EasyPasswordHelp": "Ońaıtylǵan PIN-kodyńyz qoldaýdaǵy klıenterden derbes qatynaý úshin paıdalanylady, jáne jeli ishinde ońaıtylyp kirý úshin paıdalanylýy múmkin.",
|
||||
"Edit": "Óńdeý",
|
||||
"EditImages": "Sýretterdi óńdeý",
|
||||
"EditMetadata": "Metaderekterdi óńdeý",
|
||||
"EditSubtitles": "Sýbtıtrlerdi óńdeý",
|
||||
"EnableBackdrops": "Artqy sýretterdi qosý",
|
||||
"EnableBackdropsHelp": "Qosylǵanda, artqy sýretter tasyǵyshhanany sholý kezinde keıbir betterde óńde beınelenedi.",
|
||||
"EnableCinemaMode": "Kınoteatr rejimin qosý",
|
||||
"EnableColorCodedBackgrounds": "Túspen belgilengen óńderdi qosý",
|
||||
"EnableDisplayMirroring": "Beıneleýdiń telnusqasyn qosý",
|
||||
"EnableExternalVideoPlayers": "Syrtqy oınatqyshtardy qosý",
|
||||
"EnableBackdrops": "Artqy sýretter",
|
||||
"EnableBackdropsHelp": "Artqy sýretter tasyǵyshhanany sholý kezinde keıbir betterde óńde beınelenedi.",
|
||||
"EnableCinemaMode": "Kınoteatr rejimi",
|
||||
"EnableColorCodedBackgrounds": "Túspen belgilengen óńder",
|
||||
"EnableDisplayMirroring": "Beıneleýdiń telnusqasy",
|
||||
"EnableExternalVideoPlayers": "Syrtqy oınatqyshtar",
|
||||
"EnableExternalVideoPlayersHelp": "Syrtqy oınatqysh máziri beıne oınatýdy bastaǵan kezde kórsetiledi.",
|
||||
"EnableHardwareEncoding": "Apparatyq kodtaýýdy qosý",
|
||||
"EnableNextVideoInfoOverlay": "Oınatý kezinde kelesi beıne týraly aqparatty qosý",
|
||||
"EnableNextVideoInfoOverlay": "Oınatý kezinde kelesi beıne týraly aqparatty kórsetý",
|
||||
"EnableNextVideoInfoOverlayHelp": "Beıne sońynda aǵymdaǵy oınatý tizimindegi kelesi beıne týraly aqparatty kórsetý.",
|
||||
"EnablePhotos": "Fotosýretterdi qosý",
|
||||
"EnablePhotosHelp": "Fotosýretter basqa tasyǵysh faıldarymen qatar anyqtalady jáne beınelenedi.",
|
||||
"EnablePhotos": "Fotosýretter",
|
||||
"EnablePhotosHelp": "Sýretter basqa tasyǵysh faıldarymen qatar anyqtalady jáne beınelenedi.",
|
||||
"EnableStreamLooping": "Taratýlardy avtomatty tuıyqtaý",
|
||||
"EnableStreamLoopingHelp": "Eger taratý derekterinde tek qana azyn-aýlaq sekýnd bar bolsa jáne ony úzdiksiz suratyp alý qajet bolsa, ony qosyńyz. Bul qajet bolmaǵan jaǵdaıda qosylsa, qıyndyqtar týdyrýy múmkin.",
|
||||
"EnableThemeSongs": "Taqyryptyq áýenderdi qosý",
|
||||
"EnableThemeSongsHelp": "Qosylǵanda, tasyǵyshhanany sholý kezinde taqyryptyq áýender óńde oınatylady.",
|
||||
"EnableThemeVideos": "Taqyryptyq beınelerdi qosý",
|
||||
"EnableThemeVideosHelp": "Qosylǵanda, tasyǵyshhanany sholý kezinde taqyryptyq beıneler óńde oınatylady.",
|
||||
"EnableThemeSongs": "Taqyryptyq áýender",
|
||||
"EnableThemeSongsHelp": "Taqyryptyq áýender tasyǵyshhanany sholý kezinde óńde oınatylady.",
|
||||
"EnableThemeVideos": "Taqyryptyq beıneler",
|
||||
"EnableThemeVideosHelp": "Taqyryptyq beıneler tasyǵyshhanany sholý kezinde óńde oınatylady.",
|
||||
"Ended": "Aıaqtaldy",
|
||||
"EndsAtValue": "Sońy: {0}",
|
||||
"Episodes": "Bólimder",
|
||||
|
@ -247,7 +247,7 @@
|
|||
"EveryNDays": "{0} kún saıyn",
|
||||
"ExitFullscreen": "Tolyq ekrandan shyǵý",
|
||||
"ExtraLarge": "Óte iri",
|
||||
"ExtractChapterImagesHelp": "Sahna sýretterin shyǵaryp alý Jellyfin-qoldanbalaryna sahna bólekteýge arnalǵan syzbalyq mázirlerdi beıneleý úshin ruqsat etedi. Bul proses baıaý, OP kerek qylatyn jáne biraz gıgabaıt keńistikti qajet etetin bolýy múmkin. Ol beınefaıldary tabylǵanda, jáne túngi ýaqytyna josparlaǵan tapsyrma retinde jumys isteıdi. Oryndaý kestesi Josparlaýshy aımaǵynda teńsheledi. Bul tapsyrmany qarbalas saǵattarynda jumys istetkizý usynylmaıdy.",
|
||||
"ExtractChapterImagesHelp": "Sahna sýretterin shyǵaryp alý klıentterine sahna bólekteýge arnalǵan syzbalyq mázirlerdi beıneleý úshin ruqsat etedi. Bul proses baıaý, qor kózin kóp talap etetin jáne biraz gıgabaıt keńistikti qajet etetin bolýy múmkin. Ol beınefaıldary tabylǵanda, jáne túngi ýaqytyna josparlaǵan tapsyrma retinde jumys isteıdi. Oryndaý kestesi Josparlaýshy aımaǵynda teńsheledi. Bul tapsyrmany qarbalas saǵattarynda jumys istetkizý usynylmaıdy.",
|
||||
"Extras": "Qosymshalar",
|
||||
"FFmpegSavePathNotFound": "Bizge siz engizgen FFmpeg jolyn paıdalanyp tabý múmkin bolmady. Sondaı-aq FFprobe talap etiledi jáne sol qaltada bolýy jón. Bul quramdastar ádette sol júkteýmen birge jetkiziledi. Joldy tekserip, qaıtalap kórińiz.",
|
||||
"FastForward": "Jyldam alǵa",
|
||||
|
@ -539,7 +539,7 @@
|
|||
"LabelAll": "Barlyq",
|
||||
"LabelAllowHWTranscoding": "Apparattyq qaıta kodtaýǵa ruqsat etý",
|
||||
"LabelAllowServerAutoRestart": "Jańartýlardy qoldaný úshin serverge qaıta iske qosylýdy ruqsat etý",
|
||||
"LabelAllowServerAutoRestartHelp": "Tek qana eshqandaı paıdalýnshylar belsendi emes, áreketsiz mezgilderde server qaıta iske qosylady.",
|
||||
"LabelAllowServerAutoRestartHelp": "Tek qana eshqandaı paıdalýnshylar belsendi emes áreketsiz mezgilderde server qaıta iske qosylady.",
|
||||
"LabelAllowedRemoteAddresses": "Qashyqtaǵy IP-mekenjaı súzgisi:",
|
||||
"LabelAllowedRemoteAddressesMode": "Qashyqtaǵy IP-mekenjaı súzgisiniń rejimi:",
|
||||
"LabelAppName": "Qoldanba aty",
|
||||
|
@ -554,7 +554,7 @@
|
|||
"LabelBirthDate": "Týǵan kúni:",
|
||||
"LabelBirthYear": "Týǵan jyly:",
|
||||
"LabelBlastMessageInterval": "Belsendilikti tekserý habarlar aralyǵy, s",
|
||||
"LabelBlastMessageIntervalHelp": "Server belsendiligin tekserý habarlardyń ara uzaqtyǵyn sekýndtar arqyly anyqtaıdy.",
|
||||
"LabelBlastMessageIntervalHelp": "Belsendilikti tekserý habarlaryn jaýdyrý ara uzaqtyǵyn sekýndtar arqyly anyqtaıdy.",
|
||||
"LabelBlockContentWithTags": "Myna tegteri bar mazmundy qursaýlaý:",
|
||||
"LabelBurnSubtitles": "Sýbtıtrlerdi jazý:",
|
||||
"LabelCache": "Kesh:",
|
||||
|
@ -575,7 +575,7 @@
|
|||
"LabelCustomCertificatePath": "Teńsheýli SSL-kýálik joly:",
|
||||
"LabelCustomCertificatePathHelp": "Teńsheletin domende TLS qoldaýyn qosý úshin sertıfıkaty jáne jeke kilti bar PKCS #12 faılyna jol.",
|
||||
"LabelCustomCss": "Teńsheýli CSS:",
|
||||
"LabelCustomCssHelp": "Ózińizdiń teńsheýli CSS-kodyn ýeb-tildesýde qoldanyńyz.",
|
||||
"LabelCustomCssHelp": "Ózińizdiń teńsheýli mánerleýdi ýeb-tildesýde qoldanyńyz.",
|
||||
"LabelCustomDeviceDisplayName": "Beınelený aty:",
|
||||
"LabelCustomDeviceDisplayNameHelp": "Beınelenetin teńshelgen atyn usynyńyz nemese qurylǵy arqyly baıandalǵan atyn paıdalaný úshin bos qaldyryńyz.",
|
||||
"LabelCustomRating": "Teńshelgen sanat:",
|
||||
|
@ -602,7 +602,7 @@
|
|||
"LabelDisplayOrder": "Beıneleý reti:",
|
||||
"LabelDisplaySpecialsWithinSeasons": "Arnaıy bólimderdi efırde bolǵan maýsym ishinde beıneleý",
|
||||
"LabelDownMixAudioScale": "Kemitilip mıksherlengende dybys ótemi:",
|
||||
"LabelDownMixAudioScaleHelp": "Dybysty kemitilip mıksherlengende ótemdeý. Bastapqy deńgeı mánin ózgertpeý úshin 1 sanyn ornatyńyz..",
|
||||
"LabelDownMixAudioScaleHelp": "Dybysty kemitilip mıksherlengende ótemdeý. 1 máni bastapqy deńgeıdi saqtaıdy.",
|
||||
"LabelDownloadLanguages": "Júktep alynatyn tilder:",
|
||||
"LabelDropImageHere": "Sýretti munda súıretińiz nemese sharlaý úshin nuqyńyz.",
|
||||
"LabelDropShadow": "Jıekter:",
|
||||
|
@ -618,9 +618,9 @@
|
|||
"LabelEnableDlnaDebugLogging": "DLNA kúıkeltirý jazbalaryn jurnalda qosý",
|
||||
"LabelEnableDlnaDebugLoggingHelp": "Óte aýqymdy jurnal faıldary jasalady jáne tek qana aqaýlyqtardy joıý úshin qajet bolǵan retinde paıdalanylady.",
|
||||
"LabelEnableDlnaPlayTo": "DLNA qurylǵysynda oınatýdy qosý",
|
||||
"LabelEnableDlnaPlayToHelp": "Jellyfin jelidegi qurylǵylardy tabýy múmkin jáne bulardy qashyqtan basqarý qabiletin usynady.",
|
||||
"LabelEnableDlnaPlayToHelp": "Jelidegi qurylǵylardy tabady jáne bulardy qashyqtan basqarý qabiletin usynady.",
|
||||
"LabelEnableDlnaServer": "DLNA-serverin qosý",
|
||||
"LabelEnableDlnaServerHelp": "Jelidegi UPnP qurylǵylarǵa Jellyfin mazmunyn sholý men oınatý úshin ruqsat etý.",
|
||||
"LabelEnableDlnaServerHelp": "Jelidegi UPnP qurylǵylarǵa mazmun sholý men oınatý úshin ruqsat etý.",
|
||||
"LabelEnableHardwareDecodingFor": "Apparatyq kodtaýdy mynaǵan qosý:",
|
||||
"LabelEnableRealtimeMonitor": "Naqty ýaqyttaǵy baqylaýdy qosý",
|
||||
"LabelEnableRealtimeMonitorHelp": "Qoldaýdaǵy faıldyq júıelerinde faıldar ózgeristeri dereý óńdeledi.",
|
||||
|
@ -631,7 +631,7 @@
|
|||
"LabelEvent": "Oqıǵa:",
|
||||
"LabelEveryXMinutes": "Ár:",
|
||||
"LabelExtractChaptersDuringLibraryScan": "Sahna sýretterin tasyǵyshhanany skanerleý mezgilinde shyǵaryp alý",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "Qosylǵanda, sahna sýretteri tasyǵyshhanany skanerleý mezgilinde, beıneler sheten ákelingende, bólinip alynady. Ajyratylǵanda, bular sahna sýretterine josparlaǵan tapsyrmasy mezgilinde, turaqty tasyǵyshhanany skanerleýin jyldamyraq aıaqtalýy ushin ruqsat etip, bólinip alynady.",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "Tasyǵyshhanany skanerleý kezinde beıneler shetten ákelingen jaǵdaıda, sahna sýretteri jasalady. Keri jaǵdaıda, bular sahna sýretterine josparlaǵan tapsyrmasy mezgilinde, turaqty tasyǵyshhanany skanerleýin jyldamyraq aıaqtalýy ushin ruqsat etip, bólinip alynady.",
|
||||
"LabelFailed": "Sátsiz",
|
||||
"LabelFileOrUrl": "Faıl nemese URL:",
|
||||
"LabelFinish": "Aıaqtaý",
|
||||
|
@ -639,16 +639,16 @@
|
|||
"LabelForgotPasswordUsernameHelp": "Eske salsańyz, paıdalanýshy atyńyzdy engizińiz.",
|
||||
"LabelFormat": "Pishim:",
|
||||
"LabelFriendlyName": "Túsinikti ataý:",
|
||||
"LabelServerNameHelp": "Bul ataý osy serverdi anyqtaý úshin paıdalanylady. Eger óris bos qaldyrylsa, kompúter aty paıdalanylady.",
|
||||
"LabelServerNameHelp": "Bul ataý serverdi anyqtaý úshin paıdalanylady jáne serverdiń kompúter ataýyna ádepki bolady.",
|
||||
"LabelGroupMoviesIntoCollections": "Jıyntyqtar ishindegi fılmderdi toptastyrý",
|
||||
"LabelGroupMoviesIntoCollectionsHelp": "Fılm tizimderin beınelegen kezde jıyntyqqa kiretin fılmder toptalǵan biryńǵaı tarmaq bolyp kórsetiledi.",
|
||||
"LabelH264Crf": "H264 kodtaý CRF máni:",
|
||||
"LabelH264EncodingPreset": "H264 kodtaý daıyndamasy:",
|
||||
"LabelHardwareAccelerationType": "Apparatyq jedeldetý:",
|
||||
"LabelHardwareAccelerationTypeHelp": "Tek qana qoldaýdaǵy júıelerde qoljetimdi.",
|
||||
"LabelHardwareAccelerationTypeHelp": "Bul tájirıbelik múmkindik tek qoldaý kórsetiletin júıelerde qoljetimdi.",
|
||||
"LabelHomeNetworkQuality": "Úılik jeli sapasy:",
|
||||
"LabelHomeScreenSectionValue": "Basqy bet {0}-bólim:",
|
||||
"LabelHttpsPort": "Jergilikti https-port nómiri:",
|
||||
"LabelHttpsPort": "Jergilikti HTTPS-port nómiri:",
|
||||
"LabelHttpsPortHelp": "Jellyfin HTTPS-serveri baılastyrylýǵa tıisti TCP-port nómiri.",
|
||||
"LabelIconMaxHeight": "Belgisheniń eń joǵary bıigi:",
|
||||
"LabelIconMaxHeightHelp": "upnp:icon arqyly kórsetetin belgisheleriniń eń joǵary ajyratylymdyǵy.",
|
||||
|
@ -659,37 +659,37 @@
|
|||
"LabelImageType": "Sýret túri:",
|
||||
"LabelImportOnlyFavoriteChannels": "Tańdaýly retinde belgilengen arnalarmen shekteý",
|
||||
"LabelInNetworkSignInWithEasyPassword": "Ońaıtylǵan PIN-kod arqyly jeli ishinde ońaıtylyp kirýdi qosý",
|
||||
"LabelInNetworkSignInWithEasyPasswordHelp": "Qosylǵanda, úı jelisi ishinen Jellyfin qoldanbalaryna kirý úshin ońaıtylǵan PIN-kodyńyzdy paıdalanýyńyz múmkin. Sizdiń qalypty parólińiz tek qana úı syrtynda qajet bolady. Eger PIN-kod bos qaldyrylsa, úılik jelisinde parólińiz qajet bolmaıdy.",
|
||||
"LabelInNetworkSignInWithEasyPasswordHelp": "Jergilikti jelidegi klıentterge kirý úshin ońaıtylǵan PIN-kodyn qoldanyńyz. Sizdiń qalypty parólińiz tek qana úı syrtynda qajet bolady. Eger PIN-kody bos bolsa, sizge úılik jelisinde paról qajet emes.",
|
||||
"LabelInternetQuality": "Internettegi sapasy:",
|
||||
"LabelKeepUpTo": "Osyǵan deıin saqtap qalý:",
|
||||
"LabelKidsCategories": "Balalyq sanattary:",
|
||||
"LabelKodiMetadataDateFormat": "Shyǵarý kúniniń pishimi:",
|
||||
"LabelKodiMetadataDateFormatHelp": "Osy pishimdi paıdalanyp nfo ishindegi barlyq kúnderi oqylady jáne jazylady.",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "Ádepki extrafanart derekterin extrathumbs ishine kóshirý",
|
||||
"LabelKodiMetadataDateFormatHelp": "NFO-faıldaryndaǵy barlyq kúnder osy pishimniń kómegimen taldanady.",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "extrafanart derekterin extrathumbs órisine kóshirý",
|
||||
"LabelKodiMetadataEnableExtraThumbsHelp": "Sýretterdi júktegen kezde, olar Kodi qabyǵymen eń joǵary sıysymdyǵy úshin extrafanart jáne extrathumbs ekeýinde saqtalady.",
|
||||
"LabelKodiMetadataEnablePathSubstitution": "Jol almastyrýdy qosý",
|
||||
"LabelKodiMetadataEnablePathSubstitutionHelp": "Serverdiń jol almastyrý teńsheýin paıdalanyp sýretterdiń jol almastyrýyn qosady.",
|
||||
"LabelKodiMetadataSaveImagePaths": "Sýret joldaryn NFO-faıldarynda saqtaý",
|
||||
"LabelKodiMetadataSaveImagePathsHelp": "Eger sýretterdiń Kodi nusqaýlyq ustanymdaryna saı kelmegen ataýlary bolsa, bul usynylady.",
|
||||
"LabelKodiMetadataUser": "NFO-faıldarda myna paıdalanýshynyń qaralǵan derekterin saqtaý:",
|
||||
"LabelKodiMetadataUserHelp": "Basqa qoldanbalarda paıdalaný úshin NFO-faıldarda qaralǵan derekterin saqtaýydy qosyńyz.",
|
||||
"LabelKodiMetadataUserHelp": "Qaralý derekterin basqa qoldanbalar úshin NFO-faıldarda saqtaý.",
|
||||
"LabelLanNetworks": "Úıdegi jeliler:",
|
||||
"LabelLanguage": "Til:",
|
||||
"LabelLineup": "Tizbek:",
|
||||
"LabelLocalHttpServerPortNumber": "Jergilikti http-port nómiri:",
|
||||
"LabelLocalHttpServerPortNumber": "Jergilikti HTTP-port nómiri:",
|
||||
"LabelLocalHttpServerPortNumberHelp": "Jellyfin HTTP-serveri baılastyrylýǵa tıisti TCP-port nómiri.",
|
||||
"LabelLockItemToPreventChanges": "Osy tarmaqty keleshek ózgertýlerden qursaýlaý",
|
||||
"LabelLoginDisclaimer": "Kirgendegi eskertý:",
|
||||
"LabelLoginDisclaimerHelp": "Bul kirý betiniń tómeninde beınelenedi.",
|
||||
"LabelLoginDisclaimerHelp": "Kirý beti tómengi jaǵynda beınelenetin habar.",
|
||||
"LabelLogs": "Jurnaldar:",
|
||||
"LabelManufacturer": "Óndirýshi",
|
||||
"LabelManufacturerUrl": "Óndirýshi url",
|
||||
"LabelManufacturerUrl": "Óndirýshi URL mekenjaıy",
|
||||
"LabelMatchType": "Sáıkes túri:",
|
||||
"LabelMaxBackdropsPerItem": "Tarmaq boıynsha artqy sýretterdiń eń kóp sany:",
|
||||
"LabelMaxChromecastBitrate": "Chromecast tasymaldaný sapasy:",
|
||||
"LabelMaxParentalRating": "Eń joǵary uıǵaryndy jastas sanaty:",
|
||||
"LabelMaxResumePercentage": "Jalǵastyrý úshin eń kóp paıyzy:",
|
||||
"LabelMaxResumePercentageHelp": "Bul kezden keıin toqtatylsa týyndylar tolyq oınatylǵan dep boljaldy",
|
||||
"LabelMaxResumePercentageHelp": "Bul kezden keıin toqtatylsa týyndylar tolyq oınatylǵan dep boljaldy.",
|
||||
"LabelMaxScreenshotsPerItem": "Tarmaq boıynsha eń kóp skrınshot sany:",
|
||||
"LabelMaxStreamingBitrate": "Eń joǵary tasymaldaný sapasy:",
|
||||
"LabelMaxStreamingBitrateHelp": "Tasymaldaný kezinde eń joǵary qarqyndy anyqtańyz.",
|
||||
|
@ -707,18 +707,18 @@
|
|||
"LabelMethod": "Ádis:",
|
||||
"LabelMinBackdropDownloadWidth": "Artqy sýrettiń júktep alynatyn eń az eni:",
|
||||
"LabelMinResumeDuration": "Jalǵastyrý úshin eń az uzaqtyǵy:",
|
||||
"LabelMinResumeDurationHelp": "Oınatý orny saqtalatyn jáne jalǵastyrýǵa múmkindik beretin sekýndtar arqyly eń qysqa beıne uzyndyǵy",
|
||||
"LabelMinResumeDurationHelp": "Oınatý orny saqtalatyn jáne jalǵastyrýǵa múmkindik beretin sekýndtar arqyly eń qysqa beıne uzyndyǵy.",
|
||||
"LabelMinResumePercentage": "Jalǵastyrý úshin eń az paıyzy:",
|
||||
"LabelMinResumePercentageHelp": "Bul kezden buryn toqtatylsa týyndylar oınatylmaǵan dep boljaldy",
|
||||
"LabelMinResumePercentageHelp": "Bul kezden buryn toqtatylsa týyndylar oınatylmaǵan dep boljaldy.",
|
||||
"LabelMinScreenshotDownloadWidth": "Júktep alý úshin eń az skrınshot eni:",
|
||||
"LabelModelDescription": "Model sıpattamasy",
|
||||
"LabelModelName": "Model aty",
|
||||
"LabelModelNumber": "Model nómiri",
|
||||
"LabelModelUrl": "Model url",
|
||||
"LabelModelUrl": "Model URL mekenjaıy",
|
||||
"LabelMonitorUsers": "Mynanyń áreketterin baqylaý:",
|
||||
"LabelMovieCategories": "Fılmdik sanattar:",
|
||||
"LabelMoviePrefix": "Fılm prefıksi:",
|
||||
"LabelMoviePrefixHelp": "Eger fılmderdiń ataýynda prefıks qoldanylsa, Jellyfin durys óńdeı alý úshin buny munda engizińiz.",
|
||||
"LabelMoviePrefixHelp": "Eger fılmderdiń ataýynda prefıks qoldanylsa, server durys óńdeı alý úshin buny munda engizińiz.",
|
||||
"LabelMovieRecordingPath": "Fılm jazbalardyń joly (mindetti emes):",
|
||||
"LabelMusicStreamingTranscodingBitrate": "Mýzykany qaıta kodtaý qarqyny:",
|
||||
"LabelMusicStreamingTranscodingBitrateHelp": "Mýzyka tasymaldaný kezinde eń joǵary qarqyndy anyqtańyz",
|
||||
|
@ -764,10 +764,10 @@
|
|||
"LabelProtocol": "Protokol:",
|
||||
"LabelProtocolInfo": "Protoqol týraly:",
|
||||
"LabelProtocolInfoHelp": "Bul mán qurylǵynyń GetProtocolInfo suranystaryna jaýap bergende paıdalanylady.",
|
||||
"LabelPublicHttpPort": "Jarıa http-port nómiri:",
|
||||
"LabelPublicHttpPortHelp": "Jergilikti http-portyna salystyrylýy tıis jarıa port nómiri.",
|
||||
"LabelPublicHttpsPort": "Jarıa https-port nómiri:",
|
||||
"LabelPublicHttpsPortHelp": "Jergilikti https-portyna salystyrylýy tıis jarıa port nómiri.",
|
||||
"LabelPublicHttpPort": "Jarıa HTTP-port nómiri:",
|
||||
"LabelPublicHttpPortHelp": "Jergilikti HTTP-portyna salystyrylýy tıis jarıa port nómiri.",
|
||||
"LabelPublicHttpsPort": "Jarıa HTTPS-port nómiri:",
|
||||
"LabelPublicHttpsPortHelp": "Jergilikti HTTPS-portyna salystyrylýy tıis jarıa port nómiri.",
|
||||
"LabelReadHowYouCanContribute": "Qalaı úles qosý týraly bilý.",
|
||||
"LabelReasonForTranscoding": "Qaıta kodtaý sebebi:",
|
||||
"LabelRecord": "Jazý:",
|
||||
|
@ -792,7 +792,7 @@
|
|||
"LabelSerialNumber": "Serıalyq nómiri",
|
||||
"LabelSeriesRecordingPath": "Telehıkaıa jazbalardyń joly (mindetti emes):",
|
||||
"LabelServerHost": "Host:",
|
||||
"LabelServerHostHelp": "192.168.1.100 nemese https://myserver.com",
|
||||
"LabelServerHostHelp": "192.168.1.100:8096 nemese https://myserver.com",
|
||||
"LabelServerPort": "Port:",
|
||||
"LabelSimultaneousConnectionLimit": "Bir mezgildegi aǵyndardyń shegi:",
|
||||
"LabelSkin": "Muqaba:",
|
||||
|
@ -833,7 +833,7 @@
|
|||
"LabelTrackNumber": "Jolshyq nómiri:",
|
||||
"LabelTranscodingAudioCodec": "Dybystyq kodek:",
|
||||
"LabelTranscodingContainer": "Konteıner:",
|
||||
"LabelTranscodingTempPathHelp": "Bul qalta quramynda qaıta kodtaý quraly paıdalanatyn jumys faıldary bar. Teńshelgen joldy anyqtańyz, nemese serverdiń derekter qaltasy ishindegi ádepkisin paıdalaný úshin bos qaldyryńyz.",
|
||||
"LabelTranscodingTempPathHelp": "Klıentterge qyzmet etetin qaıta kodtaý faıldar úshin teńshelgen jolyn kórsetińiz. Server ádepkisin paıdalaný úshin bos qaldyryńyz.",
|
||||
"LabelTranscodingThreadCount": "Qaıta qodtaý tizbekterdiń sany:",
|
||||
"LabelTranscodingThreadCountHelp": "Qaıta kodtaý kezinde paıdalanatyn eń kóp tizbek sanyn tańdańyz. Tizbek sanyn azaıtý OP paıdalanýyn tómendetedi, biraq jatyq oınatý áseri úshin tez túrlendirýge jetkilikti bolmaýy múmkin.",
|
||||
"LabelTranscodingVideoCodec": "Beınelik kodek:",
|
||||
|
@ -852,7 +852,7 @@
|
|||
"LabelUserAgent": "Paıdalanýshy agenti:",
|
||||
"LabelUserLibrary": "Paıdalanýshy tasyǵyshhanasy:",
|
||||
"LabelUserLibraryHelp": "Qurylǵyda qaı paıdalanýshy tasyǵyshhanasyn beıneleýin bólekteńiz. Ádepki parametr murasyna ıelený úshin bos qaldyryńyz.",
|
||||
"LabelUserRemoteClientBitrateLimitHelp": "Bul serverdi oınatý parametrlerinde ornatylǵan ádepki ǵalamdyq mándi qaıta anyqtaıdy.",
|
||||
"LabelUserRemoteClientBitrateLimitHelp": "Serverdiń oınatý parametrlerinde ornatylǵan ádepki ǵalamdyq mándi qaıta anyqtaıdy.",
|
||||
"LabelUsername": "Paıdalanýshy aty:",
|
||||
"LabelVaapiDevice": "VA-API qurylǵysy:",
|
||||
"LabelVaapiDeviceHelp": "Bul apparattyq jedeldetý úshin qoldanylatyn kórsetý túıini bolyp tabylady.",
|
||||
|
@ -861,9 +861,9 @@
|
|||
"LabelVersionInstalled": "{0} ornatylǵan",
|
||||
"LabelVersionNumber": "Nýsqasy: {0}",
|
||||
"LabelVideo": "Beıne:",
|
||||
"LabelXDlnaCap": "X-Dlna sıpattary:",
|
||||
"LabelXDlnaCap": "X-DLNA sıpattary:",
|
||||
"LabelXDlnaCapHelp": "urn:schemas-dlna-org:device-1-0 ataýlar keńistigindegi X_DLNACAP elementi mazmunyn anyqtaıdy.",
|
||||
"LabelXDlnaDoc": "X-Dlna tásimi:",
|
||||
"LabelXDlnaDoc": "X-DLNA tásimi:",
|
||||
"LabelXDlnaDocHelp": "urn:schemas-dlna-org:device-1-0 ataýlar keńistigindegi X_DLNADOC elementi mazmunyn anyqtaıdy.",
|
||||
"LabelYear": "Jyl:",
|
||||
"LabelYourFirstName": "Atyńyz:",
|
||||
|
@ -875,7 +875,7 @@
|
|||
"Large": "Iri",
|
||||
"LatestFromLibrary": "Eń keıingi {0}",
|
||||
"LearnHowYouCanContribute": "Qalaı úles qosýynyńyz múmkin týraly úırenińiz.",
|
||||
"LibraryAccessHelp": "Bul paıdalanýshymen ortaqtasý úshin tasyǵysh qaltalardy bólekteńiz. Metaderek retteýshini paıdalanyp ákimshiler barlyq qaltalardy óńdeýi múmkin.",
|
||||
"LibraryAccessHelp": "Bul paıdalanýshymen ortaqtasý úshin tasyǵyshhanalardy bólekteńiz. Metaderek retteýshini paıdalanyp ákimshiler barlyq qaltalardy óńdeýi múmkin.",
|
||||
"Like": "Unaıdy",
|
||||
"LinksValue": "Siltemeler: {0}",
|
||||
"List": "Tizim",
|
||||
|
@ -935,14 +935,14 @@
|
|||
"MessageDeleteTaskTrigger": "Shynymen osy tapsyrma trıggerin joıý qajet pe?",
|
||||
"MessageDirectoryPickerBSDInstruction": "BSD ortasynda, Jellyfin qol jetkizý maqsatynda, sizdiń FreeNAS Jail ishindegi jınaqtaýyshty teńsheý qajet bolýy múmkin.",
|
||||
"MessageDirectoryPickerInstruction": "Jeli túımeshigi basylǵanda qurylǵylaryńyz orny tabylmasa, jelilik joldar qolmen engizilýi múmkin. Mysaly, {0} nemese {1}.",
|
||||
"MessageDirectoryPickerLinuxInstruction": "Arch Linux, CentOS, Debian, Fedora, OpenSuse nemese Ubuntu júıelerindegi Linux úshin, Jellyfin júıelik paıdalanýshyǵa kem degende saqtaý jerlerińizge oqýǵa qatynas úshin ruqsat etýge tıissiz.",
|
||||
"MessageDirectoryPickerLinuxInstruction": "Arch Linux, CentOS, Debian, Fedora, OpenSuse nemese Ubuntu júıelerindegi Linux úshin, Jqyzmet kórsetý paıdalanýshyǵa kem degende saqtaý jerlerińizge oqýǵa qatynas úshin ruqsat etýge tıissiz.",
|
||||
"MessageDownloadQueued": "Júktep alý kezekte.",
|
||||
"MessageEnablingOptionLongerScans": "Osy opsıa qoıylsa, tasyǵyshhana skanerleýleri edáýir uzyn bolýy múmkin.",
|
||||
"MessageFileReadError": "Faıl oqý kezinde qate oryn aldy. Áreketti keıin qaıtalańyz.",
|
||||
"MessageForgotPasswordFileCreated": "Kelesi faıl serverińizde jasaldy jáne qalaı kirisý týraly nusqaýlar ishinde bar:",
|
||||
"MessageForgotPasswordInNetworkRequired": "Paróldi ysyrý prosesi úshin áreketti úılik jelińizdiń ishinde qaıtalańyz.",
|
||||
"MessageInstallPluginFromApp": "Bul plagın qandaı qoldanbaǵa taǵaıyndalsa, sonyń ishinen ornatylýy tıisti.",
|
||||
"MessageInvalidForgotPasswordPin": "Jaramsyz nemese merzimi aıaqtalǵan PIN engizildi. Áreketti qaıtalańyz.",
|
||||
"MessageInvalidForgotPasswordPin": "Jaramsyz nemese merzimi aıaqtalǵan PIN-kod engizildi. Áreketti qaıtalańyz.",
|
||||
"MessageInvalidUser": "Jaramsyz paıdalanýshy aty nemese paról. Áreketti qaıtalańyz.",
|
||||
"MessageItemSaved": "Tarmaq saqtaldy.",
|
||||
"MessageItemsAdded": "Tarmaqtar ústelgen.",
|
||||
|
@ -954,8 +954,8 @@
|
|||
"MessageNoPluginsInstalled": "Ornatylǵan plagınder joq.",
|
||||
"MessageNoTrailersFound": "Treılerler tabylmady. Internet-treılerler tasyǵyshhanasyn ústep fılm áserin jaqsartý úshin Treıler arnasyn ornatyńyz.",
|
||||
"MessageNothingHere": "Osynda eshteme joq.",
|
||||
"MessagePasswordResetForUsers": "Kelesi paıdalanýshylar ózderiniń parólderin ysyrddy. Endi ysyrýdyi oryndaý úshin paıdalanylǵan PIN kodtarymem kire alady.",
|
||||
"MessagePlayAccessRestricted": "Osy mazmundyń oınatýy aǵymda shektelgen. Qosymsha aqparat alý úshin Jellyfin Server ákimshisine baılanysyńyz.",
|
||||
"MessagePasswordResetForUsers": "Kelesi paıdalanýshylar ózderiniń parólderin ysyrddy. Endi ysyrýdyi oryndaý úshin paıdalanylǵan PIN-kodtarymem kire alady.",
|
||||
"MessagePlayAccessRestricted": "Osy mazmundyń oınatýy aǵymda shektelgen. Qosymsha aqparat alý úshin server ákimshisine baılanysyńyz.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Internetten metaderekti júktep alýy qosylǵanyna kóz jetkizińiz.",
|
||||
"MessagePleaseWait": "Kúte turyńyz. Bul mınót alýy múmkin.",
|
||||
"MessagePluginConfigurationRequiresLocalAccess": "Osy plagındi teńsheý úshin jergilikti serverińizge tikeleı kirińiz.",
|
||||
|
@ -963,7 +963,7 @@
|
|||
"MessageReenableUser": "Qaıta qosý úshin tómende qarańyz",
|
||||
"MessageServerConfigurationUpdated": "Server konfıgýrasıasy jańartyldy",
|
||||
"MessageSettingsSaved": "Parametrler saqtaldy.",
|
||||
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "Jellyfin tasyǵyshhanańyzdan kelesi tasyǵysh ornalasýlary alastalady:",
|
||||
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "Tasyǵyshhanańyzdan kelesi tasyǵysh ornalasýlary alastalady:",
|
||||
"MessageUnableToConnectToServer": "Tańdalǵan serverge qosylýymyz dál qazir múmkin emes. Bul iske qosylǵanyna kóz jetkizińiz jáne áreketti keıin qaıtalańyz.",
|
||||
"MessageUnsetContentHelp": "Mazmun kádimgi qaltalar retinde beınelenedi. Eń jaqsy nátıjeler alý úshin, ishki qaltalardyń mazmún túrlerin ornatyp Metaderek retteýshini paıdalanyńyz.",
|
||||
"MessageYouHaveVersionInstalled": "Aǵymda {0} nusqasy ornatylǵan.",
|
||||
|
@ -972,10 +972,10 @@
|
|||
"MetadataSettingChangeHelp": "Metaderekter parametrlerin ózgertý bolashaqtaǵy ústelgen jańa mazmunǵa áser etedi. Bar mazmundy jańartý úshin, tolyq málimetter ekranyn ashyńyz da jańartý túımeshigin basyńyz, nemese metaderekter retteýishini paıdalanyp qorymymen jańartýdy oryndańyz.",
|
||||
"MinutesAfter": "mınýt sońyńda",
|
||||
"MinutesBefore": "mınýt aldynda",
|
||||
"Mobile": "Uıaly / Planshettik",
|
||||
"Mobile": "Utqyr",
|
||||
"Monday": "dúısenbi",
|
||||
"MoreFromValue": "{0} arqyly kóbirek",
|
||||
"MoreUsersCanBeAddedLater": "Kóbirek paıdalanýshylardy keıin Taqta arqyly ústeýińiz múmkin.",
|
||||
"MoreUsersCanBeAddedLater": "Kóbirek paıdalanýshylardy keıin Taqta ishinde ústeýińiz múmkin.",
|
||||
"MoveLeft": "Solǵa jyljytý",
|
||||
"MoveRight": "Ońǵa jyljytý",
|
||||
"MovieLibraryHelp": "{0}Fılminiń atyn ózgertý Jellyfin-nusqaýlyǵyn{1} sholý.",
|
||||
|
@ -1006,7 +1006,7 @@
|
|||
"OneChannel": "Bir arnadan",
|
||||
"OnlyForcedSubtitles": "Tek qana májbúrli sýbtıtrler",
|
||||
"OnlyForcedSubtitlesHelp": "Tek qana májbúrli dep belgilengen sýbtıtrler júkteledi.",
|
||||
"OnlyImageFormats": "Tek keskin pishimderi (VOBSUB, PGS, SUB/IDX jáne t.b. )",
|
||||
"OnlyImageFormats": "Tek keskin pishimder (VOBSUB, PGS, SUB j.t.b.)",
|
||||
"Open": "Ashý",
|
||||
"OptionActor": "Aktór",
|
||||
"OptionActors": "Aktórler",
|
||||
|
@ -1057,7 +1057,7 @@
|
|||
"OptionDisableUserHelp": "Eger tyıym salynsa, server bul paıdalanýshydan eshqandaı baılanystarǵa ruqsat etpeıdi. Bar qosylymdar kenet úziledi.",
|
||||
"OptionDislikes": "Unatpaýlar",
|
||||
"OptionDisplayFolderView": "Kádimgi tasyǵysh qaltalaryn kórsetý úshin Qalta aspektin beıneleý",
|
||||
"OptionDisplayFolderViewHelp": "Qosylǵanda, Jellyfin-qoldanbalarda Qaltalar sanaty tasyǵyshhanańyz janynda beınelenedi. Eger kádimgi qalta kórinisterin unatsańyz, bul paıdaly bolady.",
|
||||
"OptionDisplayFolderViewHelp": "Basqa tasyǵyshhanalaryńyzben birge Qaltalar kórsetiledi. Bul qarapaıym qalta kórinisin alǵyńyz kelse paıdaly bolýy múmkin.",
|
||||
"OptionDownloadArtImage": "Oıý sýret",
|
||||
"OptionDownloadBackImage": "Artqy muqaba",
|
||||
"OptionDownloadBannerImage": "Baner",
|
||||
|
@ -1076,7 +1076,7 @@
|
|||
"OptionEnableAccessToAllLibraries": "Barlyq tasyǵyshhanalarǵa qatynaýdy qosý",
|
||||
"OptionEnableAutomaticServerUpdates": "Serverdiń avtomatty jańartylýyn qosý",
|
||||
"OptionEnableExternalContentInSuggestions": "Uynystarǵa syrtqy mazmundy qosý",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Internet-treılerler men efırlik TD kórsetimderge usynǵan mazmunǵa kirý úshin ruqsat etedi.",
|
||||
"OptionEnableExternalContentInSuggestionsHelp": "Internet-treılerler men efırlik kórsetimderge usynǵan mazmunǵa kirý úshin ruqsat etedi.",
|
||||
"OptionEnableForAllTuners": "Barlyq túner qurylǵylary úshin qosý",
|
||||
"OptionEnableM2tsMode": "M2ts rejimin qosý",
|
||||
"OptionEnableM2tsModeHelp": "Mpegts úshin kodtaý kezinde m2ts rejimin qosý.",
|
||||
|
@ -1096,7 +1096,7 @@
|
|||
"OptionHideUser": "Bul paıdalanýshyny kirý ekrandarynan jasyrý",
|
||||
"OptionHideUserFromLoginHelp": "Jeke nemese jasyryn ákimshi tirkelgileri úshin paıdaly. Paıdalanýshy aty men paróldi engizý arqyly paıdalanýshyǵa qolmen kirý qajet bolady.",
|
||||
"OptionHlsSegmentedSubtitles": "HLS bólshektelgen sýbtıtrler",
|
||||
"OptionHomeVideos": "Úı beıneleri men fotosýretter",
|
||||
"OptionHomeVideos": "Fotosýretter",
|
||||
"OptionIgnoreTranscodeByteRangeRequests": "Qaıta kodtaý baıt aýqymy suranystaryn elemeý",
|
||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Qosylǵanda, osy suranystarmen sanasý bolady, biraq baıt aýqymynyń bas derektemesi elep eskerilmeıdi.",
|
||||
"OptionImdbRating": "IMDb baǵalaýy",
|
||||
|
@ -1281,7 +1281,7 @@
|
|||
"Studios": "Stýdıalar",
|
||||
"Subscriptions": "Jazylymdar",
|
||||
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Bul parametrler osy qurylǵy arqyly iske qosylǵan kezkelgen Chromecast oınatýyna qoldanylady.",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "Bul parametrler grafıkalyq sýbtıtrlerge (PGS, DVD j.t.b.) nemese óz máneri bar endirilgen sýbtıtrlerge (ASS/SSA) qoldanylmaıdy.",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "Bul parametrler grafıkalyq sýbtıtrlerge (PGS, DVD j.t.b.) nemese óz máneri bar endirilgen ASS/SSA sýbtıtrlerine qoldanylmaıdy.",
|
||||
"SubtitleDownloadersHelp": "Teńshelgen sýbtıtrler júkteýshilerin qosyńyz jáne basymdylyq reti boıynsha dáreje berińiz.",
|
||||
"Subtitles": "Sýbtıtrler",
|
||||
"Suggestions": "Usynystar",
|
||||
|
@ -1418,11 +1418,11 @@
|
|||
"ChangingMetadataImageSettingsNewContent": "Metaderekterdi nemese sýretterdi júkteý parametrlerin ózgertýi tek tasyǵyshhanaǵa ústelgen jańa mazmunǵa qoldanylady. Ózgeristerdi qoldanystaǵy ataýlarǵa qoldaný úshin olardyń metaderekterin qolmen jańǵyrtý qajet.",
|
||||
"HeaderAudioLanguages": "Dybys tilderi",
|
||||
"LabelDynamicExternalId": "{0} Id:",
|
||||
"LeaveBlankToNotSetAPassword": "Mindetti emes - bos qaldyrsańyz, paról paıdalanylmaıdy",
|
||||
"LeaveBlankToNotSetAPassword": "Paróldi ornatpaý úshin bul óristi bos qaldyrýǵa bolady.",
|
||||
"MessageImageFileTypeAllowed": "Tek qana JPEG jáne PNG faıldary qoldaýda.",
|
||||
"MessageImageTypeNotSelected": "Sýret túrin ashylmaly mázirden tandańyz.",
|
||||
"OptionResElement": "res elementi",
|
||||
"AuthProviderHelp": "Osy paıdalanýshynyń parólin rastaý úshin paıdalanylatyn túpnusqalyq rastama jetkizýshisin bólekteńiz",
|
||||
"AuthProviderHelp": "Osy paıdalanýshynyń parólin rastaý úshin paıdalanylatyn túpnusqalyq rastama jetkizýshisin bólekteńiz.",
|
||||
"HeaderFavoriteMovies": "Tańdaýly fılmder",
|
||||
"HeaderFavoriteShows": "Tańdaýly kórsetimder",
|
||||
"HeaderFavoriteEpisodes": "Tańdaýly bólimder",
|
||||
|
@ -1444,8 +1444,8 @@
|
|||
"DashboardOperatingSystem": "Operasıalyq júıe: {0}",
|
||||
"DashboardArchitecture": "Arhıtektýrasy: {0}",
|
||||
"LabelWeb": "Ýeb: ",
|
||||
"LaunchWebAppOnStartup": "Jellyfin serveri iske qosylǵan kezde ýeb-sholǵyshta Jellyfin veb-qoldanbasyn iske qosý",
|
||||
"LaunchWebAppOnStartupHelp": "Jellyfin serveri bastapqyda iske qosylǵan kezde, ol ýeb-qoldanbany ádepki ýeb-sholǵyshta ashady. Bul serverdi qaıta iske qosý fýnksıasyn qoldanǵanda oryn almaıdy.",
|
||||
"LaunchWebAppOnStartup": "Serverdi iske qosqan kezde ýeb-ınterfeısti iske qosý",
|
||||
"LaunchWebAppOnStartupHelp": "Server bastapqyda iske qosylǵan kezde, ýeb-klıent ádepki sholǵyshta ashylady. Bul serverdi qaıta iske qosý fýnksıasyn qoldanǵanda oryn almaıdy.",
|
||||
"MediaInfoSoftware": "Baǵdarlamalyq jasaqtama",
|
||||
"MediaInfoStreamTypeAudio": "Dybys",
|
||||
"MediaInfoStreamTypeData": "Derekter",
|
||||
|
@ -1464,7 +1464,7 @@
|
|||
"OptionIsSD": "SD",
|
||||
"OptionList": "Tizim",
|
||||
"OptionLoginAttemptsBeforeLockout": "Qulyptalǵansha deıin qansha durys emes kirý áreketi jasalýy múmkin ekendigin anyqtaıdy.",
|
||||
"OptionLoginAttemptsBeforeLockoutHelp": "0 ádepkini ıelenýdi bildiredi, 3 ákimshi emes úshin, jáne 5 ákimshi úshin, -1 qulyptaýdy óshiredi",
|
||||
"OptionLoginAttemptsBeforeLockoutHelp": "0 máni qarapaıym paıdalanýshylar úshin úsh jáne ákimshiler úshin bes árekettiń ádepki mánin bildiredi. Osyny -1 etip ornatý múmkindikti ajyratady.",
|
||||
"OptionPoster": "Póster",
|
||||
"OptionPosterCard": "Poster-karta",
|
||||
"OptionThumb": "Nobaı",
|
||||
|
@ -1472,5 +1472,26 @@
|
|||
"PasswordResetProviderHelp": "Bul paıdalanýshy paróldi ysyrý saýalyn jibergen kezde paıdalanylatyn paróldi ysyrý jetkizýshisin tańdańyz",
|
||||
"PlaybackData": "Oınatý derekteri",
|
||||
"SubtitleOffset": "Sýbtıtrler yǵysýy",
|
||||
"TabNetworking": "Jelilik jumys"
|
||||
"TabNetworking": "Jelilik jumys",
|
||||
"HeaderFavoriteBooks": "Tańdaýly kitaptar",
|
||||
"LabelBaseUrlHelp": "Serverge neǵurlym erekshe URL mekenjaıynan kirý úshin osynda jeke ishki katalogty qosýǵa bolady.",
|
||||
"MoreMediaInfo": "Tasyǵyshderekter týraly",
|
||||
"LabelVideoCodec": "Beınelik kodek:",
|
||||
"LabelVideoBitrate": "Beıne qarqyny:",
|
||||
"LabelTranscodingProgress": "Qaıta kodtaýdyń barysy:",
|
||||
"LabelTranscodingFramerate": "Qaıta kodtaýdyń kadr jıiligi:",
|
||||
"LabelSize": "Ólshemi:",
|
||||
"LabelPleaseRestart": "Ózgerister ýeb-klıentti qolmen qaıta júktegennen keıin kúshine enedi.",
|
||||
"LabelPlayMethod": "Oınatý tásli:",
|
||||
"LabelPlayer": "Oınatqysh:",
|
||||
"LabelFolder": "Qalta:",
|
||||
"LabelBaseUrl": "Negizgi URL:",
|
||||
"LabelBitrate": "Qarqyn:",
|
||||
"LabelAudioSampleRate": "Dybystyq úlgi jıiligi:",
|
||||
"LabelAudioCodec": "Dybystyq kodek:",
|
||||
"LabelAudioChannels": "Dybys arnalary:",
|
||||
"LabelAudioBitrate": "Dybys qarqyny:",
|
||||
"LabelAudioBitDepth": "Dybystyń bıttik tereńdigi:",
|
||||
"CopyStreamURLSuccess": "URL sátti kóshirildi.",
|
||||
"CopyStreamURL": "Aǵyn URL mekenjaıyn kóshirý"
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -19,11 +19,11 @@
|
|||
"AllEpisodes": "Все эпизоды",
|
||||
"AllLanguages": "Все языки",
|
||||
"AllLibraries": "Все медиатеки",
|
||||
"AllowHWTranscodingHelp": "При включении, тюнеру разрешается динамически перекодировать транслируемые потоки. Это может помочь уменьшить перекодировку, требуемую в Jellyfin Server.",
|
||||
"AllowHWTranscodingHelp": "Тюнеру разрешается динамически перекодировать транслируемые потоки. Это может помочь уменьшить перекодировку, требуемую сервером.",
|
||||
"AllowMediaConversion": "Разрешить преобразование медиаданных",
|
||||
"AllowMediaConversionHelp": "Предоставить или запретить доступ к компоненте преобразования медиаданных.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Разрешить динамическое извлечение субтитров",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Внедрённые субтитры возможно извлекать из видео и доставлять Jellyfin-приложениям в виде обычного текста, в целях предотвращения перекодировки видео. На некоторых системах это может занять продолжительное время и вызывать задержки воспроизведения видео в процессе извлечения. Отключите это, для прошивки внедрённых субтитров во время перекодировки видео, при отсутствии встроенной поддержки их в клиентском устройстве.",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Внедрённые субтитры возможно извлекать из видео и доставлять клиентам в виде обычного текста, в целях предотвращения перекодировки видео. На некоторых системах это может занять продолжительное время и вызывать задержки воспроизведения видео в процессе извлечения. Отключите это, для прошивки внедрённых субтитров во время перекодировки видео, при отсутствии встроенной поддержки их в клиентском устройстве.",
|
||||
"AllowRemoteAccess": "Разрешение удалённого доступа к данному серверу Jellyfin Server.",
|
||||
"AllowRemoteAccessHelp": "Если флажок снят, то все удалённые подключения будут заблокированы.",
|
||||
"AllowedRemoteAddressesHelp": "Список разделённых запятыми IP-адресов или записей IP/netmask для сетей, которым разрешено удалённое соединение. Если не заполнять, то будут использованы все внешние адреса.",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"BoxRear": "Спинка коробки",
|
||||
"Browse": "Навигация",
|
||||
"BrowsePluginCatalogMessage": "Просмотрите каталог плагинов, чтобы ознакомиться с имеющимися плагинами.",
|
||||
"BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при преобразовании видео в зависимости от формата субтитров. Избегание внедрения субтитров улучшит производительность сервера. Выберите «Авто» для записи основанных на графике форматов (например, VOBSUB, PGS, SUB/IDX и т.п.), а также некоторых субтитров ASS/SSA",
|
||||
"BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при преобразовании видео в зависимости от формата субтитров. Избегание внедрения субтитров улучшит производительность сервера. Выберите «Авто» для записи основанных на графике форматов (VOBSUB, PGS, SUB/IDX и т.п.) и некоторых субтитров ASS/SSA.",
|
||||
"ButtonAdd": "Добавить",
|
||||
"ButtonAddMediaLibrary": "Добавить медиатеку",
|
||||
"ButtonAddScheduledTaskTrigger": "Добавить триггер",
|
||||
|
@ -180,7 +180,7 @@
|
|||
"DetectingDevices": "Обнаруживются устройства",
|
||||
"DeviceAccessHelp": "Это относится только к устройствам, которые могут быть однозначно распознаны и не препятствует доступу через браузер. Фильтрация доступа пользовательского устройства запретит использование новых устройств до тех пор, пока они не будут одобрены.",
|
||||
"DirectPlaying": "Воспроизводится напрямую",
|
||||
"DirectStreamHelp1": "Медиаданные совместимы с устройством в отношении разрешения и типа медиаданных (H.264, AC3, и т.д.), но в несовместимом файловом контейнере (.mkv, .avi, .wmv и т.д.). Видео будет повторно упаковано динамически перед его трансляцией на устройство.",
|
||||
"DirectStreamHelp1": "Медиаданные совместимы с устройством в отношении разрешения и типа медиаданных (H.264, AC3, и т.д.), но в несовместимом файловом контейнере (mkv, avi, wmv и т.д.). Видео будет повторно упаковано динамически перед его трансляцией на устройство.",
|
||||
"DirectStreamHelp2": "При прямой трансляции файла расходуется очень мало вычислительной мощности без потери качества видео.",
|
||||
"DirectStreaming": "Транслируется напрямую",
|
||||
"Director": "Режиссёр",
|
||||
|
@ -194,7 +194,7 @@
|
|||
"DisplayInMyMedia": "Показывать на главном экране",
|
||||
"DisplayInOtherHomeScreenSections": "Показывать в разделах главного экрана (нпр., новейшие медиаданные, продолжение просмотра и т.п.)",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Отображать отсутствующие эпизоды в пределах сезонов",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Это также должно быть включено для ТВ-медиатек при установке и настройке Jellyfin Server.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Это также должно быть включено для ТВ-медиатек в конфигурации сервера.",
|
||||
"DisplayModeHelp": "Выберите тип экрана, где запущен Jellyfin.",
|
||||
"DoNotRecord": "Не записывать",
|
||||
"Down": "Вниз",
|
||||
|
@ -202,29 +202,29 @@
|
|||
"DownloadsValue": "Загрузки: {0}",
|
||||
"DrmChannelsNotImported": "Каналы с DRM не будут импортироваться.",
|
||||
"DropShadow": "Теневая",
|
||||
"EasyPasswordHelp": "Простой PIN-код используется для автономного доступа с поддерживаемых Jellyfin-приложений, и может также использоваться для удобного внутрисетевого входа.",
|
||||
"EasyPasswordHelp": "Простой PIN-код используется для автономного доступа на поддерживаемых клиентах и может также использоваться для удобного внутрисетевого входа.",
|
||||
"Edit": "Правка",
|
||||
"EditImages": "Править рисунки",
|
||||
"EditMetadata": "Править метаданные",
|
||||
"EditSubtitles": "Править субтитры",
|
||||
"EnableBackdrops": "Включить задники",
|
||||
"EnableBackdropsHelp": "При включении, задники будут отображаться фоном некоторых страниц при просмотре медиатеки.",
|
||||
"EnableCinemaMode": "Включить режим кинозала",
|
||||
"EnableColorCodedBackgrounds": "Включить цветовой фон",
|
||||
"EnableDisplayMirroring": "Включить дублирование отображения",
|
||||
"EnableExternalVideoPlayers": "Включить внешние проигрыватели видео",
|
||||
"EnableBackdrops": "Задники",
|
||||
"EnableBackdropsHelp": "Задники будут отображаются фоном на некоторых страницах при просмотре медиатеки.",
|
||||
"EnableCinemaMode": "Режим кинозала",
|
||||
"EnableColorCodedBackgrounds": "Обозначеннные цветом фоны",
|
||||
"EnableDisplayMirroring": "Дублирование отображения",
|
||||
"EnableExternalVideoPlayers": "Внешние проигрыватели видео",
|
||||
"EnableExternalVideoPlayersHelp": "Меню внешнего проигрывателя будет показано при запуске воспроизведения видео.",
|
||||
"EnableHardwareEncoding": "Включить аппаратное кодирование",
|
||||
"EnableNextVideoInfoOverlay": "Включать во время воспроизведения сведения о последующем видео",
|
||||
"EnableNextVideoInfoOverlay": "Показывать сведения о следующем видео во время воспроизведения",
|
||||
"EnableNextVideoInfoOverlayHelp": "В конце видео отображать информацию о последующем видео в текущем плей-листе.",
|
||||
"EnablePhotos": "Включить фотографии",
|
||||
"EnablePhotosHelp": "Фото будут обнаруживаться и отображаться наряду с другими медиафайлами.",
|
||||
"EnablePhotos": "Отображать фотографии",
|
||||
"EnablePhotosHelp": "Рисунки будут обнаруживаться и отображаться наряду с другими медиафайлами.",
|
||||
"EnableStreamLooping": "Автоциклирование трансляций",
|
||||
"EnableStreamLoopingHelp": "Включайте, если трансляции содержат данные только на несколько секунд и необходимо непрерывно их запрашивать. Включение этого без необходимости может породить проблемы.",
|
||||
"EnableThemeSongs": "Включить тематические композиции",
|
||||
"EnableThemeSongsHelp": "При включении, тематические композиции будут воспроизводиться фоном при просмотре медиатеки.",
|
||||
"EnableThemeVideos": "Включить тематические видео",
|
||||
"EnableThemeVideosHelp": "При включении, тематические видео будут воспроизводиться фоном при просмотре медиатеки.",
|
||||
"EnableThemeSongs": "Тематические композиции",
|
||||
"EnableThemeSongsHelp": "Воспроизведение тематических композиций в фоновом режиме при навигации по медиатеке.",
|
||||
"EnableThemeVideos": "Тематические видео",
|
||||
"EnableThemeVideosHelp": "Воспроизведение тематических видео в фоновом режиме при навигации по медиатеке.",
|
||||
"Ended": "Прекращённое",
|
||||
"EndsAtValue": "Конец в {0}",
|
||||
"Episodes": "Эпизоды",
|
||||
|
@ -240,7 +240,7 @@
|
|||
"EveryNDays": "Каждые {0} дней",
|
||||
"ExitFullscreen": "Выход с полного экрана",
|
||||
"ExtraLarge": "Очень крупный",
|
||||
"ExtractChapterImagesHelp": "Извлечение рисунков сцен предоставляет возможности Jellyfin-приложениям для отображения графических меню выбора сцены. Данный процесс может быть медленным, нагружает ЦП и может понадобиться несколько гигабайт пространства. Он работает при обнаружении видеофайлов, а также, как задача, назначенная на ночь. Расписание возможно перенастроить в области Назначенных задач. Не рекомендуется запускать данную задачу в часы пик.",
|
||||
"ExtractChapterImagesHelp": "Извлечение рисунков сцен предоставляет возможности клиентам для отображения графических меню выбора сцены. Данный процесс может быть медленным, потребляет ресурсы, и могут понадобиться несколько гигабайт пространства. Он работает при обнаружении видеофайлов, а также, как задача, назначенная на ночь. Расписание возможно перенастроить в области Назначенных задач. Не рекомендуется запускать данную задачу в часы пик.",
|
||||
"Extras": "Допматериалы",
|
||||
"FFmpegSavePathNotFound": "Мы не смогли обнаружить FFmpeg по введённому вами пути. FFprobe также необходим и должен быть в той же самой папке. Эти компоненты обычно поставляются вместе в одном загрузочном пакете. Проверьте путь и повторите попытку.",
|
||||
"FastForward": "Быстро вперёд",
|
||||
|
@ -528,7 +528,7 @@
|
|||
"LabelAll": "Все",
|
||||
"LabelAllowHWTranscoding": "Разрешить аппаратную перекодировку",
|
||||
"LabelAllowServerAutoRestart": "Разрешить автоматический перезапуск сервера для применения обновлений",
|
||||
"LabelAllowServerAutoRestartHelp": "Сервер будет перезапускаться только в периоды простоя, когда никакие пользователи не активны.",
|
||||
"LabelAllowServerAutoRestartHelp": "Сервер будет перезапускаться только в периоды простоя, когда нет активности пользователей.",
|
||||
"LabelAllowedRemoteAddresses": "Фильтр внешних IP-адресов:",
|
||||
"LabelAllowedRemoteAddressesMode": "Режим фильтра внешних IP-адресов:",
|
||||
"LabelAppName": "Название приложения",
|
||||
|
@ -543,7 +543,7 @@
|
|||
"LabelBirthDate": "Дата рождения:",
|
||||
"LabelBirthYear": "Год рождения:",
|
||||
"LabelBlastMessageInterval": "Интервал сообщений проверки активности, с",
|
||||
"LabelBlastMessageIntervalHelp": "Определяет длительность в секундах между сообщениями проверки активности сервера.",
|
||||
"LabelBlastMessageIntervalHelp": "Определяет длительность в секундах между бомбардированием сообщениями проверки активности.",
|
||||
"LabelBlockContentWithTags": "Блокирование элементов с тегами:",
|
||||
"LabelBurnSubtitles": "Внедрение субтитров:",
|
||||
"LabelCache": "Кэш:",
|
||||
|
@ -562,7 +562,7 @@
|
|||
"LabelCustomCertificatePath": "Путь к пользовательскому SSL-сертификату:",
|
||||
"LabelCustomCertificatePathHelp": "Путь к файлу PKCS #12, содержащему сертификат и \tзакрытый ключ для включения поддержки TLS на произвольном домене.",
|
||||
"LabelCustomCss": "Настраиваемые CSS:",
|
||||
"LabelCustomCssHelp": "Применяйте свои собственные настраиваемые стили CSS к веб-интерфейсу.",
|
||||
"LabelCustomCssHelp": "Применяйте свою собственную настраиваемую стилизацию к веб-интерфейсу.",
|
||||
"LabelCustomDeviceDisplayName": "Отображаемое название:",
|
||||
"LabelCustomDeviceDisplayNameHelp": "Приведите произвольное имя для отображения или не заполняйте, чтобы использовать имя, выданное устройством.",
|
||||
"LabelCustomRating": "Произвольная возрастная категория:",
|
||||
|
@ -587,7 +587,7 @@
|
|||
"LabelDisplayOrder": "Порядок отображения:",
|
||||
"LabelDisplaySpecialsWithinSeasons": "Отображать специальные эпизоды в пределах тех сезонов, когда они выходили в эфир",
|
||||
"LabelDownMixAudioScale": "Коэффициент усиления при понижающем микшировании:",
|
||||
"LabelDownMixAudioScaleHelp": "Коэффициент компенсирующего усиления звука при понижающем до стерео микшировании. Задайте 1, чтобы не менять исходные значения уровня.",
|
||||
"LabelDownMixAudioScaleHelp": "Коэффициент компенсирующего усиления звука при понижающем до стерео микшировании. Значение 1 сохраняет исходный уровень.",
|
||||
"LabelDownloadLanguages": "Загружаемые языки:",
|
||||
"LabelDropImageHere": "Перетащите рисунок сюда или щёлкните для навигации.",
|
||||
"LabelDropShadow": "Окантовка:",
|
||||
|
@ -601,11 +601,11 @@
|
|||
"LabelEnableDlnaClientDiscoveryInterval": "Интервал обнаружения клиентов",
|
||||
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Определяется длительность в секундах между SSDP-запросами от Jellyfin.",
|
||||
"LabelEnableDlnaDebugLogging": "Включить журналирование отладки DLNA",
|
||||
"LabelEnableDlnaDebugLoggingHelp": "Это приведет к увеличению обьема файлов Журнала, рекомендуется использовать только для поиска неполадок.",
|
||||
"LabelEnableDlnaDebugLoggingHelp": "Создаются большие файлы Журнала, рекомендуется использовать только для поиска неполадок.",
|
||||
"LabelEnableDlnaPlayTo": "Включить DLNA-функцию Воспроизвести На",
|
||||
"LabelEnableDlnaPlayToHelp": "В Jellyfin имеется способность обнаруживать устройства внутри своей сети, а также предоставляется возможность удалённо управлять ими.",
|
||||
"LabelEnableDlnaPlayToHelp": "Обнаруживаются устройства внутри своей сети, а также предоставляется возможность удалённо управлять ими.",
|
||||
"LabelEnableDlnaServer": "Включить DLNA-сервер",
|
||||
"LabelEnableDlnaServerHelp": "UPnP-устройствам в домашней сети предоставляются возможности для навигации по содержанию Jellyfin и его воспроизведения.",
|
||||
"LabelEnableDlnaServerHelp": "Для UPnP-устройств домашней сети возможна навигация по содержанию и его воспроизведение.",
|
||||
"LabelEnableHardwareDecodingFor": "Включить аппаратное декодирование для:",
|
||||
"LabelEnableRealtimeMonitor": "Включить отслеживание в реальном времени",
|
||||
"LabelEnableRealtimeMonitorHelp": "В поддерживаемых файловых системах правки файлов будут обрабатываться незамедлительно.",
|
||||
|
@ -616,7 +616,7 @@
|
|||
"LabelEvent": "Событие:",
|
||||
"LabelEveryXMinutes": "Каждые:",
|
||||
"LabelExtractChaptersDuringLibraryScan": "Извлекать рисунки сцен в процессе сканирования медиатеки",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "При включении, рисунки сцен будут извлечены, когда видео импортируется в процессе сканирования медиатеки. При отключении, они будут извлечены в процессе назначенной задачи «Рисунки сцен», позволяя регулярному сканированию медиатеки завершаться быстрее.",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "Генерируются рисунки сцен при импорте видео в процессе сканирования медиатеки. В противном случае, они будут извлечены в процессе назначенной задачи «Рисунки сцен», позволяя регулярному сканированию медиатеки завершаться быстрее.",
|
||||
"LabelFailed": "Неудачно",
|
||||
"LabelFileOrUrl": "Файл или URL:",
|
||||
"LabelFinish": "Завершить",
|
||||
|
@ -624,13 +624,13 @@
|
|||
"LabelForgotPasswordUsernameHelp": "Введите имя пользователя, если помните его.",
|
||||
"LabelFormat": "Формат:",
|
||||
"LabelFriendlyName": "Понятное имя:",
|
||||
"LabelServerNameHelp": "Данное имя используется для распознавания данного сервера. Если не заполнять, то будет использовано имя компьютера.",
|
||||
"LabelServerNameHelp": "Это имя используется для распознавания сервера и будет по умолчанию именем компьютера.",
|
||||
"LabelGroupMoviesIntoCollections": "Группировать фильмы внутрь коллекций",
|
||||
"LabelGroupMoviesIntoCollectionsHelp": "При отображении списка фильмов, элементы, принадлежащие к одной коллекции будут отображаться как единый сгруппированный элемент.",
|
||||
"LabelH264Crf": "Значение CRF H264-кодирования:",
|
||||
"LabelH264EncodingPreset": "Предустановка H264-кодирования:",
|
||||
"LabelHardwareAccelerationType": "Аппаратное ускорение:",
|
||||
"LabelHardwareAccelerationTypeHelp": "Имеется только на поддерживаемых системах.",
|
||||
"LabelHardwareAccelerationTypeHelp": "Это экспериментальная функция, имеющаяся только на поддерживаемых системах.",
|
||||
"LabelHomeNetworkQuality": "Качество в домашней сети:",
|
||||
"LabelHomeScreenSectionValue": "Главная страница - раздел {0}:",
|
||||
"LabelHttpsPort": "Номер локального HTTPS-порта:",
|
||||
|
@ -644,20 +644,20 @@
|
|||
"LabelImageType": "Тип рисунка:",
|
||||
"LabelImportOnlyFavoriteChannels": "Ограничиваться каналами обозначенными как избранное",
|
||||
"LabelInNetworkSignInWithEasyPassword": "Включить внутрисетевой вход со своим простым PIN-кодом",
|
||||
"LabelInNetworkSignInWithEasyPasswordHelp": "При включении, возможно использовать простой PIN-код для входа в Jellyfin-приложения изнутри своей домашней сети. Ваш обычный пароль будет необходим только вне дома. Если PIN-код не заполнен, то внутри своей домашней сети не потребуется пароль.",
|
||||
"LabelInNetworkSignInWithEasyPasswordHelp": "Используется простой PIN-код для входа в клиенты внутри своей локальной сети. Ваш обычный пароль будет необходим только вне дома. Если PIN-код не заполнен, то внутри своей домашней сети не потребуется пароль.",
|
||||
"LabelInternetQuality": "Качество в Интернете:",
|
||||
"LabelKeepUpTo": "Хранить до:",
|
||||
"LabelKidsCategories": "Детские категории:",
|
||||
"LabelKodiMetadataDateFormat": "Формат даты выпуска:",
|
||||
"LabelKodiMetadataDateFormatHelp": "Все даты в пределах NFO-файлов будут считываться и записываться по данному формату.",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "Копировать extrafanart внутрь extrathumbs",
|
||||
"LabelKodiMetadataDateFormatHelp": "Все даты в пределах NFO-файлов будут разбираться по данному формату.",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "Копировать extrafanart в поле extrathumbs",
|
||||
"LabelKodiMetadataEnableExtraThumbsHelp": "При загрузке рисунков, их возможно сохранять внутрь extrafanart и extrathumbs для максимальной совместимости с оболочкой Kodi.",
|
||||
"LabelKodiMetadataEnablePathSubstitution": "Включить подстановки путей",
|
||||
"LabelKodiMetadataEnablePathSubstitutionHelp": "Включаются подстановки путей к рисункам с помощью параметров подстановки путей сервера.",
|
||||
"LabelKodiMetadataSaveImagePaths": "Сохранять пути рисунков в пределах NFO-файлов",
|
||||
"LabelKodiMetadataSaveImagePathsHelp": "Рекомендуется, если имена файлов рисунков не соответствуют руководящим принципам Kodi.",
|
||||
"LabelKodiMetadataUser": "Сохранение в NFO-файле данных о просмотре пользователем:",
|
||||
"LabelKodiMetadataUserHelp": "Включите, чтобы сохранять данные о просмотрах в NFO-файлах для использования в других приложениях.",
|
||||
"LabelKodiMetadataUserHelp": "Сохраняет данные о просмотрах в NFO-файлах для использования в других приложениях.",
|
||||
"LabelLanNetworks": "Домашние сети:",
|
||||
"LabelLanguage": "Язык:",
|
||||
"LabelLineup": "Список сопоставления:",
|
||||
|
@ -665,7 +665,7 @@
|
|||
"LabelLocalHttpServerPortNumberHelp": "TCP-порт, ко которому следует создать привязку HTTP-сервера Jellyfin.",
|
||||
"LabelLockItemToPreventChanges": "Зафиксировать данный элемент, чтобы запретить будущие правки",
|
||||
"LabelLoginDisclaimer": "Предупреждение при входе:",
|
||||
"LabelLoginDisclaimerHelp": "Это будет отображаться в нижней части страницы входа в систему.",
|
||||
"LabelLoginDisclaimerHelp": "Сообщение будет отображаться в нижней части страницы входа в систему.",
|
||||
"LabelLogs": "Журналы:",
|
||||
"LabelManufacturer": "Производитель",
|
||||
"LabelManufacturerUrl": "URL производителя",
|
||||
|
@ -674,7 +674,7 @@
|
|||
"LabelMaxChromecastBitrate": "Качество трансляции Chromecast:",
|
||||
"LabelMaxParentalRating": "Макс. допустимая возрастная категория:",
|
||||
"LabelMaxResumePercentage": "Макс. доля для возобновления, %:",
|
||||
"LabelMaxResumePercentageHelp": "Произведения предполагаются воспроизведёнными полностью, при остановке после данного момента",
|
||||
"LabelMaxResumePercentageHelp": "Произведения предполагаются воспроизведёнными полностью, при остановке с данного момента.",
|
||||
"LabelMaxScreenshotsPerItem": "Макс. число снимков экрана на элемент:",
|
||||
"LabelMaxStreamingBitrate": "Макс. качество трансляции:",
|
||||
"LabelMaxStreamingBitrateHelp": "Укажите макс. потоковую скорость трансляции.",
|
||||
|
@ -692,9 +692,9 @@
|
|||
"LabelMethod": "Метод:",
|
||||
"LabelMinBackdropDownloadWidth": "Мин. ширина загружаемого задника:",
|
||||
"LabelMinResumeDuration": "Мин. длительность для возобновления:",
|
||||
"LabelMinResumeDurationHelp": "Наименьшая длительность видео в секундах, при которой сохраняется позиция воспроизведения и позволяется возобновление",
|
||||
"LabelMinResumeDurationHelp": "Наименьшая длительность видео в секундах, при которой сохраняется позиция воспроизведения и позволяется возобновление.",
|
||||
"LabelMinResumePercentage": "Мин. доля для возобновления, %:",
|
||||
"LabelMinResumePercentageHelp": "Произведения предполагаются не воспроизведёнными, при остановке до данного момента",
|
||||
"LabelMinResumePercentageHelp": "Произведения предполагаются не воспроизведёнными, при остановке до данного момента.",
|
||||
"LabelMinScreenshotDownloadWidth": "Мин. ширина загружаемого снимка экрана:",
|
||||
"LabelModelDescription": "Описание модели",
|
||||
"LabelModelName": "Наименование модели",
|
||||
|
@ -703,7 +703,7 @@
|
|||
"LabelMonitorUsers": "Отслеживание деятельности от:",
|
||||
"LabelMovieCategories": "Фильмовые категории:",
|
||||
"LabelMoviePrefix": "Префикс фильма:",
|
||||
"LabelMoviePrefixHelp": "При применении к названиям фильмов префикса, введите его здесь, чтобы он правильно обрабатывался в Jellyfin.",
|
||||
"LabelMoviePrefixHelp": "При применении к названиям фильмов префикса, введите его здесь, чтобы он правильно обрабатывался на сервере.",
|
||||
"LabelMovieRecordingPath": "Путь к записываемым фильмам (необязательно):",
|
||||
"LabelMusicStreamingTranscodingBitrate": "Поток. скорость перекодировки музыки:",
|
||||
"LabelMusicStreamingTranscodingBitrateHelp": "Укажите максимальную потоковую скорость при трансляции музыки",
|
||||
|
@ -777,7 +777,7 @@
|
|||
"LabelSerialNumber": "Серийный номер",
|
||||
"LabelSeriesRecordingPath": "Путь к записываемым сериалам (необязательно):",
|
||||
"LabelServerHost": "Узел:",
|
||||
"LabelServerHostHelp": "192.168.1.100 или https://myserver.com",
|
||||
"LabelServerHostHelp": "192.168.1.100:8096 или https://myserver.com",
|
||||
"LabelServerPort": "Порт:",
|
||||
"LabelSimultaneousConnectionLimit": "Лимит одновременных потоков:",
|
||||
"LabelSkin": "Оболочка:",
|
||||
|
@ -818,7 +818,7 @@
|
|||
"LabelTrackNumber": "Номер дорожки:",
|
||||
"LabelTranscodingAudioCodec": "Аудио профиль:",
|
||||
"LabelTranscodingContainer": "Контейнер:",
|
||||
"LabelTranscodingTempPathHelp": "В данной папке содержатся рабочие файлы, используемые при перекодировке. Укажите произвольный путь, или не заполняйте, чтобы использовать стандартный в пределах серверной папки data.",
|
||||
"LabelTranscodingTempPathHelp": "Укажите произвольный путь для файлов перекодировки, служащие для клиентов. Оставьте пустым, чтобы использовать умолчания сервера.",
|
||||
"LabelTranscodingThreadCount": "Количество перекодирующих подпотоков:",
|
||||
"LabelTranscodingThreadCountHelp": "Выберите максимальное число подпотоков для использования при перекодировке. Сокращение числа подпотоков понижает нагрузку на ЦП, но преобразование может оказаться недостаточно быстрым для впечатления плавного воспроизведения.",
|
||||
"LabelTranscodingVideoCodec": "Видео кодек:",
|
||||
|
@ -833,7 +833,7 @@
|
|||
"LabelUserAgent": "Агент пользователя:",
|
||||
"LabelUserLibrary": "Медиатека пользователя:",
|
||||
"LabelUserLibraryHelp": "Выберите, чью медиатеку отображать на устройстве. Не заполняйте, чтобы наследовать параметр по умолчанию.",
|
||||
"LabelUserRemoteClientBitrateLimitHelp": "Это переопределит глобальные значения по умолчанию, установленные в параметрах воспроизведения сервера.",
|
||||
"LabelUserRemoteClientBitrateLimitHelp": "Переопределияются глобальные значения по умолчанию, установленные в параметрах воспроизведения сервера.",
|
||||
"LabelUsername": "Имя пользователя:",
|
||||
"LabelVaapiDevice": "Устройство VA-API:",
|
||||
"LabelVaapiDeviceHelp": "Это является узлом отрисовки, который используется для аппаратного ускорения.",
|
||||
|
@ -856,7 +856,7 @@
|
|||
"Large": "Крупный",
|
||||
"LatestFromLibrary": "Новейшее: {0}",
|
||||
"LearnHowYouCanContribute": "Изучите, как вы можете внести свой вклад.",
|
||||
"LibraryAccessHelp": "Выделите медиапапки, чтобы дать доступ этому пользователю. Администраторы могут изменять все папки с помощью «Диспетчера метаданных».",
|
||||
"LibraryAccessHelp": "Выделите медиатеки, чтобы дать доступ этому пользователю. Администраторы могут изменять все папки с помощью «Диспетчера метаданных».",
|
||||
"Like": "Нравится",
|
||||
"LinksValue": "Ссылки: {0}",
|
||||
"List": "Список",
|
||||
|
@ -912,7 +912,7 @@
|
|||
"MessageDeleteTaskTrigger": "Вы действительно хотите удалить данный триггер задачи?",
|
||||
"MessageDirectoryPickerBSDInstruction": "Касаемо BSD, возможно, потребуется конфигурировать хранилище в вашем FreeNAS Jail для того, чтобы разрешить Jellyfin получить к нему доступ.",
|
||||
"MessageDirectoryPickerInstruction": "Сетевые пути возможно ввести вручную, в том случае, если при нажатии кнопки «Сеть» происходит сбой обнаружения устройств. Например: {0} или {1}.",
|
||||
"MessageDirectoryPickerLinuxInstruction": "Для Linux на Arch Linux, CentOS, Debian, Fedora, OpenSuse или Ubuntu, вы должны предоставить системному пользователю Jellyfin, по крайней мере, доступ для чтения к расположениям хранилища.",
|
||||
"MessageDirectoryPickerLinuxInstruction": "Для Linux на Arch Linux, CentOS, Debian, Fedora, OpenSuse или Ubuntu, вы должны предоставить пользователю службы, по крайней мере, доступ для чтения к расположениям хранилища.",
|
||||
"MessageDownloadQueued": "Загрузка в очереди.",
|
||||
"MessageEnablingOptionLongerScans": "Включение этой опции может привести к значительному увеличению времени сканирования медиатеки.",
|
||||
"MessageFileReadError": "Произошла ошибка при считывании файла. Повторите попытку позже.",
|
||||
|
@ -923,21 +923,21 @@
|
|||
"MessageInvalidUser": "Недопустимое имя пользователя или пароль. Повторите попытку.",
|
||||
"MessageItemSaved": "Элемент сохранён.",
|
||||
"MessageItemsAdded": "Элементы добавлены.",
|
||||
"MessageLeaveEmptyToInherit": "Не заполняйте, чтобы наследовать параметры от родительского элемента, или глобальное значение по умолчанию.",
|
||||
"MessageLeaveEmptyToInherit": "Оставьте пустым, для наследования параметров от родительского элемента или глобального значения по умолчанию.",
|
||||
"MessageNoAvailablePlugins": "Плагинов не имеется.",
|
||||
"MessageNoMovieSuggestionsAvailable": "В настоящее время предложений фильмов не имеются. Начните смотреть и оценивать свои фильмы, а затем вернитесь, чтобы просмотреть рекомендации.",
|
||||
"MessageNoPluginsInstalled": "Нет установленных плагинов.",
|
||||
"MessageNoTrailersFound": "Трейлеры не найдены. Установите канал трейлеров, чтобы повысить своё впечатление от фильма путём добавления собрания интернет-трейлеров.",
|
||||
"MessageNothingHere": "Здесь ничего нет.",
|
||||
"MessagePasswordResetForUsers": "Следующие пользователи сбросили свои пароли. Теперь они могут войти с помощью PIN-кодов, которые использовались для сброса.",
|
||||
"MessagePlayAccessRestricted": "Воспроизведение данного содержания в настоящее время ограничено. За дополнительными сведениями. обратитесь к вашему администратору Jellyfin Server.",
|
||||
"MessagePlayAccessRestricted": "Воспроизведение данного содержания в настоящее время ограничено. За дополнительными сведениями обратитесь к администратору сервера.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Убедитесь, что включена загрузка метаданных из Интернета.",
|
||||
"MessagePleaseWait": "Подождите. Это может занять минуту.",
|
||||
"MessagePluginConfigurationRequiresLocalAccess": "Чтобы конфигурировать данный плагин войдите непосредственно в свой локальный сервер.",
|
||||
"MessagePluginInstallDisclaimer": "Плагины, созданные членами сообщества Jellyfin являются отличным способом повышения эффективности Jellyfin с помощью дополнительных функций и компонентов. Перед установкой примите во внимание влияние, которое они могут оказать на Jellyfin Server, например, длительные сканирования медиатеки, дополнительную фоновую обработку и снижение системной стабильности.",
|
||||
"MessageReenableUser": "См. ниже для разблокировки",
|
||||
"MessageSettingsSaved": "Параметры сохранены.",
|
||||
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "Из вашей медиатеки Jellyfin будут изъяты следующие расположения медиаданных :",
|
||||
"MessageTheFollowingLocationWillBeRemovedFromLibrary": "Из вашей медиатеки будут изъяты следующие расположения медиаданных:",
|
||||
"MessageUnableToConnectToServer": "Мы не можем подсоединиться к выбранному серверу в данный момент. Убедитесь, что он запущен и повторите попытку.",
|
||||
"MessageUnsetContentHelp": "Содержание отображается как обычные папки. Для наилучших результатов используйте диспетчер метаданных, чтобы задать тип содержания подпапок.",
|
||||
"MessageYouHaveVersionInstalled": "В настоящее время установлена версия {0}.",
|
||||
|
@ -946,10 +946,10 @@
|
|||
"MetadataSettingChangeHelp": "Изменение параметров метаданных повлияет на новое содержание, которое будет добавляться в дальнейшем. Чтобы обновить существующие содержание, откройте экран с подробностями и нажмите кнопку Обновить, или выполните массовое обновление, с помощью Диспетчера метаданных.",
|
||||
"MinutesAfter": "минут(у/ы) после",
|
||||
"MinutesBefore": "минут(у/ы) до",
|
||||
"Mobile": "Мобильный / Планшетный",
|
||||
"Mobile": "Мобильный",
|
||||
"Monday": "понедельник",
|
||||
"MoreFromValue": "Ещё в {0}",
|
||||
"MoreUsersCanBeAddedLater": "Потом можно добавить ещё пользователей в «Панели».",
|
||||
"MoreUsersCanBeAddedLater": "Потом можно добавить ещё пользователей изнутри «Панели».",
|
||||
"MoveLeft": "Двигать влево",
|
||||
"MoveRight": "Двигать вправо",
|
||||
"MovieLibraryHelp": "Просмотрите {0}Руководство Jellyfin по именованию фильмов{1}.",
|
||||
|
@ -980,7 +980,7 @@
|
|||
"OneChannel": "Один канал",
|
||||
"OnlyForcedSubtitles": "Только форсированные субтитры",
|
||||
"OnlyForcedSubtitlesHelp": "Загружены будут только форсированные субтитры.",
|
||||
"OnlyImageFormats": "Только графические форматы (VOBSUB, PGS, SUB/IDX и т.д.)",
|
||||
"OnlyImageFormats": "Только графические форматы (VOBSUB, PGS, SUB и т.д.)",
|
||||
"OptionAdminUsers": "Администраторы",
|
||||
"OptionAlbum": "Альбом",
|
||||
"OptionAlbumArtist": "Исп. альбома",
|
||||
|
@ -1028,7 +1028,7 @@
|
|||
"OptionDisableUserHelp": "При блокировании, этому пользователю не разрешаются любые подключения к серверу. Имеющиеся соединения будут разорваны.",
|
||||
"OptionDislikes": "Не нравящиеся",
|
||||
"OptionDisplayFolderView": "Отображать аспект Папки для просмотра обычных медиапапок",
|
||||
"OptionDisplayFolderViewHelp": "При включении, в Jellyfin-приложениях будет отображаться аспект Папки наряду с вашей медиатекой. Это полезно, если вам нравится вид обычных папок.",
|
||||
"OptionDisplayFolderViewHelp": "Отображение аспекта \"Папки\" рядом с другими вашими медиатеками. Это может быть полезно, если вы хотите вид обычных папок.",
|
||||
"OptionDownloadArtImage": "Виньетка",
|
||||
"OptionDownloadBackImage": "Задник",
|
||||
"OptionDownloadBannerImage": "Баннер",
|
||||
|
@ -1067,7 +1067,7 @@
|
|||
"OptionHideUser": "Скрыть этого пользователя с экрана входа",
|
||||
"OptionHideUserFromLoginHelp": "Целесообразно для личных или скрытых администраторских учётных записей. Пользователю будет нужно входить в систему вручную, вводя своё имя пользователя и пароль.",
|
||||
"OptionHlsSegmentedSubtitles": "Сегмент. субтитры HLS",
|
||||
"OptionHomeVideos": "Дом. видео и фото",
|
||||
"OptionHomeVideos": "Фотографии",
|
||||
"OptionIgnoreTranscodeByteRangeRequests": "Игнорировать запросы диапазона байтов перекодировки",
|
||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "При включении, эти запросы будут учтены, но заголовок диапазона байтов будет проигнорирован.",
|
||||
"OptionImdbRating": "Оценка IMDb",
|
||||
|
@ -1249,7 +1249,7 @@
|
|||
"StopRecording": "Остановить запись",
|
||||
"Studios": "Студии",
|
||||
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Эти параметры также применимы к любому Chromecast-воспроизведению запущенному данным устройством.",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "Данные параметры не применимы к графическим субтитрам (PGS, DVD и т.д.) или к субтитрам, которые имеют внедрённые свои собственные стили (ASS/SSA).",
|
||||
"SubtitleAppearanceSettingsDisclaimer": "Данные параметры не применяются к графическим субтитрам (PGS, DVD и т.д.) или субтитрам ASS/SSA, внедряющим свои собственные стили.",
|
||||
"SubtitleDownloadersHelp": "Включите и ранжируйте предпочитаемые загрузчики субтитров в порядке приоритета.",
|
||||
"Subtitles": "Субтитры",
|
||||
"Suggestions": "Предлагаемое",
|
||||
|
@ -1383,11 +1383,11 @@
|
|||
"ChangingMetadataImageSettingsNewContent": "Изменения в настройках загрузки метаданных или иллюстраций применяются только к новому содержанию, добавляемому в медиатеку. Чтобы применить изменения к наличным произведениям, необходимо обновить их метаданные вручную.",
|
||||
"HeaderAudioLanguages": "Языки аудио",
|
||||
"LabelDynamicExternalId": "{0} Ид:",
|
||||
"LeaveBlankToNotSetAPassword": "Необязательно - оставьте пустым, чтобы не назначать пароль",
|
||||
"LeaveBlankToNotSetAPassword": "Оставьте пустым, чтобы не назначать пароль.",
|
||||
"MessageImageFileTypeAllowed": "Поддерживаются только файлы JPEG и PNG.",
|
||||
"MessageImageTypeNotSelected": "Выберите тип рисунка из выпадающего меню.",
|
||||
"OptionResElement": "res-элемент",
|
||||
"AuthProviderHelp": "Выберите поставщика аутентификации, который будет использоваться для аутентификации пароля этого пользователя",
|
||||
"AuthProviderHelp": "Выберите поставщика аутентификации, который будет использоваться для аутентификации пароля этого пользователя.",
|
||||
"HeaderFavoriteMovies": "Избранные фильмы",
|
||||
"HeaderFavoriteShows": "Избранные передачи",
|
||||
"HeaderFavoriteEpisodes": "Избранные эпизоды",
|
||||
|
@ -1409,8 +1409,8 @@
|
|||
"DashboardOperatingSystem": "Операционная система: {0}",
|
||||
"DashboardArchitecture": "Архитектура: {0}",
|
||||
"LabelWeb": "Веб: ",
|
||||
"LaunchWebAppOnStartup": "Запустить веб-приложение Jellyfin в моем веб-браузере при запуске Jellyfin Server",
|
||||
"LaunchWebAppOnStartupHelp": "Это откроет веб-приложение в веб-браузере по умолчанию при начальном запуске Jellyfin Server. Это не произойдет при использовании функции перезапуска сервера.",
|
||||
"LaunchWebAppOnStartup": "Запустить веб-интерфейс при запуске Jellyfin Server",
|
||||
"LaunchWebAppOnStartupHelp": "Открывается веб-клиент в браузере по умолчанию при начальном запуске сервера. Это не произойдет при использовании функции перезапуска сервера.",
|
||||
"MediaInfoSoftware": "ПО",
|
||||
"MediaInfoStreamTypeAudio": "Аудио",
|
||||
"MediaInfoStreamTypeData": "Данные",
|
||||
|
@ -1429,7 +1429,7 @@
|
|||
"OptionIsSD": "SD",
|
||||
"OptionList": "Список",
|
||||
"OptionLoginAttemptsBeforeLockout": "Определяет, сколько неудачных попыток входа можно сделать до блокировки.",
|
||||
"OptionLoginAttemptsBeforeLockoutHelp": "0 означает наследование по умолчанию, 3 для не-администратора и 5 для администратора, -1 отключает блокировку",
|
||||
"OptionLoginAttemptsBeforeLockoutHelp": "При значении 0 наследуются по умолчанию три попытки для обычных пользователей и пять для администратора. При установке этого значения в -1 функция отключается.",
|
||||
"OptionPoster": "Постер",
|
||||
"OptionPosterCard": "Постер-карта",
|
||||
"OptionThumb": "Бегунок",
|
||||
|
@ -1437,5 +1437,26 @@
|
|||
"PasswordResetProviderHelp": "Выберите поставщика сброса пароля, который будет использоваться, когда этот пользователь запрашивает сброс пароля",
|
||||
"PlaybackData": "Данные воспроизведения",
|
||||
"SubtitleOffset": "Сдвиг субтитров",
|
||||
"TabNetworking": "Работа в сети"
|
||||
"TabNetworking": "Работа в сети",
|
||||
"LabelBaseUrlHelp": "Здесь вы можете добавить пользовательский подкаталог для доступа к серверу с более уникального URL.",
|
||||
"LabelPlayer": "Игрок:",
|
||||
"MoreMediaInfo": "О медиаданных",
|
||||
"LabelVideoCodec": "Видео кодек:",
|
||||
"LabelVideoBitrate": "Потоковая скорость аудио:",
|
||||
"LabelTranscodingProgress": "Прогресс перекодировки:",
|
||||
"LabelTranscodingFramerate": "Частота кадров перекодировки:",
|
||||
"LabelSize": "Размер:",
|
||||
"LabelPlayMethod": "Метод воспроизведения:",
|
||||
"LabelFolder": "Папка:",
|
||||
"LabelBaseUrl": "Базовый URL:",
|
||||
"LabelBitrate": "Поток. ск-ть:",
|
||||
"LabelAudioSampleRate": "Ч-та дискр-ии аудио:",
|
||||
"LabelAudioCodec": "Аудио кодек:",
|
||||
"LabelAudioChannels": "Аудио каналы:",
|
||||
"LabelAudioBitrate": "Потоковая скорость аудио:",
|
||||
"LabelAudioBitDepth": "Битовая глубина аудио:",
|
||||
"HeaderFavoriteBooks": "Избранные книги",
|
||||
"CopyStreamURL": "Копировать URL потока",
|
||||
"LabelPleaseRestart": "Изменения вступят в силу после перезагрузки веб-клиента вручную.",
|
||||
"CopyStreamURLSuccess": "URL скопирован успешно."
|
||||
}
|
||||
|
|
|
@ -162,7 +162,7 @@
|
|||
"DetectingDevices": "Söker efter enheter",
|
||||
"DeviceAccessHelp": "Detta tillämpas endast för enheter som kan bli unikt identifierade och som inte förhindrar åtkomst till browsern. Filtering av användarenheter kommer att blockera dom från att använda nya enheter tills dom har blivit godkända här.",
|
||||
"DirectPlaying": "Direktuppspelning",
|
||||
"DirectStreamHelp1": "Innehållet är kompatibelt med enheten vad gäller upplösning och mediatyp (H.264, AC3, etc.) men det är en inkompatibel filkontainer (.mkv, .avi, .wmv etc.). Video-filen kommer att packas om live innan strömningen startar till enheten.",
|
||||
"DirectStreamHelp1": "Innehållet är kompatibelt med enheten vad gäller upplösning och mediatyp (H.264, AC3, etc) men det är en inkompatibel filkontainer (mkv, avi, wmv etc). Video-filen kommer att packas om live innan strömningen startar till enheten.",
|
||||
"DirectStreamHelp2": "Direktströmning av en fil använder väldigt lite resurser av CPU'n utan att bildkvaliten försämras.",
|
||||
"DirectStreaming": "Direktströmning",
|
||||
"Director": "Regissör",
|
||||
|
@ -176,7 +176,7 @@
|
|||
"DisplayInMyMedia": "Visa på hemskärmen",
|
||||
"DisplayInOtherHomeScreenSections": "Visa sektioner på hemskärmen som till exempel senast media och fortsätt kolla på",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i säsonger",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Detta måste också vara aktiverat för TV-bibliotek på Jellyfin-servern.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Detta måste också vara aktiverat för TV-bibliotek i serverkonfigurationen.",
|
||||
"DisplayModeHelp": "Välj vilken typ av skärm som du kör Jellyfin på.",
|
||||
"DoNotRecord": "Spela inte in",
|
||||
"Down": "Ner",
|
||||
|
@ -184,27 +184,27 @@
|
|||
"DownloadsValue": "Nedladdningar: {0}",
|
||||
"DrmChannelsNotImported": "Kanaler med DRM kommer inte att importeras",
|
||||
"DropShadow": "Visa skugga",
|
||||
"EasyPasswordHelp": "Din enkla pin-kod används för att logga in offline på Jellyfin-appar som stödjer det, och kan också användas för enkel inloggning från ditt nätverk.",
|
||||
"EasyPasswordHelp": "Din enkla pin-kod används för att logga in offline på klienter som stödjer det, och kan också användas för enkel inloggning från ditt nätverk.",
|
||||
"Edit": "Ändra",
|
||||
"EditImages": "Ändra bilder",
|
||||
"EditMetadata": "Redigera metadata",
|
||||
"EditSubtitles": "Ändra undertexter",
|
||||
"EnableBackdrops": "Aktivera fondbilder",
|
||||
"EnableBackdropsHelp": "Om aktiverat visas fondbilder i bakgrunden av vissa sidor vid bläddring i biblioteket.",
|
||||
"EnableCinemaMode": "Aktivera bioläge",
|
||||
"EnableColorCodedBackgrounds": "Aktivera färgkodade bakgrundsbilder",
|
||||
"EnableDisplayMirroring": "Aktivera skärmspegling",
|
||||
"EnableExternalVideoPlayers": "Aktivera externa videospelare",
|
||||
"EnableBackdropsHelp": "Visar fondbilder i bakgrunden av vissa sidor vid bläddring i biblioteket.",
|
||||
"EnableCinemaMode": "Bioläge",
|
||||
"EnableColorCodedBackgrounds": "Färgkodade bakgrundsbilder",
|
||||
"EnableDisplayMirroring": "Skärmspegling",
|
||||
"EnableExternalVideoPlayers": "Externa videospelare",
|
||||
"EnableExternalVideoPlayersHelp": "En extern uppspelningsmeny kommer att visas när man startar en videouppspelning.",
|
||||
"EnableHardwareEncoding": "Aktivera hårdvaruomkodning",
|
||||
"EnableNextVideoInfoOverlay": "Visa info om nästa video under uppspelning",
|
||||
"EnableNextVideoInfoOverlayHelp": "Vid slutet av en video, visa information om nästföljande video i spellistan.",
|
||||
"EnablePhotos": "Aktivera foton",
|
||||
"EnablePhotosHelp": "Foton kommer upptäckas och visas tillsammans med andra mediefiler.",
|
||||
"EnablePhotos": "Visa foton",
|
||||
"EnablePhotosHelp": "Bilder kommer upptäckas och visas tillsammans med andra mediefiler.",
|
||||
"EnableThemeSongs": "Aktivera ledmotiv",
|
||||
"EnableThemeSongsHelp": "Om aktiverat spelas ledmotiv upp vid bläddring i biblioteket.",
|
||||
"EnableThemeSongsHelp": "Spela ledmotiv i bakgrunden vid bläddring i biblioteket.",
|
||||
"EnableThemeVideos": "Aktivera tema-videos",
|
||||
"EnableThemeVideosHelp": "Visar tema-videos i bakgrunden när man bläddrar i biblioteket.",
|
||||
"EnableThemeVideosHelp": "Spela tema-videos i bakgrunden vid bläddring i biblioteket.",
|
||||
"Ended": "Avslutad",
|
||||
"EndsAtValue": "Slutar vid: {0}",
|
||||
"Episodes": "Avsnitt",
|
||||
|
@ -218,7 +218,7 @@
|
|||
"EveryNDays": "Var {0}:e dag",
|
||||
"ExitFullscreen": "Avsluta fullskärm",
|
||||
"ExtraLarge": "Extra stor",
|
||||
"ExtractChapterImagesHelp": "Att extrahera kapitelrutor möjliggör för vissa klienter att visa grafiska menyer för kapitelval. Aktiviteten kan vara långsam, cpu-intensiv och kan kräva flera gigabyte hårddiskutrymme på din Jellyfin Server. Aktiviteten körs när nya videofiler upptäcks och är även schemalagd under nattetid, men det går att ändra under schemalagda aktiviteter. Det är inte rekommenderat att köra den här aktiviteten vid tider med hög belastning.",
|
||||
"ExtractChapterImagesHelp": "Att extrahera kapitelrutor möjliggör för klienter att visa grafiska menyer för kapitelval. Aktiviteten kan vara långsam, resurs-intensiv och kan kräva flera gigabyte i utrymme. Aktiviteten körs när nya videofiler upptäcks, och är även schemalagd under nattetid. Schemat går att konfigurera under schemalagda aktiviteter. Det är inte rekommenderat att köra den här aktiviteten vid tider med hög belastning.",
|
||||
"FFmpegSavePathNotFound": "Det gick inte att hitta FFmpeg med den angivna sökvägen. FFprobe måste även finnas i samma mapp. Dessa komponenter inkluderas normalt i samma nedladdning. Var god undersök sökvägen och försök igen.",
|
||||
"Favorite": "Favorit",
|
||||
"Favorites": "Favoriter",
|
||||
|
@ -232,8 +232,8 @@
|
|||
"FolderTypeMovies": "Filmer",
|
||||
"FolderTypeMusic": "Musik",
|
||||
"FolderTypeMusicVideos": "Musikvideor",
|
||||
"FolderTypeTvShows": "TV-serier",
|
||||
"FolderTypeUnset": "Blandat innehåll",
|
||||
"FolderTypeTvShows": "Serier",
|
||||
"FolderTypeUnset": "Blandat Innehåll",
|
||||
"Folders": "Mappar",
|
||||
"Friday": "Fredag",
|
||||
"Fullscreen": "Fullskärm",
|
||||
|
@ -1278,16 +1278,16 @@
|
|||
"HeaderFavoriteMovies": "Favoritfilmer",
|
||||
"HeaderAudioLanguages": "Ljudspråk",
|
||||
"HeaderAppearsOn": "Medverkar i",
|
||||
"HeaderApp": "Appar",
|
||||
"HeaderApp": "App",
|
||||
"HeaderAdmin": "Administratör",
|
||||
"Guide": "Hjälp",
|
||||
"Guide": "Guide",
|
||||
"GenreValue": "Genre: {0}",
|
||||
"General": "Allmänt",
|
||||
"ForAdditionalLiveTvOptions": "Klicka på \"Tjänster\" fliken för ytterligare Live TV leverantörer.",
|
||||
"FastForward": "Snabbspola",
|
||||
"Extras": "Mer",
|
||||
"ErrorAddingXmlTvFile": "Det uppstod ett problem vid läsningen av XmlTV filen. Kontrollera att filen är tillgänglig och försök igen.",
|
||||
"ErrorAddingListingsToSchedulesDirect": "Det uppstod ett problem när din lista skulle läggas till på ditt Schedules Direct konto. Schedules Direct tillåter bara ett begränsat antal listor per konto. Du kanske behöver logga in på Schedules Direct hemsidan och ta bort dina andra listor innan du kan fortsätta.",
|
||||
"ErrorAddingListingsToSchedulesDirect": "Det uppstod ett problem när din lista skulle läggas till på ditt Schedules Direct konto. Schedules Direct tillåter bara ett begränsat antal listor per konto. Du kanske behöver logga in på Schedules Direct hemsidan och ta bort andras listningar från ditt konto innan du fortsätter.",
|
||||
"EnableStreamLoopingHelp": "Aktivera enbart detta om direktsändningen enbart innehåller några sekunders data och behöver bli kontinuerligt uppdaterad. Att aktivera denna funktion i onödan kan skapa problem.",
|
||||
"EnableStreamLooping": "Loopa direktsändningar",
|
||||
"Descending": "Fallande",
|
||||
|
@ -1300,7 +1300,7 @@
|
|||
"ButtonTrailer": "Trailer",
|
||||
"ButtonStart": "Börja",
|
||||
"ButtonInfo": "Information",
|
||||
"ButtonGuide": "Hjälp",
|
||||
"ButtonGuide": "Guide",
|
||||
"Blacklist": "Svartlista",
|
||||
"Auto": "Automatisk",
|
||||
"AuthProviderHelp": "Välj en autentiserings leverantör som ska användas för att autentisera denna användarens lösenord",
|
||||
|
@ -1308,5 +1308,18 @@
|
|||
"AllowedRemoteAddressesHelp": "Kommaavgränsad lista av IP-adresser eller IP/nätmask poster för nätverk som kommer bli tillåtna att ansluta avlägset. Om fältet lämnas tomt så kommer alla avlägsna adresser tillåtas.",
|
||||
"AllowMediaConversionHelp": "Tillåt eller neka tillgång till media konvertings funktionen.",
|
||||
"AllowMediaConversion": "Tillåt media konvertering",
|
||||
"Alerts": "Notiser"
|
||||
"Alerts": "Notiser",
|
||||
"HeaderMedia": "Media",
|
||||
"HeaderHomeSettings": "Hem Inställningar",
|
||||
"HeaderHome": "Hem",
|
||||
"HeaderFavoriteVideos": "Favoritvideor",
|
||||
"HeaderFavoriteSongs": "Favoritlåtar",
|
||||
"HeaderFavoriteArtists": "Favoritartister",
|
||||
"HeaderFavoriteAlbums": "Favoritalbum",
|
||||
"HeaderFavoriteEpisodes": "Favoritavsnitt",
|
||||
"HeaderFavoriteShows": "Favoritserier",
|
||||
"HeaderFavoriteBooks": "Favoritböcker",
|
||||
"FormatValue": "Format: {0}",
|
||||
"CopyStreamURLSuccess": "URL har kopierats.",
|
||||
"CopyStreamURL": "Kopiera Stream URL"
|
||||
}
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
"ChannelNameOnly": "只在频道 {0}",
|
||||
"Channels": "频道",
|
||||
"CinemaModeConfigurationHelp": "影院模式直接为您的客厅带来剧场级体验,同时还可以播放预告片和自定义介绍。",
|
||||
"Collections": "收藏",
|
||||
"Collections": "合集",
|
||||
"CommunityRating": "公众评分",
|
||||
"Composer": "作曲家",
|
||||
"ConfirmDeleteImage": "删除图片?",
|
||||
|
@ -264,7 +264,7 @@
|
|||
"HeaderAddUser": "添加用户",
|
||||
"HeaderAdditionalParts": "附加部分",
|
||||
"HeaderAdmin": "管理",
|
||||
"HeaderAlbumArtists": "专辑艺术家",
|
||||
"HeaderAlbumArtists": "专辑作家",
|
||||
"HeaderAlbums": "专辑",
|
||||
"HeaderAlert": "警报",
|
||||
"HeaderAllowMediaDeletionFrom": "允许从中删除媒体",
|
||||
|
@ -365,7 +365,7 @@
|
|||
"HeaderMyMediaSmall": "我的媒体 (小)",
|
||||
"HeaderNewApiKey": "新 API 密钥",
|
||||
"HeaderNewDevices": "新设备",
|
||||
"HeaderNextUp": "下一个",
|
||||
"HeaderNextUp": "接下来",
|
||||
"HeaderOnNow": "现在",
|
||||
"HeaderOtherItems": "其他项目",
|
||||
"HeaderParentalRatings": "家长分级",
|
||||
|
@ -1349,8 +1349,8 @@
|
|||
"DirectStreamHelp1": "该媒体文件的分辨率和编码(H.264、AC3 等)与您的设备兼容,但容器格式(.mkv、.avi、.wmv 等)不受支持。因此,视频在串流至您的设备之前将会被即时封装为另一种格式。",
|
||||
"HeaderAppearsOn": "出现于",
|
||||
"HeaderCancelSeries": "取消系列",
|
||||
"HeaderFavoriteEpisodes": "最喜欢的剧集",
|
||||
"HeaderFavoriteArtists": "最喜欢的演员",
|
||||
"HeaderFavoriteEpisodes": "最爱的剧集",
|
||||
"HeaderFavoriteArtists": "最爱的艺术家",
|
||||
"HeaderKeepRecording": "继续录制",
|
||||
"HeaderKeepSeries": "保持系列",
|
||||
"HeaderMusicQuality": "音质",
|
||||
|
@ -1442,5 +1442,20 @@
|
|||
"SmallCaps": "小型大写字母",
|
||||
"SubtitleOffset": "字幕偏移",
|
||||
"MessageNoServersAvailable": "未能自动发现服务器。",
|
||||
"TabNetworking": "联网"
|
||||
"TabNetworking": "联网",
|
||||
"HeaderFavoriteBooks": "最爱的书籍",
|
||||
"LabelVideoCodec": "视频编码:",
|
||||
"LabelVideoBitrate": "视频码率:",
|
||||
"LabelTranscodingProgress": "转码进度:",
|
||||
"LabelTranscodingFramerate": "转码帧率:",
|
||||
"LabelSize": "大小:",
|
||||
"LabelPleaseRestart": "改动将在手动重启客户端后生效。",
|
||||
"LabelPlayMethod": "播放方式:",
|
||||
"LabelFolder": "文件夹:",
|
||||
"LabelBitrate": "比特率:",
|
||||
"LabelAudioSampleRate": "采样率:",
|
||||
"LabelAudioCodec": "编码:",
|
||||
"LabelAudioChannels": "声道:",
|
||||
"LabelAudioBitrate": "比特率:",
|
||||
"LabelAudioBitDepth": "采样位宽:"
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ module.exports = {
|
|||
output: {
|
||||
filename: 'bundle.js',
|
||||
path: path.resolve(__dirname, 'dist'),
|
||||
libraryTarget: 'amd'
|
||||
libraryTarget: 'amd-require'
|
||||
},
|
||||
|
||||
externals: [{
|
||||
|
|
18
yarn.lock
18
yarn.lock
|
@ -1121,6 +1121,11 @@ esutils@^2.0.2:
|
|||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||
|
||||
eventemitter3@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
|
||||
integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
|
||||
|
||||
events@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
|
||||
|
@ -1526,6 +1531,14 @@ hash.js@^1.0.0, hash.js@^1.0.3:
|
|||
inherits "^2.0.3"
|
||||
minimalistic-assert "^1.0.1"
|
||||
|
||||
hls.js@^0.12.4:
|
||||
version "0.12.4"
|
||||
resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-0.12.4.tgz#c155b7b2825a11117c111b781973c0ffa759006b"
|
||||
integrity sha512-e8OPxQ60dBVsdkv4atdxR21KzC1mgwspM41qpozpj3Uv1Fz4CaeQy3FWoaV2O+QKKbNRvV5hW+/LipCWdrwnMQ==
|
||||
dependencies:
|
||||
eventemitter3 "3.1.0"
|
||||
url-toolkit "^2.1.6"
|
||||
|
||||
hmac-drbg@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
||||
|
@ -3359,6 +3372,11 @@ urix@^0.1.0:
|
|||
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
|
||||
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
||||
|
||||
url-toolkit@^2.1.6:
|
||||
version "2.1.6"
|
||||
resolved "https://registry.yarnpkg.com/url-toolkit/-/url-toolkit-2.1.6.tgz#6d03246499e519aad224c44044a4ae20544154f2"
|
||||
integrity sha512-UaZ2+50am4HwrV2crR/JAf63Q4VvPYphe63WGeoJxeu8gmOm0qxPt+KsukfakPNrX9aymGNEkkaoICwn+OuvBw==
|
||||
|
||||
url@^0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue