1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge branch 'jellyfin:master' into audio-normalization

This commit is contained in:
TelepathicWalrus 2023-03-27 18:05:56 +01:00 committed by GitHub
commit 8110c324d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 1402 additions and 1210 deletions

View file

@ -26,8 +26,6 @@ jobs:
- script: 'npm ci --no-audit'
displayName: 'Install Dependencies'
env:
SKIP_PREPARE: 'true'
- script: 'npm run build:development'
displayName: 'Build Development'

View file

@ -17,4 +17,5 @@ jobs:
- uses: eps1lon/actions-label-merge-conflict@fd1f295ee7443d13745804bc49fe158e240f6c6e # tag=v2.1.0
with:
dirtyLabel: 'merge conflict'
commentOnDirty: 'This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.'
repoToken: ${{ secrets.JF_BOT_TOKEN }}

View file

@ -19,13 +19,13 @@ jobs:
language: [ 'javascript' ]
steps:
- name: Checkout repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Initialize CodeQL
uses: github/codeql-action/init@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6
uses: github/codeql-action/init@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7
with:
languages: ${{ matrix.language }}
queries: +security-extended
- name: Autobuild
uses: github/codeql-action/autobuild@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6
uses: github/codeql-action/autobuild@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@16964e90ba004cdf0cd845b866b5df21038b7723 # v2.2.6
uses: github/codeql-action/analyze@168b99b3c22180941ae7dbdd5f5c9678ede476ba # v2.2.7

View file

@ -18,7 +18,7 @@ jobs:
comment-id: ${{ github.event.comment.id }}
reactions: '+1'
- name: Checkout the latest code
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
with:
token: ${{ secrets.JF_BOT_TOKEN }}
fetch-depth: 0

View file

@ -13,7 +13,7 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Setup node environment
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
@ -24,8 +24,6 @@ jobs:
- name: Install Node.js dependencies
run: npm ci --no-audit
env:
SKIP_PREPARE: true
- name: Run a production build
run: npm run build:production
@ -39,7 +37,7 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Setup node environment
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
@ -50,8 +48,6 @@ jobs:
- name: Install Node.js dependencies
run: npm ci --no-audit
env:
SKIP_PREPARE: true
- name: Run eslint
run: npm run lint
@ -62,7 +58,7 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Setup node environment
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
@ -76,8 +72,6 @@ jobs:
- name: Install Node.js dependencies
run: npm ci --no-audit
env:
SKIP_PREPARE: true
- name: Run stylelint
run: npm run stylelint:css
@ -88,7 +82,7 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Setup node environment
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
@ -102,8 +96,6 @@ jobs:
- name: Install Node.js dependencies
run: npm ci --no-audit
env:
SKIP_PREPARE: true
- name: Run stylelint
run: npm run stylelint:scss

View file

