mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into deminify-2
This commit is contained in:
commit
1a2019bb0e
88 changed files with 4241 additions and 2269 deletions
|
@ -28,6 +28,9 @@
|
|||
- [lewazo](https://github.com/lewazo)
|
||||
- [Raghu Saxena](https://github.com/ckcr4lyf)
|
||||
- [Nickbert7](https://github.com/Nickbert7)
|
||||
- [ferferga](https://github.com/ferferga)
|
||||
- [bilde2910](https://github.com/bilde2910)
|
||||
- [Daniel Hartung](https://github.com/dhartung)
|
||||
|
||||
# Emby Contributors
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<br/><br/>
|
||||
<a href="https://github.com/jellyfin/jellyfin-web"><img alt="GPL 2.0 License" src="https://img.shields.io/github/license/jellyfin/jellyfin-web.svg"/></a>
|
||||
<a href="https://github.com/jellyfin/jellyfin-web/releases"><img alt="Current Release" src="https://img.shields.io/github/release/jellyfin/jellyfin-web.svg"/></a>
|
||||
<a href="https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/?utm_source=widget"><img src="https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-web/svg-badge.svg" alt="Translation status" /></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
10
package.json
10
package.json
|
@ -16,13 +16,15 @@
|
|||
"webpack-merge": "^4.2.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"jstree": "^3.3.7",
|
||||
"jquery": "^3.4.1",
|
||||
"flv.js": "^1.5.0",
|
||||
"hls.js": "^0.12.4",
|
||||
"howler": "^2.1.2",
|
||||
"swiper": "^4.5.0",
|
||||
"jquery": "^3.4.1",
|
||||
"jstree": "^3.3.7",
|
||||
"libjass": "^0.11.0",
|
||||
"shaka-player": "^2.5.5",
|
||||
"sortablejs": "^1.9.0",
|
||||
"libjass": "^0.11.0"
|
||||
"swiper": "^3.4.2"
|
||||
},
|
||||
"scripts": {
|
||||
"serve": "webpack-dev-server --config webpack.dev.js --open",
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
// Use define from require.js not webpack's define
|
||||
var _define = window.define;
|
||||
|
||||
// flvjs
|
||||
var flvjs = require("flv.js");
|
||||
_define("flvjs", function() { return flvjs; });
|
||||
|
||||
// jstree
|
||||
var jstree = require("jstree");
|
||||
require("jstree/dist/themes/default/style.css");
|
||||
|
@ -21,6 +25,10 @@ _define("hlsjs", function() { return hlsjs; });
|
|||
var howler = require("howler");
|
||||
_define("howler", function() { return howler; });
|
||||
|
||||
// shaka
|
||||
var shaka = require("shaka-player");
|
||||
_define("shaka", function() { return shaka; });
|
||||
|
||||
// swiper
|
||||
var swiper = require("swiper");
|
||||
require("swiper/dist/css/swiper.min.css");
|
||||
|
|
|
@ -13,8 +13,7 @@ define(["events", "globalize", "dom", "datetime", "userSettings", "serverNotific
|
|||
if (entry.UserId && entry.UserPrimaryImageTag) {
|
||||
html += '<i class="listItemIcon md-icon" style="width:2em!important;height:2em!important;padding:0;color:transparent;background-color:' + color + ";background-image:url('" + apiClient.getUserImageUrl(entry.UserId, {
|
||||
type: "Primary",
|
||||
tag: entry.UserPrimaryImageTag,
|
||||
height: 40
|
||||
tag: entry.UserPrimaryImageTag
|
||||
}) + "');background-repeat:no-repeat;background-position:center center;background-size: cover;\">dvr</i>"
|
||||
} else {
|
||||
html += '<i class="listItemIcon md-icon" style="background-color:' + color + '">' + icon + '</i>';
|
||||
|
|
|
@ -430,13 +430,8 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function loadUserSkinWithOptions(ctx) {
|
||||
|
||||
require(['queryString'], function (queryString) {
|
||||
|
||||
//var url = options.url;
|
||||
//var index = url.indexOf('?');
|
||||
var params = queryString.parse(ctx.querystring);
|
||||
|
||||
skinManager.loadUserSkin({
|
||||
start: params.start
|
||||
});
|
||||
|
@ -444,16 +439,13 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function validateRoles(apiClient, roles) {
|
||||
|
||||
return Promise.all(roles.split(',').map(function (role) {
|
||||
return validateRole(apiClient, role);
|
||||
}));
|
||||
}
|
||||
|
||||
function validateRole(apiClient, role) {
|
||||
|
||||
if (role === 'admin') {
|
||||
|
||||
return apiClient.getCurrentUser().then(function (user) {
|
||||
if (user.Policy.IsAdministrator) {
|
||||
return Promise.resolve();
|
||||
|
@ -480,7 +472,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
route: route,
|
||||
path: ctx.path
|
||||
};
|
||||
//next();
|
||||
|
||||
ctx.handled = true;
|
||||
}
|
||||
|
@ -503,7 +494,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function endsWith(str, srch) {
|
||||
|
||||
return str.lastIndexOf(srch) === srch.length - 1;
|
||||
}
|
||||
|
||||
|
@ -513,6 +503,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
if (endsWith(baseRoute, '/') && !endsWith(baseRoute, '://')) {
|
||||
baseRoute = baseRoute.substring(0, baseRoute.length - 1);
|
||||
}
|
||||
|
||||
function baseUrl() {
|
||||
return baseRoute;
|
||||
}
|
||||
|
@ -551,14 +542,11 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function back() {
|
||||
|
||||
page.back();
|
||||
}
|
||||
|
||||
function canGoBack() {
|
||||
|
||||
var curr = current();
|
||||
|
||||
if (!curr) {
|
||||
return false;
|
||||
}
|
||||
|
@ -576,7 +564,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function show(path, options) {
|
||||
|
||||
if (path.indexOf('/') !== 0 && path.indexOf('://') === -1) {
|
||||
path = '/' + path;
|
||||
}
|
||||
|
@ -585,7 +572,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
path = path.replace(baseRoute, '');
|
||||
|
||||
if (currentRouteInfo && currentRouteInfo.path === path) {
|
||||
|
||||
// can't use this with home right now due to the back menu
|
||||
if (currentRouteInfo.route.type !== 'home') {
|
||||
loading.hide();
|
||||
|
@ -594,7 +580,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
resolveOnNextShow = resolve;
|
||||
page.show(path, options);
|
||||
});
|
||||
|
@ -615,14 +600,12 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function showItem(item, serverId, options) {
|
||||
|
||||
if (typeof (item) === 'string') {
|
||||
var apiClient = serverId ? connectionManager.getApiClient(serverId) : connectionManager.currentApiClient();
|
||||
apiClient.getItem(apiClient.getCurrentUserId(), item).then(function (item) {
|
||||
appRouter.showItem(item, options);
|
||||
});
|
||||
} else {
|
||||
|
||||
if (arguments.length === 2) {
|
||||
options = arguments[1];
|
||||
}
|
||||
|
@ -637,7 +620,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
var allRoutes = [];
|
||||
|
||||
function addRoute(path, newRoute) {
|
||||
|
||||
page(path, getHandler(newRoute));
|
||||
allRoutes.push(newRoute);
|
||||
}
|
||||
|
@ -649,7 +631,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
var backdropContainer;
|
||||
var backgroundContainer;
|
||||
function setTransparency(level) {
|
||||
|
||||
if (!backdropContainer) {
|
||||
backdropContainer = document.querySelector('.backdropContainer');
|
||||
}
|
||||
|
@ -662,8 +643,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
document.documentElement.classList.add('transparentDocument');
|
||||
backgroundContainer.classList.add('backgroundContainer-transparent');
|
||||
backdropContainer.classList.add('hide');
|
||||
}
|
||||
else if (level === 'backdrop' || level === 1) {
|
||||
} else if (level === 'backdrop' || level === 1) {
|
||||
backdrop.externalBackdrop(true);
|
||||
document.documentElement.classList.add('transparentDocument');
|
||||
backgroundContainer.classList.add('backgroundContainer-transparent');
|
||||
|
@ -677,9 +657,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
function pushState(state, title, url) {
|
||||
|
||||
state.navigate = false;
|
||||
|
||||
page.pushState(state, title, url);
|
||||
}
|
||||
|
||||
|
@ -690,40 +668,24 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
}
|
||||
|
||||
console.log('Setting page base to ' + baseRoute);
|
||||
|
||||
page.base(baseRoute);
|
||||
}
|
||||
|
||||
setBaseRoute();
|
||||
|
||||
function syncNow() {
|
||||
require(['localsync'], function (localSync) {
|
||||
localSync.sync();
|
||||
});
|
||||
}
|
||||
|
||||
function invokeShortcut(id) {
|
||||
|
||||
if (id.indexOf('library-') === 0) {
|
||||
|
||||
id = id.replace('library-', '');
|
||||
|
||||
id = id.split('_');
|
||||
|
||||
appRouter.showItem(id[0], id[1]);
|
||||
|
||||
} else if (id.indexOf('item-') === 0) {
|
||||
|
||||
id = id.replace('item-', '');
|
||||
|
||||
id = id.split('_');
|
||||
|
||||
appRouter.showItem(id[0], id[1]);
|
||||
|
||||
} else {
|
||||
|
||||
id = id.split('_');
|
||||
|
||||
appRouter.show(appRouter.getRouteUrl(id[0], {
|
||||
serverId: id[1]
|
||||
}));
|
||||
|
@ -740,6 +702,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
appRouter.canGoBack = canGoBack;
|
||||
appRouter.current = current;
|
||||
appRouter.beginConnectionWizard = beginConnectionWizard;
|
||||
appRouter.invokeShortcut = invokeShortcut;
|
||||
appRouter.showItem = showItem;
|
||||
appRouter.setTransparency = setTransparency;
|
||||
appRouter.getRoutes = getRoutes;
|
||||
|
@ -751,7 +714,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM
|
|||
Backdrop: 1,
|
||||
Full: 2
|
||||
};
|
||||
appRouter.invokeShortcut = invokeShortcut;
|
||||
|
||||
return appRouter;
|
||||
});
|
||||
|
|
|
@ -2,7 +2,6 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
'use strict';
|
||||
|
||||
function getKey(name, userId) {
|
||||
|
||||
if (userId) {
|
||||
name = userId + '-' + name;
|
||||
}
|
||||
|
@ -15,20 +14,15 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
}
|
||||
|
||||
AppSettings.prototype.enableAutoLogin = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('enableAutoLogin', val.toString());
|
||||
}
|
||||
|
||||
return this.get('enableAutoLogin') !== 'false';
|
||||
};
|
||||
|
||||
AppSettings.prototype.enableAutomaticBitrateDetection = function (isInNetwork, mediaType, val) {
|
||||
|
||||
var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork;
|
||||
|
||||
if (val != null) {
|
||||
|
||||
if (isInNetwork && mediaType === 'Audio') {
|
||||
val = true;
|
||||
}
|
||||
|
@ -44,11 +38,8 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.maxStreamingBitrate = function (isInNetwork, mediaType, val) {
|
||||
|
||||
var key = 'maxbitrate-' + mediaType + '-' + isInNetwork;
|
||||
|
||||
if (val != null) {
|
||||
|
||||
if (isInNetwork && mediaType === 'Audio') {
|
||||
// nothing to do, this is always a max value
|
||||
} else {
|
||||
|
@ -65,7 +56,6 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.maxStaticMusicBitrate = function (val) {
|
||||
|
||||
if (val !== undefined) {
|
||||
this.set('maxStaticMusicBitrate', val);
|
||||
}
|
||||
|
@ -75,18 +65,15 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.maxChromecastBitrate = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('chromecastBitrate1', val);
|
||||
}
|
||||
|
||||
val = this.get('chromecastBitrate1');
|
||||
|
||||
return val ? parseInt(val) : null;
|
||||
};
|
||||
|
||||
AppSettings.prototype.syncOnlyOnWifi = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('syncOnlyOnWifi', val.toString());
|
||||
}
|
||||
|
@ -95,7 +82,6 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.syncPath = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('syncPath', val);
|
||||
}
|
||||
|
@ -104,13 +90,11 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.cameraUploadServers = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('cameraUploadServers', val.join(','));
|
||||
}
|
||||
|
||||
val = this.get('cameraUploadServers');
|
||||
|
||||
if (val) {
|
||||
return val.split(',');
|
||||
}
|
||||
|
@ -119,7 +103,6 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.runAtStartup = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('runatstartup', val.toString());
|
||||
}
|
||||
|
@ -128,9 +111,7 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.set = function (name, value, userId) {
|
||||
|
||||
var currentValue = this.get(name, userId);
|
||||
|
||||
appStorage.setItem(getKey(name, userId), value);
|
||||
|
||||
if (currentValue !== value) {
|
||||
|
@ -139,12 +120,10 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
|||
};
|
||||
|
||||
AppSettings.prototype.get = function (name, userId) {
|
||||
|
||||
return appStorage.getItem(getKey(name, userId));
|
||||
};
|
||||
|
||||
AppSettings.prototype.enableSystemExternalPlayers = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
this.set('enableSystemExternalPlayers', val.toString());
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
'use strict';
|
||||
|
||||
function enableAnimation(elem) {
|
||||
|
||||
if (browser.slow) {
|
||||
return false;
|
||||
}
|
||||
|
@ -11,7 +10,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
}
|
||||
|
||||
function enableRotation() {
|
||||
|
||||
if (browser.tv) {
|
||||
return false;
|
||||
}
|
||||
|
@ -25,17 +23,13 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
}
|
||||
|
||||
function Backdrop() {
|
||||
|
||||
}
|
||||
|
||||
Backdrop.prototype.load = function (url, parent, existingBackdropImage) {
|
||||
|
||||
var img = new Image();
|
||||
|
||||
var self = this;
|
||||
|
||||
img.onload = function () {
|
||||
|
||||
if (self.isDestroyed) {
|
||||
return;
|
||||
}
|
||||
|
@ -75,6 +69,7 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
|
||||
internalBackdrop(true);
|
||||
};
|
||||
|
||||
img.src = url;
|
||||
};
|
||||
|
||||
|
@ -87,14 +82,12 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
};
|
||||
|
||||
Backdrop.prototype.destroy = function () {
|
||||
|
||||
this.isDestroyed = true;
|
||||
this.cancelAnimation();
|
||||
};
|
||||
|
||||
var backdropContainer;
|
||||
function getBackdropContainer() {
|
||||
|
||||
if (!backdropContainer) {
|
||||
backdropContainer = document.querySelector('.backdropContainer');
|
||||
}
|
||||
|
@ -109,7 +102,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
}
|
||||
|
||||
function clearBackdrop(clearAll) {
|
||||
|
||||
clearRotation();
|
||||
|
||||
if (currentLoadingBackdrop) {
|
||||
|
@ -123,6 +115,7 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
if (clearAll) {
|
||||
hasExternalBackdrop = false;
|
||||
}
|
||||
|
||||
internalBackdrop(false);
|
||||
}
|
||||
|
||||
|
@ -133,8 +126,8 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
}
|
||||
return backgroundContainer;
|
||||
}
|
||||
function setBackgroundContainerBackgroundEnabled() {
|
||||
|
||||
function setBackgroundContainerBackgroundEnabled() {
|
||||
if (hasInternalBackdrop || hasExternalBackdrop) {
|
||||
getBackgroundContainer().classList.add('withBackdrop');
|
||||
} else {
|
||||
|
@ -160,7 +153,6 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
|
||||
var currentLoadingBackdrop;
|
||||
function setBackdropImage(url) {
|
||||
|
||||
if (currentLoadingBackdrop) {
|
||||
currentLoadingBackdrop.destroy();
|
||||
currentLoadingBackdrop = null;
|
||||
|
@ -181,48 +173,25 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
currentLoadingBackdrop = instance;
|
||||
}
|
||||
|
||||
var standardWidths = [480, 720, 1280, 1440, 1920];
|
||||
function getBackdropMaxWidth() {
|
||||
|
||||
var width = dom.getWindowSize().innerWidth;
|
||||
|
||||
if (standardWidths.indexOf(width) !== -1) {
|
||||
return width;
|
||||
}
|
||||
|
||||
var roundScreenTo = 100;
|
||||
width = Math.floor(width / roundScreenTo) * roundScreenTo;
|
||||
|
||||
return Math.min(width, 1920);
|
||||
}
|
||||
|
||||
function getItemImageUrls(item, imageOptions) {
|
||||
|
||||
imageOptions = imageOptions || {};
|
||||
|
||||
var apiClient = connectionManager.getApiClient(item.ServerId);
|
||||
|
||||
if (item.BackdropImageTags && item.BackdropImageTags.length > 0) {
|
||||
|
||||
return item.BackdropImageTags.map(function (imgTag, index) {
|
||||
|
||||
return apiClient.getScaledImageUrl(item.BackdropItemId || item.Id, Object.assign(imageOptions, {
|
||||
type: "Backdrop",
|
||||
tag: imgTag,
|
||||
maxWidth: getBackdropMaxWidth(),
|
||||
index: index
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
|
||||
|
||||
return item.ParentBackdropImageTags.map(function (imgTag, index) {
|
||||
|
||||
return apiClient.getScaledImageUrl(item.ParentBackdropItemId, Object.assign(imageOptions, {
|
||||
type: "Backdrop",
|
||||
tag: imgTag,
|
||||
maxWidth: getBackdropMaxWidth(),
|
||||
index: index
|
||||
}));
|
||||
});
|
||||
|
@ -232,17 +201,13 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
}
|
||||
|
||||
function getImageUrls(items, imageOptions) {
|
||||
|
||||
var list = [];
|
||||
|
||||
var onImg = function (img) {
|
||||
list.push(img);
|
||||
};
|
||||
|
||||
for (var i = 0, length = items.length; i < length; i++) {
|
||||
|
||||
var itemImages = getItemImageUrls(items[i], imageOptions);
|
||||
|
||||
itemImages.forEach(onImg);
|
||||
}
|
||||
|
||||
|
@ -262,12 +227,12 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
|
||||
// If you don't care about the order of the elements inside
|
||||
// the array, you should sort both arrays here.
|
||||
|
||||
for (var i = 0; i < a.length; ++i) {
|
||||
if (a[i] !== b[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -275,20 +240,16 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
var currentRotatingImages = [];
|
||||
var currentRotationIndex = -1;
|
||||
function setBackdrops(items, imageOptions, enableImageRotation) {
|
||||
|
||||
var images = getImageUrls(items, imageOptions);
|
||||
|
||||
if (images.length) {
|
||||
|
||||
startRotation(images, enableImageRotation);
|
||||
|
||||
} else {
|
||||
clearBackdrop();
|
||||
}
|
||||
}
|
||||
|
||||
function startRotation(images, enableImageRotation) {
|
||||
|
||||
if (arraysEqual(images, currentRotatingImages)) {
|
||||
return;
|
||||
}
|
||||
|
@ -301,11 +262,11 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
if (images.length > 1 && enableImageRotation !== false && enableRotation()) {
|
||||
rotationInterval = setInterval(onRotationInterval, 24000);
|
||||
}
|
||||
|
||||
onRotationInterval();
|
||||
}
|
||||
|
||||
function onRotationInterval() {
|
||||
|
||||
if (playbackManager.isPlayingLocally(['Video'])) {
|
||||
return;
|
||||
}
|
||||
|
@ -324,35 +285,29 @@ define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style']
|
|||
if (interval) {
|
||||
clearInterval(interval);
|
||||
}
|
||||
|
||||
rotationInterval = null;
|
||||
currentRotatingImages = [];
|
||||
currentRotationIndex = -1;
|
||||
}
|
||||
|
||||
function setBackdrop(url, imageOptions) {
|
||||
|
||||
if (url) {
|
||||
if (typeof url !== 'string') {
|
||||
if (url && typeof url !== 'string') {
|
||||
url = getImageUrls([url], imageOptions)[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (url) {
|
||||
clearRotation();
|
||||
|
||||
setBackdropImage(url);
|
||||
|
||||
} else {
|
||||
clearBackdrop();
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
setBackdrops: setBackdrops,
|
||||
setBackdrop: setBackdrop,
|
||||
clear: clearBackdrop,
|
||||
externalBackdrop: externalBackdrop
|
||||
};
|
||||
|
||||
});
|
|
@ -232,9 +232,10 @@ button {
|
|||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-size: contain;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center bottom;
|
||||
background-position: center;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.cardImage-img {
|
||||
|
|
|
@ -471,7 +471,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Thumb
|
||||
});
|
||||
|
||||
|
@ -479,7 +478,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Banner",
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Banner
|
||||
});
|
||||
|
||||
|
@ -487,7 +485,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Disc",
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Disc
|
||||
});
|
||||
|
||||
|
@ -495,7 +492,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Logo",
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Logo
|
||||
});
|
||||
|
||||
|
@ -503,7 +499,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.ParentLogoItemId, {
|
||||
type: "Logo",
|
||||
maxWidth: width,
|
||||
tag: item.ParentLogoImageTag
|
||||
});
|
||||
|
||||
|
@ -511,7 +506,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.SeriesId, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.SeriesThumbImageTag
|
||||
});
|
||||
|
||||
|
@ -519,7 +513,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.ParentThumbItemId, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.ParentThumbImageTag
|
||||
});
|
||||
|
||||
|
@ -527,7 +520,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Backdrop",
|
||||
maxWidth: width,
|
||||
tag: item.BackdropImageTags[0]
|
||||
});
|
||||
|
||||
|
@ -537,7 +529,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, {
|
||||
type: "Backdrop",
|
||||
maxWidth: width,
|
||||
tag: item.ParentBackdropImageTags[0]
|
||||
});
|
||||
|
||||
|
@ -547,8 +538,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Primary",
|
||||
maxHeight: height,
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Primary
|
||||
});
|
||||
|
||||
|
@ -569,8 +558,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.PrimaryImageItemId || item.Id || item.ItemId, {
|
||||
type: "Primary",
|
||||
maxHeight: height,
|
||||
maxWidth: width,
|
||||
tag: item.PrimaryImageTag
|
||||
});
|
||||
|
||||
|
@ -589,7 +576,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, {
|
||||
type: "Primary",
|
||||
maxWidth: width,
|
||||
tag: item.ParentPrimaryImageTag
|
||||
});
|
||||
}
|
||||
|
@ -597,7 +583,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.SeriesId, {
|
||||
type: "Primary",
|
||||
maxWidth: width,
|
||||
tag: item.SeriesPrimaryImageTag
|
||||
});
|
||||
}
|
||||
|
@ -607,8 +592,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.AlbumId, {
|
||||
type: "Primary",
|
||||
maxHeight: height,
|
||||
maxWidth: width,
|
||||
tag: item.AlbumPrimaryImageTag
|
||||
});
|
||||
|
||||
|
@ -623,7 +606,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Thumb
|
||||
});
|
||||
|
||||
|
@ -632,7 +614,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Backdrop",
|
||||
maxWidth: width,
|
||||
tag: item.BackdropImageTags[0]
|
||||
});
|
||||
|
||||
|
@ -640,7 +621,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.ImageTags.Thumb
|
||||
});
|
||||
|
||||
|
@ -648,7 +628,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.SeriesId, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.SeriesThumbImageTag
|
||||
});
|
||||
|
||||
|
@ -656,7 +635,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.ParentThumbItemId, {
|
||||
type: "Thumb",
|
||||
maxWidth: width,
|
||||
tag: item.ParentThumbImageTag
|
||||
});
|
||||
|
||||
|
@ -664,7 +642,6 @@ define(['datetime', 'imageLoader', 'connectionManager', 'itemHelper', 'focusMana
|
|||
|
||||
imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, {
|
||||
type: "Backdrop",
|
||||
maxWidth: width,
|
||||
tag: item.ParentBackdropImageTags[0]
|
||||
});
|
||||
|
||||
|
|
|
@ -147,15 +147,14 @@
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.paper-icon-button-light > img {
|
||||
width: 1.72em;
|
||||
/* Can't use 100% height or it will stretch past the boundaries in safari */
|
||||
/*height: 100%;*/
|
||||
.paper-icon-button-light > div {
|
||||
max-height: 100%;
|
||||
/* Make sure its on top of the ripple */
|
||||
transform: scale(1.8);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
vertical-align: middle;
|
||||
display: inline;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.emby-button-foreground {
|
||||
|
|
|
@ -560,31 +560,31 @@ define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'la
|
|||
|
||||
if (enableScrollX()) {
|
||||
html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-mousewheel="false" data-centerfocus="true" data-scrollbuttons="false">';
|
||||
html += '<div class="padded-left padded-right padded-top padded-bottom scrollSlider focuscontainer-x">';
|
||||
html += '<div class="padded-top padded-bottom scrollSlider focuscontainer-x">';
|
||||
} else {
|
||||
html += '<div class="padded-left padded-right padded-top padded-bottom focuscontainer-x">';
|
||||
html += '<div class="padded-top padded-bottom focuscontainer-x">';
|
||||
}
|
||||
|
||||
html += '<a style="margin-left:.8em;margin-right:0;" is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
serverId: apiClient.serverId(),
|
||||
section: 'programs'
|
||||
}) + '" class="raised"><span>' + globalize.translate('Programs') + '</span></a>';
|
||||
|
||||
html += '<a style="margin-left:.5em;margin-right:0;" is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
serverId: apiClient.serverId(),
|
||||
section: 'guide'
|
||||
}) + '" class="raised"><span>' + globalize.translate('Guide') + '</span></a>';
|
||||
|
||||
html += '<a style="margin-left:.5em;margin-right:0;" is="emby-linkbutton" href="' + appRouter.getRouteUrl('recordedtv', {
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl('recordedtv', {
|
||||
serverId: apiClient.serverId()
|
||||
}) + '" class="raised"><span>' + globalize.translate('Recordings') + '</span></a>';
|
||||
|
||||
html += '<a style="margin-left:.5em;margin-right:0;" is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
serverId: apiClient.serverId(),
|
||||
section: 'dvrschedule'
|
||||
}) + '" class="raised"><span>' + globalize.translate('Schedule') + '</span></a>';
|
||||
|
||||
html += '<a style="margin-left:.5em;margin-right:0;" is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl('livetv', {
|
||||
serverId: apiClient.serverId(),
|
||||
section: 'seriesrecording'
|
||||
}) + '" class="raised"><span>' + globalize.translate('Series') + '</span></a>';
|
||||
|
|
|
@ -1192,24 +1192,26 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
|||
}
|
||||
|
||||
var trackElement = null;
|
||||
var expectedId = 'manualTrack' + track.Index;
|
||||
if (videoElement.textTracks && videoElement.textTracks.length > 0) {
|
||||
trackElement = videoElement.textTracks[0];
|
||||
|
||||
// get list of tracks
|
||||
var allTracks = videoElement.textTracks;
|
||||
for (var i = 0; i < allTracks.length; i++) {
|
||||
// This throws an error in IE, but is fine in chrome
|
||||
// In IE it's not necessary anyway because changing the src seems to be enough
|
||||
try {
|
||||
trackElement.mode = 'showing';
|
||||
while (trackElement.cues.length) {
|
||||
trackElement.removeCue(trackElement.cues[0]);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Error removing cue from textTrack');
|
||||
}
|
||||
|
||||
var currentTrack = allTracks[i];
|
||||
|
||||
if (currentTrack.label === expectedId) {
|
||||
trackElement = currentTrack;
|
||||
break;
|
||||
trackElement.mode = 'disabled';
|
||||
} else {
|
||||
currentTrack.mode = 'disabled';
|
||||
// There is a function addTextTrack but no function for removeTextTrack
|
||||
// Therefore we add ONE element and replace its cue data
|
||||
trackElement = videoElement.addTextTrack('subtitles', 'manualTrack', 'und');
|
||||
}
|
||||
}
|
||||
|
||||
if (!trackElement) {
|
||||
trackElement = videoElement.addTextTrack('subtitles', 'manualTrack' + track.Index, track.Language || 'und');
|
||||
|
||||
// download the track json
|
||||
fetchSubtitles(track, item).then(function (data) {
|
||||
|
@ -1227,9 +1229,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
|||
});
|
||||
trackElement.mode = 'showing';
|
||||
});
|
||||
} else {
|
||||
trackElement.mode = 'showing';
|
||||
}
|
||||
}
|
||||
|
||||
function updateSubtitleText(timeMs) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', 'playbackManager', 'loading', 'appSettings', 'browser', 'actionsheet'], function (appHost, globalize, connectionManager, itemHelper, appRouter, playbackManager, loading, appSettings, browser, actionsheet) {
|
||||
'use strict';
|
||||
define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", "playbackManager", "loading", "appSettings", "browser", "actionsheet"], function (appHost, globalize, connectionManager, itemHelper, appRouter, playbackManager, loading, appSettings, browser, actionsheet) {
|
||||
"use strict";
|
||||
|
||||
function getCommands(options) {
|
||||
var item = options.item;
|
||||
|
@ -9,18 +9,20 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
var user = options.user;
|
||||
var commands = [];
|
||||
|
||||
if (canPlay && item.MediaType !== 'Photo') {
|
||||
if (canPlay && item.MediaType !== "Photo") {
|
||||
if (options.play !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('Play'),
|
||||
id: 'resume'
|
||||
name: globalize.translate("Play"),
|
||||
id: "resume",
|
||||
icon: "play_arrow"
|
||||
});
|
||||
}
|
||||
|
||||
if (options.playAllFromHere && item.Type !== 'Program' && item.Type !== 'TvChannel') {
|
||||
if (options.playAllFromHere && item.Type !== "Program" && item.Type !== "TvChannel") {
|
||||
commands.push({
|
||||
name: globalize.translate('PlayAllFromHere'),
|
||||
id: 'playallfromhere'
|
||||
name: globalize.translate("PlayAllFromHere"),
|
||||
id: "playallfromhere",
|
||||
icon: "play_arrow"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -28,22 +30,24 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (playbackManager.canQueue(item)) {
|
||||
if (options.queue !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('AddToPlayQueue'),
|
||||
id: 'queue'
|
||||
name: globalize.translate("AddToPlayQueue"),
|
||||
id: "queue",
|
||||
icon: "playlist_add"
|
||||
});
|
||||
}
|
||||
|
||||
if (options.queue !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('PlayNext'),
|
||||
id: 'queuenext'
|
||||
name: globalize.translate("PlayNext"),
|
||||
id: "queuenext",
|
||||
icon: "playlist_add"
|
||||
});
|
||||
}
|
||||
|
||||
//if (options.queueAllFromHere) {
|
||||
// commands.push({
|
||||
// name: globalize.translate('QueueAllFromHere'),
|
||||
// id: 'queueallfromhere'
|
||||
// name: globalize.translate("QueueAllFromHere"),
|
||||
// id: "queueallfromhere"
|
||||
// });
|
||||
//}
|
||||
}
|
||||
|
@ -51,11 +55,12 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
|
||||
|
||||
if (item.IsFolder || item.Type === "MusicArtist" || item.Type === "MusicGenre") {
|
||||
if (item.CollectionType !== 'livetv') {
|
||||
if (item.CollectionType !== "livetv") {
|
||||
if (options.shuffle !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('Shuffle'),
|
||||
id: 'shuffle'
|
||||
name: globalize.translate("Shuffle"),
|
||||
id: "shuffle",
|
||||
icon: "shuffle"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -64,8 +69,9 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (item.MediaType === "Audio" || item.Type === "MusicAlbum" || item.Type === "MusicArtist" || item.Type === "MusicGenre") {
|
||||
if (options.instantMix !== false && !itemHelper.isLocalItem(item)) {
|
||||
commands.push({
|
||||
name: globalize.translate('InstantMix'),
|
||||
id: 'instantmix'
|
||||
name: globalize.translate("InstantMix"),
|
||||
id: "instantmix",
|
||||
icon: "shuffle"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -79,75 +85,91 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (!restrictOptions) {
|
||||
if (itemHelper.supportsAddingToCollection(item)) {
|
||||
commands.push({
|
||||
name: globalize.translate('AddToCollection'),
|
||||
id: 'addtocollection'
|
||||
name: globalize.translate("AddToCollection"),
|
||||
id: "addtocollection",
|
||||
icon: "playlist_add"
|
||||
});
|
||||
}
|
||||
|
||||
if (itemHelper.supportsAddingToPlaylist(item)) {
|
||||
commands.push({
|
||||
name: globalize.translate('AddToPlaylist'),
|
||||
id: 'addtoplaylist'
|
||||
name: globalize.translate("AddToPlaylist"),
|
||||
id: "addtoplaylist",
|
||||
icon: "playlist_add"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if ((item.Type === 'Timer') && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
|
||||
if ((item.Type === "Timer") && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('CancelRecording'),
|
||||
id: 'canceltimer'
|
||||
name: globalize.translate("CancelRecording"),
|
||||
id: "canceltimer",
|
||||
icon: "cancel"
|
||||
});
|
||||
}
|
||||
|
||||
if ((item.Type === 'Recording' && item.Status === 'InProgress') && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
|
||||
if ((item.Type === "Recording" && item.Status === "InProgress") && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('CancelRecording'),
|
||||
id: 'canceltimer'
|
||||
name: globalize.translate("CancelRecording"),
|
||||
id: "canceltimer",
|
||||
icon: "cancel"
|
||||
});
|
||||
}
|
||||
|
||||
if ((item.Type === 'SeriesTimer') && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
|
||||
if ((item.Type === "SeriesTimer") && user.Policy.EnableLiveTvManagement && options.cancelTimer !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('CancelSeries'),
|
||||
id: 'cancelseriestimer'
|
||||
name: globalize.translate("CancelSeries"),
|
||||
id: "cancelseriestimer",
|
||||
icon: "cancel"
|
||||
});
|
||||
}
|
||||
|
||||
if (item.CanDelete && options.deleteItem !== false) {
|
||||
|
||||
if (item.Type === 'Playlist' || item.Type === 'BoxSet') {
|
||||
if (item.Type === "Playlist" || item.Type === "BoxSet") {
|
||||
commands.push({
|
||||
name: globalize.translate('Delete'),
|
||||
id: 'delete'
|
||||
name: globalize.translate("Delete"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
});
|
||||
} else {
|
||||
commands.push({
|
||||
name: globalize.translate('DeleteMedia'),
|
||||
id: 'delete'
|
||||
name: globalize.translate("DeleteMedia"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Books are promoted to major download Button and therefor excluded in the context menu
|
||||
if ((item.CanDownload && appHost.supports('filedownload')) && item.Type !== "Book") {
|
||||
if ((item.CanDownload && appHost.supports("filedownload")) && item.Type !== "Book") {
|
||||
commands.push({
|
||||
name: globalize.translate('Download'),
|
||||
id: 'download'
|
||||
name: globalize.translate("Download"),
|
||||
id: "download",
|
||||
icon: "file_download"
|
||||
});
|
||||
|
||||
commands.push({
|
||||
name: globalize.translate('CopyStreamURL'),
|
||||
id: 'copy-stream'
|
||||
name: globalize.translate("CopyStreamURL"),
|
||||
id: "copy-stream",
|
||||
icon: "content_copy"
|
||||
});
|
||||
}
|
||||
|
||||
if (commands.length) {
|
||||
commands.push({
|
||||
divider: true
|
||||
});
|
||||
}
|
||||
|
||||
var canEdit = itemHelper.canEdit(user, item);
|
||||
if (canEdit) {
|
||||
if (options.edit !== false && item.Type !== 'SeriesTimer') {
|
||||
var text = (item.Type === 'Timer' || item.Type === 'SeriesTimer') ? globalize.translate('Edit') : globalize.translate('EditMetadata');
|
||||
if (options.edit !== false && item.Type !== "SeriesTimer") {
|
||||
var text = (item.Type === "Timer" || item.Type === "SeriesTimer") ? globalize.translate("Edit") : globalize.translate("EditMetadata");
|
||||
commands.push({
|
||||
name: text,
|
||||
id: 'edit'
|
||||
id: "edit",
|
||||
icon: "edit"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -155,18 +177,20 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (itemHelper.canEditImages(user, item)) {
|
||||
if (options.editImages !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('EditImages'),
|
||||
id: 'editimages'
|
||||
name: globalize.translate("EditImages"),
|
||||
id: "editimages",
|
||||
icon: "edit"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (canEdit) {
|
||||
if (item.MediaType === 'Video' && item.Type !== 'TvChannel' && item.Type !== 'Program' && item.LocationType !== 'Virtual' && !(item.Type === 'Recording' && item.Status !== 'Completed')) {
|
||||
if (item.MediaType === "Video" && item.Type !== "TvChannel" && item.Type !== "Program" && item.LocationType !== "Virtual" && !(item.Type === "Recording" && item.Status !== "Completed")) {
|
||||
if (options.editSubtitles !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('EditSubtitles'),
|
||||
id: 'editsubtitles'
|
||||
name: globalize.translate("EditSubtitles"),
|
||||
id: "editsubtitles",
|
||||
icon: "closed_caption"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -175,8 +199,9 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (options.identify !== false) {
|
||||
if (itemHelper.canIdentify(user, item)) {
|
||||
commands.push({
|
||||
name: globalize.translate('Identify'),
|
||||
id: 'identify'
|
||||
name: globalize.translate("Identify"),
|
||||
id: "identify",
|
||||
icon: "edit"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -184,48 +209,54 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (item.MediaSources) {
|
||||
if (options.moremediainfo !== false) {
|
||||
commands.push({
|
||||
name: globalize.translate('MoreMediaInfo'),
|
||||
id: 'moremediainfo'
|
||||
name: globalize.translate("MoreMediaInfo"),
|
||||
id: "moremediainfo",
|
||||
icon: "info"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (item.Type === 'Program' && options.record !== false) {
|
||||
if (item.Type === "Program" && options.record !== false) {
|
||||
if (item.TimerId) {
|
||||
commands.push({
|
||||
name: Globalize.translate('ManageRecording'),
|
||||
id: 'record'
|
||||
name: Globalize.translate("ManageRecording"),
|
||||
id: "record",
|
||||
icon: "fiber_manual_record"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (item.Type === 'Program' && options.record !== false) {
|
||||
if (item.Type === "Program" && options.record !== false) {
|
||||
if (!item.TimerId) {
|
||||
commands.push({
|
||||
name: Globalize.translate('Record'),
|
||||
id: 'record'
|
||||
name: Globalize.translate("Record"),
|
||||
id: "record",
|
||||
icon: "fiber_manual_record"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (itemHelper.canRefreshMetadata(item, user)) {
|
||||
commands.push({
|
||||
name: globalize.translate('RefreshMetadata'),
|
||||
id: 'refresh'
|
||||
name: globalize.translate("RefreshMetadata"),
|
||||
id: "refresh",
|
||||
icon: "refresh"
|
||||
});
|
||||
}
|
||||
|
||||
if (item.PlaylistItemId && options.playlistId) {
|
||||
commands.push({
|
||||
name: globalize.translate('RemoveFromPlaylist'),
|
||||
id: 'removefromplaylist'
|
||||
name: globalize.translate("RemoveFromPlaylist"),
|
||||
id: "removefromplaylist",
|
||||
icon: "remove"
|
||||
});
|
||||
}
|
||||
|
||||
if (options.collectionId) {
|
||||
commands.push({
|
||||
name: globalize.translate('RemoveFromCollection'),
|
||||
id: 'removefromcollection'
|
||||
name: globalize.translate("RemoveFromCollection"),
|
||||
id: "removefromcollection",
|
||||
icon: "remove"
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -233,8 +264,9 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (options.share === true) {
|
||||
if (itemHelper.canShare(item, user)) {
|
||||
commands.push({
|
||||
name: globalize.translate('Share'),
|
||||
id: 'share'
|
||||
name: globalize.translate("Share"),
|
||||
id: "share",
|
||||
icon: "share"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -243,23 +275,26 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
if (options.sync !== false) {
|
||||
if (itemHelper.canSync(user, item)) {
|
||||
commands.push({
|
||||
name: globalize.translate('Sync'),
|
||||
id: 'sync'
|
||||
name: globalize.translate("Sync"),
|
||||
id: "sync",
|
||||
icon: "sync"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (options.openAlbum !== false && item.AlbumId && item.MediaType !== 'Photo') {
|
||||
if (options.openAlbum !== false && item.AlbumId && item.MediaType !== "Photo") {
|
||||
commands.push({
|
||||
name: Globalize.translate('ViewAlbum'),
|
||||
id: 'album'
|
||||
name: Globalize.translate("ViewAlbum"),
|
||||
id: "album",
|
||||
icon: "album"
|
||||
});
|
||||
}
|
||||
|
||||
if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) {
|
||||
commands.push({
|
||||
name: Globalize.translate('ViewArtist'),
|
||||
id: 'artist'
|
||||
name: Globalize.translate("ViewArtist"),
|
||||
id: "artist",
|
||||
icon: "person"
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -283,24 +318,24 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
|
||||
return new Promise(function (resolve, reject) {
|
||||
switch (id) {
|
||||
case 'addtocollection':
|
||||
require(['collectionEditor'], function (collectionEditor) {
|
||||
case "addtocollection":
|
||||
require(["collectionEditor"], function (collectionEditor) {
|
||||
new collectionEditor().show({
|
||||
items: [itemId],
|
||||
serverId: serverId
|
||||
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'addtoplaylist':
|
||||
require(['playlistEditor'], function (playlistEditor) {
|
||||
case "addtoplaylist":
|
||||
require(["playlistEditor"], function (playlistEditor) {
|
||||
new playlistEditor().show({
|
||||
items: [itemId],
|
||||
serverId: serverId
|
||||
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'download':
|
||||
require(['fileDownloader'], function (fileDownloader) {
|
||||
case "download":
|
||||
require(["fileDownloader"], function (fileDownloader) {
|
||||
var downloadHref = apiClient.getItemDownloadUrl(itemId);
|
||||
fileDownloader.download([{
|
||||
url: downloadHref,
|
||||
|
@ -310,7 +345,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
getResolveFunction(getResolveFunction(resolve, id), id)();
|
||||
});
|
||||
break;
|
||||
case 'copy-stream':
|
||||
case "copy-stream":
|
||||
var downloadHref = apiClient.getItemDownloadUrl(itemId);
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.value = downloadHref;
|
||||
|
@ -318,10 +353,10 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
textArea.focus();
|
||||
textArea.select();
|
||||
try {
|
||||
document.execCommand('copy');
|
||||
document.execCommand("copy");
|
||||
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('CopyStreamURLSuccess'));
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("CopyStreamURLSuccess"));
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("Failed to copy to clipboard");
|
||||
|
@ -330,118 +365,118 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
document.body.removeChild(textArea);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'editsubtitles':
|
||||
require(['subtitleEditor'], function (subtitleEditor) {
|
||||
case "editsubtitles":
|
||||
require(["subtitleEditor"], function (subtitleEditor) {
|
||||
subtitleEditor.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'edit':
|
||||
case "edit":
|
||||
editItem(apiClient, item).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
break;
|
||||
case 'editimages':
|
||||
require(['imageEditor'], function (imageEditor) {
|
||||
case "editimages":
|
||||
require(["imageEditor"], function (imageEditor) {
|
||||
imageEditor.show({
|
||||
itemId: itemId,
|
||||
serverId: serverId
|
||||
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'identify':
|
||||
require(['itemIdentifier'], function (itemIdentifier) {
|
||||
case "identify":
|
||||
require(["itemIdentifier"], function (itemIdentifier) {
|
||||
itemIdentifier.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'moremediainfo':
|
||||
require(['itemMediaInfo'], function (itemMediaInfo) {
|
||||
case "moremediainfo":
|
||||
require(["itemMediaInfo"], function (itemMediaInfo) {
|
||||
itemMediaInfo.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'refresh':
|
||||
case "refresh":
|
||||
refresh(apiClient, item);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'open':
|
||||
case "open":
|
||||
appRouter.showItem(item);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'play':
|
||||
case "play":
|
||||
play(item, false);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'resume':
|
||||
case "resume":
|
||||
play(item, true);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'queue':
|
||||
case "queue":
|
||||
play(item, false, true);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'queuenext':
|
||||
case "queuenext":
|
||||
play(item, false, true, true);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'record':
|
||||
require(['recordingCreator'], function (recordingCreator) {
|
||||
case "record":
|
||||
require(["recordingCreator"], function (recordingCreator) {
|
||||
recordingCreator.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||
});
|
||||
break;
|
||||
case 'shuffle':
|
||||
case "shuffle":
|
||||
playbackManager.shuffle(item);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'instantmix':
|
||||
case "instantmix":
|
||||
playbackManager.instantMix(item);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'delete':
|
||||
case "delete":
|
||||
deleteItem(apiClient, item).then(getResolveFunction(resolve, id, true, true), getResolveFunction(resolve, id));
|
||||
break;
|
||||
case 'share':
|
||||
case "share":
|
||||
navigator.share({
|
||||
title: item.Name,
|
||||
text: item.Overview,
|
||||
url: "https://github.com/jellyfin/jellyfin"
|
||||
});
|
||||
break;
|
||||
case 'album':
|
||||
case "album":
|
||||
appRouter.showItem(item.AlbumId, item.ServerId);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'artist':
|
||||
case "artist":
|
||||
appRouter.showItem(item.ArtistItems[0].Id, item.ServerId);
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'playallfromhere':
|
||||
case "playallfromhere":
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'queueallfromhere':
|
||||
case "queueallfromhere":
|
||||
getResolveFunction(resolve, id)();
|
||||
break;
|
||||
case 'removefromplaylist':
|
||||
case "removefromplaylist":
|
||||
apiClient.ajax({
|
||||
url: apiClient.getUrl('Playlists/' + options.playlistId + '/Items', {
|
||||
EntryIds: [item.PlaylistItemId].join(',')
|
||||
url: apiClient.getUrl("Playlists/" + options.playlistId + "/Items", {
|
||||
EntryIds: [item.PlaylistItemId].join(",")
|
||||
}),
|
||||
type: 'DELETE'
|
||||
type: "DELETE"
|
||||
}).then(function () {
|
||||
getResolveFunction(resolve, id, true)();
|
||||
});
|
||||
break;
|
||||
case 'removefromcollection':
|
||||
case "removefromcollection":
|
||||
apiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: apiClient.getUrl("Collections/" + options.collectionId + "/Items", {
|
||||
|
||||
Ids: [item.Id].join(',')
|
||||
Ids: [item.Id].join(",")
|
||||
})
|
||||
}).then(function () {
|
||||
getResolveFunction(resolve, id, true)();
|
||||
});
|
||||
break;
|
||||
case 'canceltimer':
|
||||
case "canceltimer":
|
||||
deleteTimer(apiClient, item, resolve, id);
|
||||
break;
|
||||
case 'cancelseriestimer':
|
||||
case "cancelseriestimer":
|
||||
deleteSeriesTimer(apiClient, item, resolve, id);
|
||||
break;
|
||||
default:
|
||||
|
@ -452,7 +487,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
}
|
||||
|
||||
function deleteTimer(apiClient, item, resolve, command) {
|
||||
require(['recordingHelper'], function (recordingHelper) {
|
||||
require(["recordingHelper"], function (recordingHelper) {
|
||||
var timerId = item.TimerId || item.Id;
|
||||
recordingHelper.cancelTimerWithConfirmation(timerId, item.ServerId).then(function () {
|
||||
getResolveFunction(resolve, command, true)();
|
||||
|
@ -461,7 +496,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
}
|
||||
|
||||
function deleteSeriesTimer(apiClient, item, resolve, command) {
|
||||
require(['recordingHelper'], function (recordingHelper) {
|
||||
require(["recordingHelper"], function (recordingHelper) {
|
||||
recordingHelper.cancelSeriesTimerWithConfirmation(item.Id, item.ServerId).then(function () {
|
||||
getResolveFunction(resolve, command, true)();
|
||||
});
|
||||
|
@ -469,14 +504,14 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
}
|
||||
|
||||
function play(item, resume, queue, queueNext) {
|
||||
var method = queue ? (queueNext ? 'queueNext' : 'queue') : 'play';
|
||||
var method = queue ? (queueNext ? "queueNext" : "queue") : "play";
|
||||
|
||||
var startPosition = 0;
|
||||
if (resume && item.UserData && item.UserData.PlaybackPositionTicks) {
|
||||
startPosition = item.UserData.PlaybackPositionTicks;
|
||||
}
|
||||
|
||||
if (item.Type === 'Program') {
|
||||
if (item.Type === "Program") {
|
||||
playbackManager[method]({
|
||||
ids: [item.ChannelId],
|
||||
startPositionTicks: startPosition,
|
||||
|
@ -494,16 +529,16 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
return new Promise(function (resolve, reject) {
|
||||
var serverId = apiClient.serverInfo().Id;
|
||||
|
||||
if (item.Type === 'Timer') {
|
||||
require(['recordingEditor'], function (recordingEditor) {
|
||||
if (item.Type === "Timer") {
|
||||
require(["recordingEditor"], function (recordingEditor) {
|
||||
recordingEditor.show(item.Id, serverId).then(resolve, reject);
|
||||
});
|
||||
} else if (item.Type === 'SeriesTimer') {
|
||||
require(['seriesRecordingEditor'], function (recordingEditor) {
|
||||
} else if (item.Type === "SeriesTimer") {
|
||||
require(["seriesRecordingEditor"], function (recordingEditor) {
|
||||
recordingEditor.show(item.Id, serverId).then(resolve, reject);
|
||||
});
|
||||
} else {
|
||||
require(['metadataEditor'], function (metadataEditor) {
|
||||
require(["metadataEditor"], function (metadataEditor) {
|
||||
metadataEditor.show(item.Id, serverId).then(resolve, reject);
|
||||
});
|
||||
}
|
||||
|
@ -512,7 +547,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
|
||||
function deleteItem(apiClient, item) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
require(['deleteHelper'], function (deleteHelper) {
|
||||
require(["deleteHelper"], function (deleteHelper) {
|
||||
deleteHelper.deleteItem({
|
||||
item: item,
|
||||
navigate: false
|
||||
|
@ -524,11 +559,11 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
}
|
||||
|
||||
function refresh(apiClient, item) {
|
||||
require(['refreshDialog'], function (refreshDialog) {
|
||||
require(["refreshDialog"], function (refreshDialog) {
|
||||
new refreshDialog({
|
||||
itemIds: [item.Id],
|
||||
serverId: apiClient.serverInfo().Id,
|
||||
mode: item.Type === 'CollectionFolder' ? 'scan' : null
|
||||
mode: item.Type === "CollectionFolder" ? "scan" : null
|
||||
}).show();
|
||||
});
|
||||
}
|
||||
|
@ -542,7 +577,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter',
|
|||
return actionsheet.show({
|
||||
items: commands,
|
||||
positionTo: options.positionTo,
|
||||
resolveOnClick: ['share']
|
||||
resolveOnClick: ["share"]
|
||||
}).then(function (id) {
|
||||
return executeCommand(options.item, id, options);
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(['inputmanager', 'focusManager'], function(inputmanager, focusManager) {
|
||||
define(['inputManager', 'focusManager'], function(inputManager, focusManager) {
|
||||
'use strict';
|
||||
|
||||
console.log("keyboardnavigation");
|
||||
|
@ -9,16 +9,16 @@ define(['inputmanager', 'focusManager'], function(inputmanager, focusManager) {
|
|||
|
||||
switch (e.keyCode) {
|
||||
case 37: // ArrowLeft
|
||||
inputmanager.handle('left');
|
||||
inputManager.handle('left');
|
||||
break;
|
||||
case 38: // ArrowUp
|
||||
inputmanager.handle('up');
|
||||
inputManager.handle('up');
|
||||
break;
|
||||
case 39: // ArrowRight
|
||||
inputmanager.handle('right');
|
||||
inputManager.handle('right');
|
||||
break;
|
||||
case 40: // ArrowDown
|
||||
inputmanager.handle('down');
|
||||
inputManager.handle('down');
|
||||
break;
|
||||
default:
|
||||
capture = false;
|
||||
|
|
|
@ -511,7 +511,9 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
|
|||
|
||||
function getSaveablePlaylistItems() {
|
||||
return getPlaylistItems(currentPlayer).then(function (items) {
|
||||
return i.Id && i.ServerId
|
||||
return items.filter(function (i) {
|
||||
return i.Id && i.ServerId;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'dom'], function (inputmanager, focusManager, browser, layoutManager, events, dom) {
|
||||
define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'dom'], function (inputManager, focusManager, browser, layoutManager, events, dom) {
|
||||
'use strict';
|
||||
|
||||
var self = {};
|
||||
|
@ -12,7 +12,7 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
|||
|
||||
function notifyApp() {
|
||||
|
||||
inputmanager.notifyMouseMove();
|
||||
inputManager.notifyMouseMove();
|
||||
}
|
||||
|
||||
function removeIdleClasses() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'focusManager', 'browser', 'apphost', 'loading', 'css!./style', 'material-icons', 'paper-icon-button-light'], function (dialogHelper, inputmanager, connectionManager, layoutManager, focusManager, browser, appHost, loading) {
|
||||
define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'focusManager', 'browser', 'apphost', 'loading', 'css!./style', 'material-icons', 'paper-icon-button-light'], function (dialogHelper, inputManager, connectionManager, layoutManager, focusManager, browser, appHost, loading) {
|
||||
'use strict';
|
||||
|
||||
function getImageUrl(item, options, apiClient) {
|
||||
|
@ -189,7 +189,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
|||
stopInterval();
|
||||
});
|
||||
|
||||
inputmanager.on(window, onInputCommand);
|
||||
inputManager.on(window, onInputCommand);
|
||||
document.addEventListener((window.PointerEvent ? 'pointermove' : 'mousemove'), onPointerMove);
|
||||
|
||||
dlg.addEventListener('close', onDialogClosed);
|
||||
|
@ -207,7 +207,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
|||
dlg.querySelector('.swiper-wrapper').innerHTML = currentOptions.items.map(getSwiperSlideHtmlFromItem).join('');
|
||||
}
|
||||
|
||||
require(['swiper'], function (swiper) {
|
||||
require(['swiper'], function (Swiper) {
|
||||
|
||||
swiperInstance = new Swiper(dlg.querySelector('.slideshowSwiperContainer'), {
|
||||
// Optional parameters
|
||||
|
@ -372,7 +372,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
|
|||
swiperInstance = null;
|
||||
}
|
||||
|
||||
inputmanager.off(window, onInputCommand);
|
||||
inputManager.off(window, onInputCommand);
|
||||
document.removeEventListener((window.PointerEvent ? 'pointermove' : 'mousemove'), onPointerMove);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,11 +44,11 @@ define(["browser", "dom", "layoutManager", "css!components/viewManager/viewConta
|
|||
|
||||
|
||||
if (isPluginpage) {
|
||||
require(["legacy/dashboard"]);
|
||||
require(["legacyDashboard"]);
|
||||
}
|
||||
|
||||
if (newViewInfo.hasjQuerySelect) {
|
||||
require(["legacy/selectmenu"]);
|
||||
require(["legacySelectMenu"]);
|
||||
}
|
||||
|
||||
if (newViewInfo.hasjQueryChecked) {
|
||||
|
|
|
@ -304,7 +304,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
html += "</div>";
|
||||
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 += userImage ? '<div class="activitylogUserPhoto" style="background-image:url(\'' + userImage + "');\"></div>" : '<div style="height:1.71em;"></div>';
|
||||
html += '<div class="sessionUserName">';
|
||||
html += DashboardPage.getUsersHtml(session);
|
||||
html += "</div>";
|
||||
|
|
|
@ -429,31 +429,24 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
detectRatio = !1;
|
||||
imageTags.Primary ? (url = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Primary",
|
||||
maxHeight: 460,
|
||||
tag: item.ImageTags.Primary
|
||||
}), detectRatio = !0) : item.BackdropImageTags && item.BackdropImageTags.length ? (url = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Backdrop",
|
||||
maxHeight: 360,
|
||||
tag: item.BackdropImageTags[0]
|
||||
}), shape = "thumb") : imageTags.Thumb ? (url = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Thumb",
|
||||
maxHeight: 360,
|
||||
tag: item.ImageTags.Thumb
|
||||
}), shape = "thumb") : imageTags.Disc ? (url = apiClient.getScaledImageUrl(item.Id, {
|
||||
type: "Disc",
|
||||
maxHeight: 360,
|
||||
tag: item.ImageTags.Disc
|
||||
}), shape = "square") : item.AlbumId && item.AlbumPrimaryImageTag ? (url = apiClient.getScaledImageUrl(item.AlbumId, {
|
||||
type: "Primary",
|
||||
maxHeight: 360,
|
||||
tag: item.AlbumPrimaryImageTag
|
||||
}), shape = "square") : item.SeriesId && item.SeriesPrimaryImageTag ? url = apiClient.getScaledImageUrl(item.SeriesId, {
|
||||
type: "Primary",
|
||||
maxHeight: 360,
|
||||
tag: item.SeriesPrimaryImageTag
|
||||
}) : item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag && (url = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, {
|
||||
type: "Primary",
|
||||
maxHeight: 360,
|
||||
tag: item.ParentPrimaryImageTag
|
||||
})), html += '<div style="position:relative;">', editable && (html += "<a class='itemDetailGalleryLink' is='emby-linkbutton' style='display:block;padding:2px;margin:0;' href='#'>"), detectRatio && item.PrimaryImageAspectRatio && (item.PrimaryImageAspectRatio >= 1.48 ? shape = "thumb" : item.PrimaryImageAspectRatio >= .85 && item.PrimaryImageAspectRatio <= 1.34 && (shape = "square")), html += "<img class='itemDetailImage lazy' src='data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=' />", editable && (html += "</a>");
|
||||
var progressHtml = item.IsFolder || !item.UserData ? "" : indicators.getProgressBarHtml(item);
|
||||
|
|
|
@ -168,17 +168,12 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
|||
}), menuItems.push({
|
||||
name: "Xml TV",
|
||||
id: "xmltv"
|
||||
}), menuItems.push({
|
||||
name: globalize.translate("ButtonOther"),
|
||||
id: "other"
|
||||
}), require(["actionsheet"], function(actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: button,
|
||||
callback: function(id) {
|
||||
"other" == id ? Dashboard.alert({
|
||||
message: globalize.translate("ForAdditionalLiveTvOptions")
|
||||
}) : Dashboard.navigate(getProviderConfigurationUrl(id))
|
||||
Dashboard.navigate(getProviderConfigurationUrl(id))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
|
@ -114,7 +114,7 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
|
|||
suppportsSubmit = "other" !== value,
|
||||
supportsSelectablePath = supportsTunerFileOrUrl,
|
||||
txtDevicePath = view.querySelector(".txtDevicePath");
|
||||
supportsTunerIpAddress ? (txtDevicePath.label(globalize.translate("LabelTunerIpAddress")), view.querySelector(".fldPath").classList.remove("hide")) : supportsTunerFileOrUrl ? (txtDevicePath.label(globalize.translate("LabelFileOrUrl")), view.querySelector(".fldPath").classList.remove("hide")) : view.querySelector(".fldPath").classList.add("hide"), supportsSelectablePath ? (view.querySelector(".btnSelectPath").classList.remove("hide"), view.querySelector(".txtDevicePath").setAttribute("required", "required")) : (view.querySelector(".btnSelectPath").classList.add("hide"), view.querySelector(".txtDevicePath").removeAttribute("required")), supportsUserAgent ? view.querySelector(".fldUserAgent").classList.remove("hide") : view.querySelector(".fldUserAgent").classList.add("hide"), supportsFavorites ? view.querySelector(".fldFavorites").classList.remove("hide") : view.querySelector(".fldFavorites").classList.add("hide"), supportsTranscoding ? view.querySelector(".fldTranscode").classList.remove("hide") : view.querySelector(".fldTranscode").classList.add("hide"), supportsStreamLooping ? view.querySelector(".fldStreamLoop").classList.remove("hide") : view.querySelector(".fldStreamLoop").classList.add("hide"), supportsTunerCount ? (view.querySelector(".fldTunerCount").classList.remove("hide"), view.querySelector(".txtTunerCount").setAttribute("required", "required")) : (view.querySelector(".fldTunerCount").classList.add("hide"), view.querySelector(".txtTunerCount").removeAttribute("required")), mayIncludeUnsupportedDrmChannels ? view.querySelector(".drmMessage").classList.remove("hide") : view.querySelector(".drmMessage").classList.add("hide"), suppportsSubmit ? (view.querySelector(".button-submit").classList.remove("hide"), view.querySelector(".otherOptionsMessage").classList.add("hide")) : (view.querySelector(".button-submit").classList.add("hide"), view.querySelector(".otherOptionsMessage").classList.remove("hide"))
|
||||
supportsTunerIpAddress ? (txtDevicePath.label(globalize.translate("LabelTunerIpAddress")), view.querySelector(".fldPath").classList.remove("hide")) : supportsTunerFileOrUrl ? (txtDevicePath.label(globalize.translate("LabelFileOrUrl")), view.querySelector(".fldPath").classList.remove("hide")) : view.querySelector(".fldPath").classList.add("hide"), supportsSelectablePath ? (view.querySelector(".btnSelectPath").classList.remove("hide"), view.querySelector(".txtDevicePath").setAttribute("required", "required")) : (view.querySelector(".btnSelectPath").classList.add("hide"), view.querySelector(".txtDevicePath").removeAttribute("required")), supportsUserAgent ? view.querySelector(".fldUserAgent").classList.remove("hide") : view.querySelector(".fldUserAgent").classList.add("hide"), supportsFavorites ? view.querySelector(".fldFavorites").classList.remove("hide") : view.querySelector(".fldFavorites").classList.add("hide"), supportsTranscoding ? view.querySelector(".fldTranscode").classList.remove("hide") : view.querySelector(".fldTranscode").classList.add("hide"), supportsStreamLooping ? view.querySelector(".fldStreamLoop").classList.remove("hide") : view.querySelector(".fldStreamLoop").classList.add("hide"), supportsTunerCount ? (view.querySelector(".fldTunerCount").classList.remove("hide"), view.querySelector(".txtTunerCount").setAttribute("required", "required")) : (view.querySelector(".fldTunerCount").classList.add("hide"), view.querySelector(".txtTunerCount").removeAttribute("required")), mayIncludeUnsupportedDrmChannels ? view.querySelector(".drmMessage").classList.remove("hide") : view.querySelector(".drmMessage").classList.add("hide"), suppportsSubmit ? view.querySelector(".button-submit").classList.remove("hide") : view.querySelector(".button-submit").classList.add("hide")
|
||||
}
|
||||
return function(view, params) {
|
||||
params.id || view.querySelector(".btnDetect").classList.remove("hide"), view.addEventListener("viewshow", function() {
|
||||
|
|
|
@ -14,7 +14,7 @@ define(["apphost", "connectionManager", "listViewStyle", "emby-button"], functio
|
|||
page.querySelector(".lnkMyProfile").setAttribute("href", "myprofile.html?userId=" + userId);
|
||||
page.querySelector(".lnkDisplayPreferences").setAttribute("href", "mypreferencesdisplay.html?userId=" + userId);
|
||||
page.querySelector(".lnkHomePreferences").setAttribute("href", "mypreferenceshome.html?userId=" + userId);
|
||||
page.querySelector(".lnkLanguagePreferences").setAttribute("href", "mypreferenceslanguages.html?userId=" + userId);
|
||||
page.querySelector(".lnkPlaybackPreferences").setAttribute("href", "mypreferencesplayback.html?userId=" + userId);
|
||||
page.querySelector(".lnkSubtitlePreferences").setAttribute("href", "mypreferencessubtitles.html?userId=" + userId);
|
||||
|
||||
if (appHost.supports("multiserver")) {
|
|
@ -11,14 +11,13 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "em
|
|||
var imageUrl = "img/logindefault.png";
|
||||
if (user.PrimaryImageTag) {
|
||||
imageUrl = ApiClient.getUserImageUrl(user.Id, {
|
||||
height: 200,
|
||||
tag: user.PrimaryImageTag,
|
||||
type: "Primary"
|
||||
});
|
||||
}
|
||||
|
||||
var userImage = page.querySelector("#image");
|
||||
userImage.src = imageUrl;
|
||||
userImage.style.backgroundImage = "url(" + imageUrl + ")";
|
||||
|
||||
Dashboard.getCurrentUser().then(function (loggedInUser) {
|
||||
if (user.PrimaryImageTag) {
|
||||
|
@ -71,7 +70,7 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "em
|
|||
reader.onerror = onFileReaderError;
|
||||
reader.onabort = onFileReaderAbort;
|
||||
reader.onload = function (evt) {
|
||||
userImage.src = evt.target.result;
|
||||
userImage.style.backgroundImage = "url(" + evt.target.result + ")";
|
||||
var userId = getParameterByName("userId");
|
||||
ApiClient.uploadUserImage(userId, "Primary", file).then(function () {
|
||||
loading.hide();
|
|
@ -1,4 +1,4 @@
|
|||
define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "mediaInfo", "focusManager", "imageLoader", "scrollHelper", "events", "connectionManager", "browser", "globalize", "apphost", "layoutManager", "userSettings", "scrollStyles", "emby-slider", "paper-icon-button-light", "css!css/videoosd"], function (playbackManager, dom, inputManager, datetime, itemHelper, mediaInfo, focusManager, imageLoader, scrollHelper, events, connectionManager, browser, globalize, appHost, layoutManager, userSettings) {
|
||||
define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "mediaInfo", "focusManager", "imageLoader", "scrollHelper", "events", "connectionManager", "browser", "globalize", "apphost", "layoutManager", "userSettings", "scrollStyles", "emby-slider", "paper-icon-button-light", "css!css/videoosd"], function (playbackManager, dom, inputManager, datetime, itemHelper, mediaInfo, focusManager, imageLoader, scrollHelper, events, connectionManager, browser, globalize, appHost, layoutManager, userSettings) {
|
||||
"use strict";
|
||||
|
||||
function seriesImageUrl(item, options) {
|
||||
|
|
|
@ -6,19 +6,13 @@ define(["loading"], function (loading) {
|
|||
ApiClient.ajax({
|
||||
url: ApiClient.getUrl("Startup/Complete"),
|
||||
type: "POST"
|
||||
}).then(function () {
|
||||
Dashboard.navigate("dashboard.html");
|
||||
}).then(function() {
|
||||
loading.hide();
|
||||
window.location.href = "index.html";
|
||||
});
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector(".btnWizardNext").addEventListener("click", onFinish);
|
||||
view.addEventListener("viewshow", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
});
|
||||
view.addEventListener("viewhide", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
});
|
||||
};
|
||||
});
|
||||
|
|
|
@ -252,6 +252,16 @@ div[data-role=controlgroup] a.ui-btn-active {
|
|||
width: 100% !important
|
||||
}
|
||||
|
||||
.activitylogUserPhoto {
|
||||
height:1.71em;
|
||||
width:1.71em;
|
||||
border-radius:100%;
|
||||
margin-right:.5em;
|
||||
background-size:cover;
|
||||
background-repeat:no-repeat;
|
||||
background-position:center;
|
||||
}
|
||||
|
||||
@media all and (min-width:40em) {
|
||||
.activeSession {
|
||||
width: 100% !important
|
||||
|
|
|
@ -67,9 +67,12 @@
|
|||
display: inline-block
|
||||
}
|
||||
|
||||
.headerUserButtonRound img {
|
||||
.headerUserButtonRound div {
|
||||
-webkit-border-radius: 100em;
|
||||
border-radius: 100em
|
||||
border-radius: 100em;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
|
||||
.headerButton {
|
||||
|
|
|
@ -63,7 +63,6 @@
|
|||
</div>
|
||||
|
||||
<p class="drmMessage hide">${DrmChannelsNotImported}</p>
|
||||
<p class="otherOptionsMessage hide" style="margin:2em 0;">${ForAdditionalLiveTvOptions}</p>
|
||||
<br />
|
||||
<input type="hidden" class="fldDeviceId" />
|
||||
<div>
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
</div>
|
||||
</a>
|
||||
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkLanguagePreferences listItem-border">
|
||||
<a is="emby-linkbutton" data-ripple="false" href="#" class="lnkPlaybackPreferences listItem-border">
|
||||
<div class="listItem">
|
||||
<i class="md-icon listItemIcon listItemIcon-transparent">play_circle_filled</i>
|
||||
<div class="listItemBody">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="padded-left padded-right padded-bottom-page">
|
||||
<div class="readOnlyContent" style="margin: 0 auto; padding: 0 1em;">
|
||||
<div style="position:relative;display:inline-block;max-width:200px;">
|
||||
<img id="image" width="200px" />
|
||||
<div id="image" style="width:200px;height:200px;background-repeat:no-repeat;background-position:center;border-radius:100%;background-size:cover;"></div>
|
||||
<input id="uploadImage" type="file" accept="image/*" style="position:absolute;right:0;width:100%;height:100%;opacity:0;" />
|
||||
</div>
|
||||
<div style="vertical-align:top;margin:1em 2em;display:inline-block;">
|
||||
|
|
|
@ -80,7 +80,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
|||
function updateHeaderUserButton(src) {
|
||||
if (src) {
|
||||
headerUserButton.classList.add("headerUserButtonRound");
|
||||
headerUserButton.innerHTML = '<img src="' + src + '" />';
|
||||
headerUserButton.innerHTML = '<div class="headerButton headerButtonRight paper-icon-button-light headerUserButtonRound" style="background-image:url(\'' + src + "');\"></div>";
|
||||
} else {
|
||||
headerUserButton.classList.remove("headerUserButtonRound");
|
||||
headerUserButton.innerHTML = '<i class="md-icon"></i>';
|
||||
|
|
|
@ -229,41 +229,41 @@ define([
|
|||
autoFocus: false,
|
||||
transition: "fade"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesdisplay.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "mypreferencesdisplay"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferenceshome.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "mypreferenceshome"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencessubtitles.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "mypreferencessubtitles"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferenceslanguages.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "mypreferenceslanguages"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesmenu.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "mypreferencescommon"
|
||||
controller: "user/menu"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/myprofile.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "myprofile"
|
||||
controller: "user/profile"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesdisplay.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/display"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferenceshome.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/home"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesplayback.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/playback"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencessubtitles.html",
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/subtitles"
|
||||
});
|
||||
defineRoute({
|
||||
path: "/notificationsetting.html",
|
||||
|
|
|
@ -223,7 +223,9 @@ var Dashboard = {
|
|||
return capabilities = Object.assign(capabilities, appHost.getPushTokenInfo());
|
||||
}
|
||||
};
|
||||
|
||||
var AppInfo = {};
|
||||
|
||||
!function () {
|
||||
"use strict";
|
||||
|
||||
|
@ -309,6 +311,10 @@ var AppInfo = {};
|
|||
return "bower_components";
|
||||
}
|
||||
|
||||
function getComponentsPath() {
|
||||
return "components";
|
||||
}
|
||||
|
||||
function getPlaybackManager(playbackManager) {
|
||||
window.addEventListener("beforeunload", function () {
|
||||
try {
|
||||
|
@ -381,14 +387,13 @@ var AppInfo = {};
|
|||
return self.ResizeObserver;
|
||||
});
|
||||
} else {
|
||||
define("ResizeObserver", ["thirdparty/resize-observer-polyfill/ResizeObserver"], returnFirstDependency);
|
||||
define("ResizeObserver", [getBowerPath() + "/resize-observer-polyfill/ResizeObserver"], returnFirstDependency);
|
||||
}
|
||||
}
|
||||
|
||||
function initRequireWithBrowser(browser) {
|
||||
var bowerPath = getBowerPath();
|
||||
var apiClientBowerPath = bowerPath + "/apiclient";
|
||||
var componentsPath = "components";
|
||||
var componentsPath = getComponentsPath();
|
||||
|
||||
define("filesystem", [componentsPath + "/filesystem"], returnFirstDependency);
|
||||
|
||||
|
@ -400,7 +405,7 @@ var AppInfo = {};
|
|||
|
||||
define("shell", [componentsPath + "/shell"], returnFirstDependency);
|
||||
|
||||
define("apiclient", [apiClientBowerPath + "/apiclient"], returnFirstDependency);
|
||||
define("apiclient", [bowerPath + "/apiclient/apiclient"], returnFirstDependency);
|
||||
|
||||
if ("registerElement" in document) {
|
||||
define("registerElement", []);
|
||||
|
@ -434,7 +439,7 @@ var AppInfo = {};
|
|||
define("loading", [componentsPath + "/loading/loading"], returnFirstDependency);
|
||||
define("multi-download", [componentsPath + "/multidownload"], returnFirstDependency);
|
||||
define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency);
|
||||
define("localassetmanager", [apiClientBowerPath + "/localassetmanager"], returnFirstDependency);
|
||||
define("localassetmanager", [bowerPath + "/apiclient/localassetmanager"], returnFirstDependency);
|
||||
|
||||
if ("cordova" === self.appMode || "android" === self.appMode) {
|
||||
define("castSenderApiLoader", [], getDummyCastSenderApiLoader);
|
||||
|
@ -442,9 +447,9 @@ var AppInfo = {};
|
|||
define("castSenderApiLoader", [], getCastSenderApiLoader);
|
||||
}
|
||||
|
||||
define("transfermanager", [apiClientBowerPath + "/sync/transfermanager"], returnFirstDependency);
|
||||
define("filerepository", [apiClientBowerPath + "/sync/filerepository"], returnFirstDependency);
|
||||
define("localsync", [apiClientBowerPath + "/sync/localsync"], returnFirstDependency);
|
||||
define("transfermanager", [bowerPath + "/apiclient/sync/transfermanager"], returnFirstDependency);
|
||||
define("filerepository", [bowerPath + "/apiclient/sync/filerepository"], returnFirstDependency);
|
||||
define("localsync", [bowerPath + "/apiclient/sync/localsync"], returnFirstDependency);
|
||||
}
|
||||
|
||||
function init() {
|
||||
|
@ -560,16 +565,9 @@ var AppInfo = {};
|
|||
|
||||
// ensure that appHost is loaded in this point
|
||||
require(['apphost', 'appRouter'], function (appHost, appRouter) {
|
||||
var isInBackground = -1 !== self.location.href.toString().toLowerCase().indexOf("start=backgroundsync");
|
||||
|
||||
window.Emby = {};
|
||||
|
||||
console.log("onAppReady - loading dependencies");
|
||||
|
||||
if (isInBackground) {
|
||||
syncNow();
|
||||
} else {
|
||||
|
||||
if (browser.iOS) {
|
||||
require(['css!css/ios.css']);
|
||||
}
|
||||
|
@ -609,15 +607,10 @@ var AppInfo = {};
|
|||
|
||||
require(["playerSelectionMenu", "fullscreenManager"]);
|
||||
|
||||
if (appHost.supports("sync")) {
|
||||
initLocalSyncEvents();
|
||||
}
|
||||
|
||||
if (!AppInfo.isNativeApp && window.ApiClient) {
|
||||
require(["css!" + ApiClient.getUrl("Branding/Css")]);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -631,20 +624,6 @@ var AppInfo = {};
|
|||
}
|
||||
}
|
||||
|
||||
function syncNow() {
|
||||
require(["localsync"], function (localSync) {
|
||||
localSync.sync();
|
||||
});
|
||||
}
|
||||
|
||||
function initLocalSyncEvents() {
|
||||
require(["serverNotifications", "events"], function (serverNotifications, events) {
|
||||
events.on(serverNotifications, "SyncJobItemReady", syncNow);
|
||||
events.on(serverNotifications, "SyncJobCancelled", syncNow);
|
||||
events.on(serverNotifications, "SyncJobItemCancelled", syncNow);
|
||||
});
|
||||
}
|
||||
|
||||
function onWebComponentsReady(browser) {
|
||||
initRequireWithBrowser(browser);
|
||||
|
||||
|
@ -653,7 +632,7 @@ var AppInfo = {};
|
|||
}
|
||||
|
||||
if (!window.Promise || browser.web0s) {
|
||||
require(["thirdparty/native-promise-only/lib/npo.src"], init);
|
||||
require([getBowerPath() + "/native-promise-only/lib/npo.src"], init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
|
@ -664,27 +643,24 @@ var AppInfo = {};
|
|||
(function () {
|
||||
var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate());
|
||||
var bowerPath = getBowerPath();
|
||||
var apiClientBowerPath = bowerPath + "/apiclient";
|
||||
var componentsPath = "components";
|
||||
var componentsPath = getComponentsPath();
|
||||
var paths = {
|
||||
browserdeviceprofile: "scripts/browserdeviceprofile",
|
||||
browser: "scripts/browser",
|
||||
libraryBrowser: "scripts/librarybrowser",
|
||||
inputManager: "scripts/inputManager",
|
||||
datetime: "scripts/datetime",
|
||||
globalize: "scripts/globalize",
|
||||
libraryMenu: "scripts/librarymenu",
|
||||
playlisteditor: componentsPath + "/playlisteditor/playlisteditor",
|
||||
medialibrarycreator: componentsPath + "/medialibrarycreator/medialibrarycreator",
|
||||
medialibraryeditor: componentsPath + "/medialibraryeditor/medialibraryeditor",
|
||||
imageoptionseditor: componentsPath + "/imageoptionseditor/imageoptionseditor",
|
||||
humanedate: componentsPath + "/humanedate",
|
||||
libraryBrowser: "scripts/librarybrowser",
|
||||
events: apiClientBowerPath + "/events",
|
||||
credentialprovider: apiClientBowerPath + "/credentialprovider",
|
||||
connectionManagerFactory: bowerPath + "/apiclient/connectionmanager",
|
||||
apphost: componentsPath + "/apphost",
|
||||
visibleinviewport: componentsPath + "/visibleinviewport",
|
||||
browserdeviceprofile: componentsPath + "/browserdeviceprofile",
|
||||
browser: componentsPath + "/browser",
|
||||
inputManager: componentsPath + "/inputManager",
|
||||
qualityoptions: componentsPath + "/qualityoptions",
|
||||
page: "thirdparty/page",
|
||||
focusManager: componentsPath + "/focusManager",
|
||||
datetime: componentsPath + "/datetime",
|
||||
globalize: componentsPath + "/globalize",
|
||||
itemHelper: componentsPath + "/itemhelper",
|
||||
itemShortcuts: componentsPath + "/shortcuts",
|
||||
playQueueManager: componentsPath + "/playback/playqueuemanager",
|
||||
|
@ -693,10 +669,8 @@ var AppInfo = {};
|
|||
pluginManager: componentsPath + "/pluginManager",
|
||||
packageManager: componentsPath + "/packagemanager"
|
||||
};
|
||||
paths.flvjs = "thirdparty/flvjs/flv.min";
|
||||
paths.shaka = "thirdparty/shaka/shaka-player.compiled";
|
||||
paths.apphost = componentsPath + "/apphost";
|
||||
|
||||
requirejs.onError = onRequireJsError;
|
||||
requirejs.config({
|
||||
waitSeconds: 0,
|
||||
map: {
|
||||
|
@ -706,13 +680,22 @@ var AppInfo = {};
|
|||
}
|
||||
},
|
||||
bundles: {
|
||||
bundle: ["jstree", "jQuery", "hlsjs", "howler", "swiper", "sortable", "libjass"]
|
||||
bundle: [
|
||||
"flvjs",
|
||||
"jstree",
|
||||
"jQuery",
|
||||
"hlsjs",
|
||||
"howler",
|
||||
"shaka",
|
||||
"swiper",
|
||||
"sortable",
|
||||
"libjass"
|
||||
]
|
||||
},
|
||||
urlArgs: urlArgs,
|
||||
paths: paths,
|
||||
onError: onRequireJsError
|
||||
});
|
||||
requirejs.onError = onRequireJsError;
|
||||
|
||||
// Expose jQuery globally
|
||||
require(["jQuery"], function(jQuery) {
|
||||
|
@ -720,13 +703,57 @@ var AppInfo = {};
|
|||
window.jQuery = jQuery;
|
||||
});
|
||||
|
||||
require(["css!css/site"]);
|
||||
|
||||
// define styles
|
||||
// TODO determine which of these files can be moved to the components themselves
|
||||
define("material-icons", ["css!css/material-icons/style"], returnFirstDependency);
|
||||
define("systemFontsCss", ["css!css/fonts"], returnFirstDependency);
|
||||
define("systemFontsSizedCss", ["css!css/fonts.sized"], returnFirstDependency);
|
||||
define("scrollStyles", ["css!css/scrollstyles"], returnFirstDependency);
|
||||
define("dashboardcss", ["css!css/dashboard"], returnFirstDependency);
|
||||
define("programStyles", ["css!" + componentsPath + "/guide/programs"], returnFirstDependency);
|
||||
define("listViewStyle", ["css!" + componentsPath + "/listview/listview"], returnFirstDependency);
|
||||
define("formDialogStyle", ["css!" + componentsPath + "/formdialog"], returnFirstDependency);
|
||||
define("clearButtonStyle", ["css!" + componentsPath + "/clearbutton"], returnFirstDependency);
|
||||
define("cardStyle", ["css!" + componentsPath + "/cardbuilder/card"], returnFirstDependency);
|
||||
define("flexStyles", ["css!" + componentsPath + "/flexstyles"], returnFirstDependency);
|
||||
|
||||
// define legacy features
|
||||
// TODO delete the rest of these
|
||||
define("fnchecked", ["legacy/fnchecked"], returnFirstDependency);
|
||||
define("legacyDashboard", ["legacy/dashboard"], returnFirstDependency);
|
||||
define("legacySelectMenu", ["legacy/selectmenu"], returnFirstDependency);
|
||||
|
||||
// there are several objects that need to be instantiated
|
||||
// TODO find a better way to do this
|
||||
define("appFooter", [componentsPath + "/appfooter/appfooter"], returnFirstDependency);
|
||||
define("appFooter-shared", ["appFooter"], createSharedAppFooter);
|
||||
|
||||
// TODO pull apiclient out of this repository
|
||||
define('events', [bowerPath + "/apiclient/events"], returnFirstDependency);
|
||||
define('credentialprovider', [bowerPath + "/apiclient/credentialprovider"], returnFirstDependency);
|
||||
define('connectionManagerFactory', [bowerPath + "/apiclient/connectionmanager"], returnFirstDependency);
|
||||
define('appStorage', [bowerPath + "/apiclient/appStorage"], returnFirstDependency);
|
||||
define("serversync", [bowerPath + "/apiclient/sync/serversync"], returnFirstDependency);
|
||||
define("multiserversync", [bowerPath + "/apiclient/sync/multiserversync"], returnFirstDependency);
|
||||
define("mediasync", [bowerPath + "/apiclient/sync/mediasync"], returnFirstDependency);
|
||||
define("itemrepository", [bowerPath + "/apiclient/sync/itemrepository"], returnFirstDependency);
|
||||
define("useractionrepository", [bowerPath + "/apiclient/sync/useractionrepository"], returnFirstDependency);
|
||||
|
||||
// also pull out these libs
|
||||
define("page", [bowerPath + "/page"], returnFirstDependency);
|
||||
define("fetch", [bowerPath + "/fetch/fetch"], returnFirstDependency);
|
||||
define("queryString", [bowerPath + "/query-string/index"], function () {
|
||||
return queryString;
|
||||
});
|
||||
|
||||
define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency);
|
||||
define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency);
|
||||
define("actionsheet", [componentsPath + "/actionsheet/actionsheet"], returnFirstDependency);
|
||||
define("tunerPicker", [componentsPath + "/tunerpicker"], returnFirstDependency);
|
||||
define("mainTabsManager", [componentsPath + "/maintabsmanager"], returnFirstDependency);
|
||||
define("imageLoader", [componentsPath + "/images/imageLoader"], returnFirstDependency);
|
||||
define("appFooter", [componentsPath + "/appfooter/appfooter"], returnFirstDependency);
|
||||
define("directorybrowser", [componentsPath + "/directorybrowser/directorybrowser"], returnFirstDependency);
|
||||
define("metadataEditor", [componentsPath + "/metadataeditor/metadataeditor"], returnFirstDependency);
|
||||
define("personEditor", [componentsPath + "/metadataeditor/personeditor"], returnFirstDependency);
|
||||
|
@ -734,7 +761,6 @@ var AppInfo = {};
|
|||
define("playerSettingsMenu", [componentsPath + "/playback/playersettingsmenu"], returnFirstDependency);
|
||||
define("playMethodHelper", [componentsPath + "/playback/playmethodhelper"], returnFirstDependency);
|
||||
define("brightnessOsd", [componentsPath + "/playback/brightnessosd"], returnFirstDependency);
|
||||
define("libraryMenu", ["scripts/librarymenu"], returnFirstDependency);
|
||||
define("emby-collapse", [componentsPath + "/emby-collapse/emby-collapse"], returnFirstDependency);
|
||||
define("emby-button", [componentsPath + "/emby-button/emby-button"], returnFirstDependency);
|
||||
define("emby-itemscontainer", [componentsPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency);
|
||||
|
@ -793,14 +819,11 @@ var AppInfo = {};
|
|||
define("refreshDialog", [componentsPath + "/refreshdialog/refreshdialog"], returnFirstDependency);
|
||||
define("backdrop", [componentsPath + "/backdrop/backdrop"], returnFirstDependency);
|
||||
define("fetchHelper", [componentsPath + "/fetchhelper"], returnFirstDependency);
|
||||
define("cardStyle", ["css!" + componentsPath + "/cardbuilder/card"], returnFirstDependency);
|
||||
define("cardBuilder", [componentsPath + "/cardbuilder/cardBuilder"], returnFirstDependency);
|
||||
define("peoplecardbuilder", [componentsPath + "/cardbuilder/peoplecardbuilder"], returnFirstDependency);
|
||||
define("chaptercardbuilder", [componentsPath + "/cardbuilder/chaptercardbuilder"], returnFirstDependency);
|
||||
define("flexStyles", ["css!" + componentsPath + "/flexstyles"], returnFirstDependency);
|
||||
define("deleteHelper", [componentsPath + "/deletehelper"], returnFirstDependency);
|
||||
define("tvguide", [componentsPath + "/guide/guide"], returnFirstDependency);
|
||||
define("programStyles", ["css!" + componentsPath + "/guide/programs"], returnFirstDependency);
|
||||
define("guide-settings-dialog", [componentsPath + "/guide/guide-settings"], returnFirstDependency);
|
||||
define("loadingDialog", [componentsPath + "/loadingdialog/loadingdialog"], returnFirstDependency);
|
||||
define("viewManager", [componentsPath + "/viewManager/viewManager"], function (viewManager) {
|
||||
|
@ -808,29 +831,18 @@ var AppInfo = {};
|
|||
viewManager.dispatchPageEvents(true);
|
||||
return viewManager;
|
||||
});
|
||||
define('appStorage', [apiClientBowerPath + '/appStorage'], returnFirstDependency);
|
||||
define("dashboardcss", ["css!css/dashboard"], returnFirstDependency);
|
||||
define("slideshow", [componentsPath + "/slideshow/slideshow"], returnFirstDependency);
|
||||
define("fetch", [bowerPath + "/fetch/fetch"], returnFirstDependency);
|
||||
define("objectassign", [componentsPath + "/polyfills/objectassign"], returnFirstDependency);
|
||||
define("clearButtonStyle", ["css!" + componentsPath + "/clearbutton"], returnFirstDependency);
|
||||
define("userdataButtons", [componentsPath + "/userdatabuttons/userdatabuttons"], returnFirstDependency);
|
||||
define("emby-playstatebutton", [componentsPath + "/userdatabuttons/emby-playstatebutton"], returnFirstDependency);
|
||||
define("emby-ratingbutton", [componentsPath + "/userdatabuttons/emby-ratingbutton"], returnFirstDependency);
|
||||
define("listView", [componentsPath + "/listview/listview"], returnFirstDependency);
|
||||
define("listViewStyle", ["css!" + componentsPath + "/listview/listview"], returnFirstDependency);
|
||||
define("formDialogStyle", ["css!" + componentsPath + "/formdialog"], returnFirstDependency);
|
||||
define("indicators", [componentsPath + "/indicators/indicators"], returnFirstDependency);
|
||||
define("viewSettings", [componentsPath + "/viewsettings/viewsettings"], returnFirstDependency);
|
||||
define("filterMenu", [componentsPath + "/filtermenu/filtermenu"], returnFirstDependency);
|
||||
define("sortMenu", [componentsPath + "/sortmenu/sortmenu"], returnFirstDependency);
|
||||
define("serversync", [apiClientBowerPath + "/sync/serversync"], returnFirstDependency);
|
||||
define("multiserversync", [apiClientBowerPath + "/sync/multiserversync"], returnFirstDependency);
|
||||
define("mediasync", [apiClientBowerPath + "/sync/mediasync"], returnFirstDependency);
|
||||
define("idb", [componentsPath + "/idb"], returnFirstDependency);
|
||||
define("sanitizefilename", [componentsPath + "/sanitizefilename"], returnFirstDependency);
|
||||
define("itemrepository", [apiClientBowerPath + "/sync/itemrepository"], returnFirstDependency);
|
||||
define("useractionrepository", [apiClientBowerPath + "/sync/useractionrepository"], returnFirstDependency);
|
||||
define("scroller", [componentsPath + "/scroller"], returnFirstDependency);
|
||||
define("toast", [componentsPath + "/toast/toast"], returnFirstDependency);
|
||||
define("scrollHelper", [componentsPath + "/scrollhelper"], returnFirstDependency);
|
||||
|
@ -838,22 +850,12 @@ var AppInfo = {};
|
|||
define("appSettings", [componentsPath + "/appSettings"], returnFirstDependency);
|
||||
define("userSettings", [componentsPath + "/usersettings/usersettings"], returnFirstDependency);
|
||||
define("userSettingsBuilder", [componentsPath + "/usersettings/usersettingsbuilder", "layoutManager", "browser"], returnFirstDependency);
|
||||
define("material-icons", ["css!css/material-icons/style"], returnFirstDependency);
|
||||
define("systemFontsCss", ["css!css/fonts"], returnFirstDependency);
|
||||
define("systemFontsSizedCss", ["css!css/fonts.sized"], returnFirstDependency);
|
||||
define("scrollStyles", ["css!" + componentsPath + "/scrollstyles"], returnFirstDependency);
|
||||
define("imageUploader", [componentsPath + "/imageuploader/imageuploader"], returnFirstDependency);
|
||||
define("navdrawer", [componentsPath + "/navdrawer/navdrawer"], returnFirstDependency);
|
||||
define("htmlMediaHelper", [componentsPath + "/htmlMediaHelper"], returnFirstDependency);
|
||||
define("viewContainer", [componentsPath + "/viewContainer"], returnFirstDependency);
|
||||
define("queryString", [bowerPath + "/query-string/index"], function () {
|
||||
return queryString;
|
||||
});
|
||||
define("fnchecked", ["legacy/fnchecked"], returnFirstDependency);
|
||||
define("dialogHelper", [componentsPath + "/dialogHelper/dialogHelper"], returnFirstDependency);
|
||||
define("inputmanager", ["inputManager"], returnFirstDependency);
|
||||
define("serverNotifications", [componentsPath + "/serverNotifications/serverNotifications"], returnFirstDependency);
|
||||
define("appFooter-shared", ["appFooter"], createSharedAppFooter);
|
||||
define("skinManager", [componentsPath + "/skinManager"], returnFirstDependency);
|
||||
define("keyboardnavigation", [componentsPath + "/keyboardnavigation"], returnFirstDependency);
|
||||
define("connectionManager", [], function () {
|
||||
|
@ -1129,13 +1131,13 @@ var AppInfo = {};
|
|||
});
|
||||
})();
|
||||
|
||||
require(["css!css/site"]);
|
||||
|
||||
return require(["browser"], onWebComponentsReady);
|
||||
}();
|
||||
|
||||
pageClassOn("viewshow", "standalonePage", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHeaderRight");
|
||||
});
|
||||
|
||||
pageClassOn("viewhide", "standalonePage", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHeaderRight");
|
||||
});
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
"ButtonOff": "إيقاف التشغيل",
|
||||
"ButtonOk": "موافق",
|
||||
"ButtonOpen": "إفتح",
|
||||
"ButtonOther": "أخرى",
|
||||
"ButtonParentalControl": "التحكم الأبوي",
|
||||
"ButtonPause": "توقف مؤقت",
|
||||
"ButtonPlay": "تشغيل",
|
||||
|
|
|
@ -785,5 +785,14 @@
|
|||
"Wednesday": "Сряда",
|
||||
"WelcomeToProject": "Добре дошли в Емби!",
|
||||
"WizardCompleted": "Това е всичко от което се нуждаем за момента. Емби започна да събира данни за медийната ви библиотека. Разгледайте някои от нашите приложения, после натиснете <b>Готово</b>, за да видите <b>таблото на сървъра</b>.",
|
||||
"Writer": "Писател"
|
||||
"Writer": "Писател",
|
||||
"AllowMediaConversion": "Разрешаване на медиини преобразувания",
|
||||
"AllLanguages": "Всички езици",
|
||||
"AllEpisodes": "Всички епизоди",
|
||||
"AllComplexFormats": "Всички комплексни формати (ASS, SSA, VOBSUB, PGS, SUB/IDX, и т.н.)",
|
||||
"AllChannels": "Всички канали",
|
||||
"Alerts": "Известия",
|
||||
"AdditionalNotificationServices": "Разгледайте каталога с добавки за допълнителни услуги за известяване.",
|
||||
"AddToPlayQueue": "Добавяне към опашка",
|
||||
"AccessRestrictedTryAgainLater": "Достъпът е временно ограничен. Моля опитайте отново по-късно."
|
||||
}
|
||||
|
|
|
@ -47,7 +47,6 @@
|
|||
"ButtonNextTrack": "Pista següent",
|
||||
"ButtonOk": "D'acord",
|
||||
"ButtonOpen": "Obre",
|
||||
"ButtonOther": "Altres",
|
||||
"ButtonParentalControl": "Control parental",
|
||||
"ButtonPause": "Pausa",
|
||||
"ButtonPlay": "Reprodueix",
|
||||
|
|
|
@ -72,7 +72,6 @@
|
|||
"ButtonNextTrack": "Následující stopa",
|
||||
"ButtonOff": "Vypnout",
|
||||
"ButtonOpen": "Otevřít",
|
||||
"ButtonOther": "Další",
|
||||
"ButtonParentalControl": "Rodičovská kontrola",
|
||||
"ButtonPause": "Pozastavit",
|
||||
"ButtonPlay": "Přehrát",
|
||||
|
@ -1298,7 +1297,6 @@
|
|||
"Features": "Funkce",
|
||||
"Filters": "Filtry",
|
||||
"Folders": "Složky",
|
||||
"ForAdditionalLiveTvOptions": "Pro další poskytovatele živého TV vysílání klikněte na záložku Služby a zobrazte dostupné možnosti.",
|
||||
"General": "Hlavní",
|
||||
"GenreValue": "Žánr: {0}",
|
||||
"GenresValue": "Žánry: {0}",
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
"ButtonNextTrack": "Næste spor",
|
||||
"ButtonOff": "Fra",
|
||||
"ButtonOpen": "Åben",
|
||||
"ButtonOther": "Andre",
|
||||
"ButtonParentalControl": "Forældrekontrol",
|
||||
"ButtonPlay": "Afspil",
|
||||
"ButtonPreviousTrack": "Forrige spor",
|
||||
|
@ -174,7 +173,6 @@
|
|||
"FolderTypeMusicVideos": "Musikvideoer",
|
||||
"FolderTypeTvShows": "TV",
|
||||
"FolderTypeUnset": "Ikke valgt (blandet indhold)",
|
||||
"ForAdditionalLiveTvOptions": "For ekstra Live TV udbydere, klik på Tjenester fanen for at se muligheder.",
|
||||
"Friday": "Fredag",
|
||||
"Fullscreen": "Fuldskærm",
|
||||
"General": "Generel",
|
||||
|
@ -1297,7 +1295,6 @@
|
|||
"LabelHomeNetworkQuality": "Hjemme netværk kvalitet:",
|
||||
"LabelHomeScreenSectionValue": "Hjemmeskærm sektion {0}:",
|
||||
"LabelInternetQuality": "Internet kvalitet:",
|
||||
"LabelLocalSyncStatusValue": "Status: {0}",
|
||||
"LabelLogs": "Log:",
|
||||
"LabelMatchType": "Passer til type:",
|
||||
"LabelMaxBitrate": "Maks bitrate:",
|
||||
|
|
|
@ -95,7 +95,6 @@
|
|||
"ButtonNextTrack": "Nächstes Stück",
|
||||
"ButtonOff": "Ausschalten",
|
||||
"ButtonOpen": "Öffnen",
|
||||
"ButtonOther": "Andere",
|
||||
"ButtonParentalControl": "Kindersicherung",
|
||||
"ButtonPlay": "Abspielen",
|
||||
"ButtonPreviousTrack": "Vorheriges Stück",
|
||||
|
@ -200,10 +199,10 @@
|
|||
"EditSubtitles": "Untertitel bearbeiten",
|
||||
"EnableBackdrops": "Aktiviere Hintergründe",
|
||||
"EnableBackdropsHelp": "Wenn aktiviert, werden während des Browsens durch die Bibliothek auf einigen Seiten passende Hintergründe angezeigt.",
|
||||
"EnableCinemaMode": "Aktiviere den Kino-Modus",
|
||||
"EnableCinemaMode": "Kino-Modus",
|
||||
"EnableColorCodedBackgrounds": "Aktiviere farbige Hintergründe",
|
||||
"EnableDisplayMirroring": "Aktiviere Display-Weiterleitung",
|
||||
"EnableExternalVideoPlayers": "Aktiviere externe Videoplayer",
|
||||
"EnableDisplayMirroring": "Display-Spiegelung",
|
||||
"EnableExternalVideoPlayers": "Externe Videoplayer",
|
||||
"EnableExternalVideoPlayersHelp": "Ein Menü für externe Videoplayer wird beim Start der Videowiedergabe angezeigt.",
|
||||
"EnableHardwareEncoding": "Aktiviere Hardware-Encoding",
|
||||
"EnableNextVideoInfoOverlay": "Aktiviere \"Next-Video-Info\" während der Wiedergabe",
|
||||
|
@ -248,7 +247,6 @@
|
|||
"FolderTypeMusicVideos": "Musikvideos",
|
||||
"FolderTypeUnset": "Keine Auswahl (gemischter Inhalt)",
|
||||
"Folders": "Verzeichnisse",
|
||||
"ForAdditionalLiveTvOptions": "Für weitere TV Quellen klicke auf den \"Dienste\"-Reiter um weitere Optionen anzuzeigen.",
|
||||
"Friday": "Freitag",
|
||||
"Fullscreen": "Vollbild",
|
||||
"General": "Allgemein",
|
||||
|
|
|
@ -80,7 +80,6 @@
|
|||
"ButtonNew": "Νέο",
|
||||
"ButtonNextTrack": "Επομενο",
|
||||
"ButtonOpen": "Άνοιγμα",
|
||||
"ButtonOther": "Άλλα",
|
||||
"ButtonParentalControl": "Γονικός έλεγχος",
|
||||
"ButtonPause": "Παύση",
|
||||
"ButtonPlay": "Αναπαραγωγή",
|
||||
|
|
|
@ -142,7 +142,6 @@
|
|||
"ButtonOff": "Off",
|
||||
"ButtonOk": "Ok",
|
||||
"ButtonOpen": "Open",
|
||||
"ButtonOther": "Other",
|
||||
"ButtonParentalControl": "Parental control",
|
||||
"ButtonPause": "Pause",
|
||||
"ButtonPlay": "Play",
|
||||
|
@ -296,7 +295,6 @@
|
|||
"FolderTypeMusicVideos": "Music videos",
|
||||
"FolderTypeTvShows": "TV Shows",
|
||||
"FolderTypeUnset": "Mixed content",
|
||||
"ForAdditionalLiveTvOptions": "For additional Live TV providers, click on the Services tab to see the available options.",
|
||||
"FormatValue": "Format: {0}",
|
||||
"Friday": "Friday",
|
||||
"Fullscreen": "Full screen",
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
"ButtonOff": "Off",
|
||||
"ButtonOk": "Ok",
|
||||
"ButtonOpen": "Open",
|
||||
"ButtonOther": "Other",
|
||||
"ButtonParentalControl": "Parental control",
|
||||
"ButtonPause": "Pause",
|
||||
"ButtonPlay": "Play",
|
||||
|
@ -263,7 +262,6 @@
|
|||
"FolderTypeTvShows": "TV 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}",
|
||||
"Friday": "Friday",
|
||||
"Fullscreen": "Full screen",
|
||||
|
@ -1093,7 +1091,7 @@
|
|||
"OptionDownloadBoxImage": "Box",
|
||||
"OptionDownloadDiscImage": "Disc",
|
||||
"OptionDownloadImagesInAdvance": "Download images in advance",
|
||||
"OptionDownloadImagesInAdvanceHelp": "By default, most images are only downloaded when requested by an Jellyfin app. Enable this option to download all images in advance, as new media is imported. This may cause significantly longer library scans.",
|
||||
"OptionDownloadImagesInAdvanceHelp": "By default, most images are only downloaded when requested by a Jellyfin app. Enable this option to download all images in advance, as new media is imported. This may cause significantly longer library scans.",
|
||||
"OptionDownloadLogoImage": "Logo",
|
||||
"OptionDownloadMenuImage": "Menu",
|
||||
"OptionDownloadPrimaryImage": "Primary",
|
||||
|
|
|
@ -166,7 +166,6 @@
|
|||
"ButtonOff": "Desactivado",
|
||||
"ButtonOk": "Aceptar",
|
||||
"ButtonOpen": "Abrir",
|
||||
"ButtonOther": "Otro",
|
||||
"ButtonParentalControl": "Control parental",
|
||||
"ButtonPause": "Pausar",
|
||||
"ButtonPlay": "Reproducir",
|
||||
|
@ -395,7 +394,6 @@
|
|||
"FolderTypeMusic": "Música",
|
||||
"FolderTypeMusicVideos": "Videos Musicales",
|
||||
"FolderTypeUnset": "Sin especificar (Contenido Mixto)",
|
||||
"ForAdditionalLiveTvOptions": "Para proveedores adicionales de TV en Vivo, hacé click en la pestaña Servicios para ver las opciones disponibles.",
|
||||
"FormatValue": "Formato: {0}",
|
||||
"Friday": "Viernes",
|
||||
"Fullscreen": "Pantalla Completa",
|
||||
|
|
|
@ -93,7 +93,6 @@
|
|||
"ButtonNextTrack": "Pista siguiente",
|
||||
"ButtonOff": "Apagar",
|
||||
"ButtonOpen": "Abrir",
|
||||
"ButtonOther": "Otros",
|
||||
"ButtonParentalControl": "Control parental",
|
||||
"ButtonPause": "Pausar",
|
||||
"ButtonPlay": "Reproducir",
|
||||
|
@ -253,7 +252,6 @@
|
|||
"FolderTypeTvShows": "Series de TV",
|
||||
"FolderTypeUnset": "Contenido variado",
|
||||
"Folders": "Carpetas",
|
||||
"ForAdditionalLiveTvOptions": "Para proveedores adicionales de TV en Vivo, de clic en la pestaña de Servicios para ver las opciones disponibles.",
|
||||
"FormatValue": "Formato: {0}",
|
||||
"Friday": "Viernes",
|
||||
"Fullscreen": "Pantalla Completa",
|
||||
|
|
|
@ -79,7 +79,6 @@
|
|||
"ButtonOff": "Apagado",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonOpen": "Abrir",
|
||||
"ButtonOther": "Otro",
|
||||
"ButtonParentalControl": "Control parental",
|
||||
"ButtonPause": "Pausa",
|
||||
"ButtonPlay": "Reproducir",
|
||||
|
@ -175,7 +174,7 @@
|
|||
"EnableNextVideoInfoOverlay": "Muestra la información del siguiente video durante la reproducción",
|
||||
"EnablePhotos": "Mostrar fotos",
|
||||
"EnablePhotosHelp": "Las imágenes se detectarán y se mostrarán junto con otros archivos multimedia.",
|
||||
"EnableStreamLooping": "Bucle automático de los streams en directo",
|
||||
"EnableStreamLooping": "Bucle automático de las emisiones en directo",
|
||||
"EnableStreamLoopingHelp": "Habilite esto si las emisiones en directo sólo contienen unos pocos segundos de datos y necesitan ser solicitados continuamente.",
|
||||
"EnableThemeVideos": "Vídeos temáticos",
|
||||
"Ended": "Finalizado",
|
||||
|
@ -207,7 +206,6 @@
|
|||
"FolderTypeMusicVideos": "Vídeos Musicales",
|
||||
"FolderTypeTvShows": "Programas de TV",
|
||||
"FolderTypeUnset": "Contenido Mixto",
|
||||
"ForAdditionalLiveTvOptions": "Para proveedores adicionales de televisión en directo, haga clic en la pestaña Servicios para ver las opciones disponibles.",
|
||||
"FormatValue": "Formato: {0}",
|
||||
"Friday": "Viernes",
|
||||
"Fullscreen": "Pantalla completa",
|
||||
|
@ -228,7 +226,7 @@
|
|||
"HeaderActivity": "Actividad",
|
||||
"HeaderAddScheduledTaskTrigger": "Agregar Activador",
|
||||
"HeaderAddToCollection": "Agregar a la colección",
|
||||
"HeaderAddToPlaylist": "Añadir a la lista",
|
||||
"HeaderAddToPlaylist": "Añadir a la lista de reproducción",
|
||||
"HeaderAddUpdateImage": "Añadir/Actualizar imagen",
|
||||
"HeaderAddUser": "Agregar usuario",
|
||||
"HeaderAdditionalParts": "Partes adicionales",
|
||||
|
@ -325,7 +323,7 @@
|
|||
"HeaderMediaFolders": "Carpetas de medios",
|
||||
"HeaderMediaInfo": "Información multimedia",
|
||||
"HeaderMetadataSettings": "Ajustes de metadatos",
|
||||
"HeaderMoreLikeThis": "Más como éste",
|
||||
"HeaderMoreLikeThis": "Más como este",
|
||||
"HeaderMovies": "Películas",
|
||||
"HeaderMusicVideos": "Vídeos musicales",
|
||||
"HeaderMyDevice": "Mi dispositivo",
|
||||
|
@ -334,7 +332,7 @@
|
|||
"HeaderNewApiKey": "Nueva clave API",
|
||||
"HeaderNewDevices": "Nuevos dispositivos",
|
||||
"HeaderNextEpisodePlayingInValue": "Siguiente episodio empezará en {0}",
|
||||
"HeaderNextUp": "Siguiendo",
|
||||
"HeaderNextUp": "Siguiente",
|
||||
"HeaderNextVideoPlayingInValue": "Siguiente vídeo empezará en {0}",
|
||||
"HeaderOnNow": "Transmitiendo ahora",
|
||||
"HeaderOtherItems": "Otros elementos",
|
||||
|
@ -647,7 +645,7 @@
|
|||
"LabelPersonRole": "Rol:",
|
||||
"LabelPlaceOfBirth": "Lugar de nacimiento:",
|
||||
"LabelPlayDefaultAudioTrack": "Reproducir pista de audio predeterminado, independientemente del idioma",
|
||||
"LabelPlaylist": "Lista:",
|
||||
"LabelPlaylist": "Lista de reproducción:",
|
||||
"LabelPostProcessor": "Aplicación de post-procesamiento:",
|
||||
"LabelPostProcessorArguments": "Argumentos de línea de comandos posprocesador:",
|
||||
"LabelPostProcessorArgumentsHelp": "Utilice {path} como ruta del archivo de grabación.",
|
||||
|
@ -1055,7 +1053,7 @@
|
|||
"ReleaseDate": "Fecha de lanzamiento",
|
||||
"RememberMe": "Recuérdame",
|
||||
"RemoveFromCollection": "Quitar de la colección",
|
||||
"RemoveFromPlaylist": "Quitar de la lista",
|
||||
"RemoveFromPlaylist": "Quitar de la lista de reproducción",
|
||||
"Repeat": "Repetir",
|
||||
"RepeatAll": "Repetir todo",
|
||||
"RepeatEpisodes": "Repetir episodios",
|
||||
|
@ -1421,7 +1419,7 @@
|
|||
"TV": "Televisión",
|
||||
"TabInfo": "Info",
|
||||
"TabLogs": "Registros",
|
||||
"TabPlugins": "Plugins",
|
||||
"TabPlugins": "Complementos",
|
||||
"TabSeries": "Series",
|
||||
"TabTrailers": "Tráilers",
|
||||
"TagsValue": "Etiquetas: {0}",
|
||||
|
|
|
@ -164,7 +164,6 @@
|
|||
"ButtonOff": "Pois päältä",
|
||||
"ButtonOk": "Ok",
|
||||
"ButtonOpen": "Avoin",
|
||||
"ButtonOther": "Muu",
|
||||
"BurnSubtitlesHelp": "Määrittää jos palvelimen pitäisi upottaa tekstitykset suoraan videotiedostoon muuntamisvaiheessa tekstitysformaatista riippuen. Upottamisen välttäminen parantaa palvelimen suorituskykyä. Valitse Automaattinen upottaaksesi sekä kuvapohjaiset- (esim. VOBSUB, PGS, SUB/IDX, jne.) että ASS/SSA tekstitysmuodot",
|
||||
"ButtonParentalControl": "Lapsilukko",
|
||||
"ButtonPause": "Tauko",
|
||||
|
|
|
@ -90,7 +90,6 @@
|
|||
"ButtonOff": "Arrêt",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonOpen": "Ouvrir",
|
||||
"ButtonOther": "Autre",
|
||||
"ButtonParentalControl": "Contrôle parental",
|
||||
"ButtonPlay": "Lire",
|
||||
"ButtonPreviousTrack": "Piste précédente",
|
||||
|
@ -251,7 +250,6 @@
|
|||
"FolderTypeTvShows": "TV",
|
||||
"FolderTypeUnset": "Contenu mixte",
|
||||
"Folders": "Dossiers",
|
||||
"ForAdditionalLiveTvOptions": "Pour d'autres fournisseurs de TV en direct, cliquez sur l'onglet Services afin de voir les options disponibles.",
|
||||
"FormatValue": "Format : {0}",
|
||||
"Friday": "Vendredi",
|
||||
"Fullscreen": "Plein écran",
|
||||
|
@ -309,7 +307,7 @@
|
|||
"HeaderContainerProfile": "Profil de conteneur",
|
||||
"HeaderContainerProfileHelp": "Les profils de conteneur indiquent les limites d'un appareil lors de la lecture de formats spécifiques. Si la limite s'applique au média, ce dernier sera transcodé, même si le format est configuré pour la lecture directe.",
|
||||
"HeaderContinueListening": "Reprendre l'écoute",
|
||||
"HeaderContinueWatching": "Reprendre",
|
||||
"HeaderContinueWatching": "Continuer à regarder",
|
||||
"HeaderCustomDlnaProfiles": "Profils personnalisés",
|
||||
"HeaderDateIssued": "Date de publication",
|
||||
"HeaderDefaultRecordingSettings": "Paramètres d'enregistrement par défaut",
|
||||
|
|
|
@ -54,7 +54,6 @@
|
|||
"ButtonOff": "Isključi",
|
||||
"ButtonOk": "U redu",
|
||||
"ButtonOpen": "Otvori",
|
||||
"ButtonOther": "Ostalo",
|
||||
"ButtonParentalControl": "Roditeljska kontrola",
|
||||
"ButtonPause": "Pauza",
|
||||
"ButtonPlay": "Pokreni",
|
||||
|
|
|
@ -621,7 +621,6 @@
|
|||
"ButtonLearnMore": "Tudj meg többet",
|
||||
"ButtonNetwork": "Hálózat",
|
||||
"ButtonOk": "Ok",
|
||||
"ButtonOther": "Egyéb",
|
||||
"ButtonRevoke": "Visszavon",
|
||||
"ButtonSelectView": "Válassz nézetet",
|
||||
"ButtonStart": "Start",
|
||||
|
@ -697,7 +696,6 @@
|
|||
"File": "Fájl",
|
||||
"FileReadCancelled": "Az olvasott fájl törlése megtörtént.",
|
||||
"FileReadError": "Hiba történt a fájl olvasása közben.",
|
||||
"ForAdditionalLiveTvOptions": "A további Élő TV szolgáltatókhoz kattints a Szolgáltatások fülre a rendelkezésre álló lehetőségek megtekintéséhez.",
|
||||
"GroupBySeries": "Csoportosítás sorozatonként",
|
||||
"GuestStar": "Vendég sztár",
|
||||
"GuideProviderLogin": "Bejelentkezés",
|
||||
|
@ -1319,7 +1317,7 @@
|
|||
"H264CrfHelp": "A Constant Rate Factor (CRF) az alapértelmezett minőségi beállítás az x264 enkóderhez. Az értékek 0 és 51 között állíthatók, ahol az alacsonyabb érték jobb minőséget eredményez (nagyobb fájl méret mellett). Az ajánlott érték 18 és 28 között van. Az x264 alapértelmezett beállítása 23, ez lehet kiindulási alap.",
|
||||
"HeaderAddScheduledTaskTrigger": "Vezérlő Hozzáadása",
|
||||
"HeaderApiKeysHelp": "A külső alkalmazásoknak egy API kulcsra van szükésge, hogy kommunikáljanak a Jellyfin szerverrel. A kulcsokat egy Jellyfin fiókkal történő belépéssel lehet megkapni, vagy kézileg felvenni egy alkalmazáshoz tartozó kulcsot.",
|
||||
"HeaderBranding": "Személyes Márka",
|
||||
"HeaderBranding": "Személyes védjegy",
|
||||
"HeaderContinueListening": "Folyamatban lévő zenék",
|
||||
"HeaderDeleteTaskTrigger": "Feladatvezérlő törlése",
|
||||
"HeaderFavoriteMovies": "Kedvenc Filmek",
|
||||
|
|
|
@ -81,7 +81,6 @@
|
|||
"ButtonNextTrack": "Traccia Successiva",
|
||||
"ButtonOff": "Spento",
|
||||
"ButtonOpen": "Apri",
|
||||
"ButtonOther": "Altro",
|
||||
"ButtonParentalControl": "Controllo parentale",
|
||||
"ButtonPause": "Pausa",
|
||||
"ButtonPlay": "Riproduci",
|
||||
|
@ -238,7 +237,6 @@
|
|||
"FolderTypeMusicVideos": "Video musicali",
|
||||
"FolderTypeUnset": "Contenuto Misto",
|
||||
"Folders": "Cartelle",
|
||||
"ForAdditionalLiveTvOptions": "Per ulteriori provider Live TV, fare clic sulla scheda Servizi per vedere le opzioni disponibili.",
|
||||
"FormatValue": "Formato: {0}",
|
||||
"Friday": "Venerdì",
|
||||
"Fullscreen": "Schermo Intero",
|
||||
|
|
|
@ -91,7 +91,6 @@
|
|||
"ButtonNextTrack": "次のトラック",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonOpen": "開く",
|
||||
"ButtonOther": "その他",
|
||||
"ButtonParentalControl": "ペアレンタルコントロール",
|
||||
"ButtonPause": "一時停止",
|
||||
"ButtonPlay": "再生",
|
||||
|
@ -263,7 +262,6 @@
|
|||
"FolderTypeTvShows": "テレビ番組",
|
||||
"FolderTypeUnset": "ミックスコンテンツ",
|
||||
"Folders": "フォルダー",
|
||||
"ForAdditionalLiveTvOptions": "その他のLive TV プロバイダーの場合は、[サービス]タブをクリックして利用可能なオプションを確認してください。",
|
||||
"FormatValue": "フォーマット: {0}",
|
||||
"Friday": "金曜日",
|
||||
"Fullscreen": "フルスクリーン",
|
||||
|
@ -505,5 +503,6 @@
|
|||
"Shows": "番組",
|
||||
"Songs": "曲",
|
||||
"Sync": "同期",
|
||||
"ValueSpecialEpisodeName": "スペシャル - {0}"
|
||||
"ValueSpecialEpisodeName": "スペシャル - {0}",
|
||||
"ButtonAddImage": "イメージの追加"
|
||||
}
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
"ButtonOff": "Óshir",
|
||||
"ButtonOk": "Jaraıdy",
|
||||
"ButtonOpen": "Ashý",
|
||||
"ButtonOther": "Basqa",
|
||||
"ButtonParentalControl": "Mazmundy basqarý",
|
||||
"ButtonPause": "Úzý",
|
||||
"ButtonPlay": "Oınatý",
|
||||
|
@ -264,7 +263,6 @@
|
|||
"FolderTypeTvShows": "TD-kórsetimder",
|
||||
"FolderTypeUnset": "Aralas mazmun",
|
||||
"Folders": "Qaltalar",
|
||||
"ForAdditionalLiveTvOptions": "Qosymsha efırlik TD jetkizýshiler úshin, Qyzmetter qoıyndysyn nuqyp, qoljetimdi opsıalarben tanysyńyz.",
|
||||
"FormatValue": "Pishim: {0}",
|
||||
"Friday": "juma",
|
||||
"Fullscreen": "Tolyq ekran",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -569,7 +569,6 @@
|
|||
"ButtonNetwork": "Tinklas",
|
||||
"ButtonOff": "Išjungti",
|
||||
"ButtonOpen": "Atidaryti",
|
||||
"ButtonOther": "Kita",
|
||||
"ButtonParentalControl": "Tėvų kontrolė",
|
||||
"ButtonProfile": "Profilis",
|
||||
"ButtonRename": "Pervadinti",
|
||||
|
|
1247
src/strings/nb.json
1247
src/strings/nb.json
File diff suppressed because it is too large
Load diff
|
@ -86,7 +86,6 @@
|
|||
"ButtonNextTrack": "Volgende track",
|
||||
"ButtonOff": "Uit",
|
||||
"ButtonOpen": "Openen",
|
||||
"ButtonOther": "Andere",
|
||||
"ButtonParentalControl": "Ouderlijk toezicht",
|
||||
"ButtonPause": "Pauze",
|
||||
"ButtonPlay": "Afspelen",
|
||||
|
@ -242,7 +241,6 @@
|
|||
"FolderTypeTvShows": "TV Series",
|
||||
"FolderTypeUnset": "Gemengde inhoud",
|
||||
"Folders": "Mappen",
|
||||
"ForAdditionalLiveTvOptions": "Voor extra Live TV providers, klik op de Diensten tab om de mogelijke opties te zien.",
|
||||
"FormatValue": "Formaat: {0}",
|
||||
"Friday": "Vrijdag",
|
||||
"Fullscreen": "Volledig scherm",
|
||||
|
|
|
@ -93,7 +93,6 @@
|
|||
"ButtonNextTrack": "Następna utwór",
|
||||
"ButtonOff": "Wyłącz",
|
||||
"ButtonOpen": "Otwórz",
|
||||
"ButtonOther": "Inne",
|
||||
"ButtonParentalControl": "Kontrola rodzicielska",
|
||||
"ButtonPause": "Pauza",
|
||||
"ButtonPlay": "Odtwarzaj",
|
||||
|
@ -256,7 +255,6 @@
|
|||
"FolderTypeTvShows": "Seriale",
|
||||
"FolderTypeUnset": "Zawartość mieszana",
|
||||
"Folders": "Foldery",
|
||||
"ForAdditionalLiveTvOptions": "Dla większej liczby dostawców telewizji, kliknij Usługi aby zobaczyć pozostałe opcje.",
|
||||
"Friday": "Piątek",
|
||||
"Fullscreen": "Pełny ekran",
|
||||
"General": "Ogólne",
|
||||
|
|
|
@ -88,7 +88,6 @@
|
|||
"ButtonOff": "Desligado",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonOpen": "Abrir",
|
||||
"ButtonOther": "Outro",
|
||||
"ButtonParentalControl": "Controle etário",
|
||||
"ButtonPause": "Pausar",
|
||||
"ButtonPlay": "Reproduzir",
|
||||
|
@ -245,7 +244,6 @@
|
|||
"FolderTypeTvShows": "Séries",
|
||||
"FolderTypeUnset": "Conteúdo misto",
|
||||
"Folders": "Pastas",
|
||||
"ForAdditionalLiveTvOptions": "Para provedores de TV ao Vivo adicionais, clique na guia Serviços para ver as opções disponíveis.",
|
||||
"FormatValue": "Formato: {0}",
|
||||
"Friday": "Sexta-feira",
|
||||
"Fullscreen": "Tela cheia",
|
||||
|
|
|
@ -340,8 +340,6 @@
|
|||
"LabelEpisodeNumber": "Número do episódio:",
|
||||
"LabelEvent": "Evento:",
|
||||
"LabelEveryXMinutes": "A cada:",
|
||||
"LabelExtractChaptersDuringLibraryScan": "Extrair imagens dos capítulos durante o rastreamento da biblioteca",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "Se ativado, as imagens dos capítulos serão extraídas quando os vídeos forem importados durante a pesquisa na biblioteca. Se desativado, elas serão extraídas durante a tarefa agendada de imagens dos capítulos, permitindo que a pesquisa na biblioteca seja mais rápida.",
|
||||
"LabelExtractChaptersDuringLibraryScan": "Extrair imagens dos capítulos durante a atualização da biblioteca",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "Se ativado, as imagens dos capítulos serão extraídas quando os vídeos forem importados durante a atualização da biblioteca. Se desativado, serão extraídas durante a tarefa agendada de extração de imagens dos capítulos, permitindo que a atualização da biblioteca seja mais rápida.",
|
||||
"LabelFailed": "Falhou",
|
||||
|
@ -824,7 +822,6 @@
|
|||
"ButtonSelectServer": "Selecionar servidor",
|
||||
"ButtonRename": "Alterar o nome",
|
||||
"ButtonParentalControl": "Controlo parental",
|
||||
"ButtonOther": "Outro",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonLibraryAccess": "Acesso à biblioteca",
|
||||
"ButtonGuide": "Programação",
|
||||
|
@ -835,7 +832,7 @@
|
|||
"Browse": "Procurar",
|
||||
"BoxRear": "Caixa (verso)",
|
||||
"Box": "Caixa",
|
||||
"BookLibraryHelp": "Livros de texto e áudio são suportados. Consulte o Guia de Nomenclatura de Livros Jellyfin {1}.",
|
||||
"BookLibraryHelp": "Livros de texto e áudio são suportados. Consulte o guia de nomenclatura de livros{1}.",
|
||||
"BirthLocation": "Local de nascimento",
|
||||
"AsManyAsPossible": "Tantos quanto possível",
|
||||
"Art": "Capa",
|
||||
|
@ -881,14 +878,13 @@
|
|||
"GenreValue": "Género: {0}",
|
||||
"General": "Geral",
|
||||
"FormatValue": "Formato: {0}",
|
||||
"ForAdditionalLiveTvOptions": "Para encontrar provedores de serviços de TV, clique no separador Serviços para ver os provedores disponíveis.",
|
||||
"FolderTypeUnset": "Conteúdo misto",
|
||||
"FolderTypeUnset": "Conteúdo Misto",
|
||||
"Filters": "Filtros",
|
||||
"File": "Ficheiro",
|
||||
"Favorite": "Favoritos",
|
||||
"FFmpegSavePathNotFound": "Não foi possível encontrar o binário FFmpeg na localização que introduziu. O binário FFprobe também é necessário, e deve estar na mesma pasta. Estes componentes são, por norma, instalados em conjunto. Por favor, verifique o caminho da localização e tente de novo.",
|
||||
"Extras": "Extras",
|
||||
"ExtraLarge": "Extra grande",
|
||||
"ExtraLarge": "Extra Grande",
|
||||
"EveryNDays": "A cada {0} dias",
|
||||
"ErrorSavingTvProvider": "Ocorreu um erro ao guardar o provedor do serviços de TV. Por favor, garanta que está acessível e tente de novo.",
|
||||
"ErrorMessageStartHourGreaterThanEnd": "A hora de fim deve ser superior à hora de início.",
|
||||
|
@ -897,15 +893,15 @@
|
|||
"ErrorAddingXmlTvFile": "Ocorreu um erro ao aceder ao ficheiro XmlTV. Por favor, garanta que o ficheiro está acessível e tente de novo.",
|
||||
"Episodes": "Episódios",
|
||||
"EndsAtValue": "Termina às {0}",
|
||||
"EnablePhotosHelp": "Fotografias serão detetadas e mostradas em conjunto com outros ficheiros multimédia.",
|
||||
"EnablePhotos": "Ativar fotografias",
|
||||
"EnablePhotosHelp": "Imagens serão detetadas e mostradas em conjunto com outros ficheiros multimédia.",
|
||||
"EnablePhotos": "Mostrar fotografias",
|
||||
"EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informação sobre o próximo vídeo da lista de reprodução.",
|
||||
"EnableNextVideoInfoOverlay": "Ativar informação sobre o próximo vídeo durante a reprodução",
|
||||
"EnableNextVideoInfoOverlay": "Mostrar informação sobre o próximo vídeo durante a reprodução",
|
||||
"EnableHardwareEncoding": "Ativar codificação por hardware",
|
||||
"EnableExternalVideoPlayersHelp": "O menu de um reprodutor externo será mostrado no início da reprodução de vídeo.",
|
||||
"EnableExternalVideoPlayers": "Ativar reprodutores de vídeo externos",
|
||||
"EnableDisplayMirroring": "Ativar espelho de ecrã",
|
||||
"EnableColorCodedBackgrounds": "Ativar código de cores para o fundo",
|
||||
"EnableExternalVideoPlayers": "Reprodutores de vídeo externos",
|
||||
"EnableDisplayMirroring": "Duplicação de ecrã",
|
||||
"EnableColorCodedBackgrounds": "Código de cores para o fundo",
|
||||
"EditSubtitles": "Editar legendas",
|
||||
"EditMetadata": "Editar metadados",
|
||||
"EditImages": "Editar imagens",
|
||||
|
@ -914,7 +910,7 @@
|
|||
"Download": "Transferir",
|
||||
"DoNotRecord": "Não gravar",
|
||||
"DisplayModeHelp": "Selecione o tipo de ecrã onde o Jellyfin será utilizado.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Deve também ser ativado para as bibliotecas de TV no Painel Principal do Servidor Jellyfin.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Deve também ser ativado para as bibliotecas de TV nas configurações do servidor.",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Mostrar episódios em falta numa série",
|
||||
"DisplayInOtherHomeScreenSections": "Mostrar no ecrã principal em secções como multimédia recente ou continue a ver",
|
||||
"DisplayInMyMedia": "Mostrar no ecrã principal",
|
||||
|
@ -971,7 +967,7 @@
|
|||
"Items": "Itens",
|
||||
"InstallingPackage": "A instalar {0}",
|
||||
"HttpsRequiresCert": "Para ativar ligações seguras, é necessário fornecer um certificado SSL confiável. Forneça um certificado SSL ou desative as ligações seguras.",
|
||||
"DirectStreamHelp1": "O tipo de multimédia (H.264, AC3, etc.) e a sua resolução são compatíveis com o dispositivo, no entanto, o formato (.mkv, .avi, .wmv, etc.) não é. O conteúdo é reempacotado em tempo real antes de ser enviado para o dispositivo.",
|
||||
"DirectStreamHelp1": "O tipo de multimédia (H.264, AC3, etc.) e a sua resolução são compatíveis com o dispositivo, no entanto, o formato (mkv, avi, wmv, etc.) não é. O conteúdo é reempacotado em tempo real antes de ser enviado para o dispositivo.",
|
||||
"DirectPlaying": "Reprodução direta",
|
||||
"Backdrop": "Imagem de Fundo",
|
||||
"SortChannelsBy": "Ordenar canais por:",
|
||||
|
@ -1052,9 +1048,9 @@
|
|||
"Display": "Visualização",
|
||||
"ManageLibrary": "Gerir biblioteca",
|
||||
"HeaderLibraryOrder": "Ordenação da Biblioteca",
|
||||
"EnableThemeVideosHelp": "Se ativado, serão reproduzidos vídeos do tema em plano de fundo durante a navegação pela Biblioteca.",
|
||||
"EnableThemeSongsHelp": "Se ativado, serão reproduzidas músicas do tema em plano de fundo durante a navegação pela Biblioteca.",
|
||||
"EnableBackdropsHelp": "Se ativado, serão mostradas imagens de fundo em algumas páginas durante a navegação pela Biblioteca.",
|
||||
"EnableThemeVideosHelp": "Reproduzir vídeos do tema em plano de fundo durante a navegação pela Biblioteca.",
|
||||
"EnableThemeSongsHelp": "Reproduzir músicas do tema em plano de fundo durante a navegação pela Biblioteca.",
|
||||
"EnableBackdropsHelp": "Mostrar imagens de fundo em algumas páginas durante a navegação pela Biblioteca.",
|
||||
"MediaInfoSize": "Tamanho",
|
||||
"LabelTextSize": "Tamanho do Texto:",
|
||||
"HeaderSubtitleAppearance": "Aparência das Legendas",
|
||||
|
@ -1084,5 +1080,6 @@
|
|||
"HeaderMovies": "Filmes",
|
||||
"DirectorsValue": "Realização: {0}",
|
||||
"DirectorValue": "Realizador: {0}",
|
||||
"ButtonOff": "Desligado"
|
||||
"ButtonOff": "Desligado",
|
||||
"ButtonAddImage": "Adicionar Imagem"
|
||||
}
|
||||
|
|
|
@ -94,7 +94,6 @@
|
|||
"ButtonOff": "Откл",
|
||||
"ButtonOk": "Ок",
|
||||
"ButtonOpen": "Открыть",
|
||||
"ButtonOther": "Другое",
|
||||
"ButtonParentalControl": "Управлять содержанием",
|
||||
"ButtonPause": "Пауза",
|
||||
"ButtonPlay": "Воспр.",
|
||||
|
@ -257,7 +256,6 @@
|
|||
"FolderTypeTvShows": "ТВ-передачи",
|
||||
"FolderTypeUnset": "Разнородное содержание",
|
||||
"Folders": "Папки",
|
||||
"ForAdditionalLiveTvOptions": "Для дополнительных ТВ-поставщиков, ознакомьтесь с имеющимися опциями, щёлкнув по вкладке Компоненты.",
|
||||
"FormatValue": "Формат: {0}",
|
||||
"Friday": "пятница",
|
||||
"Fullscreen": "Полный экран",
|
||||
|
|
|
@ -60,7 +60,6 @@
|
|||
"ButtonNew": "Nové",
|
||||
"ButtonNextTrack": "Nasledujúca stopa",
|
||||
"ButtonOpen": "Otvoriť",
|
||||
"ButtonOther": "Iné",
|
||||
"ButtonParentalControl": "Rodičovská kontrola",
|
||||
"ButtonPause": "Pauza",
|
||||
"ButtonPlay": "Prehrať",
|
||||
|
|
|
@ -81,11 +81,11 @@
|
|||
"AllEpisodes": "Vse epizode",
|
||||
"AllLanguages": "Vsi jeziki",
|
||||
"AllLibraries": "Vse knjižnice",
|
||||
"AllowHWTranscodingHelp": "Omogoči predvajalniku sprotno pretvarjanje videa. To lahko pomaga zmanjšati potrebo po pretvarjanju na strežniku.",
|
||||
"AllowHWTranscodingHelp": "Omogoči predvajalniku sprotno prekodiranje videa. To lahko pomaga zmanjšati potrebo po prekodiranju na strežniku.",
|
||||
"AllowMediaConversion": "Dovoli pretvarjanje predstavnosti",
|
||||
"AllowMediaConversionHelp": "Dovoli ali zavrni dostop do pretvarjanja predstavnosti.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Dovoli sprotno izluščenje podnapisov",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Vgrajeni podnapisi so lahko izluščeni iz videa in poslani odjemalcem kot navaden tekst, kar zmanjša potrebo po pretvarjanju. Na nekaterih napravah lahko to traja dalj časa in povzroča zatikanje med predvajanjem. Onemogočite za vžig vgrajenih podnapisov v video med pretvarjanjem za naprave ki ne podpirajo podnapisov.",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Vdelani podnapisi so lahko izluščeni iz videa in poslani odjemalcem kot navaden tekst, kar zmanjša potrebo po prekodiranju. Na nekaterih napravah lahko to traja dalj časa in povzroča zatikanje med predvajanjem. Onemogočite, za vžig vdelanih podnapisov v video med prekodiranjem, za naprave ki ne podpirajo podnapisov.",
|
||||
"AllowRemoteAccess": "Dovoli oddaljene povezave s tem Jellyfin strežnikom.",
|
||||
"AllowRemoteAccessHelp": "Če ni označeno, bodo vse oddaljene povezave blokirane.",
|
||||
"Artists": "Izvajalci",
|
||||
|
@ -194,7 +194,6 @@
|
|||
"ButtonOff": "Izključi",
|
||||
"ButtonOk": "Ok",
|
||||
"ButtonOpen": "Odpri",
|
||||
"ButtonOther": "Ostalo",
|
||||
"ButtonParentalControl": "Starševski nadzor",
|
||||
"ButtonPause": "Premor",
|
||||
"ButtonPlay": "Predvajaj",
|
||||
|
@ -422,7 +421,7 @@
|
|||
"HeaderConfirmProfileDeletion": "Potrdi brisanje profila",
|
||||
"HeaderConfirmPluginInstallation": "Potrdi namestitev dodatka",
|
||||
"HeaderConfigureRemoteAccess": "Nastavi oddaljen dostop",
|
||||
"HeaderCodecProfileHelp": "Profili kodeka določajo omejitve naprave pri predvajanju specifičnih kodekov. Če je omejitev dosežena bo predstavnost pretvarjana, tudi če je kodek nastavljen za neposredno predvajanje.",
|
||||
"HeaderCodecProfileHelp": "Profili kodeka določajo omejitve naprave pri predvajanju specifičnih kodekov. Če je omejitev dosežena bo predstavnost prekodirana, tudi če je kodek nastavljen za neposredno predvajanje.",
|
||||
"HeaderCodecProfile": "Profil kodeka",
|
||||
"HeaderChapterImages": "Slike poglavij",
|
||||
"HeaderChannels": "Kanali",
|
||||
|
@ -521,5 +520,99 @@
|
|||
"EnableCinemaMode": "Kino način",
|
||||
"EnableBackdropsHelp": "Prikaži ozadja na nekaterih straneh med brskanjem knjižnice.",
|
||||
"EnableBackdrops": "Ozadja",
|
||||
"EasyPasswordHelp": "Vaša enostavna PIN koda je uporabna za dostop brez povezave na podprtih napravah in za enostavno prijavo v lokalnem omrežju."
|
||||
"EasyPasswordHelp": "Vaša enostavna PIN koda je uporabna za dostop brez povezave na podprtih napravah in za enostavno prijavo v lokalnem omrežju.",
|
||||
"Images": "Slike",
|
||||
"Identify": "Identificiraj",
|
||||
"HttpsRequiresCert": "Za omogočanje varnih povezav potrebujete zaupanja vreden SSL certifikat, npr. Lets Encrypt. Prosimo priskrbite ustrezen certifikat ali onemogočite varne povezave.",
|
||||
"Horizontal": "Vodoravno",
|
||||
"Home": "Domov",
|
||||
"HideWatchedContentFromLatestMedia": "Skrij ogledane vsebine iz razdelka Najnovejša predstavnost",
|
||||
"Hide": "Skrij",
|
||||
"Help": "Pomoč",
|
||||
"HeadersFolders": "Mape",
|
||||
"HeaderYears": "Leta",
|
||||
"HeaderXmlSettings": "Xml nastavitve",
|
||||
"HeaderXmlDocumentAttributes": "Xml lastnosti dokumenta",
|
||||
"HeaderXmlDocumentAttribute": "Xml lastnost dokumenta",
|
||||
"HeaderVideos": "Videi",
|
||||
"HeaderVideoTypes": "Tipi videa",
|
||||
"HeaderVideoType": "Tip videa",
|
||||
"HeaderVideoQuality": "Kvaliteta videa",
|
||||
"HeaderUsers": "Uporabniki",
|
||||
"HeaderUploadImage": "Naloži sliko",
|
||||
"HeaderUpcomingOnTV": "Prihaja na TV",
|
||||
"HeaderTypeText": "Vnesi besedilo",
|
||||
"HeaderTypeImageFetchers": "{0} prejemniki slik",
|
||||
"HeaderTuners": "Sprejemniki",
|
||||
"HeaderTunerDevices": "Sprejemniki",
|
||||
"LabelAllowHWTranscoding": "Dovoli strojno pospešeno prekodiranje",
|
||||
"HeaderSelectTranscodingPathHelp": "Izberite ali vnesite pot za začasne datoteka prekodiranja. Mapa mora dovoliti zapisovanje.",
|
||||
"HeaderContainerProfileHelp": "Profil kontejnerja določa omejitve naprave pri predvajanju določenih formatov. Če je omejitev dosežena, bo predstavnost prekodirana, tudi če je format sicer nastavljen za neposredno predvajanje.",
|
||||
"HeaderTranscodingProfileHelp": "Dodaj profil prekodiranja za izbiro uporabljenih formatov, ko je potrebno prekodiranje.",
|
||||
"HeaderTranscodingProfile": "Profil prekodiranja",
|
||||
"HeaderTracks": "Skladbe",
|
||||
"HeaderThisUserIsCurrentlyDisabled": "Ta uporabnik je trenutno onemogočen",
|
||||
"HeaderTaskTriggers": "Sprožilci dejanj",
|
||||
"HeaderTags": "Oznake",
|
||||
"HeaderSystemDlnaProfiles": "Sistemski profili",
|
||||
"HeaderSubtitleProfilesHelp": "Profili podnapisov določajo formate podnapisov, ki je naprava podpira.",
|
||||
"HeaderSubtitleProfiles": "Profili podnapisov",
|
||||
"HeaderSubtitleProfile": "Profil podnapisov",
|
||||
"HeaderSubtitleDownloads": "Prenosi podnapisov",
|
||||
"HeaderSubtitleAppearance": "Izgled podnapisov",
|
||||
"HeaderStopRecording": "Ustavi snemanje",
|
||||
"HeaderStatus": "Status",
|
||||
"HeaderStartNow": "Začni zdaj",
|
||||
"HeaderSpecialFeatures": "Posebne lastnosti",
|
||||
"HeaderSpecialEpisodeInfo": "Informacije o posebni epizodi",
|
||||
"HeaderSortOrder": "Vrstni red",
|
||||
"HeaderSortBy": "Uredi po",
|
||||
"HeaderShutdown": "Ugasni",
|
||||
"HeaderSetupLibrary": "Nastavite vaše knjižnjice predstavnosti",
|
||||
"HeaderServerSettings": "Nastavitve strežnika",
|
||||
"HeaderSeriesStatus": "Status serije",
|
||||
"HeaderSeriesOptions": "Možnosti serije",
|
||||
"HeaderSendMessage": "Pošlji sporočilo",
|
||||
"HeaderSelectTranscodingPath": "Izberi pot začasnih datotek prekodiranja",
|
||||
"HeaderRevisionHistory": "Pregled zgodovine",
|
||||
"HeaderFeatures": "Funkcije",
|
||||
"HeaderFeatureAccess": "Dostop funkcij",
|
||||
"HeaderDeviceAccess": "Dostop naprav",
|
||||
"HeaderContainerProfile": "Profil kontejnerja",
|
||||
"Kids": "Otroci",
|
||||
"LabelAbortedByServerShutdown": "(Prekinjeno zaradi zaustavitve strežnika)",
|
||||
"LabelAirsBeforeEpisode": "Predvajanje pred epizodo:",
|
||||
"LabelAlbumArtMaxWidth": "Največja širina slike albuma:",
|
||||
"LabelAlbumArtMaxWidthHelp": "Največja ločljivost slike albuma dostopna preko UPnP:albumArtURI.",
|
||||
"LabelAlbumArtPN": "Slika albuma PN:",
|
||||
"LabelAlbum": "Album:",
|
||||
"LabelAlbumArtMaxHeight": "Največja višina slike albuma:",
|
||||
"LabelAlbumArtMaxHeightHelp": "Največja ločljivost slike albuma dostopna preko UPnP:albumArtURI.",
|
||||
"LabelAudioBitDepth": "Bitna globina zvoka:",
|
||||
"LabelAllowServerAutoRestart": "Dovoli, da se strežnik samodejno znova zažene in uveljavi posodobitve",
|
||||
"LabelAllowServerAutoRestartHelp": "Strežnik se bo samodejno zagnal zgolj v času mirovanja, ko ne bo aktivnih uporabnikov.",
|
||||
"LabelAllowedRemoteAddresses": "Filter oddaljenih IP naslovov:",
|
||||
"LabelAllowedRemoteAddressesMode": "Način filtra oddaljenih IP naslovov:",
|
||||
"LabelAppName": "Ime aplikacije",
|
||||
"LabelAppNameExample": "Primer: Sickbeard, NzbDrone",
|
||||
"LabelArtistsHelp": "Loči več z ;",
|
||||
"LabelAudio": "Zvok:",
|
||||
"LabelAudioBitrate": "Bitna hitrost zvoka:",
|
||||
"LabelAudioChannels": "Kanali zvoka:",
|
||||
"LabelAudioCodec": "Zvočni kodek:",
|
||||
"LabelAudioSampleRate": "Hitrost vzorčenja zvoka:",
|
||||
"LabelAuthProvider": "Ponudnik preverjanja pristnosti:",
|
||||
"LabelBindToLocalNetworkAddress": "Poveži na lokalni omrežni naslov:",
|
||||
"LabelAudioLanguagePreference": "Zaželen jezik zvoka:",
|
||||
"LabelAutomaticallyRefreshInternetMetadataEvery": "Samodejno posodobi metapodatke z interneta:",
|
||||
"Label3DFormat": "Format 3D:",
|
||||
"LabelAccessDay": "Dan v tednu:",
|
||||
"LabelAccessEnd": "Čas konca:",
|
||||
"LabelAccessStart": "Čas začetka:",
|
||||
"LabelAirDays": "Dnevi predvajanja:",
|
||||
"LabelAirTime": "Čas predvajanja:",
|
||||
"LabelAirsAfterSeason": "Predvajanje po sezoni:",
|
||||
"LabelAirsBeforeSeason": "Predvajanje pred sezono:",
|
||||
"LabelAlbumArtists": "Izvajalci albuma:",
|
||||
"LabelAll": "Vse"
|
||||
}
|
||||
|
|
|
@ -84,7 +84,6 @@
|
|||
"ButtonOff": "Av",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonOpen": "Öppna",
|
||||
"ButtonOther": "Annan",
|
||||
"ButtonParentalControl": "Föräldralås",
|
||||
"ButtonPause": "Paus",
|
||||
"ButtonPlay": "Spela upp",
|
||||
|
@ -1277,7 +1276,6 @@
|
|||
"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.",
|
||||
|
|
|
@ -286,5 +286,148 @@
|
|||
"AllComplexFormats": "Bütün karmaşık formatlar (ASS, SSA, VOBSUB, PGS, SUB/IDX, vb.)",
|
||||
"AllEpisodes": "Bütün bölümler",
|
||||
"AllLanguages": "Bütün diller",
|
||||
"AllowMediaConversion": "Medya dönüşümüne izin ver"
|
||||
"AllowMediaConversion": "Medya dönüşümüne izin ver",
|
||||
"AddItemToCollectionHelp": "Ögeleri koleksiyona eklemek için arama yapın ve üzerine sağ tıklayın veya sekme menüsünden koleksiyona ekleyin.",
|
||||
"AllowHWTranscodingHelp": "Ayarlayıcının anında akışları dönüştürmesine izin verin. Bu, sunucunun gerektirdiği kodlamanın azaltılmasına yardımcı olabilir.",
|
||||
"ColorSpace": "Renk Uzayı",
|
||||
"ButtonConnect": "Bağlan",
|
||||
"ColorTransfer": "Renk transferi",
|
||||
"ButtonPreviousTrack": "Önceki parça",
|
||||
"ButtonProfile": "Profil",
|
||||
"ButtonRefresh": "Yenile",
|
||||
"ButtonRename": "Yeniden Adlandır",
|
||||
"ButtonRepeat": "Tekrar",
|
||||
"ButtonResume": "Devam Et",
|
||||
"ButtonRevoke": "geri al",
|
||||
"ChannelNumber": "Kanal Numarası",
|
||||
"ContinueWatching": "İzlemeye devam et",
|
||||
"CriticRating": "Kritik değerlendirme",
|
||||
"CustomDlnaProfilesHelp": "Yeni bir cihazı hedeflemek veya bir sistem profilini geçersiz kılmak için özel bir profil oluşturun.",
|
||||
"Descending": "Azalan",
|
||||
"DetectingDevices": "Cihazları tespit",
|
||||
"DirectPlaying": "Doğrudan oynatma",
|
||||
"CommunityRating": "Topluluk değerlendirmesi",
|
||||
"Composer": "Besteci",
|
||||
"ConfigureDateAdded": "Eklenen tarihin, Kitaplık ayarları altındaki Jellyfin Sunucu kontrol panelinde nasıl belirleneceğini yapılandırın",
|
||||
"ConfirmDeleteImage": "Resmi Sil?",
|
||||
"ButtonResetEasyPassword": "Kolay pin kodunu sıfırla",
|
||||
"ColorPrimaries": "Renk primerleri",
|
||||
"DirectStreamHelp2": "Doğrudan Akış, video kalitesinde herhangi bir kayıp olmadan çok az işlem gücü kullanır.",
|
||||
"DirectStreaming": "Doğrudan akış",
|
||||
"Director": "yönetmen",
|
||||
"DirectorValue": "Yönetmen: {0}",
|
||||
"DirectorsValue": "Yöneticiler: {0}",
|
||||
"Disabled": "Deaktif",
|
||||
"DisplayModeHelp": "Jellyfin’i çalıştırdığınız ekran türünü seçin.",
|
||||
"DoNotRecord": "Kaydetme",
|
||||
"Down": "Aşağı",
|
||||
"Download": "İndir",
|
||||
"DownloadsValue": "{0} indirme",
|
||||
"EditImages": "Resimleri düzenle",
|
||||
"EditMetadata": "Meta verileri düzenle",
|
||||
"EditSubtitles": "Altyazıları düzenle",
|
||||
"EnableBackdropsHelp": "Kütüphaneye göz atarken arka plandaki bazı sayfaların arka planında görüntüleyin.",
|
||||
"AllowMediaConversionHelp": "Dönüştürme özelliğine erişim izni verme veya reddetme.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Anında altyazı çıkartmaya izin ver",
|
||||
"ButtonSelectServer": "Sunucu Seç",
|
||||
"Disc": "Disk",
|
||||
"ButtonAddImage": "Resim ekle",
|
||||
"ButtonAddScheduledTaskTrigger": "Tetikleyici ekle",
|
||||
"ButtonAddServer": "Sunucu ekle",
|
||||
"ButtonAudioTracks": "Ses Parçalari",
|
||||
"ButtonChangeServer": "Sunucu Değiştir",
|
||||
"ButtonGotIt": "Anladım",
|
||||
"ButtonMore": "Daha",
|
||||
"ButtonOpen": "Açık",
|
||||
"ButtonArrowUp": "Yukarı",
|
||||
"ButtonNetwork": "Ağ",
|
||||
"ButtonDownload": "İndir",
|
||||
"ButtonNextTrack": "Sonraki parça",
|
||||
"ButtonOff": "Kapalı",
|
||||
"ButtonParentalControl": "Ebeveyn Kontrolü",
|
||||
"ButtonArrowDown": "Aşağı",
|
||||
"ButtonArrowLeft": "Sol",
|
||||
"ButtonDown": "Aşağı",
|
||||
"ButtonGuide": "Rehber",
|
||||
"ButtonLearnMore": "Daha fazla bilgi edin",
|
||||
"ButtonLibraryAccess": "Kütüphane erişimi",
|
||||
"ButtonScanAllLibraries": "Tüm Kütüphaneleri Tara",
|
||||
"ButtonSelectView": "Görünüm seç",
|
||||
"ButtonShuffle": "Karıştır",
|
||||
"ButtonShutdown": "Kapat",
|
||||
"ChannelNameOnly": "Yalnızca {0} kanalı",
|
||||
"ConfirmDeleteItems": "Bu öğeleri silmek, onları hem dosya sisteminden hem de medya kitaplığınızdan siler. Devam etmek istediğinize emin misiniz?",
|
||||
"ConfirmDeletion": "Silmeyi onayla",
|
||||
"ConfirmEndPlayerSession": "Jellyfin'i {0} tarihinde kapatmak ister misiniz?",
|
||||
"Connect": "Bağlan",
|
||||
"Disconnect": "Bağlantısız",
|
||||
"Dislike": "Beğenmemek",
|
||||
"Display": "Görüntüle",
|
||||
"DisplayInMyMedia": "Ana ekranda görüntüleme",
|
||||
"DisplayInOtherHomeScreenSections": "En son medya gibi ana ekran bölümlerinde görüntüleyin ve izlemeye devam edin",
|
||||
"EnableBackdrops": "Arka planında",
|
||||
"BurnSubtitlesHelp": "Altyazı formatına bağlı olarak video dönüştürülürken sunucunun altyazılarda yazıp yazmayacağını belirler. Altyazılarda yanmaktan kaçınmak, sunucu performansını iyileştirir. Görüntü tabanlı biçimleri (VOBSUB, PGS, SUB / IDX, vb.) Ve bazı ASS / SSA altyazılarını yazmak için Otomatik'i seçin.",
|
||||
"ConfirmDeleteItem": "Bu öğeyi silmek, onu hem dosya sisteminden hem de medya kütüphanenizden siler. Devam etmek istediğinize emin misiniz?",
|
||||
"ValueSpecialEpisodeName": "Özel -{0}",
|
||||
"DeviceAccessHelp": "Bu, yalnızca benzersiz şekilde tanımlanabilen ve tarayıcı erişimini engellemeyen cihazlar için geçerlidir. Kullanıcı cihazlarına erişimin filtrelenmesi, burada onaylanana kadar yeni cihazları kullanmalarını önler.",
|
||||
"DirectStreamHelp1": "Medya, çözünürlük ve medya türüyle (H.264, AC3, vb.) İlgili cihazla uyumludur, ancak uyumsuz bir dosya konteynerinde (mkv, avi, wmv, vb.) Bulunur. Video, cihaza aktarılmadan önce anında yeniden paketlenecek.",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Bu, sunucu yapılandırmasındaki TV kütüphaneleri için de etkinleştirilmelidir.",
|
||||
"EasyPasswordHelp": "Kolay pin kodunuz, desteklenen istemcilerde çevrimdışı erişim için kullanılır ve ayrıca ağ içinde oturum açmak için de kullanılabilir.",
|
||||
"ChangingMetadataImageSettingsNewContent": "Meta veri veya resim indirme ayarlarında yapılan değişiklikler yalnızca kitaplığınıza eklenen yeni içerikler için geçerli olacaktır. Değişiklikleri mevcut başlıklara uygulamak için meta verilerini el ile yenilemeniz gerekir.",
|
||||
"CinemaModeConfigurationHelp": "Sinema modu, ana özellikten önce fragmanlar ve özel tanıtımlar oynatabilen tiyatro deneyimini doğrudan oturma odanıza getirir.",
|
||||
"Browse": "Gözat",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Gömülü alt yazılar, videoların kodlanmasını önlemek için videolardan çıkarılabilir ve istemcilere düz metin olarak gönderilebilir. Bazı sistemlerde bu uzun zaman alabilir ve çıkarma işlemi sırasında video oynatmanın durmasına neden olabilir. İstemci cihaz tarafından doğal olarak desteklenmiyorsa, video kod kodlaması ile birlikte yakılmış gömülü altyazılara sahip olmak için bunu devre dışı bırakın.",
|
||||
"AllowedRemoteAddressesHelp": "Uzaktan bağlanmasına izin verilecek ağlar için virgülle ayrılmış IP adresleri listesi veya IP / ağ maskesi girişleri. Boş bırakılırsa, tüm uzak adreslere izin verilir.",
|
||||
"AlwaysPlaySubtitlesHelp": "Dil tercihi ile eşleşen altyazılar, ses diline bakılmaksızın yüklenir.",
|
||||
"AnyLanguage": "Herhangi bir dil",
|
||||
"Anytime": "İstediğin zaman",
|
||||
"AroundTime": "{0} civarında",
|
||||
"Art": "Sanat",
|
||||
"AsManyAsPossible": "Mümkün olduğunca",
|
||||
"Ascending": "yükselen",
|
||||
"AspectRatio": "Boy oranı",
|
||||
"Audio": "Ses",
|
||||
"AuthProviderHelp": "Bu kullanıcının şifresini doğrulamak için kullanılacak bir Kimlik Doğrulama Sağlayıcısı seçin.",
|
||||
"AutoBasedOnLanguageSetting": "Otomatik (dil ayarına göre)",
|
||||
"Backdrop": "zemin",
|
||||
"Backdrops": "Zeminler",
|
||||
"Banner": "afiş",
|
||||
"BirthDateValue": "Doğan: {0}",
|
||||
"BirthLocation": "Doğum yeri",
|
||||
"BirthPlaceValue": "Doğum yeri: {0}",
|
||||
"Auto": "Oto",
|
||||
"Blacklist": "kara liste",
|
||||
"BoxRear": "Kutu (arka)",
|
||||
"ButtonAddMediaLibrary": "Medya Kitaplığı Ekle",
|
||||
"ButtonSubmit": "Sunmak",
|
||||
"ButtonStart": "Başlat",
|
||||
"ButtonTrailer": "Fragman",
|
||||
"Box": "Kutu",
|
||||
"ButtonViewWebsite": "Web sitesini görüntüle",
|
||||
"CancelRecording": "Kaydı iptal et",
|
||||
"CancelSeries": "Serileri iptal et",
|
||||
"ButtonUninstall": "Kaldır",
|
||||
"ButtonUp": "Yukarı",
|
||||
"ButtonWebsite": "Website",
|
||||
"Categories": "Kategoriler",
|
||||
"DrmChannelsNotImported": "DRM'li kanallar içe aktarılmayacak.",
|
||||
"DropShadow": "Düşen gölge",
|
||||
"CopyStreamURL": "Akış URL’sini kopyala",
|
||||
"DefaultSubtitlesHelp": "Altyazılar, gömülü meta verilerdeki varsayılan ve zorunlu bayraklara göre yüklenir. Birden fazla seçenek olduğunda dil tercihleri göz önünde bulundurulur.",
|
||||
"DeleteDeviceConfirmation": "Bu cihazı silmek istediğinden emin misin? Bir kullanıcı bir sonraki oturum açışında yeniden görünecektir.",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Sezonlardaki eksik bölümleri görüntüleme",
|
||||
"AlwaysPlaySubtitles": "Her zaman altyazıları oynat",
|
||||
"CopyStreamURLSuccess": "URL başarıyla kopyalandı.",
|
||||
"DateAdded": "Ekleme Tarihi",
|
||||
"DatePlayed": "Oynanan tarih",
|
||||
"DeathDateValue": "Öldü: {0}",
|
||||
"Default": "Varsayılan",
|
||||
"DefaultErrorMessage": "İsteğin işlenmesi sırasında bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.",
|
||||
"DefaultMetadataLangaugeDescription": "Bunlar varsayılan ayarlarınızdır ve kitaplık bazında özelleştirilebilir.",
|
||||
"DeleteUserConfirmation": "Bu kullanıcıyı silmek istediğinden emin misin?",
|
||||
"Depressed": "Bunalımlı",
|
||||
"Desktop": "Masaüstü",
|
||||
"HeaderFavoriteShows": "Favori Diziler",
|
||||
"HeaderFavoriteEpisodes": "Favori Bölümler",
|
||||
"BookLibraryHelp": "Ses ve ders kitapları desteklenir. {0} kitap adlandırma kılavuzunu {1} gözden geçirin."
|
||||
}
|
||||
|
|
|
@ -91,5 +91,23 @@
|
|||
"ValueOneSeries": "1 серія",
|
||||
"ValueOneSong": "1 пісня",
|
||||
"ValueSeriesCount": "{0} серій",
|
||||
"ValueSongCount": "{0} пісень"
|
||||
"ValueSongCount": "{0} пісень",
|
||||
"AddToPlaylist": "Додати до списку відтворення",
|
||||
"AccessRestrictedTryAgainLater": "Доступ тимчасово заборонений. Спробуйте пізніше.",
|
||||
"Actor": "Виконавець",
|
||||
"AllLanguages": "Всі мови",
|
||||
"AllLibraries": "Всі бібліотеки",
|
||||
"AddToCollection": "Додати до колекції",
|
||||
"AddToPlayQueue": "Додати до черги відтворення",
|
||||
"All": "Всі",
|
||||
"AllChannels": "Всі канали",
|
||||
"AllEpisodes": "Всі епізоди",
|
||||
"AllowRemoteAccess": "Дозволити віддалене підключення до цього сервера Jellyfin",
|
||||
"AlwaysPlaySubtitles": "Завжди відтворювати субтитри",
|
||||
"AnyLanguage": "Будь-яка мова",
|
||||
"Anytime": "Завжди",
|
||||
"Add": "Додати",
|
||||
"AddedOnValue": "Додано",
|
||||
"Albums": "Альбоми",
|
||||
"Absolute": "Абсолютний"
|
||||
}
|
||||
|
|
|
@ -115,5 +115,8 @@
|
|||
"TellUsAboutYourself": "Nói cho chúng tôi biết đôi điều về Bạn",
|
||||
"ThisWizardWillGuideYou": "Thủ thuật này sẽ hướng dẫn quá trình cài đặt cho bạn. Để bắt đầu, vui lòng lựa chọn ngôn ngữ bạn ưa thích.",
|
||||
"UninstallPluginConfirmation": "Bạn có chắc muốn gỡ bỏ{0}?",
|
||||
"UninstallPluginHeader": "Gỡ bỏ Plugin"
|
||||
"UninstallPluginHeader": "Gỡ bỏ Plugin",
|
||||
"AccessRestrictedTryAgainLater": "Truy cập hiện đang hạn chế. Hãy thử lại sau.",
|
||||
"AddToCollection": "Thêm vào bộ sưu tập",
|
||||
"Actor": "Diễn viên"
|
||||
}
|
||||
|
|
|
@ -88,7 +88,6 @@
|
|||
"ButtonOff": "关",
|
||||
"ButtonOk": "确定",
|
||||
"ButtonOpen": "打开",
|
||||
"ButtonOther": "其他",
|
||||
"ButtonParentalControl": "家长控制",
|
||||
"ButtonPause": "暂停",
|
||||
"ButtonPlay": "播放",
|
||||
|
@ -207,7 +206,7 @@
|
|||
"Ended": "结束",
|
||||
"EndsAtValue": "结束于 {0}",
|
||||
"Episodes": "剧集",
|
||||
"ErrorAddingListingsToSchedulesDirect": "将阵容添加到您的计划直接帐户时出错。计划直接只允许每帐户数量有限的阵容。您可能需要登录到时间表直接网站和删除其他清单, 从您的帐户 proceeeding 之前。",
|
||||
"ErrorAddingListingsToSchedulesDirect": "我们将阵容添加到您的Schedules Direct帐户时出错。 Schedules Direct只允许有限的账号排序。 您可能需要在继续前直接登入Schedules Direct 网站并删除其他列表。",
|
||||
"ErrorAddingMediaPathToVirtualFolder": "添加媒体路径时发生错误。请确认路径是有效的,并且你的 Jellyfin 服务器进程有对该位置的访问权。",
|
||||
"ErrorAddingTunerDevice": "添加协调器设备时发生错误。请确认它是可访问的然后再试一次。",
|
||||
"ErrorAddingXmlTvFile": "访问 XmlTV 文件时发生错误。请确认该文件是否存在然后再试一次。",
|
||||
|
@ -236,7 +235,6 @@
|
|||
"FolderTypeTvShows": "电视节目",
|
||||
"FolderTypeUnset": "混合内容",
|
||||
"Folders": "文件夹",
|
||||
"ForAdditionalLiveTvOptions": "要查看额外的电视直播提供商,点击“服务”标签以查看可用的选项。",
|
||||
"FormatValue": "格式:{0}",
|
||||
"Friday": "星期五",
|
||||
"Fullscreen": "全屏",
|
||||
|
@ -495,7 +493,7 @@
|
|||
"LabelBirthDate": "出生日期:",
|
||||
"LabelBirthYear": "出生年份:",
|
||||
"LabelBlastMessageInterval": "活动信号的时间间隔(秒)",
|
||||
"LabelBlastMessageIntervalHelp": "确定由服务器活动信号的间隔秒数。",
|
||||
"LabelBlastMessageIntervalHelp": "确定爆炸活动消息之间的持续时间(以秒为单位)。",
|
||||
"LabelBlockContentWithTags": "通过标签锁定内容:",
|
||||
"LabelBurnSubtitles": "烧录字幕:",
|
||||
"LabelCache": "缓存:",
|
||||
|
@ -556,9 +554,9 @@
|
|||
"LabelEnableDlnaDebugLogging": "启用 DLNA 调试日志",
|
||||
"LabelEnableDlnaDebugLoggingHelp": "创建一个很大的日志文件,仅应在排除故障时使用。",
|
||||
"LabelEnableDlnaPlayTo": "启用 DLNA 播放",
|
||||
"LabelEnableDlnaPlayToHelp": "Jellyfin 可以侦测你网络里的设备并能远程控制它们。",
|
||||
"LabelEnableDlnaPlayToHelp": "侦测你网络里的设备并远程控制它们。",
|
||||
"LabelEnableDlnaServer": "启用 DLNA 服务器",
|
||||
"LabelEnableDlnaServerHelp": "允许你网络上的 UPnP 设备浏览并播放 Jellyfin 内容。",
|
||||
"LabelEnableDlnaServerHelp": "允许你网络上的 UPnP 设备浏览并播放内容。",
|
||||
"LabelEnableHardwareDecodingFor": "启用硬件解码:",
|
||||
"LabelEnableRealtimeMonitor": "启用实时监控",
|
||||
"LabelEnableRealtimeMonitorHelp": "文件更改将立即在支持的文件系统上处理。",
|
||||
|
@ -569,7 +567,7 @@
|
|||
"LabelEvent": "事件:",
|
||||
"LabelEveryXMinutes": "每:",
|
||||
"LabelExtractChaptersDuringLibraryScan": "媒体库扫描过程中解压章节图像",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "如果启用,当媒体库导入视频并扫描时,将提取章节图像。如果禁用,章节图像将在之后的计划任务提取,而媒体库会更快完成扫描。",
|
||||
"LabelExtractChaptersDuringLibraryScanHelp": "当媒体库导入视频并扫描时,将提取章节图像。否则,章节图像将在之后的计划任务提取,而媒体库会更快完成扫描。",
|
||||
"LabelFailed": "失败",
|
||||
"LabelFileOrUrl": "文件或网址:",
|
||||
"LabelFinish": "完成",
|
||||
|
@ -583,7 +581,7 @@
|
|||
"LabelH264Crf": "H264 CRF 编码质量等级:",
|
||||
"LabelH264EncodingPreset": "H264 编码预设:",
|
||||
"LabelHardwareAccelerationType": "硬件加速:",
|
||||
"LabelHardwareAccelerationTypeHelp": "只能在支持的系统上使用。",
|
||||
"LabelHardwareAccelerationTypeHelp": "此特性只能在支持的系统上使用。",
|
||||
"LabelHomeNetworkQuality": "家庭网络质量:",
|
||||
"LabelHomeScreenSectionValue": "主屏幕模块{0}:",
|
||||
"LabelHttpsPort": "本地 HTTPS 端口号:",
|
||||
|
@ -601,15 +599,15 @@
|
|||
"LabelInternetQuality": "网络质量:",
|
||||
"LabelKidsCategories": "儿童分类:",
|
||||
"LabelKodiMetadataDateFormat": "发行日期格式:",
|
||||
"LabelKodiMetadataDateFormatHelp": "Nfo的所有日期将使用这种格式被读取和写入。",
|
||||
"LabelKodiMetadataDateFormatHelp": "Nfo的所有日期将使用这种格式。",
|
||||
"LabelKodiMetadataEnableExtraThumbs": "复制同人画到extrathumbs文件夹",
|
||||
"LabelKodiMetadataEnableExtraThumbsHelp": "为了最大化兼容Kodi皮肤,下载的图片同时保存在 extrafanart 和 extrathumbs 文件夹。",
|
||||
"LabelKodiMetadataEnablePathSubstitution": "启用路径替换",
|
||||
"LabelKodiMetadataEnablePathSubstitutionHelp": "允许图像的路径替换使用服务器的路径替换设置。",
|
||||
"LabelKodiMetadataSaveImagePaths": "保存图像路径在NFO文件",
|
||||
"LabelKodiMetadataSaveImagePathsHelp": "如果你的图像文件名不符合Kodi的规范,推荐使用。",
|
||||
"LabelKodiMetadataUser": "为以下用户保存观看历史数据:",
|
||||
"LabelKodiMetadataUserHelp": "启用此项以保存观看历史数据至 Nfo 文件中以供其他应用程序利用。",
|
||||
"LabelKodiMetadataUser": "为以下用户保存观看历史数据到NFO文件中:",
|
||||
"LabelKodiMetadataUserHelp": "保存观看历史数据至 NFO 文件中以供其他应用程序利用。",
|
||||
"LabelLanNetworks": "LAN网络:",
|
||||
"LabelLanguage": "语言:",
|
||||
"LabelLineup": "排队:",
|
||||
|
@ -617,7 +615,7 @@
|
|||
"LabelLocalHttpServerPortNumberHelp": "Jellyfin HTTP 服务器监听的 TCP 端口。",
|
||||
"LabelLockItemToPreventChanges": "锁定此项目防止改动",
|
||||
"LabelLoginDisclaimer": "登录声明:",
|
||||
"LabelLoginDisclaimerHelp": "这将在登录页面底部显示。",
|
||||
"LabelLoginDisclaimerHelp": "将在登录页面底部显示的信息。",
|
||||
"LabelLogs": "日志:",
|
||||
"LabelManufacturer": "制造商",
|
||||
"LabelManufacturerUrl": "厂商网址",
|
||||
|
@ -626,9 +624,9 @@
|
|||
"LabelMaxChromecastBitrate": "最大 Chromecast 比特率:",
|
||||
"LabelMaxParentalRating": "最大允许的家长评级:",
|
||||
"LabelMaxResumePercentage": "恢复播放最大百分比:",
|
||||
"LabelMaxResumePercentageHelp": "如果在此时间之后停止播放,媒体会标记为“已播放”",
|
||||
"LabelMaxResumePercentageHelp": "如果在此时间之后停止播放,媒体会标记为“已播放”。",
|
||||
"LabelMaxScreenshotsPerItem": "每个项目最大截图数目:",
|
||||
"LabelMaxStreamingBitrate": "最大串流质量",
|
||||
"LabelMaxStreamingBitrate": "最大串流质量:",
|
||||
"LabelMaxStreamingBitrateHelp": "请指定一个流媒体串流时的最大比特率。",
|
||||
"LabelMessageText": "消息文本:",
|
||||
"LabelMessageTitle": "消息标题:",
|
||||
|
@ -636,17 +634,17 @@
|
|||
"LabelMetadataDownloadLanguage": "首选下载语言:",
|
||||
"LabelMetadataDownloadersHelp": "启用媒体资料下载器的优先级排序,低优先级的下载器只会用来填补缺少的信息。",
|
||||
"LabelMetadataPath": "媒体资料路径:",
|
||||
"LabelMetadataPathHelp": "为下载的图像和元数据指定自定义路径",
|
||||
"LabelMetadataPathHelp": "为下载的图像和元数据指定自定义路径。",
|
||||
"LabelMetadataReaders": "媒体资料读取器:",
|
||||
"LabelMetadataReadersHelp": "为你首选的本地媒体资料源按优先级排序。找到的第一个文件将被读取。",
|
||||
"LabelMetadataSavers": "媒体资料储存方式:",
|
||||
"LabelMetadataSaversHelp": "选择储存媒体资料的文件格式。",
|
||||
"LabelMethod": "方法:",
|
||||
"LabelMinBackdropDownloadWidth": "下载背景图的最小宽度:",
|
||||
"LabelMinResumeDuration": "恢复播放最小时间(秒):",
|
||||
"LabelMinResumeDurationHelp": "媒体播放时间过短,不可恢复播放",
|
||||
"LabelMinResumeDuration": "恢复播放最小时间:",
|
||||
"LabelMinResumeDurationHelp": "以秒为单位保存播放视频位置并允许您继续播放。",
|
||||
"LabelMinResumePercentage": "恢复播放最小百分比:",
|
||||
"LabelMinResumePercentageHelp": "如果在此时间之前停止播放,媒体会标记为“未播放”",
|
||||
"LabelMinResumePercentageHelp": "如果在此时间之前停止播放,媒体会标记为“未播放”。",
|
||||
"LabelMinScreenshotDownloadWidth": "下载截图的最小宽度:",
|
||||
"LabelModelDescription": "型号描述",
|
||||
"LabelModelName": "型号名称",
|
||||
|
@ -655,7 +653,7 @@
|
|||
"LabelMonitorUsers": "监控活动:",
|
||||
"LabelMovieCategories": "电影分类:",
|
||||
"LabelMoviePrefix": "电影前缀:",
|
||||
"LabelMoviePrefixHelp": "如果将前缀应用于影片标题, 请在此处输入它, 以便 Jellyfin 可以正确处理它。",
|
||||
"LabelMoviePrefixHelp": "如果将前缀应用于影片标题, 请在此处输入它, 以便服务器可以正确处理它。",
|
||||
"LabelMovieRecordingPath": "电影录制路径 (可选的):",
|
||||
"LabelMusicStreamingTranscodingBitrate": "音乐转码的比特率:",
|
||||
"LabelMusicStreamingTranscodingBitrateHelp": "请指定一个音乐媒体串流时的最大比特率",
|
||||
|
@ -1111,7 +1109,7 @@
|
|||
"RecordSeries": "录制电视剧",
|
||||
"RecordingCancelled": "录制已取消。",
|
||||
"RecordingPathChangeMessage": "更改录制文件夹不会将现有录制从旧位置迁移到新的。您需要手动移动它们 (如果需要)。",
|
||||
"RecordingScheduled": "录制预设",
|
||||
"RecordingScheduled": "录制预设。",
|
||||
"Refresh": "刷新",
|
||||
"RefreshMetadata": "刷新元数据",
|
||||
"RefreshQueued": "列队已刷新。",
|
||||
|
@ -1299,7 +1297,7 @@
|
|||
"XmlTvSportsCategoriesHelp": "这些类别的节目将显示为体育节目。用 \"|\" 分隔多个。",
|
||||
"Yes": "是",
|
||||
"Yesterday": "昨天",
|
||||
"Absolute": "绝对路径",
|
||||
"Absolute": "绝对",
|
||||
"AnyLanguage": "任何语言",
|
||||
"Art": "图像",
|
||||
"AspectRatio": "长宽比",
|
||||
|
@ -1339,7 +1337,7 @@
|
|||
"GroupBySeries": "按系列分组",
|
||||
"HeaderApp": "应用程序",
|
||||
"DirectStreamHelp1": "该媒体文件的分辨率和编码(H.264、AC3 等)与您的设备兼容,但容器格式(.mkv、.avi、.wmv 等)不受支持。因此,视频在串流至您的设备之前将会被即时封装为另一种格式。",
|
||||
"HeaderAppearsOn": "出现于",
|
||||
"HeaderAppearsOn": "同时出现于",
|
||||
"HeaderCancelSeries": "取消系列",
|
||||
"HeaderFavoriteEpisodes": "最爱的剧集",
|
||||
"HeaderFavoriteArtists": "最爱的艺术家",
|
||||
|
@ -1350,11 +1348,11 @@
|
|||
"HeaderNextVideoPlayingInValue": "下一部影片在 {0} 后播放",
|
||||
"HeaderPlayOn": "播放在",
|
||||
"HeaderRestartingServer": "服务器重启中",
|
||||
"HeaderSeriesStatus": "剧集状态",
|
||||
"HeaderSeriesStatus": "系列状态",
|
||||
"HeaderStopRecording": "停止录制",
|
||||
"Horizontal": "横向",
|
||||
"LabelAuthProvider": "认证提供者:",
|
||||
"LabelKeepUpTo": "跟上:",
|
||||
"LabelKeepUpTo": "保持:",
|
||||
"LabelPasswordResetProvider": "密码重置提供者:",
|
||||
"LabelPersonRoleHelp": "示例:冰淇淋卡车司机",
|
||||
"LabelSelectFolderGroups": "自动将下列文件夹中的内容分组到视图中,如电影、音乐、剧集:",
|
||||
|
@ -1452,5 +1450,10 @@
|
|||
"FetchingData": "提取其他数据",
|
||||
"CopyStreamURLSuccess": "已成功复制URL地址。",
|
||||
"CopyStreamURL": "复制串流URL地址",
|
||||
"ButtonAddImage": "添加图片"
|
||||
"ButtonAddImage": "添加图片",
|
||||
"LabelPlayer": "播放器:",
|
||||
"LabelBaseUrl": "基础 URL:",
|
||||
"LabelBaseUrlHelp": "您可以在此处添加自定义子目录,以便从更唯一的 URL 访问服务器。",
|
||||
"MoreMediaInfo": "媒体信息",
|
||||
"MusicLibraryHelp": "重播 {0}音乐命名指南{1}。"
|
||||
}
|
||||
|
|
|
@ -379,7 +379,6 @@
|
|||
"ButtonNextTrack": "下一首",
|
||||
"ButtonOff": "關",
|
||||
"ButtonOpen": "開",
|
||||
"ButtonOther": "其他",
|
||||
"ButtonParentalControl": "家庭管理",
|
||||
"ButtonPause": "暫停",
|
||||
"ButtonPreviousTrack": "上一首",
|
||||
|
@ -536,7 +535,6 @@
|
|||
"FolderTypeMixed": "混合媒體",
|
||||
"FolderTypeUnset": "混合內容",
|
||||
"Folders": "資料夾",
|
||||
"ForAdditionalLiveTvOptions": "以查看額外的電視直播供應商,點擊“服務”以查看可用的選項。",
|
||||
"FormatValue": "格式:{0}",
|
||||
"FreeAppsFeatureDescription": "享受免費的Jellyfin應用程式。",
|
||||
"Fullscreen": "全螢幕",
|
||||
|
|
7
src/thirdparty/flvjs/flv.min.js
vendored
7
src/thirdparty/flvjs/flv.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -10,8 +10,14 @@
|
|||
<p style="margin:2em 0;">${WizardCompleted}</p>
|
||||
|
||||
<div class="wizardNavigation">
|
||||
<button is="emby-button" type="button" class="raised button-cancel" onclick="history.back();"><i class="md-icon">arrow_back</i><span>${LabelPrevious}</span></button>
|
||||
<button is="emby-button" type="button" class="raised btnWizardNext button-submit"><i class="md-icon">check</i><span>${LabelFinish}</span></button>
|
||||
<button is="emby-button" type="button" class="raised button-cancel" onclick="history.back();">
|
||||
<i class="md-icon">arrow_back</i>
|
||||
<span>${LabelPrevious}</span>
|
||||
</button>
|
||||
<button is="emby-button" type="button" class="raised btnWizardNext button-submit">
|
||||
<i class="md-icon">check</i>
|
||||
<span>${LabelFinish}</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue