Merge remote-tracking branch 'origin/sonarqube-fixes-1' into sonarqube-fixes-1

This commit is contained in:
MrTimscampi 2020-04-10 22:58:32 +02:00
commit 41d8ce54ae
37 changed files with 435 additions and 273 deletions

View File

@ -2,8 +2,7 @@ trigger:
batch: true batch: true
branches: branches:
include: include:
- master - '*'
- release-*
tags: tags:
include: include:
- '*' - '*'
@ -13,12 +12,9 @@ pr:
- '*' - '*'
jobs: jobs:
- job: build - job: Build
displayName: 'Build' displayName: 'Build'
pool:
vmImage: 'ubuntu-latest'
strategy: strategy:
matrix: matrix:
Development: Development:
@ -27,7 +23,9 @@ jobs:
BuildConfiguration: production BuildConfiguration: production
Standalone: Standalone:
BuildConfiguration: standalone BuildConfiguration: standalone
maxParallel: 3
pool:
vmImage: 'ubuntu-latest'
steps: steps:
- task: NodeTool@0 - task: NodeTool@0
@ -63,16 +61,14 @@ jobs:
- script: 'mv dist jellyfin-web' - script: 'mv dist jellyfin-web'
displayName: 'Rename Directory' displayName: 'Rename Directory'
condition: succeeded()
- task: PublishPipelineArtifact@1 - task: PublishPipelineArtifact@1
displayName: 'Publish Release' displayName: 'Publish Release'
condition: succeeded()
inputs: inputs:
targetPath: '$(Build.SourcesDirectory)/jellyfin-web' targetPath: '$(Build.SourcesDirectory)/jellyfin-web'
artifactName: 'jellyfin-web-$(BuildConfiguration)' artifactName: 'jellyfin-web-$(BuildConfiguration)'
- job: lint - job: Lint
displayName: 'Lint' displayName: 'Lint'
pool: pool:

3
babel.config.json Normal file
View File

@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-env"]
}

View File

@ -64,7 +64,7 @@
"jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto",
"jquery": "^3.4.1", "jquery": "^3.4.1",
"jstree": "^3.3.7", "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", "material-design-icons-iconfont": "^5.0.1",
"native-promise-only": "^0.8.0-a", "native-promise-only": "^0.8.0-a",
"page": "^1.11.5", "page": "^1.11.5",
@ -90,9 +90,12 @@
"src/components/filesystem.js", "src/components/filesystem.js",
"src/components/input/keyboardnavigation.js", "src/components/input/keyboardnavigation.js",
"src/components/sanatizefilename.js", "src/components/sanatizefilename.js",
"src/scripts/settings/webSettings.js",
"src/components/scrollManager.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/dfnshelper.js",
"src/scripts/imagehelper.js",
"src/scripts/inputManager.js" "src/scripts/inputManager.js"
], ],
"plugins": [ "plugins": [

View File

@ -186,6 +186,8 @@ define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', '
context.querySelector('#selectLanguage').value = userSettings.language() || ''; context.querySelector('#selectLanguage').value = userSettings.language() || '';
context.querySelector('.selectDateTimeLocale').value = userSettings.dateTimeLocale() || ''; context.querySelector('.selectDateTimeLocale').value = userSettings.dateTimeLocale() || '';
context.querySelector('#txtLibraryPageSize').value = userSettings.libraryPageSize();
selectDashboardTheme.value = userSettings.dashboardTheme() || ''; selectDashboardTheme.value = userSettings.dashboardTheme() || '';
selectTheme.value = userSettings.theme() || ''; selectTheme.value = userSettings.theme() || '';
@ -215,6 +217,8 @@ define(['require', 'browser', 'layoutManager', 'appSettings', 'pluginManager', '
userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value); userSettingsInstance.soundEffects(context.querySelector('.selectSoundEffects').value);
userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value); userSettingsInstance.screensaver(context.querySelector('.selectScreensaver').value);
userSettingsInstance.libraryPageSize(context.querySelector('#txtLibraryPageSize').value);
userSettingsInstance.skin(context.querySelector('.selectSkin').value); userSettingsInstance.skin(context.querySelector('.selectSkin').value);
userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked); userSettingsInstance.enableFastFadein(context.querySelector('#chkFadein').checked);

View File

@ -143,6 +143,11 @@
<select is="emby-select" class="selectSoundEffects" label="${LabelSoundEffects}"></select> <select is="emby-select" class="selectSoundEffects" label="${LabelSoundEffects}"></select>
</div> </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"> <div class="checkboxContainer checkboxContainer-withDescription fldFadein">
<label> <label>
<input type="checkbox" is="emby-checkbox" id="chkFadein" /> <input type="checkbox" is="emby-checkbox" id="chkFadein" />

View File

@ -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 // Appending #t=xxx to the query string doesn't seem to work with HLS
// For plain video files, not all browsers support it either // For plain video files, not all browsers support it either
var delay = browser.safari ? 2500 : 0;
if (delay) { if (element.duration >= seconds) {
setTimeout(function () { // media is ready, seek immediately
setCurrentTimeIfNeeded(element, seconds);
}, delay);
} else {
setCurrentTimeIfNeeded(element, seconds); setCurrentTimeIfNeeded(element, seconds);
} 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);
});
} }
} }
} }

View File

@ -116,8 +116,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
}); });
} }
function normalizeTrackEventText(text) { function normalizeTrackEventText(text, useHtml) {
return text.replace(/\\N/gi, '\n'); var result = text.replace(/\\N/gi, '\n').replace(/\r/gi, '');
return useHtml ? result.replace(/\n/gi, '<br>') : result;
} }
function setTracks(elem, tracks, item, mediaSource) { function setTracks(elem, tracks, item, mediaSource) {
@ -1209,7 +1210,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
data.TrackEvents.forEach(function (trackEvent) { data.TrackEvents.forEach(function (trackEvent) {
var trackCueObject = window.VTTCue || window.TextTrackCue; 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); trackElement.addCue(cue);
}); });
@ -1250,8 +1251,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
} }
if (selectedTrackEvent && selectedTrackEvent.Text) { if (selectedTrackEvent && selectedTrackEvent.Text) {
subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text, true);
subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text);
subtitleTextElement.classList.remove('hide'); subtitleTextElement.classList.remove('hide');
} else { } else {

View File

@ -69,7 +69,7 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc); var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc);
var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc); var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc);
html += globalize.translate("LabelScheduledTaskLastRan", datefns.formatDistanceToNow(endtime, dfnshelper.localeWithSuffix), 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") { if (task.LastExecutionResult.Status === "Failed") {
html += " <span style='color:#FF0000;'>(" + globalize.translate("LabelFailed") + ")</span>"; html += " <span style='color:#FF0000;'>(" + globalize.translate("LabelFailed") + ")</span>";
} else if (task.LastExecutionResult.Status === "Cancelled") { } else if (task.LastExecutionResult.Status === "Cancelled") {

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -7,12 +7,15 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
pageData = { pageData = {
query: { query: {
StartIndex: 0, StartIndex: 0,
Limit: 100,
Fields: "PrimaryImageAspectRatio" Fields: "PrimaryImageAspectRatio"
} }
}; };
} }
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
return pageData; return pageData;
} }
@ -39,7 +42,9 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(context); reloadItems(context);
} }
@ -48,7 +53,9 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "em
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(context); reloadItems(context);
} }

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -16,11 +16,15 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
Fields: "PrimaryImageAspectRatio,SortName", Fields: "PrimaryImageAspectRatio,SortName",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -65,7 +69,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -74,7 +80,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -180,7 +188,6 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View File

@ -32,7 +32,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
itemsContainer.refreshItems(); itemsContainer.refreshItems();
} }
@ -41,7 +43,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
itemsContainer.refreshItems(); itemsContainer.refreshItems();
} }
@ -250,9 +254,13 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0,
Limit: 100,
ParentId: params.topParentId ParentId: params.topParentId
}; };
if (userSettings.libraryPageSize() > 0) {
query['Limit'] = userSettings.libraryPageSize();
}
var isLoading = false; var isLoading = false;
if (options.mode === "favorites") { if (options.mode === "favorites") {

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -16,11 +16,15 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo", Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -49,7 +53,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(); reloadItems();
} }
@ -58,7 +64,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(); reloadItems();
} }
@ -168,7 +176,6 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -30,11 +30,15 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo", Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -79,7 +83,9 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -88,7 +94,9 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -175,7 +183,6 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
var savedQueryKey; var savedQueryKey;
var pageData; var pageData;
var self = this; var self = this;
var pageSize = 100;
var isLoading = false; var isLoading = false;
self.showFilterMenu = function () { self.showFilterMenu = function () {

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -7,17 +7,22 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
var pageData = data[key]; var pageData = data[key];
if (!pageData) { if (!pageData) {
var queryValues = {
SortBy: "SortName",
SortOrder: "Ascending",
Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
};
if (userSettings.libraryPageSize() > 0) {
queryValues['Limit'] = userSettings.libraryPageSize();
}
pageData = data[key] = { pageData = data[key] = {
query: { query: queryValues,
SortBy: "SortName",
SortOrder: "Ascending",
Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
Limit: 100
},
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
@ -67,7 +72,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -76,7 +83,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -14,12 +14,16 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
IncludeItemTypes: "Audio", IncludeItemTypes: "Audio",
Recursive: true, Recursive: true,
Fields: "AudioInfo,ParentId", Fields: "AudioInfo,ParentId",
Limit: 100,
StartIndex: 0, StartIndex: 0,
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary" EnableImageTypes: "Primary"
} }
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -49,7 +53,9 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -58,7 +64,9 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -17,11 +17,15 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
IsMissing: false, IsMissing: false,
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Thumb", EnableImageTypes: "Primary,Backdrop,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -66,7 +70,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -75,7 +81,9 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -152,7 +160,6 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View File

@ -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"; "use strict";
return function (view, params, tabContent) { return function (view, params, tabContent) {
@ -16,11 +16,15 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
Fields: "PrimaryImageAspectRatio,BasicSyncInfo", Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb", EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0, StartIndex: 0
Limit: pageSize
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = params.topParentId; pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -65,7 +69,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -74,7 +80,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
return; return;
} }
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(tabContent); reloadItems(tabContent);
} }
@ -185,7 +193,6 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
} }
var self = this; var self = this;
var pageSize = 100;
var data = {}; var data = {};
var isLoading = false; var isLoading = false;

View File