@ -1,18 +1,24 @@
name: Issue Stale Check
name: Stale Check
on:
schedule:
- cron: '30 1 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
stale:
issues:
name: Check issues
runs-on: ubuntu-latest
if: ${{ contains(github.repository, 'jellyfin/') }}
steps:
- uses: actions/stale@6f05e4244c9a0b2ed3401882b05d701dd0a7289b # v7.0.0
with:
repo-token: ${{ secrets.JF_BOT_TOKEN }}
operations-per-run: 75
days-before-stale: 120
days-before-pr-stale: -1
days-before-close: 21
@ -25,3 +31,21 @@ jobs:
If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or master branch, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label.
This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on [Matrix or Social Media](https://jellyfin.org/contact).
prs-conflicts:
name: Check PRs with merge conflicts
runs-on: ubuntu-latest
if: ${{ contains(github.repository, 'jellyfin/') }}
steps:
- uses: actions/stale@6f05e4244c9a0b2ed3401882b05d701dd0a7289b # v7.0.0
with:
repo-token: ${{ secrets.JF_BOT_TOKEN }}
operations-per-run: 75
# The merge conflict action will remove the label when updated
remove-stale-when-updated: false
days-before-stale: -1
days-before-close: 90
days-before-issue-close: -1
stale-pr-label: merge conflict
close-pr-message: |-
This PR has been closed due to having unresolved merge conflicts.

View file

@ -13,7 +13,7 @@ jobs:
steps:
- name: Check out Git repository
uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Setup node environment
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
@ -24,8 +24,6 @@ jobs:
- name: Install Node.js dependencies
run: npm ci --no-audit
env:
SKIP_PREPARE: true
- name: Run tsc
run: npm run build:check
run: npm run build:check

1
debian/rules vendored
View file

@ -12,6 +12,7 @@ override_dh_clistrip:
override_dh_auto_build:
npm ci --no-audit --unsafe-perm
npm run build:production
mv $(CURDIR)/dist $(CURDIR)/web
override_dh_auto_clean:

View file

@ -8,4 +8,6 @@ RUN apk add autoconf g++ make libpng-dev gifsicle alpine-sdk automake libtool ma
WORKDIR ${SOURCE_DIR}
COPY . .
RUN npm ci --no-audit --unsafe-perm && mv dist ${ARTIFACT_DIR}
RUN npm ci --no-audit --unsafe-perm \
&& npm run build:production \
&& mv dist ${ARTIFACT_DIR}

View file

@ -15,6 +15,7 @@ fi
# build archives
npm ci --no-audit --unsafe-perm
npm run build:production
mv dist jellyfin-web_${version}
tar -czf jellyfin-web_${version}_portable.tar.gz jellyfin-web_${version}
rm -rf dist

View file

@ -35,6 +35,7 @@ chown root:root -R .
%build
npm ci --no-audit --unsafe-perm
npm run build:production
%install

278
package-lock.json generated
View file

@ -23,14 +23,14 @@
"classnames": "2.3.2",
"core-js": "3.29.0",
"date-fns": "2.29.3",
"dompurify": "2.4.4",
"dompurify": "3.0.1",
"epubjs": "0.4.2",
"escape-html": "1.0.3",
"fast-text-encoding": "1.0.6",
"flv.js": "1.6.2",
"headroom.js": "0.12.0",
"history": "5.3.0",
"hls.js": "1.3.4",
"hls.js": "1.2.4",
"intersection-observer": "0.12.2",
"jellyfin-apiclient": "1.10.0",
"jquery": "3.6.3",
@ -68,8 +68,8 @@
"@types/lodash-es": "4.17.6",
"@types/react": "17.0.53",
"@types/react-dom": "17.0.19",
"@typescript-eslint/eslint-plugin": "5.54.0",
"@typescript-eslint/parser": "5.54.0",
"@typescript-eslint/eslint-plugin": "5.54.1",
"@typescript-eslint/parser": "5.54.1",
"@uupaa/dynamic-import-polyfill": "1.0.2",
"autoprefixer": "10.4.13",
"babel-loader": "9.1.2",
@ -93,7 +93,7 @@
"expose-loader": "4.0.0",
"html-loader": "4.2.0",
"html-webpack-plugin": "5.5.0",
"mini-css-extract-plugin": "2.7.2",
"mini-css-extract-plugin": "2.7.3",
"postcss": "8.4.21",
"postcss-loader": "7.0.2",
"postcss-preset-env": "8.0.1",
@ -105,11 +105,11 @@
"stylelint": "15.2.0",
"stylelint-config-rational-order": "0.1.2",
"stylelint-no-browser-hacks": "1.2.1",
"stylelint-order": "6.0.2",
"stylelint-order": "6.0.3",
"stylelint-scss": "4.4.0",
"ts-loader": "9.4.2",
"typescript": "4.9.5",
"webpack": "5.75.0",
"webpack": "5.76.0",
"webpack-cli": "5.0.1",
"webpack-dev-server": "4.11.1",
"webpack-merge": "5.8.0",
@ -2611,11 +2611,11 @@
"integrity": "sha512-xQVJw+lZUg4U1TmLS80reBECfPtpCgRF8hhUSvUUQM9g68OvINyUU3K2yqRH+8tomGpghiRaIcr/bUJ83e0veA=="
},
"node_modules/@jellyfin/sdk": {
"version": "0.0.0-unstable.202302070552",
"resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202302070552.tgz",
"integrity": "sha512-hwrHLLFPTCEcrMywpLWwgGKEDKBjgu3o+ruMV3qCG7uAmKAQq48kuaZ818rJD+LjWBjBIUixnLJq1qUlHsgc+A==",
"version": "0.0.0-unstable.202303130502",
"resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202303130502.tgz",
"integrity": "sha512-j3ntDjTnZlU511J0CpuPVSSSYrx9so4Y3q6qYOVsB6/evH4/2BNkWYRbKgCnUtCULIV90T6KGc2EcS4GGxojCg==",
"dependencies": {
"axios": "1.2.6",
"axios": "1.3.4",
"compare-versions": "5.0.3"
}
},
@ -3200,14 +3200,14 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz",
"integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz",
"integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==",
"dev": true,
"dependencies": {
"@typescript-eslint/scope-manager": "5.54.0",
"@typescript-eslint/type-utils": "5.54.0",
"@typescript-eslint/utils": "5.54.0",
"@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/type-utils": "5.54.1",
"@typescript-eslint/utils": "5.54.1",
"debug": "^4.3.4",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
@ -3249,14 +3249,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz",
"integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz",
"integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==",
"dev": true,
"dependencies": {
"@typescript-eslint/scope-manager": "5.54.0",
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/typescript-estree": "5.54.0",
"@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/typescript-estree": "5.54.1",
"debug": "^4.3.4"
},
"engines": {
@ -3276,13 +3276,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz",
"integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz",
"integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/visitor-keys": "5.54.0"
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/visitor-keys": "5.54.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@ -3293,13 +3293,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz",
"integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz",
"integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==",
"dev": true,
"dependencies": {
"@typescript-eslint/typescript-estree": "5.54.0",
"@typescript-eslint/utils": "5.54.0",
"@typescript-eslint/typescript-estree": "5.54.1",
"@typescript-eslint/utils": "5.54.1",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
},
@ -3320,9 +3320,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz",
"integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz",
"integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@ -3333,13 +3333,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz",
"integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz",
"integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/visitor-keys": "5.54.0",
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/visitor-keys": "5.54.1",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@ -3404,16 +3404,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz",
"integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz",
"integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
"@types/semver": "^7.3.12",
"@typescript-eslint/scope-manager": "5.54.0",
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/typescript-estree": "5.54.0",
"@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/typescript-estree": "5.54.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0",
"semver": "^7.3.7"
@ -3445,12 +3445,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz",
"integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz",
"integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/types": "5.54.1",
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
@ -4111,9 +4111,9 @@
}
},
"node_modules/axios": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.6.tgz",
"integrity": "sha512-rC/7F08XxZwjMV4iuWv+JpD3E0Ksqg9nac4IIg6RwNuF0JTeWoCo/mBNG54+tNhhI11G3/VDRbdDQTs9hGp4pQ==",
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@ -5965,9 +5965,9 @@
"integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww=="
},
"node_modules/dompurify": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.4.tgz",
"integrity": "sha512-1e2SpqHiRx4DPvmRuXU5J0di3iQACwJM+mFGE2HAkkK7Tbnfk9WcghcAmyWc9CRrjyRRUpmuhPUH6LphQQR3EQ=="
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.1.tgz",
"integrity": "sha512-60tsgvPKwItxZZdfLmamp0MTcecCta3avOhsLgPZ0qcWt96OasFfhkeIRbJ6br5i0fQawT1/RBGB5L58/Jpwuw=="
},
"node_modules/domutils": {
"version": "1.7.0",
@ -8468,9 +8468,9 @@
}
},
"node_modules/hls.js": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.3.4.tgz",
"integrity": "sha512-iFEwVqtEDk6sKotcTwtJ5OMo/nuDTk9PrpB8FI2J2WYf8EriTVfR4FaK0aNyYtwbYeRSWCXJKlz23xeREdlNYg=="
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.2.4.tgz",
"integrity": "sha512-yC3K79Kzq1W+OgjT12JxKMDXv9DbfvulppxmPBl7D04SaTyd2IwWk5eNASQV1mUaPlKbjr16yI9292qpSGo0ig=="
},
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
@ -10400,9 +10400,9 @@
}
},
"node_modules/mini-css-extract-plugin": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz",
"integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==",
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.3.tgz",
"integrity": "sha512-CD9cXeKeXLcnMw8FZdtfrRrLaM7gwCl4nKuKn2YkY2Bw5wdlB8zU2cCzw+w2zS9RFvbrufTBkMCJACNPwqQA0w==",
"dev": true,
"dependencies": {
"schema-utils": "^4.0.0"
@ -17063,22 +17063,22 @@
}
},
"node_modules/stylelint-order": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.2.tgz",
"integrity": "sha512-yuac0BE6toHd27wUPvYVVQicAJthKFIv1HPQFH3Q0dExiO3Z6Uam7geoO0tUd5Z9ddsATYK++1qWNDX4RxMH5Q==",
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz",
"integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==",
"dev": true,
"dependencies": {
"postcss": "^8.4.21",
"postcss-sorting": "^8.0.1"
"postcss-sorting": "^8.0.2"
},
"peerDependencies": {
"stylelint": "^14.0.0 || ^15.0.0"
}
},
"node_modules/stylelint-order/node_modules/postcss-sorting": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.1.tgz",
"integrity": "sha512-go9Zoxx7KQH+uLrJ9xa5wRErFeXu01ydA6O8m7koPXkmAN7Ts//eRcIqjo0stBR4+Nir2gMYDOWAOx7O5EPUZA==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz",
"integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==",
"dev": true,
"peerDependencies": {
"postcss": "^8.4.20"
@ -18361,9 +18361,9 @@
"dev": true
},
"node_modules/webpack": {
"version": "5.75.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
"integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
"version": "5.76.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz",
"integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==",
"devOptional": true,
"dependencies": {
"@types/eslint-scope": "^3.7.3",
@ -20912,11 +20912,11 @@
"integrity": "sha512-xQVJw+lZUg4U1TmLS80reBECfPtpCgRF8hhUSvUUQM9g68OvINyUU3K2yqRH+8tomGpghiRaIcr/bUJ83e0veA=="
},
"@jellyfin/sdk": {
"version": "0.0.0-unstable.202302070552",
"resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202302070552.tgz",
"integrity": "sha512-hwrHLLFPTCEcrMywpLWwgGKEDKBjgu3o+ruMV3qCG7uAmKAQq48kuaZ818rJD+LjWBjBIUixnLJq1qUlHsgc+A==",
"version": "0.0.0-unstable.202303130502",
"resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202303130502.tgz",
"integrity": "sha512-j3ntDjTnZlU511J0CpuPVSSSYrx9so4Y3q6qYOVsB6/evH4/2BNkWYRbKgCnUtCULIV90T6KGc2EcS4GGxojCg==",
"requires": {
"axios": "1.2.6",
"axios": "1.3.4",
"compare-versions": "5.0.3"
}
},
@ -21437,14 +21437,14 @@
}
},
"@typescript-eslint/eslint-plugin": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz",
"integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz",
"integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==",
"dev": true,
"requires": {
"@typescript-eslint/scope-manager": "5.54.0",
"@typescript-eslint/type-utils": "5.54.0",
"@typescript-eslint/utils": "5.54.0",
"@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/type-utils": "5.54.1",
"@typescript-eslint/utils": "5.54.1",
"debug": "^4.3.4",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
@ -21466,53 +21466,53 @@
}
},
"@typescript-eslint/parser": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz",
"integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz",
"integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==",
"dev": true,
"requires": {
"@typescript-eslint/scope-manager": "5.54.0",
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/typescript-estree": "5.54.0",
"@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/typescript-estree": "5.54.1",
"debug": "^4.3.4"
}
},
"@typescript-eslint/scope-manager": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz",
"integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz",
"integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==",
"dev": true,
"requires": {
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/visitor-keys": "5.54.0"
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/visitor-keys": "5.54.1"
}
},
"@typescript-eslint/type-utils": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz",
"integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz",
"integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==",
"dev": true,
"requires": {
"@typescript-eslint/typescript-estree": "5.54.0",
"@typescript-eslint/utils": "5.54.0",
"@typescript-eslint/typescript-estree": "5.54.1",
"@typescript-eslint/utils": "5.54.1",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
}
},
"@typescript-eslint/types": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz",
"integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz",
"integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz",
"integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz",
"integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==",
"dev": true,
"requires": {
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/visitor-keys": "5.54.0",
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/visitor-keys": "5.54.1",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@ -21552,16 +21552,16 @@
}
},
"@typescript-eslint/utils": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz",
"integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz",
"integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.9",
"@types/semver": "^7.3.12",
"@typescript-eslint/scope-manager": "5.54.0",
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/typescript-estree": "5.54.0",
"@typescript-eslint/scope-manager": "5.54.1",
"@typescript-eslint/types": "5.54.1",
"@typescript-eslint/typescript-estree": "5.54.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0",
"semver": "^7.3.7"
@ -21579,12 +21579,12 @@
}
},
"@typescript-eslint/visitor-keys": {
"version": "5.54.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz",
"integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==",
"version": "5.54.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz",
"integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==",
"dev": true,
"requires": {
"@typescript-eslint/types": "5.54.0",
"@typescript-eslint/types": "5.54.1",
"eslint-visitor-keys": "^3.3.0"
},
"dependencies": {
@ -22088,9 +22088,9 @@
"dev": true
},
"axios": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.6.tgz",
"integrity": "sha512-rC/7F08XxZwjMV4iuWv+JpD3E0Ksqg9nac4IIg6RwNuF0JTeWoCo/mBNG54+tNhhI11G3/VDRbdDQTs9hGp4pQ==",
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@ -23480,9 +23480,9 @@
"integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww=="
},
"dompurify": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.4.tgz",
"integrity": "sha512-1e2SpqHiRx4DPvmRuXU5J0di3iQACwJM+mFGE2HAkkK7Tbnfk9WcghcAmyWc9CRrjyRRUpmuhPUH6LphQQR3EQ=="
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.1.tgz",
"integrity": "sha512-60tsgvPKwItxZZdfLmamp0MTcecCta3avOhsLgPZ0qcWt96OasFfhkeIRbJ6br5i0fQawT1/RBGB5L58/Jpwuw=="
},
"domutils": {
"version": "1.7.0",
@ -25398,9 +25398,9 @@
}
},
"hls.js": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.3.4.tgz",
"integrity": "sha512-iFEwVqtEDk6sKotcTwtJ5OMo/nuDTk9PrpB8FI2J2WYf8EriTVfR4FaK0aNyYtwbYeRSWCXJKlz23xeREdlNYg=="
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.2.4.tgz",
"integrity": "sha512-yC3K79Kzq1W+OgjT12JxKMDXv9DbfvulppxmPBl7D04SaTyd2IwWk5eNASQV1mUaPlKbjr16yI9292qpSGo0ig=="
},
"hoist-non-react-statics": {
"version": "3.3.2",
@ -26818,9 +26818,9 @@
"dev": true
},
"mini-css-extract-plugin": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz",
"integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==",
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.3.tgz",
"integrity": "sha512-CD9cXeKeXLcnMw8FZdtfrRrLaM7gwCl4nKuKn2YkY2Bw5wdlB8zU2cCzw+w2zS9RFvbrufTBkMCJACNPwqQA0w==",
"dev": true,
"requires": {
"schema-utils": "^4.0.0"
@ -31951,19 +31951,19 @@
}
},
"stylelint-order": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.2.tgz",
"integrity": "sha512-yuac0BE6toHd27wUPvYVVQicAJthKFIv1HPQFH3Q0dExiO3Z6Uam7geoO0tUd5Z9ddsATYK++1qWNDX4RxMH5Q==",
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz",
"integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==",
"dev": true,
"requires": {
"postcss": "^8.4.21",
"postcss-sorting": "^8.0.1"
"postcss-sorting": "^8.0.2"
},
"dependencies": {
"postcss-sorting": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.1.tgz",
"integrity": "sha512-go9Zoxx7KQH+uLrJ9xa5wRErFeXu01ydA6O8m7koPXkmAN7Ts//eRcIqjo0stBR4+Nir2gMYDOWAOx7O5EPUZA==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz",
"integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==",
"dev": true,
"requires": {}
}
@ -32798,9 +32798,9 @@
"dev": true
},
"webpack": {
"version": "5.75.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
"integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
"version": "5.76.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz",
"integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==",
"devOptional": true,
"requires": {
"@types/eslint-scope": "^3.7.3",

View file

@ -19,8 +19,8 @@
"@types/lodash-es": "4.17.6",
"@types/react": "17.0.53",
"@types/react-dom": "17.0.19",
"@typescript-eslint/eslint-plugin": "5.54.0",
"@typescript-eslint/parser": "5.54.0",
"@typescript-eslint/eslint-plugin": "5.54.1",
"@typescript-eslint/parser": "5.54.1",
"@uupaa/dynamic-import-polyfill": "1.0.2",
"autoprefixer": "10.4.13",
"babel-loader": "9.1.2",
@ -44,7 +44,7 @@
"expose-loader": "4.0.0",
"html-loader": "4.2.0",
"html-webpack-plugin": "5.5.0",
"mini-css-extract-plugin": "2.7.2",
"mini-css-extract-plugin": "2.7.3",
"postcss": "8.4.21",
"postcss-loader": "7.0.2",
"postcss-preset-env": "8.0.1",
@ -56,11 +56,11 @@
"stylelint": "15.2.0",
"stylelint-config-rational-order": "0.1.2",
"stylelint-no-browser-hacks": "1.2.1",
"stylelint-order": "6.0.2",
"stylelint-order": "6.0.3",
"stylelint-scss": "4.4.0",
"ts-loader": "9.4.2",
"typescript": "4.9.5",
"webpack": "5.75.0",
"webpack": "5.76.0",
"webpack-cli": "5.0.1",
"webpack-dev-server": "4.11.1",
"webpack-merge": "5.8.0",
@ -82,14 +82,14 @@
"classnames": "2.3.2",
"core-js": "3.29.0",
"date-fns": "2.29.3",
"dompurify": "2.4.4",
"dompurify": "3.0.1",
"epubjs": "0.4.2",
"escape-html": "1.0.3",
"fast-text-encoding": "1.0.6",
"flv.js": "1.6.2",
"headroom.js": "0.12.0",
"history": "5.3.0",
"hls.js": "1.3.4",
"hls.js": "1.2.4",
"intersection-observer": "0.12.2",
"jellyfin-apiclient": "1.10.0",
"jquery": "3.6.3",
@ -131,7 +131,6 @@
"scripts": {
"start": "npm run serve",
"serve": "webpack serve --config webpack.dev.js",
"prepare": "node ./scripts/prepare.js",
"build:development": "webpack --config webpack.dev.js",
"build:production": "cross-env NODE_ENV=\"production\" webpack --config webpack.prod.js",
"build:check": "tsc --noEmit",

View file

@ -1,12 +0,0 @@
const { execSync } = require('child_process');
/**
* The npm `prepare` script needs to run a build to support installing
* a package from git repositories (this is dumb but a limitation of how
* npm behaves). We don't want to run these in CI though because
* building is slow so this script will skip the build when the
* `SKIP_PREPARE` environment variable has been set.
*/
if (!process.env.SKIP_PREPARE) {
execSync('webpack --config webpack.prod.js', { stdio: 'inherit' });
}

View file

@ -18,6 +18,7 @@ import browser from '../../scripts/browser';
import { playbackManager } from '../playback/playbackmanager';
import itemShortcuts from '../shortcuts';
import imageHelper from '../../scripts/imagehelper';
import { randomInt } from '../../utils/number.ts';
import './card.scss';
import '../../elements/emby-button/paper-icon-button-light';
import '../guide/programs.scss';
@ -640,16 +641,6 @@ import { appRouter } from '../appRouter';
};
}
/**
* Generates a random integer in a given range.
* @param {number} min - Minimum of the range.
* @param {number} max - Maximum of the range.
* @returns {number} Randomly generated number.
*/
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
/**
* Generates an index used to select the default color of a card based on a string.
* @param {?string} [str] - String to use for generating the index.
@ -669,7 +660,7 @@ import { appRouter } from '../appRouter';
return (index % numRandomColors) + 1;
} else {
return getRandomInt(1, numRandomColors);
return randomInt(1, numRandomColors);
}
}

View file

@ -15,7 +15,6 @@ import toast from './toast/toast';
const user = options.user;
const canPlay = playbackManager.canPlay(item);
const restrictOptions = (browser.operaTv || browser.web0s) && !user.Policy.IsAdministrator;
const commands = [];
@ -99,8 +98,8 @@ import toast from './toast/toast';
});
}
if (!restrictOptions) {
if (itemHelper.supportsAddingToCollection(item)) {
if (!browser.tv) {
if (itemHelper.supportsAddingToCollection(item) && options.EnableCollectionManagement) {
commands.push({
name: globalize.translate('AddToCollection'),
id: 'addtocollection',
@ -272,7 +271,7 @@ import toast from './toast/toast';
});
}
if (!restrictOptions && options.share === true && itemHelper.canShare(item, user)) {
if (!browser.tv && options.share === true && itemHelper.canShare(item, user)) {
commands.push({
name: globalize.translate('Share'),
id: 'share',

View file

@ -1,3 +1,5 @@
import { randomInt } from '../../utils/number.ts';
let currentId = 0;
function addUniquePlaylistItemId(item) {
if (!item.PlaylistItemId) {
@ -56,7 +58,7 @@ class PlayQueueManager {
const currentPlaylistItem = this._playlist.splice(this.getCurrentPlaylistIndex(), 1)[0];
for (let i = this._playlist.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * i);
const j = randomInt(0, i - 1);
const temp = this._playlist[i];
this._playlist[i] = this._playlist[j];
this._playlist[j] = temp;

View file

@ -80,6 +80,13 @@
</div>
</div>
<div class="verticalSection">
<h2>${HeaderPerformance}</h2>
<div class="inputContainer">
<input is="emby-input" id="txtParallelImageEncodingLimit" label="${LabelParallelImageEncodingLimit}" type="number" pattern="[0-9]*" min="0" step="1" />
<div class="fieldDescription">${LabelParallelImageEncodingLimitHelp}</div>
</div>
</div>
<br />
<div>
<button is="emby-button" type="submit" class="raised button-submit block">

View file

@ -21,6 +21,7 @@ import alert from '../../components/alert';
$('#selectLocalizationLanguage', page).html(languageOptions.map(function (language) {
return '<option value="' + language.Value + '">' + language.Name + '</option>';
})).val(config.UICulture);
page.querySelector('#txtParallelImageEncodingLimit').value = config.ParallelImageEncodingLimit || '';
loading.hide();
}
@ -36,6 +37,7 @@ import alert from '../../components/alert';
config.MetadataPath = $('#txtMetadataPath', form).val();
config.MetadataNetworkPath = $('#txtMetadataNetworkPath', form).val();
config.QuickConnectAvailable = form.querySelector('#chkQuickConnectAvailable').checked;
config.ParallelImageEncodingLimit = parseInt(form.querySelector('#txtParallelImageEncodingLimit').value || '0', 10);
ApiClient.updateServerConfiguration(config).then(function() {
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) {

View file

@ -1,4 +1,5 @@
import { PluginType } from '../../types/plugin.ts';
import { randomInt } from '../../utils/number.ts';
export default function () {
const self = this;
@ -25,16 +26,12 @@ export default function () {
const elem = document.querySelector('.logoScreenSaverImage');
if (elem && elem.animate) {
const random = getRandomInt(0, animations.length - 1);
const random = randomInt(0, animations.length - 1);
animations[random](elem, 1);
}
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function bounceInLeft(elem, iterations) {
const keyframes = [
{ transform: 'translate3d(-3000px, 0, 0)', opacity: '0', offset: 0 },

View file

@ -159,6 +159,7 @@ const UserEdit: FunctionComponent = () => {
(page.querySelector('.chkIsAdmin') as HTMLInputElement).checked = user.Policy.IsAdministrator;
(page.querySelector('.chkDisabled') as HTMLInputElement).checked = user.Policy.IsDisabled;
(page.querySelector('.chkIsHidden') as HTMLInputElement).checked = user.Policy.IsHidden;
(page.querySelector('.chkEnableCollectionManagement') as HTMLInputElement).checked = user.Policy.EnableCollectionManagement;
(page.querySelector('.chkRemoteControlSharedDevices') as HTMLInputElement).checked = user.Policy.EnableSharedDeviceControl;
(page.querySelector('.chkEnableRemoteControlOtherUsers') as HTMLInputElement).checked = user.Policy.EnableRemoteControlOfOtherUsers;
(page.querySelector('.chkEnableDownloading') as HTMLInputElement).checked = user.Policy.EnableContentDownloading;
@ -224,6 +225,7 @@ const UserEdit: FunctionComponent = () => {
user.Policy.EnableAudioPlaybackTranscoding = (page.querySelector('.chkEnableAudioPlaybackTranscoding') as HTMLInputElement).checked;
user.Policy.EnableVideoPlaybackTranscoding = (page.querySelector('.chkEnableVideoPlaybackTranscoding') as HTMLInputElement).checked;
user.Policy.EnablePlaybackRemuxing = (page.querySelector('.chkEnableVideoPlaybackRemuxing') as HTMLInputElement).checked;
user.Policy.EnableCollectionManagement = (page.querySelector('.chkEnableCollectionManagement') as HTMLInputElement).checked;
user.Policy.ForceRemoteSourceTranscoding = (page.querySelector('.chkForceRemoteSourceTranscoding') as HTMLInputElement).checked;
user.Policy.EnableContentDownloading = (page.querySelector('.chkEnableDownloading') as HTMLInputElement).checked;
user.Policy.EnableRemoteAccess = (page.querySelector('.chkRemoteAccess') as HTMLInputElement).checked;
@ -375,6 +377,11 @@ const UserEdit: FunctionComponent = () => {
className='chkIsAdmin'
title='OptionAllowUserToManageServer'
/>
<CheckBoxElement
labelClassName='checkboxContainer'
className='chkEnableCollectionManagement'
title='AllowCollectionManagement'
/>
<div id='featureAccessFields' className='verticalSection'>
<h2 className='paperListLabel'>
{globalize.translate('HeaderFeatureAccess')}

View file

@ -1702,5 +1702,8 @@
"SubtitleWhite": "Белы",
"SubtitleYellow": "Жоўты",
"Featurette": "Кароткаметражка",
"Short": "Кароткаметражка"
"Short": "Кароткаметражка",
"HeaderPerformance": "Прадукцыйнасць",
"LabelParallelImageEncodingLimit": "Ліміт паралельнага кадавання выявы",
"LabelParallelImageEncodingLimitHelp": "Максімальная колькасць кадавання малюнкаў, якія могуць працаваць паралельна. Пры ўсталёўцы 0 вы выбіраеце ліміт на аснове спецыфікацый вашай сістэмы."
}

File diff suppressed because it is too large Load diff

View file

@ -1716,5 +1716,8 @@
"SubtitleWhite": "Bílá",
"SubtitleYellow": "Žlutá",
"Featurette": "Středně dlouhý film",
"Short": "Krátký film"
"Short": "Krátký film",
"HeaderPerformance": "Výkon",
"LabelParallelImageEncodingLimit": "Počet paralelních kódování obrázků",
"LabelParallelImageEncodingLimitHelp": "Maximální počet kódování obrázků, které mohou běžet zároveň. Nastavením na 0 bude limit nastaven dle parametrů systému."
}

View file

@ -215,11 +215,11 @@
"HeaderKeepRecording": "Bevar Optagelse",
"HeaderKeepSeries": "Behold serie",
"HeaderKodiMetadataHelp": "For at aktivere eller deaktivere NFO-metadata skal du redigere et bibliotek i Jellyfin-biblioteksopsætningen og finde afsnittet om metadata.",
"HeaderLatestEpisodes": "Sidste episoder",
"HeaderLatestMedia": "Seneste medier",
"HeaderLatestMovies": "Seneste film",
"HeaderLatestMusic": "Seneste musik",
"HeaderLatestRecordings": "Seneste optagelse",
"HeaderLatestEpisodes": "Nyligt tilføjet episoder",
"HeaderLatestMedia": "Nyligt tilføjet medier",
"HeaderLatestMovies": "Nyligt tilføjet film",
"HeaderLatestMusic": "Nyligt tilføjet musik",
"HeaderLatestRecordings": "Nyligt tilføjet optagelse",
"HeaderLibraries": "Biblioteker",
"HeaderLibraryAccess": "Adgang til biblioteker",
"HeaderLibraryFolders": "Mediemapper",
@ -581,7 +581,7 @@
"LabelffmpegPath": "FFmpeg sti:",
"LabelffmpegPathHelp": "Stien til FFmpeg applikationsfilen eller mappen indeholdende FFmpeg.",
"LanNetworksHelp": "Komma separeret liste over IP adresser eller netmasker til netværk der vil blive anset for at være lokale når der bliver påtvunget båndbredde restriktioner. Hvis sat vil alle andre IP adresser bliver set som eksterne og blive underlagt båndbredde restriktioner. Hvis blank, er det kun serverens subnet der bliver betragtet som et lokalt netværk.",
"LatestFromLibrary": "Seneste {0}",
"LatestFromLibrary": "Nyligt tilføjet i {0}",
"LibraryAccessHelp": "Vælg hvilke mediemapper der skal deles med denne bruger. Administratorer vil kunne redigere alle mapper ved hjælp af metadata administratoren.",
"LiveBroadcasts": "Live-udsending",
"ManageLibrary": "Håndter bibliotek",
@ -862,7 +862,7 @@
"TabContainers": "Containere",
"TabDashboard": "Betjeningspanel",
"TabDirectPlay": "Direkte afspilning",
"TabLatest": "Seneste",
"TabLatest": "Nyligt tilføjet",
"TabMusic": "Musik",
"TabMyPlugins": "Mine tilføjelser",
"TabNetworks": "TV netværk",
@ -976,7 +976,7 @@
"Disc": "Disk",
"Display": "Visning",
"DisplayInMyMedia": "Visning på hjemmeskærm",
"DisplayInOtherHomeScreenSections": "Vis på hjemmeskærm sektioner såsom 'seneste medier' og 'se videre'",
"DisplayInOtherHomeScreenSections": "Vis på hjemmeskærm sektioner såsom 'Nyligt tilføjet medier' og 'se videre'",
"DisplayMissingEpisodesWithinSeasons": "Vis manglende afsnit inde i sæsoner",
"DisplayMissingEpisodesWithinSeasonsHelp": "Dette skal også være aktiveret for TV biblioteker i serverens indstillinger.",
"DisplayModeHelp": "Vælg det ønskede tema for grænsefladen.",
@ -1027,7 +1027,7 @@
"HeaderVideoQuality": "Video Kvalitet",
"HeaderVideoType": "Video Type",
"Hide": "Skjul",
"HideWatchedContentFromLatestMedia": "Skjul set indhold fra 'seneste medier'",
"HideWatchedContentFromLatestMedia": "Skjul set indhold fra 'Nyligt tilføjet medier'",
"Home": "Hjem",
"Horizontal": "Horisontalt",
"Label3DFormat": "3D format:",
@ -1583,7 +1583,7 @@
"LabelTonemappingDesatHelp": "Aktiver desaturering for højdepunkter som overstiger dette niveau af lysstyrke. Desto højere parameter, jo mere farve information vil der blive bevaret. Denne indstilling hjælper mod unaturlige farver i tilfælde af ekstreme højdepunkter, ved at lave en glidende overgang til hvid i stedet. Dette får billedet til at virke mere naturlig, mod at reducere information af farver som ikke kan vises. Anbefalet indstilling er mellem 0 og 0.5.",
"ItemDetails": "Element detaljer",
"AudioCodecNotSupported": "Lydkodekset er ikke understøttet",
"EnableGamepadHelp": "Lyt efter input fra enhver tilsluttet controller.",
"EnableGamepadHelp": "Lyt efter input fra enhver tilsluttet controller. (Kræver: 'TV' visetilstand)",
"LabelEnableGamepad": "Aktiver controller",
"EnableFallbackFontHelp": "Aktiver brugerdefinerede skrifttyper. Dette kan løse problemer med ukorrekt undertekst gengivelse.",
"UseEpisodeImagesInNextUpHelp": "'Kø' og 'fortsæt afspilning' sektioner vil bruge episode billeder som primære miniaturebilleder for serien.",
@ -1647,5 +1647,23 @@
"ButtonExitApp": "Afslut programmet",
"ButtonClose": "Luk",
"AddToFavorites": "Tilføj som favorit",
"EnableEnhancedNvdecDecoderHelp": "Eksperimentel NVDEC-implementering. Slå ikke denne indstilling til, med mindre du oplever afkodningsfejl."
"EnableEnhancedNvdecDecoderHelp": "Eksperimentel NVDEC-implementering. Slå ikke denne indstilling til, med mindre du oplever afkodningsfejl.",
"DownloadAll": "Hent alle",
"ScreenResolution": "Skærmopløsning",
"SecondarySubtitles": "Sekundære undertekster",
"SubtitleBlack": "Sort",
"SubtitleBlue": "Blå",
"SubtitleYellow": "Gul",
"SubtitleWhite": "Hvid",
"Unreleased": "Ikke endnu udgivet",
"Experimental": "Eksperimentel",
"Bold": "Fed",
"HeaderDummyChapter": "Kapitel billeder",
"HeaderPerformance": "Ydelse",
"LabelChapterImageResolution": "Opløsning:",
"SubtitleGray": "Grå",
"SubtitleGreen": "Grøn",
"SubtitleLightGray": "lysegrå",
"SubtitleRed": "Rød",
"Short": "Kort"
}

View file

@ -557,7 +557,7 @@
"LabelMethod": "Methode:",
"LabelMinBackdropDownloadWidth": "Minimale Breite der zu herunterladenden Hintergründe:",
"LabelMinResumeDuration": "Minimale Dauer für Wiederaufnahme:",
"LabelMinResumeDurationHelp": "Die Mindestfilmlänge in Sekunden, welche die Abspielzeit speichert und dich fortsetzen lässt.",
"LabelMinResumeDurationHelp": "Die kürzeste Wiedergabezeit in Sekunden, die gespeichert wird und von der Sie fortfahren können.",
"LabelMinResumePercentage": "Minimale Prozent für Wiederaufnahme:",
"LabelMinResumePercentageHelp": "Titel werden als ungesehen eingetragen, wenn sie vor dieser Zeit gestoppt werden.",
"LabelMinScreenshotDownloadWidth": "Minimale Breite für zu herunterladende Screenshot:",
@ -634,7 +634,7 @@
"LabelSerialNumber": "Seriennummer:",
"LabelSeriesRecordingPath": "Serien Aufnahmepfad:",
"LabelServerHost": "Adresse:",
"LabelServerHostHelp": "192.168.1.100 oder https://myserver.com",
"LabelServerHostHelp": "192.168.1.100:8096 oder https://myserver.com",
"LabelSimultaneousConnectionLimit": "Paralleler Streamlimit:",
"LabelSkipBackLength": "Sprungweite rückwärts:",
"LabelSkipForwardLength": "Sprungweite vorwärts:",
@ -1621,7 +1621,7 @@
"DeletedScene": "Gelöschte Scene",
"BehindTheScenes": "Hinter den Kulissen",
"Trailer": "Vorschau",
"Clip": "Featurette",
"Clip": "Clip",
"ShowParentImages": "Serienbilder anzeigen",
"AllowEmbeddedSubtitlesAllowTextOption": "Text erlauben",
"AllowEmbeddedSubtitlesAllowImageOption": "Bilder erlauben",
@ -1714,5 +1714,10 @@
"SubtitleMagenta": "Magenta",
"SubtitleRed": "Rot",
"SubtitleWhite": "Weiß",
"SubtitleYellow": "Gelb"
"SubtitleYellow": "Gelb",
"Featurette": "Featurette",
"Short": "Kurzfilm",
"LabelParallelImageEncodingLimit": "Grenze der parallelen Bildkodierung",
"LabelParallelImageEncodingLimitHelp": "Maximale Anzahl von Bildkodierungen, die parallel ausgeführt werden können. Wenn Sie diesen Wert auf 0 setzen, wird eine Grenze auf der Grundlage Ihrer Systemspezifikationen gewählt.",
"HeaderPerformance": "Leistung"
}

View file

@ -1716,5 +1716,8 @@
"SubtitleWhite": "White",
"SubtitleYellow": "Yellow",
"Featurette": "Featurette",
"Short": "Short"
"Short": "Short",
"HeaderPerformance": "Performance",
"LabelParallelImageEncodingLimit": "Parallel image encoding limit",
"LabelParallelImageEncodingLimitHelp": "Maximum amount of image encodings that are allowed to run in parallel. Setting this to 0 will choose a limit based on your system specs."
}

View file

@ -422,6 +422,7 @@
"HeaderPassword": "Password",
"HeaderPasswordReset": "Password Reset",
"HeaderPaths": "Paths",
"HeaderPerformance": "Performance",
"HeaderPhotoAlbums": "Photo Albums",
"HeaderPinCodeReset": "Reset Easy PIN Code",
"HeaderPlayAll": "Play All",
@ -793,6 +794,8 @@
"LabelOriginalName": "Original name:",
"LabelOriginalTitle": "Original title:",
"LabelOverview": "Overview:",
"LabelParallelImageEncodingLimit": "Parallel image encoding limit",
"LabelParallelImageEncodingLimitHelp": "Maximum amount of image encodings that are allowed to run in parallel. Setting this to 0 will choose a limit based on your system specs.",
"LabelParentalRating": "Parental rating:",
"LabelParentNumber": "Parent number:",
"LabelPassword": "Password:",

View file

@ -1714,5 +1714,8 @@
"Short": "Lyhytfilmi",
"MediaInfoBlPresentFlag": "DV BL havaittu",
"MediaInfoRpuPresentFlag": "DV RPU havaittu",
"MediaInfoDvVersionMinor": "DV-väliversio"
"MediaInfoDvVersionMinor": "DV-väliversio",
"LabelParallelImageEncodingLimitHelp": "Rinnakkain suoritettavien kuvaenkoodauksien enimmäismäärä. Asettamalla arvoksi \"0\" rajoitus asetetaan automaattisesti järjestelmän perusteella.",
"HeaderPerformance": "Suorituskyky",
"LabelParallelImageEncodingLimit": "Rinnakkaisten kuvaenkoodauksien rajoitus"
}

View file

@ -872,11 +872,11 @@
"HeaderLibraryFolders": "Mga Folder ng Library",
"HeaderLibraryAccess": "Access sa Library",
"HeaderLibraries": "Mga Library",
"HeaderLatestRecordings": "Pinakabagong Recording",
"HeaderLatestMusic": "Pinakabagong Musika",
"HeaderLatestMovies": "Pinakabagong Pelikula",
"HeaderLatestMedia": "Pinakabagong Media",
"HeaderLatestEpisodes": "Mga Pinakabagong Episode",
"HeaderLatestRecordings": "Mga bagong Recording",
"HeaderLatestMusic": "Mga bagong kanta",
"HeaderLatestMovies": "Mga bagong Pelikula",
"HeaderLatestMedia": "Mga bagong Media",
"HeaderLatestEpisodes": "Mga bagong Episode",
"HeaderKodiMetadataHelp": "Para i-enable o i-disable ang NFO metadata, mag-edit ng library at hanapin ang seksyong 'Mga saver ng Metadata'.",
"HeaderKeepSeries": "Panatilihin ang Serye",
"HeaderKeepRecording": "Panatilihin ang Pagre-record",
@ -902,7 +902,7 @@
"HeaderEnabledFields": "Pinagana ang mga Field",
"HeaderEditImages": "I-edit ang mga Larawan",
"HeaderEasyPinCode": "Easy PIN Code",
"HeaderDVR": "Digital Recorder",
"HeaderDVR": "DVR",
"HeaderDownloadSync": "I-download at I-sync",
"HeaderDirectPlayProfileHelp": "Magdagdag ng mga profile ng direktang pag-playback upang isaad kung aling mga format ang maaaring pangasiwaan ng device nang native.",
"HeaderDirectPlayProfile": "Profile ng Direktang Pag-playback",
@ -1313,7 +1313,7 @@
"DoNotRecord": "Huwag i-record",
"DisplayModeHelp": "Piliin ang istilo ng layout na gusto mo para sa interface.",
"DisplayMissingEpisodesWithinSeasons": "Ipakita ang mga nawawalang episode sa loob ng mga season",
"DisplayInOtherHomeScreenSections": "Ipakita sa mga seksyon ng home screen gaya ng 'Pinakabagong Media' at 'Ituloy ang Panonood'",
"DisplayInOtherHomeScreenSections": "Magpakita sa home screen ng mga seksyon gaya ng 'Bagong Media' at 'Ituloy ang Panonood'",
"DisplayInMyMedia": "Ipakita sa home screen",
"Display": "Display",
"Disconnect": "Idiskonekta",
@ -1555,7 +1555,7 @@
"ButtonForgotPassword": "Nakalimutan ang password",
"ButtonEditOtherUserPreferences": "I-edit ang profile, larawan at personal na kagustuhan ng user na ito.",
"ButtonChangeServer": "Baguhin ang Server",
"ButtonCast": "I-cast ang media",
"ButtonCast": "Ipalabas sa device",
"ButtonCancel": "Kanselahin",
"ButtonBack": "Bumalik",
"ButtonAudioTracks": "Mga Audio Track",
@ -1626,5 +1626,19 @@
"AllowEmbeddedSubtitlesAllowAllOption": "Payagan ang Lahat",
"AllowEmbeddedSubtitlesHelp": "I-disable ang mga subtitle na naka-package sa loob ng mga media container. Nangangailangan ng pag-refresh ng buong library.",
"AllowEmbeddedSubtitles": "I-disable ang iba't ibang uri ng mga naka-embed na subtitle",
"NextUpRewatching": "Muling pinapanood"
"NextUpRewatching": "Muling pinapanood",
"EnableRewatchingNextUp": "Pwedeng ulitin ang mga napanood na sa 'Ang susunod'",
"EnableRewatchingNextUpHelp": "Ipakita muli ang mga napanood na sa 'Ang susunod'.",
"EnableCardLayout": "Magpakita ng cardbox",
"ButtonBackspace": "Backspace",
"ButtonClose": "Isara",
"ButtonSpace": "Space",
"GoogleCastUnsupported": "Hindi suportado ang Google Cast",
"Copied": "Nakopya",
"Copy": "Kopyahin",
"CopyFailed": "Di makopya",
"Digital": "Digital",
"DownloadAll": "Idownload ang lahat",
"HeaderDummyChapter": "Mga larawan kada kabanata",
"AddToFavorites": "Idagdag sa mga paborito"
}

View file

@ -234,7 +234,7 @@
"HeaderApiKeys": "Clés API",
"HeaderApiKeysHelp": "Les applications externes ont besoin d'une clé d'API pour communiquer avec le serveur. Les clés sont distribuées lors d'une connexion avec un compte normal ou en accordant manuellement une clé à une application.",
"HeaderApp": "Application",
"HeaderAppearsOn": "Apparait dans",
"HeaderAppearsOn": "Apparaît dans",
"HeaderAudioBooks": "Livres audio",
"HeaderAudioSettings": "Réglages audio",
"HeaderBlockItemsWithNoRating": "Bloquer les éléments avec des informations de classification inconnues ou n'en disposant pas :",
@ -1716,5 +1716,8 @@
"SubtitleWhite": "Blanc",
"SubtitleYellow": "Jaune",
"Featurette": "Featurette",
"Short": "Court-métrage"
"Short": "Court-métrage",
"HeaderPerformance": "Performance",
"LabelParallelImageEncodingLimit": "Limite de parallélisation de l'encodage d'image",
"LabelParallelImageEncodingLimitHelp": "Nombre maximal dencodages dimage autorisés à sexécuter en parallèle. Si vous définissez cette valeur sur 0, vous choisirez une limite en fonction des spécifications de votre système."
}

View file

@ -87,10 +87,10 @@
"HeaderImageSettings": "הגדרות תמונה",
"HeaderKeepRecording": "שמור על הקלטה",
"HeaderKeepSeries": "שמור סדרה",
"HeaderLatestEpisodes": "פרקים אחרונים",
"HeaderLatestMovies": "סרטים אחרונים שהוספו",
"HeaderLatestMusic": "מוזיקה אחרונה",
"HeaderLatestRecordings": "הקלטות אחרונות",
"HeaderLatestEpisodes": "פרקים שנוספו לאחרונה",
"HeaderLatestMovies": "סרטים שהתווספו לאחרונה",
"HeaderLatestMusic": "מוזיקה שהתווספה לאחרונה",
"HeaderLatestRecordings": "הקלטות שהתווספו לאחרונה",
"HeaderMediaFolders": "ספריות מדיה",
"HeaderMetadataSettings": "הגדרות מטא-דאטה",
"HeaderMyMedia": "המדיה שלי",
@ -758,7 +758,7 @@
"HeaderLiveTvTunerSetup": "התקנת טיונר בשידור חי",
"HeaderLibraryOrder": "סדר הספרייה",
"HeaderLibraryAccess": "גישה לספרייה",
"HeaderLatestMedia": "המדיה האחרונה",
"HeaderLatestMedia": "מדיה שהתווספה לאחרונה",
"HeaderKodiMetadataHelp": "כדי להפעיל או להשבית מטא-דאטה של NFO, ערוך ספרייה ואתר את החלק של חסכונות המטא-דאטה.",
"HeaderInstantMix": "מיקס מיידי",
"HeaderIdentificationHeader": "כותרת זיהוי",
@ -912,7 +912,7 @@
"KnownProxiesHelp": "רשימה מופרדת באמצעות פסיקים של כתובות IP או שמות מארחים של פרוקסי ידועים המשמשים בעת חיבור למופע Jellyfin שלך. זה נדרש כדי לעשות שימוש נכון בכותרות X-Forwarded-For. דורש אתחול מחדש לאחר השמירה.",
"ImportFavoriteChannelsHelp": "רק ערוצים המסומנים כחביבים במכשיר המקלט ייובאו .",
"HttpsRequiresCert": "כדי לאפשר חיבורים מאובטחים, יהיה עליך לספק אישור SSL מהימן, כגון Let's Encrypt. אנא ספק תעודה או השבת חיבורים מאובטחים.",
"HideWatchedContentFromLatestMedia": "הסתר תוכן שנצפה מ'מדיה אחרונה'",
"HideWatchedContentFromLatestMedia": "הסתר תוכן שנצפה מ'מדיה שהתווספה לאחרונה'",
"HeaderXmlSettings": "הגדרות XML",
"HeaderXmlDocumentAttributes": "תכונות מסמך XML",
"HeaderXmlDocumentAttribute": "תכונת מסמך XML",
@ -952,7 +952,7 @@
"Arranger": "מעבד מוזיקלי",
"LabelAllowedRemoteAddresses": "מסנן כתובות IP מרוחקות:",
"LabelAlbumArtPN": "תמונת אלבום PN:",
"LabelAlbumArtMaxResHelp": "הרזולוציה המקסימלית של תמונת האלבום חשופה בעזרת המאפיין upnp:albumArtURI.",
"LabelAlbumArtMaxResHelp": "הרזולוציה המקסימלית של תמונת האלבום חשופה בעזרת המאפיין 'upnp:albumArtURI'.",
"HeaderRecordingPostProcessing": "מעבד הקלטה",
"AgeValue": "(בן {0} שנים)",
"Profile": "פרופיל",
@ -1042,13 +1042,18 @@
"LabelDashboardTheme": "ערכת נושא של לוח מחווני השרת:",
"LabelDateAddedBehavior": "התנהגות \"תאריך הוספה\" לתוכן חדש:",
"LabelDeinterlaceMethod": "שיטת Deinterlacing:",
"LabelBindToLocalNetworkAddress": יצמד לכתובת רשת מקומית:",
"LabelBindToLocalNetworkAddress": תאם עם כתובת רשת מקומית:",
"LabelCertificatePasswordHelp": "אם התעודה שלך דורשת סיסמא, נא הקלד אותה כאן.",
"LabelColorTransfer": "העברת צבע:",
"LabelColorTransfer": "צבע העברה:",
"LabelCreateHttpPortMap": "אפשר מיפוי פורטים אוטומטי לכל תעבורת ה-HTTP וגם ה-HTTPS.",
"DownloadAll": "הורד הכל",
"Experimental": "ניסיוני",
"LabelDisableCustomCss": "אפשר קוד css מותאם אישית בשביל עיצובים מהשרת",
"LabelEasyPinCode": "קוד PIN קל",
"EnableCardLayout": "הצג מערך ארגז חזותי"
"EnableCardLayout": "הצג מערך ארגז חזותי",
"LabelCachePathHelp": "בחר מיקום עבור קבצי מטמון לשרת כגון תמונות. השאר ריק בכדי להשתמש במיקום ברירת מחדל.",
"LabelColorPrimaries": "צבעים עיקריים:",
"HeaderPerformance": "ביצועים",
"HeaderRecordingMetadataSaving": "מטאדאטה של הקלטות",
"HeaderDummyChapter": "תמונות פרק"
}

View file

@ -147,5 +147,6 @@
"Normal": "सामान्य",
"Songs": "गाने",
"Larger": "और बड़ा",
"ListPaging": "{2} का {0}-{1}"
"ListPaging": "{2} का {0}-{1}",
"Shows": "शो"
}

View file

@ -1290,7 +1290,7 @@
"SaveChanges": "Változtatások mentése",
"MessageSyncPlayGroupWait": "{0} pufferel…",
"MessageSyncPlayUserLeft": "{0} elhagyta a csoportot.",
"MessageSyncPlayUserJoined": "{0}csatlakozott a csoporthoz.",
"MessageSyncPlayUserJoined": "{0} csatlakozott a csoporthoz.",
"MessageSyncPlayDisabled": "SyncPlay letiltva.",
"MessageSyncPlayEnabled": "SyncPlay engedélyezve.",
"LabelSyncPlayAccess": "SyncPlay hozzáférés:",
@ -1710,5 +1710,6 @@
"LabelDummyChapterDuration": "Intervallum:",
"LabelDummyChapterCount": "Határvonal:",
"LabelChapterImageResolution": "Felbontás:",
"LabelChapterImageResolutionHelp": "A kinyert fejezetképek felbontása."
"LabelChapterImageResolutionHelp": "A kinyert fejezetképek felbontása.",
"HeaderPerformance": "Teljesítmény"
}

View file

@ -150,7 +150,7 @@
"Disconnect": "切断",
"Display": "ディスプレイ",
"DisplayInMyMedia": "ホームスクリーンに表示",
"DisplayInOtherHomeScreenSections": "「最新のメディア」や「続きを見る」などをホーム画面のセクションに表示する",
"DisplayInOtherHomeScreenSections": "「最近追加されたメディア」や「続きを見る」などをホーム画面のセクションに表示する",
"DisplayMissingEpisodesWithinSeasons": "シーズンの欠けているエピソードを表示する",
"DisplayMissingEpisodesWithinSeasonsHelp": "これは サーバーのTVライブラリ設定でも有効にする必要があります。",
"DisplayModeHelp": "インターフェース用のお好みのレイアウトスタイルを選びます。",
@ -203,7 +203,7 @@
"ExitFullscreen": "フルスクリーンを終了する",
"ExtraLarge": "特大",
"ExtractChapterImagesHelp": "チャプター画像を抽出すると、クライアントはグラフィカルシーン選択メニューを表示できます。 このプロセスは遅く、リソースを消費し、数ギガバイトのスペースが必要になる場合があります。 動画が発見されたときに実行され、夜間のスケジュールされたタスクとしても実行されます。 スケジュールは、スケジュール済みタスク領域で構成可能です。 ピーク時にこのタスクを実行することはお勧めできません。",
"Extras": "エクストラ",
"Extras": "特典",
"FFmpegSavePathNotFound": "ご指定のパスに FFmpeg が見つかりません。 FFprobeも必須であり、同じフォルダーに存在しなければなりません。 これらのコンポーネントは通常、同じダウンロードにまとめられています。 パスを確認してもう一度やり直してください。",
"FastForward": "早送り",
"Favorite": "お気に入り",
@ -308,11 +308,11 @@
"HeaderKeepRecording": "録画を続ける",
"HeaderKeepSeries": "シリーズを続ける",
"HeaderKodiMetadataHelp": "NFO メタデータを有効または無効にするには、ライブラリを編集し、メタデータセーバーの項目を確認してください。",
"HeaderLatestEpisodes": "最新のエピソード",
"HeaderLatestMedia": "最新のメディア",
"HeaderLatestMovies": "最新のムービー",
"HeaderLatestMusic": "最新のミュージック",
"HeaderLatestRecordings": "最新の録画",
"HeaderLatestEpisodes": "最近追加されたエピソード",
"HeaderLatestMedia": "最近追加されたメディア",
"HeaderLatestMovies": "最近追加された映画",
"HeaderLatestMusic": "最近追加されたミュージック",
"HeaderLatestRecordings": "最近追加された録画",
"HeaderLibraries": "ライブラリ",
"HeaderLibraryAccess": "ライブラリアクセス",
"HeaderLibraryFolders": "ライブラリフォルダ",
@ -407,7 +407,7 @@
"HeaderYears": "年",
"Help": "ヘルプ",
"Hide": "隠す",
"Movies": "ムービー",
"Movies": "映画",
"Photos": "フォト",
"Playlists": "プレイリスト",
"Shows": "番組",
@ -556,7 +556,7 @@
"ReleaseDate": "公開日",
"OptionDvd": "DVD",
"Save": "保存",
"HideWatchedContentFromLatestMedia": "「最新のメディア」に視聴済みコンテンツを表示しない",
"HideWatchedContentFromLatestMedia": "「最近追加されたメディア」に視聴済みコンテンツを表示しない",
"Home": "ホーム",
"Horizontal": "水平",
"LabelAuthProvider": "認証プロバイダー:",
@ -643,9 +643,9 @@
"SaveSubtitlesIntoMediaFolders": "字幕をメディアフォルダーに保存",
"ScanForNewAndUpdatedFiles": "新しいファイルとアップデートされたファイルをスキャン",
"TabDashboard": "ダッシュボード",
"TabLatest": "最",
"TabLatest": "最近追加された",
"TabLogs": "ログ",
"TabMusic": "ミュージック",
"TabMusic": "音楽",
"TheseSettingsAffectSubtitlesOnThisDevice": "これらの設定はこのデバイスの字幕に影響します",
"ShowTitle": "タイトルを表示",
"TitleHostingSettings": "ホスト設定",
@ -816,7 +816,7 @@
"LabelVideoBitrate": "映像ビットレート:",
"Share": "共有",
"LabelSize": "大きさ:",
"LatestFromLibrary": "最新 {0}",
"LatestFromLibrary": "{0}に最近追加された",
"LearnHowYouCanContribute": "コントリビュートする方法を知る。",
"LabelTagline": "キャッチフレーズ:",
"Live": "ライブ",
@ -937,7 +937,7 @@
"LabelCustomRating": "カスタム格付け:",
"LabelCorruptedFrames": "破損したフレーム:",
"LabelFriendlyName": "フレンドリ名:",
"LabelEveryXMinutes": "毎",
"LabelEveryXMinutes": "毎:",
"LabelEnableSingleImageInDidlLimit": "単一の埋め込み画像に制限",
"LabelEnableBlastAliveMessages": "アライブメッセージを配信する",
"LabelDateAddedBehaviorHelp": "メタデータがある場合、これらのオプションの前に優先します。",
@ -1042,12 +1042,12 @@
"LabelffmpegPathHelp": "FFmpeg のアプリケーションファイルか、FFmpeg を含むフォルダーのパス。",
"LabelZipCode": "郵便番号:",
"LabelYoureDone": "全て完了です!",
"LabelXDlnaDoc": "Device Class ID:",
"LabelXDlnaCap": "Device Capability ID:",
"LabelXDlnaDoc": "デバイスのクラスID:",
"LabelXDlnaCap": "デバイス機能ID:",
"LabelVideoResolution": "動画解像度:",
"LabelValue": "値:",
"LabelVaapiDevice": "VA-API デバイス:",
"LabelUserRemoteClientBitrateLimitHelp": "サーバープレイバック設定のデフォルトグローバル値をオーバーライド。ダッシュボード > プレイバック > ストリーミング を参照",
"LabelUserRemoteClientBitrateLimitHelp": "サーバープレイバック設定のデフォルトグローバル値をオーバーライド。ダッシュボード > プレイバック > ストリーミング を参照",
"LabelUserLoginAttemptsBeforeLockout": "ユーザーがロックされるまでのログイン失敗回数:",
"LabelUserLibraryHelp": "デバイスに表示されるユーザーライブラリを選択してください。空欄の場合デフォルト設定が引き継がれます。",
"LabelUseNotificationServices": "以下のサービスを使用:",
@ -1264,7 +1264,7 @@
"OptionSaveMetadataAsHiddenHelp": "変更すると今後保存される新しいメタデータに適用されます。既存のメタデータファイルは次にサーバーへ保存される際に更新されます。",
"OptionSaveMetadataAsHidden": "メタデータと画像を隠しファイルとして保存",
"OptionResumable": "途中から",
"OptionResElement": "'res' element",
"OptionResElement": "「res」要素",
"OptionRequirePerfectSubtitleMatchHelp": "完全にマッチすることを要求した場合は動画ファイルとのテストおよび検証で完全な字幕のみ含まれるようフィルタリングします。このチェックを外すと字幕がダウンロードされる可能性が高くなりますが、間違いのある字幕テキストになる可能性も高くなります。",
"OptionRequirePerfectSubtitleMatch": "動画ファイルと完全にマッチする字幕のみダウンロード",
"OptionReportByteRangeSeekingWhenTranscodingHelp": "これはシークが十分にできないデバイスに必要です。",
@ -1567,11 +1567,11 @@
"AddToFavorites": "お気に入りに追加",
"EnableRewatchingNextUpHelp": "「Next Up」セクションに既に視聴したエピソードを表示する。",
"EnableEnhancedNvdecDecoder": "拡張NVDECデコーダを有効にする",
"EnableEnhancedNvdecDecoderHelp": "実践的な NVDEC 実装、デコードエラーが発生しない限りは有効にしないでください",
"EnableEnhancedNvdecDecoderHelp": "実践的な NVDEC 実装、デコードエラーが発生しない限りは有効にしないでください",
"LabelMaxVideoResolution": "ビデオトランスコードの 最大解像度",
"MessageNoItemsAvailable": "現在利用できるアイテムがありません。",
"MessageUnauthorizedUser": "現在、 サーバーにアクセスする権限がありません。詳細は、サーバー管理者にお問い合わせください。",
"Bold": "Bold",
"Bold": "太字",
"Localization": "ローカライゼーション",
"HomeVideosPhotos": "ホームビデオと写真",
"MessageRenameMediaFolder": "メディアライブラリの名前を変更すると、すべてのメタデータが失われるため注意してください。",
@ -1589,7 +1589,7 @@
"OptionDateShowAdded": "番組の追加日",
"OriginalAirDate": "オリジナルの放映日",
"AllowEmbeddedSubtitlesAllowTextOption": "テキストを許可する",
"TypeOptionPluralMovie": "ムービー",
"TypeOptionPluralMovie": "映画",
"RemuxHelp1": "メディアは互換性のないファイルコンテナMKV、AVI、WMVなどに入っているが、ビデオストリームとオーディオストリームの両方がデバイスと互換性がある場合。メディアはデバイスに送信される前に、その場でロスレスで再パッケージ化されます。",
"LabelDirectStreamingInfo": "ダイレクトストリーミング情報",
"YoutubeBadRequest": "リクエスト失敗。",
@ -1637,7 +1637,7 @@
"VideoProfileNotSupported": "動画コーデックのプロファイルがサポートされていません",
"LabelVppTonemappingBrightnessHelp": "VPP トーンマッピングでの輝度ゲインを適用します。推奨・デフォルト値はどちらも0です。",
"MediaInfoDvVersionMinor": "DV バージョンマイナー",
"MediaInfoDvBlSignalCompatibilityId": "DV bl signal compatibility id",
"MediaInfoDvBlSignalCompatibilityId": "Dolby VisionのBL信号互換性ID",
"InterlacedVideoNotSupported": "インターレース動画はサポートされていません",
"AllowVppTonemappingHelp": "完全なIntelドライバーがベースとなったトーンマッピングです。現在のところ、HDR10の動画と特定のハードウェアでのみ動作します。これは、他のOpenCL実装と比較して優先度がより高くなります。",
"VideoLevelNotSupported": "動画コーデックのレベルはサポートされていません",
@ -1659,11 +1659,11 @@
"ThemeVideo": "テーマビデオ",
"LabelVppTonemappingBrightness": "VPPトーンマッピング輝度ゲイン:",
"LabelVppTonemappingContrast": "VPP トーンマッピングコントラストゲイン:",
"MediaInfoRpuPresentFlag": "DV rpu preset flag",
"MediaInfoRpuPresentFlag": "Dolby VisionのRPUプリセットのフラグ",
"EnableSplashScreen": "スプラッシュ画面を有効にする",
"LabelStereoDownmixAlgorithm": "ステレオダウンミックスのアルゴリズム",
"LabelEnableGamepad": "ゲームパッドを有効にする",
"EnableGamepadHelp": "接続済みのゲームパッドからの入力を受け付けます。",
"EnableGamepadHelp": "接続済みのゲームパッドからの入力を受け付けます。(ディスプレイモード「TV」が必要)",
"SecondaryAudioNotSupported": "第2音声トラックはサポートされていません",
"RefFramesNotSupported": "リファレンスフレームはサポートされていません",
"VideoBitDepthNotSupported": "動画のbit深度はサポートされていません",
@ -1672,7 +1672,7 @@
"BehindTheScenes": "舞台裏",
"Interview": "インタビュー",
"Scene": "シーン",
"Clip": "短編映画",
"Clip": "クリップ",
"LabelVppTonemappingContrastHelp": "VPP トーンマッピングでのコントラストゲインを適用します。推奨値は1.2、デフォルト値は1です。",
"VideoRangeTypeNotSupported": "動画のレンジタイプはサポートされていません",
"LabelVideoRangeType": "動画のレンジタイプ:",
@ -1680,9 +1680,41 @@
"MediaInfoDvVersionMajor": "DV バージョンメジャー",
"MediaInfoDvProfile": "DV プロファイル",
"MediaInfoDvLevel": "DV レベル",
"MediaInfoElPresentFlag": "DV el preset flag",
"MediaInfoBlPresentFlag": "DV bl preset flag",
"MediaInfoElPresentFlag": "Dolby VisionのELプリセットのフラグ",
"MediaInfoBlPresentFlag": "Dolby VisionのBLプリセットのフラグ",
"Unreleased": "まだ公開されていません",
"DeletedScene": "未公開シーン",
"Experimental": "試験的"
"Experimental": "試験的",
"LabelDummyChapterCountHelp": "抽出する各メディア・ファイルのチャプター画像の最大数。",
"LabelParallelImageEncodingLimit": "画像エンコードの並行実行の制限",
"PreferEmbeddedExtrasTitlesOverFileNames": "ファイル名よりエキストラの埋め込みタイトルを優先",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "エキストラの埋め込みタイトルは親メディアと一緒の場合が多いが、それでも優先して使用したい場合はこちらをチェックします。",
"Featurette": "短編",
"Short": "ショート",
"SecondarySubtitles": "補助字幕",
"SaveRecordingNFO": "NFOファイルに録画のEPGメタデータを保存",
"SaveRecordingNFOHelp": "メディアと一緒にプロバイダから取得された録画のEPGメタデータをNFOファイルに保存します。",
"SaveRecordingImages": "録画のEPG画像を保存",
"SaveRecordingImagesHelp": "メディアと一緒にプロバイダから取得された録画のEPG画像を保存します。",
"SubtitleBlack": "黒",
"SubtitleBlue": "青",
"SubtitleGreen": "緑",
"SubtitleCyan": "シアン",
"SubtitleGray": "灰色",
"SubtitleLightGray": "薄い灰色",
"SubtitleMagenta": "マゼンタ",
"SubtitleWhite": "白",
"HeaderPerformance": "パフォーマンス",
"LabelDummyChapterDuration": "間隔:",
"LabelDummyChapterDurationHelp": "秒でチャプター画像の抽出の間隔。",
"LabelDummyChapterCount": "制限:",
"LabelChapterImageResolution": "解像度:",
"LabelChapterImageResolutionHelp": "抽出するチャプター画像の解像度。",
"LabelParallelImageEncodingLimitHelp": "並行で実行できる画像エンコードの最大数。「0」に設定するとシステムの性能に基づく制限を自動的に設定されます。",
"ResolutionMatchSource": "ソースにマッチする",
"SubtitleRed": "赤",
"SubtitleYellow": "黄色",
"HeaderRecordingMetadataSaving": "メタデータを保存中",
"EnableCardLayout": "カードボックスを表示",
"HeaderDummyChapter": "チャプター画像"
}

View file

@ -166,7 +166,7 @@
"Sync": "Segerak",
"Shows": "Tayangan",
"OptionBluray": "BD",
"MusicVideos": "Video muzik",
"MusicVideos": "Video Muzik",
"TypeOptionPluralMovie": "Filem-filem",
"HeaderLibraries": "Pustaka",
"HeaderInstall": "Pasang",

View file

@ -1692,5 +1692,7 @@
"LabelDummyChapterCount": "Grense:",
"LabelChapterImageResolution": "Oppløsning:",
"LabelDummyChapterDuration": "Intervall:",
"HeaderRecordingMetadataSaving": "Opptak metadata"
"HeaderRecordingMetadataSaving": "Opptak metadata",
"HeaderPerformance": "Ytelse",
"LabelDummyChapterDurationHelp": "Tid mellom innsamling av kapittelbilder i sekunder."
}

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
{
"Absolute": "Bezwzględnie",
"Absolute": "Absolutny",
"AccessRestrictedTryAgainLater": "Dostęp jest aktualnie ograniczony. Spróbuj ponownie później.",
"Actor": "Aktor",
"Add": "Dodaj",
@ -1621,7 +1621,7 @@
"DeletedScene": "Usunięte sceny",
"BehindTheScenes": "Za kulisami",
"Trailer": "Zwiastun",
"Clip": "Film średniometrażowy",
"Clip": "Urywek",
"ButtonExitApp": "Wyjdź z aplikacji",
"AllowEmbeddedSubtitlesAllowTextOption": "Zezwól na tekst",
"AllowEmbeddedSubtitlesAllowImageOption": "Zezwól na obrazy",
@ -1714,5 +1714,10 @@
"SubtitleRed": "Czerwony",
"SubtitleWhite": "Biały",
"SubtitleYellow": "Żółty",
"SecondarySubtitles": "Napisy drugorzędne"
"SecondarySubtitles": "Napisy drugorzędne",
"HeaderPerformance": "Wydajność",
"Featurette": "Film średniometrażowy",
"Short": "Film krótkometrażowy",
"LabelParallelImageEncodingLimitHelp": "Maksymalna liczba kodowań obrazów, które mogą być uruchomione równolegle. Ustawienie wartości na 0 spowoduje wybór limitu w oparciu o specyfikacje Twojego systemu.",
"LabelParallelImageEncodingLimit": "Limit kodowań obrazów, które mogą być uruchomione równolegle"
}

View file

@ -26,9 +26,9 @@
"HeaderFetchImages": "Preia imagini:",
"HeaderFrequentlyPlayed": "Rulate Frecvent",
"HeaderImageSettings": "Setari Imagini",
"HeaderLatestEpisodes": "Cele Mai Noi Episoade",
"HeaderLatestMovies": "Cele mai noi Filme",
"HeaderLatestRecordings": "Cele mai recente înregistrări",
"HeaderLatestEpisodes": "Episoade adăugate recent",
"HeaderLatestMovies": "Filme adăugate recent",
"HeaderLatestRecordings": "Înregistrări adăugate recent",
"HeaderPaths": "Căi",
"HeaderPleaseSignIn": "Vă rugăm, autentificați-vă",
"HeaderPreferredMetadataLanguage": "Limba preferata pentru metadata",
@ -409,7 +409,7 @@
"HeaderDirectPlayProfile": "Profil de redare directă",
"HeaderDirectPlayProfileHelp": "Adăugați profiluri de redare directă pentru a indica ce formate se pot gestiona în mod nativ.",
"HeaderKeepSeries": "Păstrează seriile",
"HeaderLatestMedia": "Cele mai recente media",
"HeaderLatestMedia": "Media adăugate recent",
"HeaderLibraryOrder": "Ordinea Bibliotecii",
"HeaderContinueListening": "Continuați să ascultați",
"Down": "In jos",
@ -444,7 +444,7 @@
"HeaderConfigureRemoteAccess": "Configurați accesul de la distanță",
"HeaderInstall": "Instalează",
"HeaderKeepRecording": "Continuă Înregistrarea",
"HeaderLatestMusic": "Cea mai recentă Muzică",
"HeaderLatestMusic": "Muzică adăugată recent",
"HeaderNextEpisodePlayingInValue": "Episodul următor se redă în {0}",
"HeaderCastAndCrew": "Distribuție și echipă",
"HeaderConnectToServer": "Conectați-vă la server",
@ -454,7 +454,7 @@
"HeaderCustomDlnaProfiles": "Profiluri personalizate",
"HeaderDefaultRecordingSettings": "Setări implicite de înregistrare",
"HeaderDeleteItem": "Ștergeți elementul",
"DisplayInOtherHomeScreenSections": "Afișați în secțiuni ecranul principal, cum ar fi 'Cea mai recentă Media'și 'Continuați să Vizionați'",
"DisplayInOtherHomeScreenSections": "Afișați în secțiuni ecranul principal, cum ar fi 'Media adăugate recent'și 'Continuați să Vizionați'",
"DisplayMissingEpisodesWithinSeasons": "Afișați episoade lipsă din sezoane",
"DisplayMissingEpisodesWithinSeasonsHelp": "Acesta trebuie de asemenea activat pentru bibliotecile TV din configurația serverului.",
"DisplayModeHelp": "Selectați stilul schemei pe care îl doriți pentru interfață.",
@ -782,7 +782,7 @@
"HttpsRequiresCert": "Pentru a activa conexiunile securizate, va trebui să furnizați un certificat SSL de încredere, cum ar fi Let's Encrypt. Vă rugăm să furnizați un certificat sau să dezactivați conexiunile securizate.",
"Horizontal": "Orizontal",
"Home": "Acasă",
"HideWatchedContentFromLatestMedia": "Ascunde conținutul vizionat secțiunea 'Cea mai recentă media'",
"HideWatchedContentFromLatestMedia": "Ascunde conținutul vizionat secțiunea 'Media adăugate recent'",
"Hide": "Ascunde",
"HeaderYears": "Ani",
"HeaderXmlSettings": "Setări XML",
@ -1666,5 +1666,19 @@
"MessageRenameMediaFolder": "Redenumirea unei biblioteci va cauza toate metadatele să fie pierdute, continuați cu grijă.",
"OptionDateEpisodeAdded": "Dată Adăugare Episod",
"OptionDateShowAdded": "Dată Adăugare Serial",
"MessageNoFavoritesAvailable": "Niciun favorit nu este valabil în momentul actual."
"MessageNoFavoritesAvailable": "Niciun favorit nu este valabil în momentul actual.",
"HeaderPerformance": "Performanță",
"PreferEmbeddedExtrasTitlesOverFileNames": "Preferă titlurile încorporate peste numele de fișierelor pentru bonusuri",
"Experimental": "Experimental",
"LabelStereoDownmixAlgorithm": "Algoritmul de Mixare Descendentă în Stereo",
"LabelDummyChapterDuration": "Interval:",
"LabelDummyChapterDurationHelp": "Intervalul dintre fiecare extragere de imagine a unui capitol exprimat în secunde.",
"LabelDummyChapterCount": "Limită:",
"LabelDummyChapterCountHelp": "Numărul maxim de imagini de capitol care vor fi extrase pentru fiecare fișier media individual.",
"LabelChapterImageResolution": "Rezoluție:",
"LabelChapterImageResolutionHelp": "Rezoluția fiecărei imagini de capitol.",
"LabelParallelImageEncodingLimit": "Limita encodărilor simultane",
"LabelParallelImageEncodingLimitHelp": "Numărul maxim de encodări ale imaginilor care sunt permise să ruleze simultan. Setarea acestei valori la 0 va alege automat o limită bazată pe specificațiile tehnice ale sistemului.",
"HeaderDummyChapter": "Imaginile Capitolelor",
"HeaderRecordingMetadataSaving": "Înregistrarea Metadatelor"
}

View file

@ -1116,8 +1116,8 @@
"MusicAlbum": "Альбом",
"MovieLibraryHelp": "Перегляньте {0}посібник із найменування фільмів{1}.",
"Movie": "Фільми",
"MoveRight": "Рухайтеся вправо",
"MoveLeft": "Рухайтеся вліво",
"MoveRight": "Рухати вправо",
"MoveLeft": "Рухати вліво",
"MoreUsersCanBeAddedLater": "Більше користувачів можна додати пізніше з інформаційної панелі.",
"MoreMediaInfo": "Інформація про медіа",
"MoreFromValue": "Більше від {0}",
@ -1619,7 +1619,7 @@
"DeletedScene": "Видалена сцена",
"BehindTheScenes": "За лаштунками",
"Trailer": "Трейлер",
"Clip": "Художник",
"Clip": "Кліп",
"ShowParentImages": "Показати зображення серіалу",
"AllowEmbeddedSubtitlesAllowTextOption": "Дозволити текст",
"AllowEmbeddedSubtitlesAllowImageOption": "Дозволити зображення",
@ -1711,5 +1711,10 @@
"SubtitleWhite": "Білий",
"SubtitleYellow": "Жовтий",
"SecondarySubtitles": "Додаткові субтитри",
"SubtitleGreen": "Зелений"
"SubtitleGreen": "Зелений",
"Short": "Короткометражка",
"Featurette": "Художник",
"HeaderPerformance": "Продуктивність",
"LabelParallelImageEncodingLimit": "Обмеження паралельного кодування зображень",
"LabelParallelImageEncodingLimitHelp": "Максимальна кількість зображень, які дозволено кодувати паралельно. Якщо встановити значення 0, буде обрано обмеження на основі специфікацій вашої системи."
}

View file

@ -1705,5 +1705,9 @@
"SubtitleLightGray": "Xám Nhạt",
"SubtitleMagenta": "Đỏ Sậm",
"SubtitleRed": "Đỏ",
"SubtitleWhite": "Trắng"
"SubtitleWhite": "Trắng",
"LabelParallelImageEncodingLimitHelp": "Lượng mã hóa hình ảnh tối đa được phép chạy song song. Đặt giá trị này thành 0 sẽ chọn giới hạn dựa trên thông số kỹ thuật hệ thống của bạn.",
"SecondarySubtitles": "Phụ đề phụ",
"HeaderPerformance": "Hiệu suất",
"LabelParallelImageEncodingLimit": "Giới hạn mã hóa hình ảnh song song"
}

View file

@ -1716,5 +1716,8 @@
"SubtitleRed": "红色",
"SubtitleYellow": "黄色",
"Featurette": "花絮",
"Short": "短片"
"Short": "短片",
"LabelParallelImageEncodingLimitHelp": "允许并行运行的图像编码的最大数量。设为 0 以根据您的系统配置自动设置。",
"HeaderPerformance": "性能",
"LabelParallelImageEncodingLimit": "并行图像编码限制"
}

View file

@ -650,7 +650,7 @@
"LabelEmbedAlbumArtDidl": "於 DIDL 中嵌入專輯封面",
"LabelEasyPinCode": "簡易PIN代碼",
"LabelDynamicExternalId": "{0} Id:",
"LabelDropSubtitleHere": "將字幕檔到這裡,或點擊瀏覽。",
"LabelDropSubtitleHere": "將字幕檔拖動到這裡,或點擊瀏覽。",
"LabelDropShadow": "陰影:",
"LabelDroppedFrames": "丟棄的幀:",
"LabelDropImageHere": "拖移圖片到這裡,或是點擊來選取。",
@ -1096,5 +1096,11 @@
"LabelSyncPlaySettingsSyncCorrection": "同步校正",
"HomeVideosPhotos": "家庭影片及相片",
"MessageConfirmRevokeApiKey": "你是否確定要廢除此 API Key有關程序將無法再連接此伺服器。",
"LabelSyncPlaySettingsExtraTimeOffsetHelp": "為目標裝置調較 SyncPlay 延遲時間(毫秒)以改善不同步問題,請小心調較。"
"LabelSyncPlaySettingsExtraTimeOffsetHelp": "為目標裝置調較 SyncPlay 延遲時間(毫秒)以改善不同步問題,請小心調較。",
"Experimental": "試驗性",
"HeaderDummyChapter": "章節圖片",
"IgnoreDtsHelp": "禁用此選項或可解決部份問題,如無法正常播放外部音訊。",
"DownloadAll": "全部下載",
"LabelDummyChapterDuration": "間距:",
"LabelDummyChapterDurationHelp": "章節圖片擷取間距(秒)"
}

View file

@ -2,6 +2,16 @@ function toLocaleStringSupportsOptions() {
return !!(typeof Intl === 'object' && Intl && typeof Intl.NumberFormat === 'function');
}
/**
* Generates a random integer in a given range.
* @param {number} min - Minimum of the range.
* @param {number} max - Maximum of the range.
* @returns {number} Randomly generated number.
*/
export function randomInt(min: number, max: number): number {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
/**
* Gets the value of a number formatted as a perentage.
* @param {number} value The value as a number.

View file

@ -158,7 +158,6 @@ const config = {
path.resolve(__dirname, 'node_modules/dom7'),
path.resolve(__dirname, 'node_modules/epubjs'),
path.resolve(__dirname, 'node_modules/flv.js'),
path.resolve(__dirname, 'node_modules/hls.js'),
path.resolve(__dirname, 'node_modules/libarchive.js'),
path.resolve(__dirname, 'node_modules/marked'),
path.resolve(__dirname, 'node_modules/react-router'),