mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-17 10:58:20 -07:00
Merge remote-tracking branch 'origin/sonarqube-fixes-1' into sonarqube-fixes-1
This commit is contained in:
commit
41d8ce54ae
@ -2,8 +2,7 @@ trigger:
|
||||
batch: true
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
- release-*
|
||||
- '*'
|
||||
tags:
|
||||
include:
|
||||
- '*'
|
||||
@ -13,12 +12,9 @@ pr:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
- job: build
|
||||
- job: Build
|
||||
displayName: 'Build'
|
||||
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
Development:
|
||||
@ -27,7 +23,9 @@ jobs:
|
||||
BuildConfiguration: production
|
||||
Standalone:
|
||||
BuildConfiguration: standalone
|
||||
maxParallel: 3
|
||||
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
@ -63,16 +61,14 @@ jobs:
|
||||
|
||||
- script: 'mv dist jellyfin-web'
|
||||
displayName: 'Rename Directory'
|
||||
condition: succeeded()
|
||||
|
||||
- task: PublishPipelineArtifact@1
|
||||
displayName: 'Publish Release'
|
||||
condition: succeeded()
|
||||
inputs:
|
||||
targetPath: '$(Build.SourcesDirectory)/jellyfin-web'
|
||||
artifactName: 'jellyfin-web-$(BuildConfiguration)'
|
||||
|
||||
- job: lint
|
||||
- job: Lint
|
||||
displayName: 'Lint'
|
||||
|
||||
pool:
|
||||
|
3
babel.config.json
Normal file
3
babel.config.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"presets": ["@babel/preset-env"]
|
||||
}
|
@ -64,7 +64,7 @@
|
||||
"jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto",
|
||||
"jquery": "^3.4.1",
|
||||
"jstree": "^3.3.7",
|
||||
"libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf",
|
||||
"libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova",
|
||||
"material-design-icons-iconfont": "^5.0.1",
|
||||
"native-promise-only": "^0.8.0-a",
|
||||
"page": "^1.11.5",
|
||||
@ -90,9 +90,12 @@
|
||||
"src/components/filesystem.js",
|
||||
"src/components/input/keyboardnavigation.js",
|
||||
"src/components/sanatizefilename.js",
|
||||
"src/scripts/settings/webSettings.js",
|
||||
"src/components/scrollManager.js",
|
||||
"src/scripts/settings/appSettings.js",
|
||||
"src/scripts/settings/userSettings.js",
|
||||
"src/scripts/settings/webSettings.js",
|
||||
"src/scripts/dfnshelper.js",
|
||||
"src/scripts/imagehelper.js",
|
||||
"src/scripts/inputManager.js"
|
||||
],
|
||||
"plugins": [
|
||||
|
@ -186,6 +186,8 @@ define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', '
|
||||
context.querySelector('#selectLanguage').value = userSettings.language() || '';
|
||||
context.querySelector('.selectDateTimeLocale').value = userSettings.dateTimeLocale() || '';
|
||||
|
||||
context.querySelector('#txtLibraryPageSize').value = userSettings.libraryPageSize();
|
||||
|
||||
selectDashboardTheme.value = userSettings.dashboardTheme() || '';
|
||||
selectTheme.value = userSettings.theme() || '';
|
||||
|
||||
@ -215,6 +217,8 @@ define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', '
|
||||
userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value);
|
||||
userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value);
|
||||
|
||||
userSettingsInstance.libraryPageSize(context.querySelector('#txtLibraryPageSize').value);
|
||||
|
||||
userSettingsInstance.skin(context.querySelector('.selectSkin').value);
|
||||
|
||||
userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked);
|
||||
|
@ -143,6 +143,11 @@
|
||||
<select is="emby-select" class="selectSoundEffects" label="${LabelSoundEffects}"></select>
|
||||
</div>
|
||||
|
||||
<div class="inputContainer inputContainer-withDescription fldFadein">
|
||||
<input is="emby-input" type="number" id="txtLibraryPageSize" pattern="[0-9]*" required="required" min="0" max="1000" step="1" label="${LabelLibraryPageSize}" />
|
||||
<div class="fieldDescription">${LabelLibraryPageSizeHelp}</div>
|
||||
</div>
|
||||
|
||||
<div class="checkboxContainer checkboxContainer-withDescription fldFadein">
|
||||
<label>
|
||||
<input type="checkbox" is="emby-checkbox" id="chkFadein" />
|
||||
|
@ -171,13 +171,29 @@ define(['appSettings', 'browser', 'events'], function (appSettings, browser, eve
|
||||
|
||||
// Appending #t=xxx to the query string doesn't seem to work with HLS
|
||||
// For plain video files, not all browsers support it either
|
||||
var delay = browser.safari ? 2500 : 0;
|
||||
if (delay) {
|
||||
setTimeout(function () {
|
||||
|
||||
if (element.duration >= seconds) {
|
||||
// media is ready, seek immediately
|
||||
setCurrentTimeIfNeeded(element, seconds);
|
||||
}, delay);
|
||||
} else {
|
||||
// update video player position when media is ready to be sought
|
||||
var events = ["durationchange", "loadeddata", "play", "loadedmetadata"];
|
||||
var onMediaChange = function(e) {
|
||||
if (element.currentTime === 0 && element.duration >= seconds) {
|
||||
// seek only when video position is exactly zero,
|
||||
// as this is true only if video hasn't started yet or
|
||||
// user rewound to the very beginning
|
||||
// (but rewinding cannot happen as the first event with media of non-empty duration)
|
||||
console.debug(`seeking to ${seconds} on ${e.type} event`);
|
||||
setCurrentTimeIfNeeded(element, seconds);
|
||||
events.map(function(name) {
|
||||
element.removeEventListener(name, onMediaChange);
|
||||
});
|
||||
}
|
||||
};
|
||||
events.map(function (name) {
|
||||
element.addEventListener(name, onMediaChange);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -116,8 +116,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||
});
|
||||
}
|
||||
|
||||
function normalizeTrackEventText(text) {
|
||||
return text.replace(/\\N/gi, '\n');
|
||||
function normalizeTrackEventText(text, useHtml) {
|
||||
var result = text.replace(/\\N/gi, '\n').replace(/\r/gi, '');
|
||||
return useHtml ? result.replace(/\n/gi, '<br>') : result;
|
||||
}
|
||||
|
||||
function setTracks(elem, tracks, item, mediaSource) {
|
||||
@ -1209,7 +1210,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||
data.TrackEvents.forEach(function (trackEvent) {
|
||||
|
||||
var trackCueObject = window.VTTCue || window.TextTrackCue;
|
||||
var cue = new trackCueObject(trackEvent.StartPositionTicks / 10000000, trackEvent.EndPositionTicks / 10000000, normalizeTrackEventText(trackEvent.Text));
|
||||
var cue = new trackCueObject(trackEvent.StartPositionTicks / 10000000, trackEvent.EndPositionTicks / 10000000, normalizeTrackEventText(trackEvent.Text, false));
|
||||
|
||||
trackElement.addCue(cue);
|
||||
});
|
||||
@ -1250,8 +1251,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
|
||||
}
|
||||
|
||||
if (selectedTrackEvent && selectedTrackEvent.Text) {
|
||||
|
||||
subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text);
|
||||
subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text, true);
|
||||
subtitleTextElement.classList.remove('hide');
|
||||
|
||||
} else {
|
||||
|
@ -69,7 +69,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
|
||||
var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc);
|
||||
var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc);
|
||||
html += globalize.translate("LabelScheduledTaskLastRan", datefns.formatDistanceToNow(endtime, dfnshelper.localeWithSuffix),
|
||||
datefns.formatDistance(starttime, endtime, dfnshelper.localeWithSuffix));
|
||||
datefns.formatDistance(starttime, endtime, { locale: dfnshelper.getLocale() }));
|
||||
if (task.LastExecutionResult.Status === "Failed") {
|
||||
html += " <span style='color:#FF0000;'>(" + globalize.translate("LabelFailed") + ")</span>";
|
||||
} else if (task.LastExecutionResult.Status === "Cancelled") {
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "emby-itemscontainer"], function (cardBuilder, imageLoader, libraryBrowser, loading, events) {
|
||||
define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "userSettings", "emby-itemscontainer"], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -7,12 +7,15 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
|
||||
pageData = {
|
||||
query: {
|
||||
StartIndex: 0,
|
||||
Limit: 100,
|
||||
Fields: "PrimaryImageAspectRatio"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
return pageData;
|
||||
}
|
||||
|
||||
@ -39,7 +42,9 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(context);
|
||||
}
|
||||
|
||||
@ -48,7 +53,9 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(context);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, appHost) {
|
||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -16,11 +16,15 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
Fields: "PrimaryImageAspectRatio,SortName",
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: pageSize
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
@ -65,7 +69,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -74,7 +80,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -180,7 +188,6 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var pageSize = 100;
|
||||
var data = {};
|
||||
var isLoading = false;
|
||||
|
||||
|
@ -32,7 +32,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
itemsContainer.refreshItems();
|
||||
}
|
||||
|
||||
@ -41,7 +43,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
itemsContainer.refreshItems();
|
||||
}
|
||||
|
||||
@ -250,9 +254,13 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: 100,
|
||||
ParentId: params.topParentId
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
var isLoading = false;
|
||||
|
||||
if (options.mode === "favorites") {
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -16,11 +16,15 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: pageSize
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
|
||||
@ -49,7 +53,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems();
|
||||
}
|
||||
|
||||
@ -58,7 +64,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems();
|
||||
}
|
||||
|
||||
@ -168,7 +176,6 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var pageSize = 100;
|
||||
var data = {};
|
||||
var isLoading = false;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
|
||||
define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -30,11 +30,15 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: pageSize
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
@ -79,7 +83,9 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -88,7 +94,9 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -175,7 +183,6 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
var savedQueryKey;
|
||||
var pageData;
|
||||
var self = this;
|
||||
var pageSize = 100;
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -7,17 +7,22 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
var pageData = data[key];
|
||||
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
var queryValues = {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
Limit: 100
|
||||
},
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
queryValues['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData = data[key] = {
|
||||
query: queryValues,
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
@ -67,7 +72,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -76,7 +83,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading) {
|
||||
define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userSettings", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -14,12 +14,16 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
|
||||
IncludeItemTypes: "Audio",
|
||||
Recursive: true,
|
||||
Fields: "AudioInfo,ParentId",
|
||||
Limit: 100,
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary"
|
||||
}
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
@ -49,7 +53,9 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -58,7 +64,9 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder) {
|
||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -17,11 +17,15 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
IsMissing: false,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: pageSize
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
@ -66,7 +70,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -75,7 +81,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -152,7 +160,6 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var pageSize = 100;
|
||||
var data = {};
|
||||
var isLoading = false;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker) {
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
@ -16,11 +16,15 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: pageSize
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
@ -65,7 +69,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
return;
|
||||
}
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -74,7 +80,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
return;
|
||||
}
|
||||
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems(tabContent);
|
||||
}
|
||||
|
||||
@ -185,7 +193,6 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var pageSize = 100;
|
||||
var data = {};
|
||||
var isLoading = false;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"], function (DisplaySettings, userSettingsBuilder, currentUserSettings, autoFocuser) {
|
||||
define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySettings, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params) {
|
||||
@ -11,7 +11,7 @@ define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"]
|
||||
var settingsInstance;
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
|
||||
@ -22,7 +22,7 @@ define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"]
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".settingsContainer"),
|
||||
userSettings: userSettings,
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
autoFocus: autoFocuser.isEnabled()
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (HomescreenSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings, autoFocuser) {
|
||||
define(["homescreenSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (HomescreenSettings, dom, globalize, loading, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params) {
|
||||
@ -11,7 +11,7 @@ define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loadin
|
||||
var homescreenSettingsInstance;
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
|
||||
@ -22,7 +22,7 @@ define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loadin
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".homeScreenSettingsContainer"),
|
||||
userSettings: userSettings,
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
autoFocus: autoFocuser.isEnabled()
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (PlaybackSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings, autoFocuser) {
|
||||
define(["playbackSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (PlaybackSettings, dom, globalize, loading, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params) {
|
||||
@ -11,7 +11,7 @@ define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading"
|
||||
var settingsInstance;
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
|
||||
@ -22,7 +22,7 @@ define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading"
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".settingsContainer"),
|
||||
userSettings: userSettings,
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
autoFocus: autoFocuser.isEnabled()
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettingsBuilder, currentUserSettings, autoFocuser) {
|
||||
define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params) {
|
||||
@ -11,7 +11,7 @@ define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"
|
||||
var subtitleSettingsInstance;
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
|
||||
@ -22,7 +22,7 @@ define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".settingsContainer"),
|
||||
userSettings: userSettings,
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
autoFocus: autoFocuser.isEnabled()
|
||||
|
@ -1,7 +1,8 @@
|
||||
define(["browser"], function (browser) {
|
||||
"use strict";
|
||||
/* eslint-disable indent */
|
||||
|
||||
function getDeviceIcon(device) {
|
||||
import browser from 'browser';
|
||||
|
||||
export function getDeviceIcon(device) {
|
||||
var baseUrl = "assets/img/devices/";
|
||||
switch (device.AppName || device.Client) {
|
||||
case "Samsung Smart TV":
|
||||
@ -42,7 +43,7 @@ define(["browser"], function (browser) {
|
||||
}
|
||||
}
|
||||
|
||||
function getLibraryIcon(library) {
|
||||
export function getLibraryIcon(library) {
|
||||
switch (library) {
|
||||
case "movies":
|
||||
return "video_library";
|
||||
@ -71,8 +72,9 @@ define(["browser"], function (browser) {
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
/* eslint-enable indent */
|
||||
|
||||
export default {
|
||||
getDeviceIcon: getDeviceIcon,
|
||||
getLibraryIcon: getLibraryIcon
|
||||
};
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "emby-itemscontainer"], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader) {
|
||||
define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "userSettings", "emby-itemscontainer"], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader, userSettings) {
|
||||
"use strict";
|
||||
|
||||
return function (view, params) {
|
||||
@ -14,11 +14,15 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
||||
IncludeItemTypes: "Playlist",
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete",
|
||||
StartIndex: 0,
|
||||
Limit: 100
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
pageData.query['Limit'] = userSettings.libraryPageSize();
|
||||
}
|
||||
|
||||
pageData.query.ParentId = libraryMenu.getTopParentId();
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
@ -137,7 +141,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
||||
|
||||
if (btnNextPage) {
|
||||
btnNextPage.addEventListener("click", function () {
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
reloadItems();
|
||||
});
|
||||
}
|
||||
@ -146,7 +152,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
||||
|
||||
if (btnPreviousPage) {
|
||||
btnPreviousPage.addEventListener("click", function () {
|
||||
query.StartIndex -= query.Limit;
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
reloadItems();
|
||||
});
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
define(['appStorage', 'events'], function (appStorage, events) {
|
||||
'use strict';
|
||||
/* eslint-disable indent */
|
||||
|
||||
import appStorage from 'appStorage';
|
||||
import events from 'events';
|
||||
|
||||
function getKey(name, userId) {
|
||||
if (userId) {
|
||||
@ -9,26 +11,23 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
||||
return name;
|
||||
}
|
||||
|
||||
function AppSettings() {
|
||||
}
|
||||
|
||||
AppSettings.prototype.enableAutoLogin = function (val) {
|
||||
export function enableAutoLogin(val) {
|
||||
if (val != null) {
|
||||
this.set('enableAutoLogin', val.toString());
|
||||
}
|
||||
|
||||
return this.get('enableAutoLogin') !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.enableSystemExternalPlayers = function (val) {
|
||||
export function enableSystemExternalPlayers(val) {
|
||||
if (val !== null) {
|
||||
this.set('enableSystemExternalPlayers', val.toString());
|
||||
}
|
||||
|
||||
return this.get('enableSystemExternalPlayers') === 'true';
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.enableAutomaticBitrateDetection = function (isInNetwork, mediaType, val) {
|
||||
export function enableAutomaticBitrateDetection(isInNetwork, mediaType, val) {
|
||||
var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork;
|
||||
if (val != null) {
|
||||
if (isInNetwork && mediaType === 'Audio') {
|
||||
@ -43,9 +42,9 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
||||
} else {
|
||||
return this.get(key) !== 'false';
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.maxStreamingBitrate = function (isInNetwork, mediaType, val) {
|
||||
export function maxStreamingBitrate(isInNetwork, mediaType, val) {
|
||||
var key = 'maxbitrate-' + mediaType + '-' + isInNetwork;
|
||||
if (val != null) {
|
||||
if (isInNetwork && mediaType === 'Audio') {
|
||||
@ -61,43 +60,43 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
||||
} else {
|
||||
return parseInt(this.get(key) || '0') || 1500000;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.maxStaticMusicBitrate = function (val) {
|
||||
export function maxStaticMusicBitrate(val) {
|
||||
if (val !== undefined) {
|
||||
this.set('maxStaticMusicBitrate', val);
|
||||
}
|
||||
|
||||
var defaultValue = 320000;
|
||||
return parseInt(this.get('maxStaticMusicBitrate') || defaultValue.toString()) || defaultValue;
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.maxChromecastBitrate = function (val) {
|
||||
export function maxChromecastBitrate(val) {
|
||||
if (val != null) {
|
||||
this.set('chromecastBitrate1', val);
|
||||
}
|
||||
|
||||
val = this.get('chromecastBitrate1');
|
||||
return val ? parseInt(val) : null;
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.syncOnlyOnWifi = function (val) {
|
||||
export function syncOnlyOnWifi(val) {
|
||||
if (val != null) {
|
||||
this.set('syncOnlyOnWifi', val.toString());
|
||||
}
|
||||
|
||||
return this.get('syncOnlyOnWifi') !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.syncPath = function (val) {
|
||||
export function syncPath(val) {
|
||||
if (val != null) {
|
||||
this.set('syncPath', val);
|
||||
}
|
||||
|
||||
return this.get('syncPath');
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.cameraUploadServers = function (val) {
|
||||
export function cameraUploadServers(val) {
|
||||
if (val != null) {
|
||||
this.set('cameraUploadServers', val.join(','));
|
||||
}
|
||||
@ -108,28 +107,42 @@ define(['appStorage', 'events'], function (appStorage, events) {
|
||||
}
|
||||
|
||||
return [];
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.runAtStartup = function (val) {
|
||||
export function runAtStartup(val) {
|
||||
if (val != null) {
|
||||
this.set('runatstartup', val.toString());
|
||||
}
|
||||
|
||||
return this.get('runatstartup') === 'true';
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.set = function (name, value, userId) {
|
||||
export function set(name, value, userId) {
|
||||
var currentValue = this.get(name, userId);
|
||||
appStorage.setItem(getKey(name, userId), value);
|
||||
|
||||
if (currentValue !== value) {
|
||||
events.trigger(this, 'change', [name]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
AppSettings.prototype.get = function (name, userId) {
|
||||
export function get(name, userId) {
|
||||
return appStorage.getItem(getKey(name, userId));
|
||||
};
|
||||
}
|
||||
|
||||
return new AppSettings();
|
||||
});
|
||||
/* eslint-enable indent */
|
||||
|
||||
export default {
|
||||
enableAutoLogin: enableAutoLogin,
|
||||
enableSystemExternalPlayers: enableSystemExternalPlayers,
|
||||
enableAutomaticBitrateDetection: enableAutomaticBitrateDetection,
|
||||
maxStreamingBitrate: maxStreamingBitrate,
|
||||
maxStaticMusicBitrate: maxStaticMusicBitrate,
|
||||
maxChromecastBitrate: maxChromecastBitrate,
|
||||
syncOnlyOnWifi: syncOnlyOnWifi,
|
||||
syncPath: syncPath,
|
||||
cameraUploadServers: cameraUploadServers,
|
||||
runAtStartup: runAtStartup,
|
||||
set: set,
|
||||
get: get
|
||||
};
|
||||
|
@ -1,5 +1,7 @@
|
||||
define(['appSettings', 'events'], function (appSettings, events) {
|
||||
'use strict';
|
||||
/* eslint-disable indent */
|
||||
|
||||
import appSettings from 'appSettings';
|
||||
import events from 'events';
|
||||
|
||||
function onSaveTimeout() {
|
||||
var self = this;
|
||||
@ -15,10 +17,7 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||
instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50);
|
||||
}
|
||||
|
||||
function UserSettings() {
|
||||
}
|
||||
|
||||
UserSettings.prototype.setUserInfo = function (userId, apiClient) {
|
||||
export function setUserInfo(userId, apiClient) {
|
||||
if (this.saveTimeout) {
|
||||
clearTimeout(this.saveTimeout);
|
||||
}
|
||||
@ -37,17 +36,17 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||
result.CustomPrefs = result.CustomPrefs || {};
|
||||
self.displayPrefs = result;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.getData = function () {
|
||||
export function getData() {
|
||||
return this.displayPrefs;
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.importFrom = function (instance) {
|
||||
export function importFrom(instance) {
|
||||
this.displayPrefs = instance.getData();
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.set = function (name, value, enableOnServer) {
|
||||
export function set(name, value, enableOnServer) {
|
||||
var userId = this.currentUserId;
|
||||
var currentValue = this.get(name, enableOnServer);
|
||||
var result = appSettings.set(name, value, userId);
|
||||
@ -62,18 +61,18 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.get = function (name, enableOnServer) {
|
||||
export function get(name, enableOnServer) {
|
||||
var userId = this.currentUserId;
|
||||
if (enableOnServer !== false && this.displayPrefs) {
|
||||
return this.displayPrefs.CustomPrefs[name];
|
||||
}
|
||||
|
||||
return appSettings.get(name, userId);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.serverConfig = function (config) {
|
||||
export function serverConfig(config) {
|
||||
var apiClient = this.currentApiClient;
|
||||
if (config) {
|
||||
return apiClient.updateUserConfiguration(this.currentUserId, config);
|
||||
@ -82,135 +81,149 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||
return apiClient.getUser(this.currentUserId).then(function (user) {
|
||||
return user.Configuration;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.enableCinemaMode = function (val) {
|
||||
export function enableCinemaMode(val) {
|
||||
if (val != null) {
|
||||
return this.set('enableCinemaMode', val.toString(), false);
|
||||
}
|
||||
|
||||
val = this.get('enableCinemaMode', false);
|
||||
return val !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.enableNextVideoInfoOverlay = function (val) {
|
||||
export function enableNextVideoInfoOverlay(val) {
|
||||
if (val != null) {
|
||||
return this.set('enableNextVideoInfoOverlay', val.toString());
|
||||
}
|
||||
|
||||
val = this.get('enableNextVideoInfoOverlay', false);
|
||||
return val !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.enableThemeSongs = function (val) {
|
||||
export function enableThemeSongs(val) {
|
||||
if (val != null) {
|
||||
return this.set('enableThemeSongs', val.toString(), false);
|
||||
}
|
||||
|
||||
val = this.get('enableThemeSongs', false);
|
||||
return val !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.enableThemeVideos = function (val) {
|
||||
export function enableThemeVideos(val) {
|
||||
if (val != null) {
|
||||
return this.set('enableThemeVideos', val.toString(), false);
|
||||
}
|
||||
|
||||
val = this.get('enableThemeVideos', false);
|
||||
return val !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.enableFastFadein = function (val) {
|
||||
export function enableFastFadein(val) {
|
||||
if (val != null) {
|
||||
return this.set('fastFadein', val.toString(), false);
|
||||
}
|
||||
|
||||
val = this.get('fastFadein', false);
|
||||
return val !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.enableBackdrops = function (val) {
|
||||
export function enableBackdrops(val) {
|
||||
if (val != null) {
|
||||
return this.set('enableBackdrops', val.toString(), false);
|
||||
}
|
||||
|
||||
val = this.get('enableBackdrops', false);
|
||||
return val !== 'false';
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.language = function (val) {
|
||||
export function language(val) {
|
||||
if (val != null) {
|
||||
return this.set('language', val.toString(), false);
|
||||
}
|
||||
|
||||
return this.get('language', false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.dateTimeLocale = function (val) {
|
||||
export function dateTimeLocale(val) {
|
||||
if (val != null) {
|
||||
return this.set('datetimelocale', val.toString(), false);
|
||||
}
|
||||
|
||||
return this.get('datetimelocale', false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.skipBackLength = function (val) {
|
||||
export function skipBackLength(val) {
|
||||
if (val != null) {
|
||||
return this.set('skipBackLength', val.toString());
|
||||
}
|
||||
|
||||
return parseInt(this.get('skipBackLength') || '10000');
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.skipForwardLength = function (val) {
|
||||
export function skipForwardLength(val) {
|
||||
if (val != null) {
|
||||
return this.set('skipForwardLength', val.toString());
|
||||
}
|
||||
|
||||
return parseInt(this.get('skipForwardLength') || '30000');
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.dashboardTheme = function (val) {
|
||||
export function dashboardTheme(val) {
|
||||
if (val != null) {
|
||||
return this.set('dashboardTheme', val);
|
||||
}
|
||||
|
||||
return this.get('dashboardTheme');
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.skin = function (val) {
|
||||
export function skin(val) {
|
||||
if (val != null) {
|
||||
return this.set('skin', val, false);
|
||||
}
|
||||
|
||||
return this.get('skin', false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.theme = function (val) {
|
||||
export function theme(val) {
|
||||
if (val != null) {
|
||||
return this.set('appTheme', val, false);
|
||||
}
|
||||
|
||||
return this.get('appTheme', false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.screensaver = function (val) {
|
||||
export function screensaver(val) {
|
||||
if (val != null) {
|
||||
return this.set('screensaver', val, false);
|
||||
}
|
||||
|
||||
return this.get('screensaver', false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.soundEffects = function (val) {
|
||||
export function libraryPageSize(val) {
|
||||
if (val != null) {
|
||||
return this.set('libraryPageSize', parseInt(val, 10), false);
|
||||
}
|
||||
|
||||
var libraryPageSize = parseInt(this.get('libraryPageSize', false), 10);
|
||||
if (libraryPageSize === 0) {
|
||||
// Explicitly return 0 to avoid returning 100 because 0 is falsy.
|
||||
return 0;
|
||||
} else {
|
||||
return libraryPageSize || 100;
|
||||
}
|
||||
}
|
||||
|
||||
export function soundEffects(val) {
|
||||
if (val != null) {
|
||||
return this.set('soundeffects', val, false);
|
||||
}
|
||||
|
||||
return this.get('soundeffects', false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.loadQuerySettings = function (key, query) {
|
||||
export function loadQuerySettings(key, query) {
|
||||
var values = this.get(key);
|
||||
if (values) {
|
||||
values = JSON.parse(values);
|
||||
@ -218,9 +231,9 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||
}
|
||||
|
||||
return query;
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.saveQuerySettings = function (key, query) {
|
||||
export function saveQuerySettings(key, query) {
|
||||
var values = {};
|
||||
if (query.SortBy) {
|
||||
values.SortBy = query.SortBy;
|
||||
@ -231,25 +244,24 @@ define(['appSettings', 'events'], function (appSettings, events) {
|
||||
}
|
||||
|
||||
return this.set(key, JSON.stringify(values));
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.getSubtitleAppearanceSettings = function (key) {
|
||||
export function getSubtitleAppearanceSettings(key) {
|
||||
key = key || 'localplayersubtitleappearance3';
|
||||
return JSON.parse(this.get(key, false) || '{}');
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.setSubtitleAppearanceSettings = function (value, key) {
|
||||
export function setSubtitleAppearanceSettings(value, key) {
|
||||
key = key || 'localplayersubtitleappearance3';
|
||||
return this.set(key, JSON.stringify(value), false);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.setFilter = function (key, value) {
|
||||
export function setFilter(key, value) {
|
||||
return this.set(key, value, true);
|
||||
};
|
||||
}
|
||||
|
||||
UserSettings.prototype.getFilter = function (key) {
|
||||
export function getFilter(key) {
|
||||
return this.get(key, true);
|
||||
};
|
||||
}
|
||||
|
||||
return UserSettings;
|
||||
});
|
||||
/* eslint-enable indent */
|
@ -775,10 +775,7 @@ var AppInfo = {};
|
||||
|
||||
define("webSettings", [scriptsPath + "/settings/webSettings"], returnFirstDependency);
|
||||
define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency);
|
||||
define("userSettingsBuilder", [scriptsPath + "/settings/userSettingsBuilder"], returnFirstDependency);
|
||||
define("userSettings", ["userSettingsBuilder"], function(userSettingsBuilder) {
|
||||
return new userSettingsBuilder();
|
||||
});
|
||||
define("userSettings", [scriptsPath + "/settings/userSettings"], returnFirstDependency);
|
||||
|
||||
define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency);
|
||||
define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency);
|
||||
|
@ -1,27 +0,0 @@
|
||||
define(["dom", "emby-button"], function (dom) {
|
||||
"use strict";
|
||||
|
||||
function onSubmit(e) {
|
||||
if (dom.parentWithClass(this, "page").querySelector(".chkAccept").checked) {
|
||||
Dashboard.navigate("wizardfinish.html");
|
||||
} else {
|
||||
Dashboard.alert({
|
||||
message: Globalize.translate("MessagePleaseAcceptTermsOfServiceBeforeContinuing"),
|
||||
title: ""
|
||||
});
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector(".wizardAgreementForm").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
});
|
||||
view.addEventListener("viewhide", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
});
|
||||
};
|
||||
});
|
@ -12,11 +12,11 @@
|
||||
"AllChannels": "Alle kanaler",
|
||||
"AllEpisodes": "Alle episoder",
|
||||
"AllLibraries": "Alle biblioteker",
|
||||
"AllowHWTranscodingHelp": "Hvis aktiveret, omkoder tuneren streams on-the-fly. Dette kan hjælpe med at reducere omkodning der kræves af Jellyfin Server.",
|
||||
"AllowHWTranscodingHelp": "Lader tuneren omkode streams on-the-fly. Dette kan hjælpe med at reducere omkodning der kræves af serveren.",
|
||||
"AllowMediaConversion": "Tillad media konvertering",
|
||||
"AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.",
|
||||
"AllowOnTheFlySubtitleExtraction": "Tillad udtræk af undertekster on-the-fly",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Indeholdte undertekster kan trækkes ud af videoer og leveres til Jellyfin apps i ren tekst for at afhjælpe video kodning. På nogle systemer kan dette tage lang tid og forårsage at afspilning kan hænge mens den udtrækker. Slå dette fra, for at have undertekster brændt ind i video kodningen når det er supporteret på klient enheden.",
|
||||
"AllowOnTheFlySubtitleExtractionHelp": "Indeholdte undertekster kan trækkes ud af videoer og leveres til klienter i ren tekst for at afhjælpe video kodning. På nogle systemer kan dette tage lang tid og forårsage at afspilning kan hænge mens den udtrækker. Slå dette fra, for at have undertekster brændt ind i video kodningen når det er supporteret på klient enheden.",
|
||||
"AllowRemoteAccess": "Tillad fjernadgang til denne Jellyfin Server.",
|
||||
"AllowRemoteAccessHelp": "Hvis ikke markeret, vil alle fjernforbindelser blive blokeret.",
|
||||
"AllowedRemoteAddressesHelp": "Komma seperareret liste over IP adresser og netmasker der har ret til fjernadgang. Hvis blank er alle adresser tilladte.",
|
||||
@ -1092,9 +1092,9 @@
|
||||
"Absolute": "Absolut",
|
||||
"AccessRestrictedTryAgainLater": "Adgang er begrænset. Prøv igen senere.",
|
||||
"Aired": "Blev sendt",
|
||||
"AllComplexFormats": "Alle komplekse formater (ASS, SSA, VOBSUB, PGS, SUB/IDX osv.)",
|
||||
"AllComplexFormats": "Alle Komplekse Formater (ASS, SSA, VOBSUB, PGS, SUB,IDX osv.)",
|
||||
"AllLanguages": "Alle sprog",
|
||||
"AlwaysPlaySubtitles": "Afspil altid undertekster",
|
||||
"AlwaysPlaySubtitles": "Afspil Altid",
|
||||
"AlwaysPlaySubtitlesHelp": "Undertekster, der matcher dine sprogindstillinger, vil altid blive indlæst uanset lydsprog.",
|
||||
"HeaderLiveTV": "Live-TV",
|
||||
"Shows": "Serier",
|
||||
@ -1532,5 +1532,9 @@
|
||||
"LabelServerName": "Server navn:",
|
||||
"LabelUserLoginAttemptsBeforeLockout": "Fejlede loginforsøg før bruger lukkes ude:",
|
||||
"HeaderRestartingServer": "Genstarter Server",
|
||||
"ButtonAddImage": "Tilføj billede"
|
||||
"ButtonAddImage": "Tilføj billede",
|
||||
"AllowFfmpegThrottlingHelp": "Når en omkodning eller remux kommer langt nok foran den nuværende afspildings position, pauses processen så der bruges færre resurser. Dette er mest brugbart når man ikke springer i filmen. Slå dette fra hvis du har problemer med playback.",
|
||||
"AllowFfmpegThrottling": "Begræns Omkodning",
|
||||
"AlbumArtist": "Album Artist",
|
||||
"Album": "Album"
|
||||
}
|
||||
|
@ -694,6 +694,8 @@
|
||||
"LabelKodiMetadataUserHelp": "Save watch data to NFO files for other applications to utilize.",
|
||||
"LabelLanNetworks": "LAN networks:",
|
||||
"LabelLanguage": "Language:",
|
||||
"LabelLibraryPageSize": "Library page size:",
|
||||
"LabelLibraryPageSizeHelp": "Sets the amount of items to show on a library page. Set to 0 in order to disable paging.",
|
||||
"LabelLineup": "Lineup:",
|
||||
"LabelLocalHttpServerPortNumber": "Local HTTP port number:",
|
||||
"LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.",
|
||||
|
@ -158,7 +158,7 @@
|
||||
"CustomDlnaProfilesHelp": "Crear un perfil personalizado para un nuevo dispositivo o reemplazar un perfil del sistema.",
|
||||
"DateAdded": "Fecha de adición",
|
||||
"DatePlayed": "Fecha de reproducción",
|
||||
"DeathDateValue": "Fallcimiento: {0}",
|
||||
"DeathDateValue": "Terminación: {0}",
|
||||
"Default": "Por defecto",
|
||||
"DefaultErrorMessage": "Ha ocurrido un error al procesar la solicitud. Por favor inténtelo de nuevo mas tarde.",
|
||||
"DefaultMetadataLangaugeDescription": "Estas son sus configuraciones por defecto y puedes ser personalizadas independientemente en cada biblioteca.",
|
||||
@ -196,7 +196,7 @@
|
||||
"DownloadsValue": "{0} descargas",
|
||||
"DrmChannelsNotImported": "Los canales con DRM no serán importados.",
|
||||
"DropShadow": "Sombra Paralela",
|
||||
"EasyPasswordHelp": "Su código PIN fácil se utiliza para el acceso sin conexión en los clientes compatibles y también puede utilizarse para acceder fácilmente cuando se está en la misma red.",
|
||||
"EasyPasswordHelp": "El código PIN fácil se utiliza para el acceso sin conexión en los clientes soportados y también puede utilizarse para acceder fácilmente cuando se está en la misma red.",
|
||||
"Edit": "Editar",
|
||||
"EditImages": "Editar imágenes",
|
||||
"EditMetadata": "Editar metadatos",
|
||||
@ -758,7 +758,7 @@
|
||||
"LabelServerHost": "Servidor:",
|
||||
"LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com",
|
||||
"LabelSimultaneousConnectionLimit": "Limite de transmisiones simultaneas:",
|
||||
"LabelSkin": "Piel:",
|
||||
"LabelSkin": "Apariencia:",
|
||||
"LabelSkipBackLength": "Longitud de salto hacia atrás:",
|
||||
"LabelSkipForwardLength": "Longitud de salto hacia adelante:",
|
||||
"LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el lenguaje de descarga",
|
||||
@ -1131,7 +1131,7 @@
|
||||
"Programs": "Programas",
|
||||
"Quality": "Calidad",
|
||||
"QueueAllFromHere": "Encolar todos desde aquí",
|
||||
"Raised": "Elevacion",
|
||||
"Raised": "Elevación",
|
||||
"Rate": "Calificación",
|
||||
"RecentlyWatched": "Visto recientemente",
|
||||
"RecommendationBecauseYouLike": "Porque te gustó {0}",
|
||||
@ -1195,7 +1195,7 @@
|
||||
"Share": "Compartir",
|
||||
"ShowAdvancedSettings": "Mostrar configuraciones avanzadas",
|
||||
"ShowIndicatorsFor": "Mostrar indicadores para:",
|
||||
"ShowTitle": "Mostrar titulo",
|
||||
"ShowTitle": "Mostrar título",
|
||||
"ShowYear": "Mostrar año",
|
||||
"Shows": "Programas",
|
||||
"Shuffle": "Aleatorio",
|
||||
@ -1334,8 +1334,8 @@
|
||||
"Writer": "Escritor",
|
||||
"XmlDocumentAttributeListHelp": "Estos atributos se aplican al elemento raíz de cada respuesta XML.",
|
||||
"XmlTvKidsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas infantiles. Separe varios con un \"|\".",
|
||||
"XmlTvMovieCategoriesHelp": "Los programas con estas categorías serán mostrado como películas. Separe varios con un \"|\".",
|
||||
"XmlTvNewsCategoriesHelp": "Los programas con estas categorías serán mostrado como programas noticiosos. Separe varios con un \"|\".",
|
||||
"XmlTvMovieCategoriesHelp": "Los programas con estas categorías serán mostrados como películas. Separe varios con un \"|\".",
|
||||
"XmlTvNewsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas noticiosos. Separe varios con un \"|\".",
|
||||
"XmlTvPathHelp": "Ruta al archivo XMLTV. Jellyfin leerá este archivo y lo revisará periódicamente en busca de actualizaciones. Usted es responsable de crear y actualizar el archivo.",
|
||||
"XmlTvSportsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas deportivos. Separe varios con un \"|\".",
|
||||
"Yes": "Sí",
|
||||
@ -1463,7 +1463,7 @@
|
||||
"EveryXHours": "Cada {0} horas",
|
||||
"EveryHour": "Cada hora",
|
||||
"EveryXMinutes": "Cada {0} minutos",
|
||||
"OnWakeFromSleep": "Al despertar del sueño",
|
||||
"OnWakeFromSleep": "Activarse del Modo Suspensión",
|
||||
"DailyAt": "Diariamente a las {0}",
|
||||
"LastSeen": "Ultima vez visto {0}",
|
||||
"PersonRole": "como {0}",
|
||||
@ -1475,7 +1475,7 @@
|
||||
"ReleaseGroup": "Grupo de salida",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferir información embebida en el episodio sobre el nombre de archivo",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esto utiliza la información de el episodio desde metadatos embebidos si esta disponible.",
|
||||
"PlaybackErrorNoCompatibleStream": "Hubo un error con el perfilado del cliente y el servidor no esta enviando un formato compatible.",
|
||||
"PlaybackErrorNoCompatibleStream": "Este cliente no es compatible con los medios y el servidor no está enviando un formato de medios compatible.",
|
||||
"Person": "Persona",
|
||||
"OtherArtist": "Otro artista",
|
||||
"OptionRandom": "Aleatorio",
|
||||
@ -1498,5 +1498,9 @@
|
||||
"AllowFfmpegThrottlingHelp": "Cuando una transcodificación o remux se encuentra muy por delante de la posición de reproducción, pausar el proceso para consumir menos recursos. Esto es mas practico cuando se esta viendo sin buscar constantemente. Deshabilitar esta opción si experimentas problemas de reproducción.",
|
||||
"AllowFfmpegThrottling": "Aceleración de Transcoders",
|
||||
"AlbumArtist": "Álbum de artista",
|
||||
"Album": "Álbum"
|
||||
"Album": "Álbum",
|
||||
"YadifBob": "Yadif Bob",
|
||||
"Yadif": "Yadif",
|
||||
"LabelDeinterlaceMethod": "Metodo de Desentrelazado:",
|
||||
"DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al codificar el contenido entrelazado."
|
||||
}
|
||||
|
@ -1234,7 +1234,7 @@
|
||||
"Auto": "Automático",
|
||||
"AutoBasedOnLanguageSetting": "Automático (basado en la configuración de idioma)",
|
||||
"Banner": "Pancarta",
|
||||
"BurnSubtitlesHelp": "Determina si el servidor debe grabar subtítulos al transcodificar videos. Evitar esto mejorará altamente el rendimiento del servidor. Seleccione Auto para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX) y ciertos subtítulos ASS o SSA.",
|
||||
"BurnSubtitlesHelp": "Determina si el servidor debe grabar los subtítulos en el vídeo al transcodificar. Desactivar esta opción puede mejorar el rendimiento. Seleccione 'Auto' para grabar formatos basados en imágenes (VOBSUB, PGS, SUB/IDX) y ciertos subtítulos ASS o SSA.",
|
||||
"ButtonInfo": "Información",
|
||||
"ChangingMetadataImageSettingsNewContent": "Los cambios a la configuración de descarga de etiquetas e imágenes sólo se aplicará al nuevo contenido que se añada a la biblioteca. Para aplicar los cambios a los elementos existentes necesitarás actualizar las etiquetas manualmente.",
|
||||
"ColorPrimaries": "Colores primarios",
|
||||
@ -1499,6 +1499,6 @@
|
||||
"Episode": "Episodio",
|
||||
"BoxSet": "Box Set",
|
||||
"Artist": "Artista",
|
||||
"AlbumArtist": "Álbum de artista",
|
||||
"AlbumArtist": "Artista del álbum",
|
||||
"Album": "Álbum"
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
"Alerts": "Meldingen",
|
||||
"All": "Alle",
|
||||
"AllChannels": "Alle kanalen",
|
||||
"AllComplexFormats": "Alle complexe formaten (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)",
|
||||
"AllComplexFormats": "Alle Complexe Formaten (ASS, SSA, VOBSUB, PGS, SUB, IDX, etc.)",
|
||||
"AllEpisodes": "Alle afleveringen",
|
||||
"AllLanguages": "Alle talen",
|
||||
"AllLibraries": "Alle bibliotheken",
|
||||
@ -1461,5 +1461,7 @@
|
||||
"TabStreaming": "Streamen",
|
||||
"TabTrailers": "Trailers",
|
||||
"OptionAuto": "Auto",
|
||||
"OptionProfileVideo": "Video"
|
||||
"OptionProfileVideo": "Video",
|
||||
"AlbumArtist": "Album Artiest",
|
||||
"Album": "Album"
|
||||
}
|
||||
|
@ -5,14 +5,14 @@
|
||||
"Albums": "Albumy",
|
||||
"All": "Všetko",
|
||||
"AllChannels": "Všetky kanály",
|
||||
"AllComplexFormats": "Všetky komplexné formáty (ASS, SSA, VOBSUB, PGS, SUB/IDX, atď.)",
|
||||
"AllComplexFormats": "Všetky komplexné formáty (ASS, SSA, VOBSUB, PGS, SUB, IDX)",
|
||||
"AllEpisodes": "Všetky epizódy",
|
||||
"AllLanguages": "Všetky jazyky",
|
||||
"AllLibraries": "Všetky knižnice",
|
||||
"AllowMediaConversion": "Povoliť konverziu médií",
|
||||
"AllowRemoteAccess": "Povoliť vzdialené pripojenia k tomuto Jellyfin serveru.",
|
||||
"AllowRemoteAccessHelp": "Nezaškrtnuté znamená, že všetky vzdialené pripojenia budú blokované.",
|
||||
"AlwaysPlaySubtitles": "Vždy zobraziť titulky",
|
||||
"AlwaysPlaySubtitles": "Vždy prehrať",
|
||||
"AnyLanguage": "Akýkoľvek jazyk",
|
||||
"AroundTime": "Okolo {0}",
|
||||
"Artists": "Umelci",
|
||||
@ -306,7 +306,7 @@
|
||||
"Identify": "Identifikovať",
|
||||
"Images": "Obrázky",
|
||||
"ImportMissingEpisodesHelp": "Ak je možnosť povolená, informácie o chýbajúcich epizódach budú importované do Vašej Jellyfin databázy a budú zobrazené v sériách a seriáloch. Toto môže spôsobiť podstatne dlhšie skenovania knižníc.",
|
||||
"InstallingPackage": "Inštalujem {0}",
|
||||
"InstallingPackage": "Inštalujem {0} (verzia{1})",
|
||||
"ItemCount": "{0} položiek",
|
||||
"Items": "Položky",
|
||||
"Kids": "Detské",
|
||||
@ -578,12 +578,12 @@
|
||||
"NoNextUpItemsMessage": "Nič nenájdené. Začnite pozerať vaše seriály!",
|
||||
"NoPluginConfigurationMessage": "Tento zásuvný modul nemá žiadne nastavenia.",
|
||||
"NoSubtitleSearchResultsFound": "Žiadne výsledky.",
|
||||
"NoSubtitles": "Žiadne titulky",
|
||||
"NoSubtitles": "Žiadne",
|
||||
"None": "Žiadne",
|
||||
"Normal": "Normálne",
|
||||
"NumLocationsValue": "{0} priečinkov",
|
||||
"OneChannel": "Jeden kanál",
|
||||
"OnlyForcedSubtitles": "Iba vynútené titulky",
|
||||
"OnlyForcedSubtitles": "Iba vynútené",
|
||||
"OnlyForcedSubtitlesHelp": "Budú zobrazené iba titulky označené ako vynútené.",
|
||||
"OptionAdminUsers": "Administrátori",
|
||||
"OptionAllUsers": "Všetci používatelia",
|
||||
@ -677,9 +677,9 @@
|
||||
"OptionWeekly": "Týždenne",
|
||||
"OriginalAirDateValue": "Pôvodný dátum vysielania: {0}",
|
||||
"Overview": "Prehľad",
|
||||
"PackageInstallCancelled": "{0} inštalácia zrušená.",
|
||||
"PackageInstallCompleted": "{0} inštalácia dokončená.",
|
||||
"PackageInstallFailed": "{0} inštalácia zlyhala.",
|
||||
"PackageInstallCancelled": "{0} (verzia{1}) inštalácia zrušená.",
|
||||
"PackageInstallCompleted": "{0} (verzia{1}) inštalácia dokončená.",
|
||||
"PackageInstallFailed": "{0} (verzia {1}) inštalácia zlyhala.",
|
||||
"ParentalRating": "Parental Rating",
|
||||
"PasswordMatchError": "Heslo a potvrdenie hesla sa musia zhodovať.",
|
||||
"PasswordResetComplete": "Heslo bolo obnovené.",
|
||||
@ -934,7 +934,7 @@
|
||||
"DirectStreamHelp2": "Priame streamovanie súboru používa veľmi málo procesorového výkonu bez straty kvality videa.",
|
||||
"DirectStreaming": "Priame streamovanie",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Toto musí byť povolené pre TV knižnice v nastavení servera.",
|
||||
"DisplayModeHelp": "Zvoľte typ obrazovky, na ktorej používate Jellyfin.",
|
||||
"DisplayModeHelp": "Vyberte štýl layoutu, ktorý chcete pre rozhranie.",
|
||||
"EnableCinemaMode": "Kino režim",
|
||||
"EnableNextVideoInfoOverlay": "Zobraziť informácie o nasledujúcom videu počas prehrávania",
|
||||
"EnableNextVideoInfoOverlayHelp": "Na konci videa sa zobrazia informácie o nasledujúcom videu v aktuálnom playliste.",
|
||||
@ -1036,7 +1036,7 @@
|
||||
"OptionEnableForAllTuners": "Povoliť pre všetky tunery",
|
||||
"OptionEnableExternalContentInSuggestions": "Povoliť externý obsah v návrhoch",
|
||||
"OptionBlockChannelContent": "Obsah internetového kanála",
|
||||
"OnlyImageFormats": "Iba obrazové formáty (VOBSUB, PGS, SUB, atď)",
|
||||
"OnlyImageFormats": "Iba obrazové formáty (VOBSUB, PGS, SUB)",
|
||||
"Off": "Vypnuté",
|
||||
"MusicVideo": "Videoklip",
|
||||
"MusicArtist": "Interpret",
|
||||
@ -1180,7 +1180,7 @@
|
||||
"CancelSeries": "Ukončiť seriál",
|
||||
"ButtonSplit": "Rozdeliť",
|
||||
"ButtonAddImage": "Pridať obrázok",
|
||||
"BurnSubtitlesHelp": "Určuje, či má server vypaľovať titulky počas prevodu videa v závislosti na formáte tituliek. Vynechanie tejto možnosti výrazne zvýši výkon serveru. Vyberte možnosť Auto, pokiaľ chcete vypalovať do obrazu titulky v grafickom formáte (VOBSUB, PGS, SUB/IDX, atď.) a niektoré ASS/SSA titulky.",
|
||||
"BurnSubtitlesHelp": "Určuje, či má server vpáliť titulky počas transkódovania videa. Vynechanie tejto možnosti výrazne zvýši výkon. Vyberte možnosť Auto, pokiaľ chcete vpáliť do obrazu titulky v grafickom formáte (VOBSUB, PGS, SUB, IDX) a niektoré ASS alebo SSA titulky.",
|
||||
"BrowsePluginCatalogMessage": "Prehliadnite si náš katalóg dostupných zásuvných modulov.",
|
||||
"Browse": "Prechádzať",
|
||||
"Blacklist": "Blacklist",
|
||||
@ -1466,11 +1466,37 @@
|
||||
"OptionForceRemoteSourceTranscoding": "Vynútiť transkódovanie vzdialených mediálnych zdrojov (ako napr. živá TV)",
|
||||
"NoCreatedLibraries": "Vyzerá to tak, že ste zatiaľ nevytvorili žiadnu knižnicu. {0}Chceli by ste nejakú vytvoriť teraz?{1}",
|
||||
"AskAdminToCreateLibrary": "Pokiaľ chcete vytvoriť knižnicu, musíte sa spýtať administrátora.",
|
||||
"PlaybackErrorNoCompatibleStream": "Nastal problém s profilom klienta a server preto neposiela kompatibilný mediálny formát.",
|
||||
"PlaybackErrorNoCompatibleStream": "Tento klient nie je kompatibilný s médiom a server neposiela kompatibilný mediálny formát.",
|
||||
"AllowFfmpegThrottlingHelp": "Keď sa transkódovanie alebo remuxovanie dostane do bodu, kedy je dostatočne vopred voči súčasnej polohe prehrávania, pozastaví proces aby spotrebovával menej zdrojov. Toto je najviac užitočné, keď sa pozerá obsah bez pretáčania. Vypnite túto možnosť, pokiaľ má vaše prehrávanie problémy.",
|
||||
"AllowFfmpegThrottling": "Obmedzenie transkódovania",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferovať vložené informácie o epizóde pred názvom súboru",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Toto využíva informácie o epizóde z vložených metadát, pokiaľ sú dostupne.",
|
||||
"ClientSettings": "Nastavenie klienta",
|
||||
"Album": "Album"
|
||||
"Album": "Album",
|
||||
"DeinterlaceMethodHelp": "Vyberte metódu odstránenia prekladania obrazu videa pri transkódovaní prekladaného obsahu.",
|
||||
"OnApplicationStartup": "Pri spustení aplikácie",
|
||||
"EveryXHours": "Každých {0} hodín",
|
||||
"EveryHour": "Každú hodinu",
|
||||
"EveryXMinutes": "Každých {0} minút",
|
||||
"OnWakeFromSleep": "Pri prebúdzaní zo spánku",
|
||||
"WeeklyAt": "{0}s na {1}",
|
||||
"DailyAt": "Denne o {0}",
|
||||
"LastSeen": "Naposledy videný {0}",
|
||||
"PersonRole": "ako {0}",
|
||||
"ListPaging": "{0}-{1} z {2}",
|
||||
"WriteAccessRequired": "Jellyfin Server vyžaduje práva na zapisovanie do tohoto priečinku. Prosím, uistite sa že má práva na zapisovanie a skúste to znova.",
|
||||
"PathNotFound": "Táto cesta nebola nájdená. Prosím, uistite sa že cesta je správna a skúste to znovu.",
|
||||
"YadifBob": "Yadif Bob",
|
||||
"Yadif": "Yadif",
|
||||
"Track": "Stopa",
|
||||
"Season": "Séria",
|
||||
"ReleaseGroup": "Vydavateľ",
|
||||
"Person": "Osoba",
|
||||
"OtherArtist": "Ostatný umelci",
|
||||
"Movie": "FIlm",
|
||||
"LabelDeinterlaceMethod": "Metóda odstránenia prekladaného videa:",
|
||||
"Episode": "Epizóda",
|
||||
"BoxSet": "Box Set",
|
||||
"Artist": "Umelec",
|
||||
"AlbumArtist": "Umelec albumu"
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"AccessRestrictedTryAgainLater": "För närvarande är åtkomst begränsad. Försök igen senare.",
|
||||
"AccessRestrictedTryAgainLater": "För närvarande är åtkomsten begränsad. Försök igen senare.",
|
||||
"Actor": "Skådespelare",
|
||||
"Add": "Lägg till",
|
||||
"AddItemToCollectionHelp": "Lägg till objekt till samlingar genom att först söka efter dem och sen högerklicka eller tappa upp menyn för att lägga till dem.",
|
||||
"AddItemToCollectionHelp": "Lägg till objekt till samlingar genom att söka efter dem och använda deras högerklick- eller knack/tryck-meny för att lägga till dem.",
|
||||
"AddToCollection": "Lägg till i samling",
|
||||
"AddToPlayQueue": "Lägg till i spelkö",
|
||||
"AddToPlaylist": "Lägg till i spellista",
|
||||
@ -24,7 +24,7 @@
|
||||
"AllowRemoteAccessHelp": "Om avaktiverat så blockeras alla fjärranslutningar.",
|
||||
"AlwaysPlaySubtitles": "Visa alltid undertexter",
|
||||
"AlwaysPlaySubtitlesHelp": "Undertexter på det önskade språket kommer att laddas oavsett ljudspårets språk.",
|
||||
"AnyLanguage": "Vilket språk som helst",
|
||||
"AnyLanguage": "Alla språk",
|
||||
"Anytime": "När som helst",
|
||||
"AroundTime": "Runt {0}",
|
||||
"Art": "Grafik",
|
||||
@ -46,7 +46,7 @@
|
||||
"BoxRear": "Omslag (baksida)",
|
||||
"Browse": "Bläddra",
|
||||
"BrowsePluginCatalogMessage": "Besök katalogen för att se tillgängliga tillägg.",
|
||||
"BurnSubtitlesHelp": "Avgör ifall servern ska \"bränna in\" undertexterna under videokonverteringen, beroende på undertextsformatet. Att undvika inbränning av undertexter kommer att förbättra prestandan på servern. Välj Automatisk för att bränna bild-baserade formats (ex. VOBSUB, PGS, SUB/IDX, etc.) och vissa ASS/SSA undertexter.",
|
||||
"BurnSubtitlesHelp": "Avgör ifall servern ska \"bränna in\" undertexterna under transkodning. Att undvika detta förbättrar prestandan avsevärt. Välj \"Automatisk\" för att bränna bild-baserade format (ex. VOBSUB, PGS, SUB/IDX, etc.) och vissa ASS/SSA-undertexter.",
|
||||
"ButtonAdd": "Lägg till",
|
||||
"ButtonAddMediaLibrary": "Lägg till mediabibliotek",
|
||||
"ButtonAddScheduledTaskTrigger": "Lägg till utlösare",
|
||||
@ -173,7 +173,7 @@
|
||||
"DisplayInOtherHomeScreenSections": "Visa sektioner på hemskärmen som till exempel senast media och fortsätt kolla på",
|
||||
"DisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i säsonger",
|
||||
"DisplayMissingEpisodesWithinSeasonsHelp": "Detta måste också vara aktiverat för TV-bibliotek i serverkonfigurationen.",
|
||||
"DisplayModeHelp": "Välj vilken typ av skärm som du kör Jellyfin på.",
|
||||
"DisplayModeHelp": "Välj vilken layout du vill använda i gränssnittet.",
|
||||
"DoNotRecord": "Spela inte in",
|
||||
"Down": "Ner",
|
||||
"Download": "Ladda ned",
|
||||
@ -450,7 +450,7 @@
|
||||
"Images": "Bilder",
|
||||
"ImportFavoriteChannelsHelp": "Aktivera för att endast importera kanaler som är märkta som favoriter på den här TV-mottagaren.",
|
||||
"ImportMissingEpisodesHelp": "Om aktiverat importeras information om saknade episoder till din Jellyfin-databas och visas i seriesäsongerna. Detta kan innebära längre tidsåtgång för biblioteksskanningar.",
|
||||
"InstallingPackage": "Installerar {0}",
|
||||
"InstallingPackage": "Installerar {0} (version {1})",
|
||||
"InstantMix": "Omedelbar mix",
|
||||
"ItemCount": "{0} objekt",
|
||||
"Items": "Objekt",
|
||||
@ -900,7 +900,7 @@
|
||||
"OneChannel": "En kanal",
|
||||
"OnlyForcedSubtitles": "Endast tvingande undertexter",
|
||||
"OnlyForcedSubtitlesHelp": "Endast undertexter markerade som tvingande kommer att laddas.",
|
||||
"OnlyImageFormats": "Endast image-format (VOBSUB, PGS, SUB, etc)",
|
||||
"OnlyImageFormats": "Endast bildbaserade format (VOBSUB, PGS, SUB, etc)",
|
||||
"OptionAdminUsers": "Administratörer",
|
||||
"OptionAlbumArtist": "Albumartist",
|
||||
"OptionAllUsers": "Alla användare",
|
||||
@ -1029,9 +1029,9 @@
|
||||
"OptionWeekly": "Varje vecka",
|
||||
"OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}",
|
||||
"Overview": "Översikt",
|
||||
"PackageInstallCancelled": "Installationen av {0} avbröts.",
|
||||
"PackageInstallCompleted": "Installationen av {0} slutfördes.",
|
||||
"PackageInstallFailed": "Installationen av {0} misslyckades.",
|
||||
"PackageInstallCancelled": "Installationen av {0} (version {1}) avbröts.",
|
||||
"PackageInstallCompleted": "Installationen av {0} (version {1}) slutfördes.",
|
||||
"PackageInstallFailed": "Installationen av {0} (version {1}) misslyckades.",
|
||||
"ParentalRating": "Parental Rating",
|
||||
"PasswordMatchError": "Lösenordet och bekräftelsen måste överensstämma.",
|
||||
"PasswordResetComplete": "Lösenordet har återställts.",
|
||||
@ -1465,8 +1465,29 @@
|
||||
"LabelTranscodingFramerate": "Omkodning framerate:",
|
||||
"LabelTranscodes": "Omkodningar:",
|
||||
"LabelTranscodePath": "Omkodning sökväg:",
|
||||
"PlaybackErrorNoCompatibleStream": "Klienten kunde inte identifieras och servern skickar inte ett kompatibelt medieformat.",
|
||||
"PlaybackErrorNoCompatibleStream": "Klienten är inte kompatibel med mediaformatet och servern skickar inte ett kompatibelt medieformat.",
|
||||
"AllowFfmpegThrottlingHelp": "När omkodningen går uppspelningen långt i förväg pausas den tills vidare för att spara resurser. Detta fungerar bäst när du kollar utan att spola mycket; stäng av ifall spelaren krånglar.",
|
||||
"AllowFfmpegThrottling": "Begränsad omkodning",
|
||||
"Album": "Album"
|
||||
"Album": "Album",
|
||||
"EveryXHours": "Varje {0} timmar",
|
||||
"EveryHour": "Varje timme",
|
||||
"EveryXMinutes": "Varje {0} minut(er)",
|
||||
"OnApplicationStartup": "Vid programstart",
|
||||
"DailyAt": "Dagligen vid {0}",
|
||||
"PersonRole": "som {0}",
|
||||
"ListPaging": "{0}-{1} av {2}",
|
||||
"WriteAccessRequired": "Jellyfin Server kräver skrivrättigheter till denna katalog. Säkerställ skrivrättigheter och försök igen.",
|
||||
"PathNotFound": "Sökvägen hittades inte. Säkerställ att sökvägen är korrekt och försök igen.",
|
||||
"Track": "Spår",
|
||||
"Season": "Säsong",
|
||||
"ReleaseGroup": "Releasegrupp",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNames": "Föredra inbäddad avsnittsinformation före filnamn",
|
||||
"PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Detta använder avsnittets information från inbäddad metadata om tillgängligt.",
|
||||
"Person": "Person",
|
||||
"OtherArtist": "Annan artist",
|
||||
"Movie": "Film",
|
||||
"Episode": "Avsnitt",
|
||||
"ClientSettings": "Klientinställningar",
|
||||
"BoxSet": "Samlingsbox",
|
||||
"Artist": "Artist"
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ module.exports = merge(common, {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
exclude: /node_modules[\\/](?!query-string)/,
|
||||
loader: "babel-loader"
|
||||
},
|
||||
{
|
||||
|
@ -8,7 +8,7 @@ module.exports = merge(common, {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
exclude: /node_modules[\\/](?!query-string)/,
|
||||
loader: "babel-loader"
|
||||
},
|
||||
{
|
||||
|
@ -6694,6 +6694,10 @@ levn@^0.3.0, levn@~0.3.0:
|
||||
version "4.0.0"
|
||||
resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#7e6b75dcab9f7dad12719983510d05242803707c"
|
||||
|
||||
"libass-wasm@https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-cordova":
|
||||
version "4.0.0"
|
||||
resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#b38056588bfaebc18a8353cb1757de0a815ac879"
|
||||
|
||||
liftoff@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3"
|
||||
|
Loading…
Reference in New Issue
Block a user