@ -1,4 +1,4 @@
define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"], function (DisplaySettings, userSettingsBuilder, currentUserSettings, autoFocuser) { define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySettings, userSettings, autoFocuser) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"]
var settingsInstance; var settingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); 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 () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["displaySettings", "userSettingsBuilder", "userSettings", "autoFocuser"]
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".settingsContainer"), element: view.querySelector(".settingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View File

@ -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"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loadin
var homescreenSettingsInstance; var homescreenSettingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); 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 () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loadin
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".homeScreenSettingsContainer"), element: view.querySelector(".homeScreenSettingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View File

@ -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"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading"
var settingsInstance; var settingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); 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 () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading"
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".settingsContainer"), element: view.querySelector(".settingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View File

@ -1,4 +1,4 @@
define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettingsBuilder, currentUserSettings, autoFocuser) { define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettings, autoFocuser) {
"use strict"; "use strict";
return function (view, params) { return function (view, params) {
@ -11,7 +11,7 @@ define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"
var subtitleSettingsInstance; var subtitleSettingsInstance;
var hasChanges; var hasChanges;
var userId = params.userId || ApiClient.getCurrentUserId(); 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 () { view.addEventListener("viewshow", function () {
window.addEventListener("beforeunload", onBeforeUnload); window.addEventListener("beforeunload", onBeforeUnload);
@ -22,7 +22,7 @@ define(["subtitleSettings", "userSettingsBuilder", "userSettings", "autoFocuser"
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
userId: userId, userId: userId,
element: view.querySelector(".settingsContainer"), element: view.querySelector(".settingsContainer"),
userSettings: userSettings, userSettings: currentSettings,
enableSaveButton: false, enableSaveButton: false,
enableSaveConfirmation: false, enableSaveConfirmation: false,
autoFocus: autoFocuser.isEnabled() autoFocus: autoFocuser.isEnabled()

View File

@ -1,7 +1,8 @@
define(["browser"], function (browser) { /* eslint-disable indent */
"use strict";
function getDeviceIcon(device) { import browser from 'browser';
export function getDeviceIcon(device) {
var baseUrl = "assets/img/devices/"; var baseUrl = "assets/img/devices/";
switch (device.AppName || device.Client) { switch (device.AppName || device.Client) {
case "Samsung Smart TV": case "Samsung Smart TV":
@ -42,7 +43,7 @@ define(["browser"], function (browser) {
} }
} }
function getLibraryIcon(library) { export function getLibraryIcon(library) {
switch (library) { switch (library) {
case "movies": case "movies":
return "video_library"; return "video_library";
@ -71,8 +72,9 @@ define(["browser"], function (browser) {
} }
} }
return { /* eslint-enable indent */
getDeviceIcon: getDeviceIcon,
getLibraryIcon: getLibraryIcon export default {
}; getDeviceIcon: getDeviceIcon,
}); getLibraryIcon: getLibraryIcon
};

View File

@ -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"; "use strict";
return function (view, params) { return function (view, params) {
@ -14,11 +14,15 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
IncludeItemTypes: "Playlist", IncludeItemTypes: "Playlist",
Recursive: true, Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete", Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete",
StartIndex: 0, StartIndex: 0
Limit: 100
}, },
view: libraryBrowser.getSavedView(key) || "Poster" view: libraryBrowser.getSavedView(key) || "Poster"
}; };
if (userSettings.libraryPageSize() > 0) {
pageData.query['Limit'] = userSettings.libraryPageSize();
}
pageData.query.ParentId = libraryMenu.getTopParentId(); pageData.query.ParentId = libraryMenu.getTopParentId();
libraryBrowser.loadSavedQueryValues(key, pageData.query); libraryBrowser.loadSavedQueryValues(key, pageData.query);
} }
@ -137,7 +141,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
if (btnNextPage) { if (btnNextPage) {
btnNextPage.addEventListener("click", function () { btnNextPage.addEventListener("click", function () {
query.StartIndex += query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex += query.Limit;
}
reloadItems(); reloadItems();
}); });
} }
@ -146,7 +152,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
if (btnPreviousPage) { if (btnPreviousPage) {
btnPreviousPage.addEventListener("click", function () { btnPreviousPage.addEventListener("click", function () {
query.StartIndex -= query.Limit; if (userSettings.libraryPageSize() > 0) {
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
}
reloadItems(); reloadItems();
}); });
} }

View File

@ -1,5 +1,7 @@
define(['appStorage', 'events'], function (appStorage, events) { /* eslint-disable indent */
'use strict';
import appStorage from 'appStorage';
import events from 'events';
function getKey(name, userId) { function getKey(name, userId) {
if (userId) { if (userId) {
@ -9,26 +11,23 @@ define(['appStorage', 'events'], function (appStorage, events) {
return name; return name;
} }
function AppSettings() { export function enableAutoLogin(val) {
}
AppSettings.prototype.enableAutoLogin = function (val) {
if (val != null) { if (val != null) {
this.set('enableAutoLogin', val.toString()); this.set('enableAutoLogin', val.toString());
} }
return this.get('enableAutoLogin') !== 'false'; return this.get('enableAutoLogin') !== 'false';
}; }
AppSettings.prototype.enableSystemExternalPlayers = function (val) { export function enableSystemExternalPlayers(val) {
if (val !== null) { if (val !== null) {
this.set('enableSystemExternalPlayers', val.toString()); this.set('enableSystemExternalPlayers', val.toString());
} }
return this.get('enableSystemExternalPlayers') === 'true'; return this.get('enableSystemExternalPlayers') === 'true';
}; }
AppSettings.prototype.enableAutomaticBitrateDetection = function (isInNetwork, mediaType, val) { export function enableAutomaticBitrateDetection(isInNetwork, mediaType, val) {
var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork; var key = 'enableautobitratebitrate-' + mediaType + '-' + isInNetwork;
if (val != null) { if (val != null) {
if (isInNetwork && mediaType === 'Audio') { if (isInNetwork && mediaType === 'Audio') {
@ -43,9 +42,9 @@ define(['appStorage', 'events'], function (appStorage, events) {
} else { } else {
return this.get(key) !== 'false'; return this.get(key) !== 'false';
} }
}; }
AppSettings.prototype.maxStreamingBitrate = function (isInNetwork, mediaType, val) { export function maxStreamingBitrate(isInNetwork, mediaType, val) {
var key = 'maxbitrate-' + mediaType + '-' + isInNetwork; var key = 'maxbitrate-' + mediaType + '-' + isInNetwork;
if (val != null) { if (val != null) {
if (isInNetwork && mediaType === 'Audio') { if (isInNetwork && mediaType === 'Audio') {
@ -61,43 +60,43 @@ define(['appStorage', 'events'], function (appStorage, events) {
} else { } else {
return parseInt(this.get(key) || '0') || 1500000; return parseInt(this.get(key) || '0') || 1500000;
} }
}; }
AppSettings.prototype.maxStaticMusicBitrate = function (val) { export function maxStaticMusicBitrate(val) {
if (val !== undefined) { if (val !== undefined) {
this.set('maxStaticMusicBitrate', val); this.set('maxStaticMusicBitrate', val);
} }
var defaultValue = 320000; var defaultValue = 320000;
return parseInt(this.get('maxStaticMusicBitrate') || defaultValue.toString()) || defaultValue; return parseInt(this.get('maxStaticMusicBitrate') || defaultValue.toString()) || defaultValue;
}; }
AppSettings.prototype.maxChromecastBitrate = function (val) { export function maxChromecastBitrate(val) {
if (val != null) { if (val != null) {
this.set('chromecastBitrate1', val); this.set('chromecastBitrate1', val);
} }
val = this.get('chromecastBitrate1'); val = this.get('chromecastBitrate1');
return val ? parseInt(val) : null; return val ? parseInt(val) : null;
}; }
AppSettings.prototype.syncOnlyOnWifi = function (val) { export function syncOnlyOnWifi(val) {
if (val != null) { if (val != null) {
this.set('syncOnlyOnWifi', val.toString()); this.set('syncOnlyOnWifi', val.toString());
} }
return this.get('syncOnlyOnWifi') !== 'false'; return this.get('syncOnlyOnWifi') !== 'false';
}; }
AppSettings.prototype.syncPath = function (val) { export function syncPath(val) {
if (val != null) { if (val != null) {
this.set('syncPath', val); this.set('syncPath', val);
} }
return this.get('syncPath'); return this.get('syncPath');
}; }
AppSettings.prototype.cameraUploadServers = function (val) { export function cameraUploadServers(val) {
if (val != null) { if (val != null) {
this.set('cameraUploadServers', val.join(',')); this.set('cameraUploadServers', val.join(','));
} }
@ -108,28 +107,42 @@ define(['appStorage', 'events'], function (appStorage, events) {
} }
return []; return [];
}; }
AppSettings.prototype.runAtStartup = function (val) { export function runAtStartup(val) {
if (val != null) { if (val != null) {
this.set('runatstartup', val.toString()); this.set('runatstartup', val.toString());
} }
return this.get('runatstartup') === 'true'; return this.get('runatstartup') === 'true';
}; }
AppSettings.prototype.set = function (name, value, userId) { export function set(name, value, userId) {
var currentValue = this.get(name, userId); var currentValue = this.get(name, userId);
appStorage.setItem(getKey(name, userId), value); appStorage.setItem(getKey(name, userId), value);
if (currentValue !== value) { if (currentValue !== value) {
events.trigger(this, 'change', [name]); events.trigger(this, 'change', [name]);
} }
}; }
AppSettings.prototype.get = function (name, userId) { export function get(name, userId) {
return appStorage.getItem(getKey(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
};

View File

@ -1,5 +1,7 @@
define(['appSettings', 'events'], function (appSettings, events) { /* eslint-disable indent */
'use strict';
import appSettings from 'appSettings';
import events from 'events';
function onSaveTimeout() { function onSaveTimeout() {
var self = this; var self = this;
@ -15,10 +17,7 @@ define(['appSettings', 'events'], function (appSettings, events) {
instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50); instance.saveTimeout = setTimeout(onSaveTimeout.bind(instance), 50);
} }
function UserSettings() { export function setUserInfo(userId, apiClient) {
}
UserSettings.prototype.setUserInfo = function (userId, apiClient) {
if (this.saveTimeout) { if (this.saveTimeout) {
clearTimeout(this.saveTimeout); clearTimeout(this.saveTimeout);
} }
@ -37,17 +36,17 @@ define(['appSettings', 'events'], function (appSettings, events) {
result.CustomPrefs = result.CustomPrefs || {}; result.CustomPrefs = result.CustomPrefs || {};
self.displayPrefs = result; self.displayPrefs = result;
}); });
}; }
UserSettings.prototype.getData = function () { export function getData() {
return this.displayPrefs; return this.displayPrefs;
}; }
UserSettings.prototype.importFrom = function (instance) { export function importFrom(instance) {
this.displayPrefs = instance.getData(); this.displayPrefs = instance.getData();
}; }
UserSettings.prototype.set = function (name, value, enableOnServer) { export function set(name, value, enableOnServer) {
var userId = this.currentUserId; var userId = this.currentUserId;
var currentValue = this.get(name, enableOnServer); var currentValue = this.get(name, enableOnServer);
var result = appSettings.set(name, value, userId); var result = appSettings.set(name, value, userId);
@ -62,18 +61,18 @@ define(['appSettings', 'events'], function (appSettings, events) {
} }
return result; return result;
}; }
UserSettings.prototype.get = function (name, enableOnServer) { export function get(name, enableOnServer) {
var userId = this.currentUserId; var userId = this.currentUserId;
if (enableOnServer !== false && this.displayPrefs) { if (enableOnServer !== false && this.displayPrefs) {
return this.displayPrefs.CustomPrefs[name]; return this.displayPrefs.CustomPrefs[name];
} }
return appSettings.get(name, userId); return appSettings.get(name, userId);
}; }
UserSettings.prototype.serverConfig = function (config) { export function serverConfig(config) {
var apiClient = this.currentApiClient; var apiClient = this.currentApiClient;
if (config) { if (config) {
return apiClient.updateUserConfiguration(this.currentUserId, 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 apiClient.getUser(this.currentUserId).then(function (user) {
return user.Configuration; return user.Configuration;
}); });
}; }
UserSettings.prototype.enableCinemaMode = function (val) { export function enableCinemaMode(val) {
if (val != null) { if (val != null) {
return this.set('enableCinemaMode', val.toString(), false); return this.set('enableCinemaMode', val.toString(), false);
} }
val = this.get('enableCinemaMode', false); val = this.get('enableCinemaMode', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableNextVideoInfoOverlay = function (val) { export function enableNextVideoInfoOverlay(val) {
if (val != null) { if (val != null) {
return this.set('enableNextVideoInfoOverlay', val.toString()); return this.set('enableNextVideoInfoOverlay', val.toString());
} }
val = this.get('enableNextVideoInfoOverlay', false); val = this.get('enableNextVideoInfoOverlay', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableThemeSongs = function (val) { export function enableThemeSongs(val) {
if (val != null) { if (val != null) {
return this.set('enableThemeSongs', val.toString(), false); return this.set('enableThemeSongs', val.toString(), false);
} }
val = this.get('enableThemeSongs', false); val = this.get('enableThemeSongs', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableThemeVideos = function (val) { export function enableThemeVideos(val) {
if (val != null) { if (val != null) {
return this.set('enableThemeVideos', val.toString(), false); return this.set('enableThemeVideos', val.toString(), false);
} }
val = this.get('enableThemeVideos', false); val = this.get('enableThemeVideos', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableFastFadein = function (val) { export function enableFastFadein(val) {
if (val != null) { if (val != null) {
return this.set('fastFadein', val.toString(), false); return this.set('fastFadein', val.toString(), false);
} }
val = this.get('fastFadein', false); val = this.get('fastFadein', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.enableBackdrops = function (val) { export function enableBackdrops(val) {
if (val != null) { if (val != null) {
return this.set('enableBackdrops', val.toString(), false); return this.set('enableBackdrops', val.toString(), false);
} }
val = this.get('enableBackdrops', false); val = this.get('enableBackdrops', false);
return val !== 'false'; return val !== 'false';
}; }
UserSettings.prototype.language = function (val) { export function language(val) {
if (val != null) { if (val != null) {
return this.set('language', val.toString(), false); return this.set('language', val.toString(), false);
} }
return this.get('language', false); return this.get('language', false);
}; }
UserSettings.prototype.dateTimeLocale = function (val) { export function dateTimeLocale(val) {
if (val != null) { if (val != null) {
return this.set('datetimelocale', val.toString(), false); return this.set('datetimelocale', val.toString(), false);
} }
return this.get('datetimelocale', false); return this.get('datetimelocale', false);
}; }
UserSettings.prototype.skipBackLength = function (val) { export function skipBackLength(val) {
if (val != null) { if (val != null) {
return this.set('skipBackLength', val.toString()); return this.set('skipBackLength', val.toString());
} }
return parseInt(this.get('skipBackLength') || '10000'); return parseInt(this.get('skipBackLength') || '10000');
}; }
UserSettings.prototype.skipForwardLength = function (val) { export function skipForwardLength(val) {
if (val != null) { if (val != null) {
return this.set('skipForwardLength', val.toString()); return this.set('skipForwardLength', val.toString());
} }
return parseInt(this.get('skipForwardLength') || '30000'); return parseInt(this.get('skipForwardLength') || '30000');
}; }
UserSettings.prototype.dashboardTheme = function (val) { export function dashboardTheme(val) {
if (val != null) { if (val != null) {
return this.set('dashboardTheme', val); return this.set('dashboardTheme', val);
} }
return this.get('dashboardTheme'); return this.get('dashboardTheme');
}; }
UserSettings.prototype.skin = function (val) { export function skin(val) {
if (val != null) { if (val != null) {
return this.set('skin', val, false); return this.set('skin', val, false);
} }
return this.get('skin', false); return this.get('skin', false);
}; }
UserSettings.prototype.theme = function (val) { export function theme(val) {
if (val != null) { if (val != null) {
return this.set('appTheme', val, false); return this.set('appTheme', val, false);
} }
return this.get('appTheme', false); return this.get('appTheme', false);
}; }
UserSettings.prototype.screensaver = function (val) { export function screensaver(val) {
if (val != null) { if (val != null) {
return this.set('screensaver', val, false); return this.set('screensaver', val, false);
} }
return this.get('screensaver', 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) { if (val != null) {
return this.set('soundeffects', val, false); return this.set('soundeffects', val, false);
} }
return this.get('soundeffects', false); return this.get('soundeffects', false);
}; }
UserSettings.prototype.loadQuerySettings = function (key, query) { export function loadQuerySettings(key, query) {
var values = this.get(key); var values = this.get(key);
if (values) { if (values) {
values = JSON.parse(values); values = JSON.parse(values);
@ -218,9 +231,9 @@ define(['appSettings', 'events'], function (appSettings, events) {
} }
return query; return query;
}; }
UserSettings.prototype.saveQuerySettings = function (key, query) { export function saveQuerySettings(key, query) {
var values = {}; var values = {};
if (query.SortBy) { if (query.SortBy) {
values.SortBy = query.SortBy; values.SortBy = query.SortBy;
@ -231,25 +244,24 @@ define(['appSettings', 'events'], function (appSettings, events) {
} }
return this.set(key, JSON.stringify(values)); return this.set(key, JSON.stringify(values));
}; }
UserSettings.prototype.getSubtitleAppearanceSettings = function (key) { export function getSubtitleAppearanceSettings(key) {
key = key || 'localplayersubtitleappearance3'; key = key || 'localplayersubtitleappearance3';
return JSON.parse(this.get(key, false) || '{}'); return JSON.parse(this.get(key, false) || '{}');
}; }
UserSettings.prototype.setSubtitleAppearanceSettings = function (value, key) { export function setSubtitleAppearanceSettings(value, key) {
key = key || 'localplayersubtitleappearance3'; key = key || 'localplayersubtitleappearance3';
return this.set(key, JSON.stringify(value), false); 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); return this.set(key, value, true);
}; }
UserSettings.prototype.getFilter = function (key) { export function getFilter(key) {
return this.get(key, true); return this.get(key, true);
}; }
return UserSettings; /* eslint-enable indent */
});

View File

@ -775,10 +775,7 @@ var AppInfo = {};
define("webSettings", [scriptsPath + "/settings/webSettings"], returnFirstDependency); define("webSettings", [scriptsPath + "/settings/webSettings"], returnFirstDependency);
define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency); define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency);
define("userSettingsBuilder", [scriptsPath + "/settings/userSettingsBuilder"], returnFirstDependency); define("userSettings", [scriptsPath + "/settings/userSettings"], returnFirstDependency);
define("userSettings", ["userSettingsBuilder"], function(userSettingsBuilder) {
return new userSettingsBuilder();
});
define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency); define("chromecastHelper", [componentsPath + "/chromecast/chromecasthelpers"], returnFirstDependency);
define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency); define("mediaSession", [componentsPath + "/playback/mediasession"], returnFirstDependency);

View File

@ -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");
});
};
});

View File

@ -12,11 +12,11 @@
"AllChannels": "Alle kanaler", "AllChannels": "Alle kanaler",
"AllEpisodes": "Alle episoder", "AllEpisodes": "Alle episoder",
"AllLibraries": "Alle biblioteker", "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", "AllowMediaConversion": "Tillad media konvertering",
"AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.", "AllowMediaConversionHelp": "Giv eller nægt adgang til Konvertér Media featuren.",
"AllowOnTheFlySubtitleExtraction": "Tillad udtræk af undertekster on-the-fly", "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.", "AllowRemoteAccess": "Tillad fjernadgang til denne Jellyfin Server.",
"AllowRemoteAccessHelp": "Hvis ikke markeret, vil alle fjernforbindelser blive blokeret.", "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.", "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", "Absolute": "Absolut",
"AccessRestrictedTryAgainLater": "Adgang er begrænset. Prøv igen senere.", "AccessRestrictedTryAgainLater": "Adgang er begrænset. Prøv igen senere.",
"Aired": "Blev sendt", "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", "AllLanguages": "Alle sprog",
"AlwaysPlaySubtitles": "Afspil altid undertekster", "AlwaysPlaySubtitles": "Afspil Altid",
"AlwaysPlaySubtitlesHelp": "Undertekster, der matcher dine sprogindstillinger, vil altid blive indlæst uanset lydsprog.", "AlwaysPlaySubtitlesHelp": "Undertekster, der matcher dine sprogindstillinger, vil altid blive indlæst uanset lydsprog.",
"HeaderLiveTV": "Live-TV", "HeaderLiveTV": "Live-TV",
"Shows": "Serier", "Shows": "Serier",
@ -1532,5 +1532,9 @@
"LabelServerName": "Server navn:", "LabelServerName": "Server navn:",
"LabelUserLoginAttemptsBeforeLockout": "Fejlede loginforsøg før bruger lukkes ude:", "LabelUserLoginAttemptsBeforeLockout": "Fejlede loginforsøg før bruger lukkes ude:",
"HeaderRestartingServer": "Genstarter Server", "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"
} }

View File

@ -694,6 +694,8 @@
"LabelKodiMetadataUserHelp": "Save watch data to NFO files for other applications to utilize.", "LabelKodiMetadataUserHelp": "Save watch data to NFO files for other applications to utilize.",
"LabelLanNetworks": "LAN networks:", "LabelLanNetworks": "LAN networks:",
"LabelLanguage": "Language:", "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:", "LabelLineup": "Lineup:",
"LabelLocalHttpServerPortNumber": "Local HTTP port number:", "LabelLocalHttpServerPortNumber": "Local HTTP port number:",
"LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.", "LabelLocalHttpServerPortNumberHelp": "The TCP port number that Jellyfin's HTTP server should bind to.",

View File

@ -158,7 +158,7 @@
"CustomDlnaProfilesHelp": "Crear un perfil personalizado para un nuevo dispositivo o reemplazar un perfil del sistema.", "CustomDlnaProfilesHelp": "Crear un perfil personalizado para un nuevo dispositivo o reemplazar un perfil del sistema.",
"DateAdded": "Fecha de adición", "DateAdded": "Fecha de adición",
"DatePlayed": "Fecha de reproducción", "DatePlayed": "Fecha de reproducción",
"DeathDateValue": "Fallcimiento: {0}", "DeathDateValue": "Terminación: {0}",
"Default": "Por defecto", "Default": "Por defecto",
"DefaultErrorMessage": "Ha ocurrido un error al procesar la solicitud. Por favor inténtelo de nuevo mas tarde.", "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.", "DefaultMetadataLangaugeDescription": "Estas son sus configuraciones por defecto y puedes ser personalizadas independientemente en cada biblioteca.",
@ -196,7 +196,7 @@
"DownloadsValue": "{0} descargas", "DownloadsValue": "{0} descargas",
"DrmChannelsNotImported": "Los canales con DRM no serán importados.", "DrmChannelsNotImported": "Los canales con DRM no serán importados.",
"DropShadow": "Sombra Paralela", "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", "Edit": "Editar",
"EditImages": "Editar imágenes", "EditImages": "Editar imágenes",
"EditMetadata": "Editar metadatos", "EditMetadata": "Editar metadatos",
@ -758,7 +758,7 @@
"LabelServerHost": "Servidor:", "LabelServerHost": "Servidor:",
"LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com", "LabelServerHostHelp": "192.168.1.100:8096 o https://miservidor.com",
"LabelSimultaneousConnectionLimit": "Limite de transmisiones simultaneas:", "LabelSimultaneousConnectionLimit": "Limite de transmisiones simultaneas:",
"LabelSkin": "Piel:", "LabelSkin": "Apariencia:",
"LabelSkipBackLength": "Longitud de salto hacia atrás:", "LabelSkipBackLength": "Longitud de salto hacia atrás:",
"LabelSkipForwardLength": "Longitud de salto hacia adelante:", "LabelSkipForwardLength": "Longitud de salto hacia adelante:",
"LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el lenguaje de descarga", "LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el lenguaje de descarga",
@ -1131,7 +1131,7 @@
"Programs": "Programas", "Programs": "Programas",
"Quality": "Calidad", "Quality": "Calidad",
"QueueAllFromHere": "Encolar todos desde aquí", "QueueAllFromHere": "Encolar todos desde aquí",
"Raised": "Elevacion", "Raised": "Elevación",
"Rate": "Calificación", "Rate": "Calificación",
"RecentlyWatched": "Visto recientemente", "RecentlyWatched": "Visto recientemente",
"RecommendationBecauseYouLike": "Porque te gustó {0}", "RecommendationBecauseYouLike": "Porque te gustó {0}",
@ -1195,7 +1195,7 @@
"Share": "Compartir", "Share": "Compartir",
"ShowAdvancedSettings": "Mostrar configuraciones avanzadas", "ShowAdvancedSettings": "Mostrar configuraciones avanzadas",
"ShowIndicatorsFor": "Mostrar indicadores para:", "ShowIndicatorsFor": "Mostrar indicadores para:",
"ShowTitle": "Mostrar titulo", "ShowTitle": "Mostrar título",
"ShowYear": "Mostrar año", "ShowYear": "Mostrar año",
"Shows": "Programas", "Shows": "Programas",
"Shuffle": "Aleatorio", "Shuffle": "Aleatorio",
@ -1334,8 +1334,8 @@
"Writer": "Escritor", "Writer": "Escritor",
"XmlDocumentAttributeListHelp": "Estos atributos se aplican al elemento raíz de cada respuesta XML.", "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 \"|\".", "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 \"|\".", "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 mostrado como programas noticiosos. 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.", "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 \"|\".", "XmlTvSportsCategoriesHelp": "Los programas con estas categorías serán mostrados como programas deportivos. Separe varios con un \"|\".",
"Yes": "Sí", "Yes": "Sí",
@ -1463,7 +1463,7 @@
"EveryXHours": "Cada {0} horas", "EveryXHours": "Cada {0} horas",
"EveryHour": "Cada hora", "EveryHour": "Cada hora",
"EveryXMinutes": "Cada {0} minutos", "EveryXMinutes": "Cada {0} minutos",
"OnWakeFromSleep": "Al despertar del sueño", "OnWakeFromSleep": "Activarse del Modo Suspensión",
"DailyAt": "Diariamente a las {0}", "DailyAt": "Diariamente a las {0}",
"LastSeen": "Ultima vez visto {0}", "LastSeen": "Ultima vez visto {0}",
"PersonRole": "como {0}", "PersonRole": "como {0}",
@ -1475,7 +1475,7 @@
"ReleaseGroup": "Grupo de salida", "ReleaseGroup": "Grupo de salida",
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferir información embebida en el episodio sobre el nombre de archivo", "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.", "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", "Person": "Persona",
"OtherArtist": "Otro artista", "OtherArtist": "Otro artista",
"OptionRandom": "Aleatorio", "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.", "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", "AllowFfmpegThrottling": "Aceleración de Transcoders",
"AlbumArtist": "Álbum de artista", "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."
} }

View File

@ -1234,7 +1234,7 @@
"Auto": "Automático", "Auto": "Automático",
"AutoBasedOnLanguageSetting": "Automático (basado en la configuración de idioma)", "AutoBasedOnLanguageSetting": "Automático (basado en la configuración de idioma)",
"Banner": "Pancarta", "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", "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.", "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", "ColorPrimaries": "Colores primarios",
@ -1499,6 +1499,6 @@
"Episode": "Episodio", "Episode": "Episodio",
"BoxSet": "Box Set", "BoxSet": "Box Set",
"Artist": "Artista", "Artist": "Artista",
"AlbumArtist": "Álbum de artista", "AlbumArtist": "Artista del álbum",
"Album": "Álbum" "Album": "Álbum"
} }

View File

@ -14,7 +14,7 @@
"Alerts": "Meldingen", "Alerts": "Meldingen",
"All": "Alle", "All": "Alle",
"AllChannels": "Alle kanalen", "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", "AllEpisodes": "Alle afleveringen",
"AllLanguages": "Alle talen", "AllLanguages": "Alle talen",
"AllLibraries": "Alle bibliotheken", "AllLibraries": "Alle bibliotheken",
@ -1461,5 +1461,7 @@
"TabStreaming": "Streamen", "TabStreaming": "Streamen",
"TabTrailers": "Trailers", "TabTrailers": "Trailers",
"OptionAuto": "Auto", "OptionAuto": "Auto",
"OptionProfileVideo": "Video" "OptionProfileVideo": "Video",
"AlbumArtist": "Album Artiest",
"Album": "Album"
} }

View File

@ -5,14 +5,14 @@
"Albums": "Albumy", "Albums": "Albumy",
"All": "Všetko", "All": "Všetko",
"AllChannels": "Všetky kanály", "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", "AllEpisodes": "Všetky epizódy",
"AllLanguages": "Všetky jazyky", "AllLanguages": "Všetky jazyky",
"AllLibraries": "Všetky knižnice", "AllLibraries": "Všetky knižnice",
"AllowMediaConversion": "Povoliť konverziu médií", "AllowMediaConversion": "Povoliť konverziu médií",
"AllowRemoteAccess": "Povoliť vzdialené pripojenia k tomuto Jellyfin serveru.", "AllowRemoteAccess": "Povoliť vzdialené pripojenia k tomuto Jellyfin serveru.",
"AllowRemoteAccessHelp": "Nezaškrtnuté znamená, že všetky vzdialené pripojenia budú blokované.", "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", "AnyLanguage": "Akýkoľvek jazyk",
"AroundTime": "Okolo {0}", "AroundTime": "Okolo {0}",
"Artists": "Umelci", "Artists": "Umelci",
@ -306,7 +306,7 @@
"Identify": "Identifikovať", "Identify": "Identifikovať",
"Images": "Obrázky", "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.", "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", "ItemCount": "{0} položiek",
"Items": "Položky", "Items": "Položky",
"Kids": "Detské", "Kids": "Detské",
@ -578,12 +578,12 @@
"NoNextUpItemsMessage": "Nič nenájdené. Začnite pozerať vaše seriály!", "NoNextUpItemsMessage": "Nič nenájdené. Začnite pozerať vaše seriály!",
"NoPluginConfigurationMessage": "Tento zásuvný modul nemá žiadne nastavenia.", "NoPluginConfigurationMessage": "Tento zásuvný modul nemá žiadne nastavenia.",
"NoSubtitleSearchResultsFound": "Žiadne výsledky.", "NoSubtitleSearchResultsFound": "Žiadne výsledky.",
"NoSubtitles": "Žiadne titulky", "NoSubtitles": "Žiadne",
"None": "Žiadne", "None": "Žiadne",
"Normal": "Normálne", "Normal": "Normálne",
"NumLocationsValue": "{0} priečinkov", "NumLocationsValue": "{0} priečinkov",
"OneChannel": "Jeden kanál", "OneChannel": "Jeden kanál",
"OnlyForcedSubtitles": "Iba vynútené titulky", "OnlyForcedSubtitles": "Iba vynútené",
"OnlyForcedSubtitlesHelp": "Budú zobrazené iba titulky označené ako vynútené.", "OnlyForcedSubtitlesHelp": "Budú zobrazené iba titulky označené ako vynútené.",
"OptionAdminUsers": "Administrátori", "OptionAdminUsers": "Administrátori",
"OptionAllUsers": "Všetci používatelia", "OptionAllUsers": "Všetci používatelia",
@ -677,9 +677,9 @@
"OptionWeekly": "Týždenne", "OptionWeekly": "Týždenne",
"OriginalAirDateValue": "Pôvodný dátum vysielania: {0}", "OriginalAirDateValue": "Pôvodný dátum vysielania: {0}",
"Overview": "Prehľad", "Overview": "Prehľad",
"PackageInstallCancelled": "{0} inštalácia zrušená.", "PackageInstallCancelled": "{0} (verzia{1}) inštalácia zrušená.",
"PackageInstallCompleted": "{0} inštalácia dokončená.", "PackageInstallCompleted": "{0} (verzia{1}) inštalácia dokončená.",
"PackageInstallFailed": "{0} inštalácia zlyhala.", "PackageInstallFailed": "{0} (verzia {1}) inštalácia zlyhala.",
"ParentalRating": "Parental Rating", "ParentalRating": "Parental Rating",
"PasswordMatchError": "Heslo a potvrdenie hesla sa musia zhodovať.", "PasswordMatchError": "Heslo a potvrdenie hesla sa musia zhodovať.",
"PasswordResetComplete": "Heslo bolo obnovené.", "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.", "DirectStreamHelp2": "Priame streamovanie súboru používa veľmi málo procesorového výkonu bez straty kvality videa.",
"DirectStreaming": "Priame streamovanie", "DirectStreaming": "Priame streamovanie",
"DisplayMissingEpisodesWithinSeasonsHelp": "Toto musí byť povolené pre TV knižnice v nastavení servera.", "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", "EnableCinemaMode": "Kino režim",
"EnableNextVideoInfoOverlay": "Zobraziť informácie o nasledujúcom videu počas prehrávania", "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.", "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", "OptionEnableForAllTuners": "Povoliť pre všetky tunery",
"OptionEnableExternalContentInSuggestions": "Povoliť externý obsah v návrhoch", "OptionEnableExternalContentInSuggestions": "Povoliť externý obsah v návrhoch",
"OptionBlockChannelContent": "Obsah internetového kanála", "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é", "Off": "Vypnuté",
"MusicVideo": "Videoklip", "MusicVideo": "Videoklip",
"MusicArtist": "Interpret", "MusicArtist": "Interpret",
@ -1180,7 +1180,7 @@
"CancelSeries": "Ukončiť seriál", "CancelSeries": "Ukončiť seriál",
"ButtonSplit": "Rozdeliť", "ButtonSplit": "Rozdeliť",
"ButtonAddImage": "Pridať obrázok", "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.", "BrowsePluginCatalogMessage": "Prehliadnite si náš katalóg dostupných zásuvných modulov.",
"Browse": "Prechádzať", "Browse": "Prechádzať",
"Blacklist": "Blacklist", "Blacklist": "Blacklist",
@ -1466,11 +1466,37 @@
"OptionForceRemoteSourceTranscoding": "Vynútiť transkódovanie vzdialených mediálnych zdrojov (ako napr. živá TV)", "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}", "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.", "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.", "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", "AllowFfmpegThrottling": "Obmedzenie transkódovania",
"PreferEmbeddedEpisodeInfosOverFileNames": "Preferovať vložené informácie o epizóde pred názvom súboru", "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.", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Toto využíva informácie o epizóde z vložených metadát, pokiaľ sú dostupne.",
"ClientSettings": "Nastavenie klienta", "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"
} }

View File

@ -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", "Actor": "Skådespelare",
"Add": "Lägg till", "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", "AddToCollection": "Lägg till i samling",
"AddToPlayQueue": "Lägg till i spelkö", "AddToPlayQueue": "Lägg till i spelkö",
"AddToPlaylist": "Lägg till i spellista", "AddToPlaylist": "Lägg till i spellista",
@ -24,7 +24,7 @@
"AllowRemoteAccessHelp": "Om avaktiverat så blockeras alla fjärranslutningar.", "AllowRemoteAccessHelp": "Om avaktiverat så blockeras alla fjärranslutningar.",
"AlwaysPlaySubtitles": "Visa alltid undertexter", "AlwaysPlaySubtitles": "Visa alltid undertexter",
"AlwaysPlaySubtitlesHelp": "Undertexter på det önskade språket kommer att laddas oavsett ljudspårets språk.", "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", "Anytime": "När som helst",
"AroundTime": "Runt {0}", "AroundTime": "Runt {0}",
"Art": "Grafik", "Art": "Grafik",
@ -46,7 +46,7 @@
"BoxRear": "Omslag (baksida)", "BoxRear": "Omslag (baksida)",
"Browse": "Bläddra", "Browse": "Bläddra",
"BrowsePluginCatalogMessage": "Besök katalogen för att se tillgängliga tillägg.", "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", "ButtonAdd": "Lägg till",
"ButtonAddMediaLibrary": "Lägg till mediabibliotek", "ButtonAddMediaLibrary": "Lägg till mediabibliotek",
"ButtonAddScheduledTaskTrigger": "Lägg till utlösare", "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å", "DisplayInOtherHomeScreenSections": "Visa sektioner på hemskärmen som till exempel senast media och fortsätt kolla på",
"DisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i säsonger", "DisplayMissingEpisodesWithinSeasons": "Visa saknade avsnitt i säsonger",
"DisplayMissingEpisodesWithinSeasonsHelp": "Detta måste också vara aktiverat för TV-bibliotek i serverkonfigurationen.", "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", "DoNotRecord": "Spela inte in",
"Down": "Ner", "Down": "Ner",
"Download": "Ladda ned", "Download": "Ladda ned",
@ -450,7 +450,7 @@
"Images": "Bilder", "Images": "Bilder",
"ImportFavoriteChannelsHelp": "Aktivera för att endast importera kanaler som är märkta som favoriter på den här TV-mottagaren.", "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.", "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", "InstantMix": "Omedelbar mix",
"ItemCount": "{0} objekt", "ItemCount": "{0} objekt",
"Items": "Objekt", "Items": "Objekt",
@ -900,7 +900,7 @@
"OneChannel": "En kanal", "OneChannel": "En kanal",
"OnlyForcedSubtitles": "Endast tvingande undertexter", "OnlyForcedSubtitles": "Endast tvingande undertexter",
"OnlyForcedSubtitlesHelp": "Endast undertexter markerade som tvingande kommer att laddas.", "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", "OptionAdminUsers": "Administratörer",
"OptionAlbumArtist": "Albumartist", "OptionAlbumArtist": "Albumartist",
"OptionAllUsers": "Alla användare", "OptionAllUsers": "Alla användare",
@ -1029,9 +1029,9 @@
"OptionWeekly": "Varje vecka", "OptionWeekly": "Varje vecka",
"OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}", "OriginalAirDateValue": "Ursprungligt sändningsdatum: {0}",
"Overview": "Översikt", "Overview": "Översikt",
"PackageInstallCancelled": "Installationen av {0} avbröts.", "PackageInstallCancelled": "Installationen av {0} (version {1}) avbröts.",
"PackageInstallCompleted": "Installationen av {0} slutfördes.", "PackageInstallCompleted": "Installationen av {0} (version {1}) slutfördes.",
"PackageInstallFailed": "Installationen av {0} misslyckades.", "PackageInstallFailed": "Installationen av {0} (version {1}) misslyckades.",
"ParentalRating": "Parental Rating", "ParentalRating": "Parental Rating",
"PasswordMatchError": "Lösenordet och bekräftelsen måste överensstämma.", "PasswordMatchError": "Lösenordet och bekräftelsen måste överensstämma.",
"PasswordResetComplete": "Lösenordet har återställts.", "PasswordResetComplete": "Lösenordet har återställts.",
@ -1465,8 +1465,29 @@
"LabelTranscodingFramerate": "Omkodning framerate:", "LabelTranscodingFramerate": "Omkodning framerate:",
"LabelTranscodes": "Omkodningar:", "LabelTranscodes": "Omkodningar:",
"LabelTranscodePath": "Omkodning sökväg:", "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.", "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", "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"
} }

View File

@ -13,7 +13,7 @@ module.exports = merge(common, {
rules: [ rules: [
{ {
test: /\.js$/, test: /\.js$/,
exclude: /node_modules/, exclude: /node_modules[\\/](?!query-string)/,
loader: "babel-loader" loader: "babel-loader"
}, },
{ {

View File

@ -8,7 +8,7 @@ module.exports = merge(common, {
rules: [ rules: [
{ {
test: /\.js$/, test: /\.js$/,
exclude: /node_modules/, exclude: /node_modules[\\/](?!query-string)/,
loader: "babel-loader" loader: "babel-loader"
}, },
{ {

View File

@ -6694,6 +6694,10 @@ levn@^0.3.0, levn@~0.3.0:
version "4.0.0" version "4.0.0"
resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#7e6b75dcab9f7dad12719983510d05242803707c" 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: liftoff@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3"