mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-24 18:59:28 -05:00
Compare commits
98 Commits
preview-pr
...
v1.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9252817b58 | ||
|
|
a66925067d | ||
|
|
d037d178aa | ||
|
|
ab09664d41 | ||
|
|
0faae20bac | ||
|
|
5b10da4073 | ||
|
|
6049edffca | ||
|
|
f27200c8c1 | ||
|
|
613ebb95d2 | ||
|
|
15c79e03a5 | ||
|
|
ed95b0af25 | ||
|
|
f5c2fc1c20 | ||
|
|
3ba69f9a74 | ||
|
|
66357019f0 | ||
|
|
21d20fdfd6 | ||
|
|
cf96db90ad | ||
|
|
430b1ab871 | ||
|
|
7404d68143 | ||
|
|
16cb53f703 | ||
|
|
407af32d32 | ||
|
|
5c01313cc4 | ||
|
|
d8da5cbe9d | ||
|
|
3d458dd2fd | ||
|
|
e486623310 | ||
|
|
8feb20ff52 | ||
|
|
f2c659c6f3 | ||
|
|
99f1a4e4f3 | ||
|
|
fea9457dad | ||
|
|
23c9595933 | ||
|
|
eceedbbaad | ||
|
|
29f06a965c | ||
|
|
9ec05d3ba4 | ||
|
|
ee14ff5a51 | ||
|
|
6b62d4b862 | ||
|
|
706fea0e97 | ||
|
|
80956d1a83 | ||
|
|
6d530d9028 | ||
|
|
f12237565f | ||
|
|
11f5594ed4 | ||
|
|
e4e58bee05 | ||
|
|
13ee3a836c | ||
|
|
3f16a353f5 | ||
|
|
9c43ba95e6 | ||
|
|
13fb6fd1a7 | ||
|
|
16e8e3a38e | ||
|
|
6fecdf094d | ||
|
|
69b271b018 | ||
|
|
d6ebd9a9b9 | ||
|
|
70dad332fc | ||
|
|
a65e430c60 | ||
|
|
18f4b67b72 | ||
|
|
506c31562a | ||
|
|
7a9d7a4834 | ||
|
|
902a033b8a | ||
|
|
00eb20aa5e | ||
|
|
a2c27cfa95 | ||
|
|
7122b4d08b | ||
|
|
b03b9b1dbb | ||
|
|
73672e29f8 | ||
|
|
cc5192209f | ||
|
|
278dcf4b44 | ||
|
|
36e092f225 | ||
|
|
46d5c737a2 | ||
|
|
cba4878db3 | ||
|
|
57cc48a699 | ||
|
|
84f488be06 | ||
|
|
f885f2a0f3 | ||
|
|
eef3e5ea4c | ||
|
|
8db821c1c1 | ||
|
|
a39b882f09 | ||
|
|
754dccc4bf | ||
|
|
f97ee11430 | ||
|
|
54868fd486 | ||
|
|
eea389879f | ||
|
|
5c917f95b4 | ||
|
|
dd4d42fd31 | ||
|
|
e5c6b9cd74 | ||
|
|
508fccae4e | ||
|
|
f77573c838 | ||
|
|
7dfe38001e | ||
|
|
48f55da43e | ||
|
|
1e97503802 | ||
|
|
42ff34bb3d | ||
|
|
107b766c44 | ||
|
|
fb51ce5570 | ||
|
|
3357343d98 | ||
|
|
9d61092f37 | ||
|
|
29274614c3 | ||
|
|
19b51592ea | ||
|
|
757c0fc29e | ||
|
|
3eb48abc14 | ||
|
|
01cd9d3872 | ||
|
|
9582196e1f | ||
|
|
3743edab8d | ||
|
|
d81e7cdbab | ||
|
|
6e1d7f7075 | ||
|
|
91cf2de33a | ||
|
|
a6ec2d5220 |
7
.github/CODEOWNERS
vendored
Normal file
7
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
# Global code ownership
|
||||
|
||||
- @Fallenbagel
|
||||
|
||||
# i18n locale files
|
||||
|
||||
src/i18n/locale/ @Fallenbagel
|
||||
93
CHANGELOG.md
93
CHANGELOG.md
@@ -1,4 +1,95 @@
|
||||
## [1.29.1](https://github.com/sct/overseerr/compare/v1.29.0...v1.29.1) (2022-04-06)
|
||||
## [1.2.1](https://github.com/fallenbagel/jellyseerr/compare/v1.2.0...v1.2.1) (2022-10-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **backend:** fix jellyfinHost to not be undefined ([ab09664](https://github.com/fallenbagel/jellyseerr/commit/ab09664d418e07198ac72e7f342b53ba441ab7c3)), closes [#237](https://github.com/fallenbagel/jellyseerr/issues/237)
|
||||
|
||||
# [1.2.0](https://github.com/fallenbagel/jellyseerr/compare/v1.1.1...v1.2.0) (2022-10-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **api:** add rate limiter to TMDb requests to hopefully deal with 429s ([#2881](https://github.com/fallenbagel/jellyseerr/issues/2881)) ([aed1409](https://github.com/fallenbagel/jellyseerr/commit/aed1409f29d5b6360e87381d78dfeb4cc86d6fc6)), closes [#2853](https://github.com/fallenbagel/jellyseerr/issues/2853)
|
||||
* **api:** ignore filter if unset in media route ([#2647](https://github.com/fallenbagel/jellyseerr/issues/2647)) ([a6c1f3f](https://github.com/fallenbagel/jellyseerr/commit/a6c1f3f7ce498e32817cc8c74d439e8d99d6fbf4))
|
||||
* **api:** lookup shows using english title only ([#2911](https://github.com/fallenbagel/jellyseerr/issues/2911)) ([004e1bb](https://github.com/fallenbagel/jellyseerr/commit/004e1bb17e14bef1697b6b993f6ff92b77cdaeb4)), closes [#2801](https://github.com/fallenbagel/jellyseerr/issues/2801)
|
||||
* **api:** use correct path param type in openapi spec ([#2834](https://github.com/fallenbagel/jellyseerr/issues/2834)) ([6cd0c9b](https://github.com/fallenbagel/jellyseerr/commit/6cd0c9b2c81db2728ce09a9bc273a9aee366acbc))
|
||||
* **backend:** fixes Jellyfin/Emby links if server is initially setup with a trailing / ([6635701](https://github.com/fallenbagel/jellyseerr/commit/66357019f034ffac342ebd49a32bd75c95d4dec9)), closes [#168](https://github.com/fallenbagel/jellyseerr/issues/168) [#220](https://github.com/fallenbagel/jellyseerr/issues/220)
|
||||
* better ordering of RequestButton options & properly handle failed requests ([#2944](https://github.com/fallenbagel/jellyseerr/issues/2944)) ([c143c0b](https://github.com/fallenbagel/jellyseerr/commit/c143c0b8d285896a7ad5f42f2a7dc1e38b55cc3a))
|
||||
* check perms to view watchlist slider on user profile ([#2980](https://github.com/fallenbagel/jellyseerr/issues/2980)) ([5d73bc2](https://github.com/fallenbagel/jellyseerr/commit/5d73bc22389a2606ecc630f88b6ec2328f690975))
|
||||
* clicking outside modal closes modal again ([#2984](https://github.com/fallenbagel/jellyseerr/issues/2984)) ([1a00532](https://github.com/fallenbagel/jellyseerr/commit/1a0053221b58d198bdcca0249fcd76226122c6a2))
|
||||
* compatibility issue with safari ([#3019](https://github.com/fallenbagel/jellyseerr/issues/3019)) ([e486623](https://github.com/fallenbagel/jellyseerr/commit/e486623310b1c0de12a5b38bf934543fde250c37))
|
||||
* correct safe margin for slideover ([#2977](https://github.com/fallenbagel/jellyseerr/issues/2977)) ([23409e6](https://github.com/fallenbagel/jellyseerr/commit/23409e6f2ffb060e7914db28375e141a6087ddfa))
|
||||
* correct spacing on season header badges ([#2983](https://github.com/fallenbagel/jellyseerr/issues/2983)) ([c4aa08f](https://github.com/fallenbagel/jellyseerr/commit/c4aa08f5f0bcc856e993416936cc74e4db6aed5d))
|
||||
* **deps:** do not list email-validator as a devDependency ([9518cb3](https://github.com/fallenbagel/jellyseerr/commit/9518cb36357cd36b4b75439ac74ba910faa9a217))
|
||||
* **deps:** pin dependencies ([#2946](https://github.com/fallenbagel/jellyseerr/issues/2946)) [skip ci] ([103c4ca](https://github.com/fallenbagel/jellyseerr/commit/103c4ca49ca6f7a8101a18a540d3955a1ac6eae7))
|
||||
* **deps:** pin dependency @formatjs/intl-utils to 3.8.4 ([#2975](https://github.com/fallenbagel/jellyseerr/issues/2975)) [skip ci] ([baf1ea9](https://github.com/fallenbagel/jellyseerr/commit/baf1ea95a38537fab56cc324aa9359f40b615fe6))
|
||||
* **deps:** pin dependency @headlessui/react to v0.0.0-insiders.b301f04 ([#2993](https://github.com/fallenbagel/jellyseerr/issues/2993)) [skip ci] ([833f52d](https://github.com/fallenbagel/jellyseerr/commit/833f52de56cc4715673c5d2593f05528d260ae15))
|
||||
* **deps:** pin dependency cronstrue to 2.11.0 ([#3018](https://github.com/fallenbagel/jellyseerr/issues/3018)) [skip ci] ([f20ba3f](https://github.com/fallenbagel/jellyseerr/commit/f20ba3fc2e6cd42c2c73ba47812d9d177e75a8c2))
|
||||
* **deps:** pin dependency react-popper-tooltip to 4.4.2 ([#2952](https://github.com/fallenbagel/jellyseerr/issues/2952)) [skip ci] ([5247f14](https://github.com/fallenbagel/jellyseerr/commit/5247f14968c1f5a1a2efdc26f850cf81c0c04f0e))
|
||||
* do not display 'Request More' button if no requestable seasons ([#2998](https://github.com/fallenbagel/jellyseerr/issues/2998)) ([23f93e3](https://github.com/fallenbagel/jellyseerr/commit/23f93e311d3c4ed413b2fabca520b5c97869c9b8))
|
||||
* failure to load SearchByNameModal ([#3000](https://github.com/fallenbagel/jellyseerr/issues/3000)) ([410ad0d](https://github.com/fallenbagel/jellyseerr/commit/410ad0d4b40e2ae3ca315a9c808a886ab2c7bf2d))
|
||||
* fix play on Jellyfin/Emby button after previous merge ([3b0c091](https://github.com/fallenbagel/jellyseerr/commit/3b0c0915fb8e1ad671227f60cc181d52f226ad6b))
|
||||
* **frontend:** better request/media cards for items without valid TMDb IDs ([#2181](https://github.com/fallenbagel/jellyseerr/issues/2181)) ([9bc1f89](https://github.com/fallenbagel/jellyseerr/commit/9bc1f8977707f2d3383a7af8efa0521ced096777))
|
||||
* **frontend:** only allow 'request as' users w/ request perms ([#2991](https://github.com/fallenbagel/jellyseerr/issues/2991)) ([dbdecb1](https://github.com/fallenbagel/jellyseerr/commit/dbdecb1e0afb450e0cda6965a6d89408a831db0e))
|
||||
* **import statement:** import statement ([8724058](https://github.com/fallenbagel/jellyseerr/commit/8724058aa568b5eb96420c28f9082ca8a9ed714f))
|
||||
* issues and login page still had incorrect animations ([#2979](https://github.com/fallenbagel/jellyseerr/issues/2979)) ([095048d](https://github.com/fallenbagel/jellyseerr/commit/095048d94af28f25f88f956aba8e01d1199082f3))
|
||||
* **lang:** correct capitalization of 'TMDB' ([#2953](https://github.com/fallenbagel/jellyseerr/issues/2953)) ([9021696](https://github.com/fallenbagel/jellyseerr/commit/9021696cf085bd6387701811e64466e14893d1db))
|
||||
* **lang:** manage movie -> manage series ([#2963](https://github.com/fallenbagel/jellyseerr/issues/2963)) ([f5e6b62](https://github.com/fallenbagel/jellyseerr/commit/f5e6b620c133e38cf18978a619d3d4757bbab755))
|
||||
* log level value should not be case sensitive ([#2913](https://github.com/fallenbagel/jellyseerr/issues/2913)) ([6428b8d](https://github.com/fallenbagel/jellyseerr/commit/6428b8d4195c736a384441a761a746a35a3ad009))
|
||||
* new status indicators added to series list on mobile ([#3024](https://github.com/fallenbagel/jellyseerr/issues/3024)) ([407af32](https://github.com/fallenbagel/jellyseerr/commit/407af32d32a30d23ee14a9ff763cb4aa582d3ede))
|
||||
* only request Tautulli watch data for Plex media servers (to avoid error messages in logs) ([6dbb99e](https://github.com/fallenbagel/jellyseerr/commit/6dbb99e0b685c6a0e7c9cb62c300ceee85b43bf4))
|
||||
* **plex:** add container-size header to recently added api call ([#3023](https://github.com/fallenbagel/jellyseerr/issues/3023)) ([d8da5cb](https://github.com/fallenbagel/jellyseerr/commit/d8da5cbe9d0700e02cbece70caf9103bc5376505))
|
||||
* remove backdrop-blur class from warning buttons ([#3037](https://github.com/fallenbagel/jellyseerr/issues/3037)) ([430b1ab](https://github.com/fallenbagel/jellyseerr/commit/430b1ab871f8e3eefbebb37c74aa1ce3f0862efe))
|
||||
* remove failing ci job that builds a test copy to a private repo ([5f7e7ee](https://github.com/fallenbagel/jellyseerr/commit/5f7e7eef119c1ba2fb7b1cb8c5e06f372b92ac7f))
|
||||
* scroll restoration ([#3005](https://github.com/fallenbagel/jellyseerr/issues/3005)) ([14280c5](https://github.com/fallenbagel/jellyseerr/commit/14280c54370fd9a3e73120e4208e36183d39f9a3))
|
||||
* settings log modal when closing ([#2985](https://github.com/fallenbagel/jellyseerr/issues/2985)) ([4d56320](https://github.com/fallenbagel/jellyseerr/commit/4d563208709fe581ef6bf475e969197d586d907b))
|
||||
* sidebar close button placement when using PWA ([#3045](https://github.com/fallenbagel/jellyseerr/issues/3045)) ([21d20fd](https://github.com/fallenbagel/jellyseerr/commit/21d20fdfd61b7a5a2ec265d420aec103b1430a06))
|
||||
* start scheduled jobs on initial admin account setup ([b080251](https://github.com/fallenbagel/jellyseerr/commit/b08025195e1e1fd07e274b6846728770ec1d3e18)), closes [#170](https://github.com/fallenbagel/jellyseerr/issues/170)
|
||||
* transition animation ([#2974](https://github.com/fallenbagel/jellyseerr/issues/2974)) ([98028bf](https://github.com/fallenbagel/jellyseerr/commit/98028bf2f4d29175fa0922e744fee168849d653f))
|
||||
* **ui:** hide 'Recently Added' & 'Recent Requests' sliders when empty ([#2190](https://github.com/fallenbagel/jellyseerr/issues/2190)) ([03d5e56](https://github.com/fallenbagel/jellyseerr/commit/03d5e56678c3a372114a0256ee3431deee42cb57))
|
||||
* **ui:** hide null dates in episodes list ([#3035](https://github.com/fallenbagel/jellyseerr/issues/3035)) ([7404d68](https://github.com/fallenbagel/jellyseerr/commit/7404d68143e830df73b9d2779a6d7ea65bc9fd4f))
|
||||
* **ui:** minor fixes ([#3036](https://github.com/fallenbagel/jellyseerr/issues/3036)) ([f5c2fc1](https://github.com/fallenbagel/jellyseerr/commit/f5c2fc1c209b2d04f0e39a97d8b65bcac00667dc))
|
||||
* **ui:** remove 'all' badge from request cards ([#2992](https://github.com/fallenbagel/jellyseerr/issues/2992)) ([5c01313](https://github.com/fallenbagel/jellyseerr/commit/5c01313cc4c8277de398124848b4481a2b0080b3))
|
||||
* update Discord ID regex to include 19 digit IDs ([#2860](https://github.com/fallenbagel/jellyseerr/issues/2860)) ([9da8461](https://github.com/fallenbagel/jellyseerr/commit/9da84612254fe0c36b38bc49184cc1fc52ff6212))
|
||||
* use fallbackData to prepare user data during SSR ([#2968](https://github.com/fallenbagel/jellyseerr/issues/2968)) ([6e60a27](https://github.com/fallenbagel/jellyseerr/commit/6e60a275c7c2451beb1922d66eaa6c5411d36c3d))
|
||||
* use image.tmdb.org for setup/login backdrop images ([#2966](https://github.com/fallenbagel/jellyseerr/issues/2966)) ([3b26338](https://github.com/fallenbagel/jellyseerr/commit/3b2633812b5ca8cde010b3f8c2ea9a8646b33e1d))
|
||||
* username will not show undefined on cancel or delete ([#2982](https://github.com/fallenbagel/jellyseerr/issues/2982)) ([b925857](https://github.com/fallenbagel/jellyseerr/commit/b925857dfa27483558eab24bc5f20f654e294a08))
|
||||
* watch data not required to show Tautulli button ([#2976](https://github.com/fallenbagel/jellyseerr/issues/2976)) ([dd28200](https://github.com/fallenbagel/jellyseerr/commit/dd282000407ae9656640f38561a104916d12571a))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add 20th Century Studios to Studio Slider ([#2288](https://github.com/fallenbagel/jellyseerr/issues/2288)) ([b33956e](https://github.com/fallenbagel/jellyseerr/commit/b33956e6b85b2c2fc12e23951c06f36e009fb627))
|
||||
* **frontend:** a few more tooltips ([#2972](https://github.com/fallenbagel/jellyseerr/issues/2972)) ([815d709](https://github.com/fallenbagel/jellyseerr/commit/815d709bcfa4cca1528cc697defe9cd773ea0089))
|
||||
* **frontend:** add more tooltips ([#2961](https://github.com/fallenbagel/jellyseerr/issues/2961)) ([950b171](https://github.com/fallenbagel/jellyseerr/commit/950b1712b7449dc48a9c1589950907dd581f069a))
|
||||
* improved user dropdown ([#2969](https://github.com/fallenbagel/jellyseerr/issues/2969)) ([67f3a38](https://github.com/fallenbagel/jellyseerr/commit/67f3a3829e2f629e72ec3c32b042be2ef08c38e9))
|
||||
* **jobs:** show current job frequency in edit modal ([#3008](https://github.com/fallenbagel/jellyseerr/issues/3008)) ([99fc9a2](https://github.com/fallenbagel/jellyseerr/commit/99fc9a2da01b1628d5f849ce56f016c0ab26c3db))
|
||||
* **lang:** add Arabic and Lithuanian display languages ([#2916](https://github.com/fallenbagel/jellyseerr/issues/2916)) ([3db3044](https://github.com/fallenbagel/jellyseerr/commit/3db3044210316817144ecacd81be97f159d0df2b))
|
||||
* **lang:** translations update from Hosted Weblate ([#2659](https://github.com/fallenbagel/jellyseerr/issues/2659)) ([e939dc6](https://github.com/fallenbagel/jellyseerr/commit/e939dc678e124bd1f630c98d1d4927dba6372af5))
|
||||
* **lang:** translations update from Hosted Weblate ([#2915](https://github.com/fallenbagel/jellyseerr/issues/2915)) ([a0301e2](https://github.com/fallenbagel/jellyseerr/commit/a0301e2d83b2fca07f69a2c274d4745edef6d0cd))
|
||||
* **lang:** translations update from Hosted Weblate ([#2958](https://github.com/fallenbagel/jellyseerr/issues/2958)) ([29ab178](https://github.com/fallenbagel/jellyseerr/commit/29ab178fb0048c055a86bc40f7b47117903a3b2c))
|
||||
* **lang:** translations update from Hosted Weblate ([#2971](https://github.com/fallenbagel/jellyseerr/issues/2971)) ([2950cf4](https://github.com/fallenbagel/jellyseerr/commit/2950cf4438e2d10a9c0543a848519a113527fe91))
|
||||
* **lang:** translations update from Hosted Weblate ([#2999](https://github.com/fallenbagel/jellyseerr/issues/2999)) ([8672869](https://github.com/fallenbagel/jellyseerr/commit/867286996b805fefd3c16f2a1a05d5f2c10daced))
|
||||
* **lang:** translations update from Hosted Weblate ([#3006](https://github.com/fallenbagel/jellyseerr/issues/3006)) ([611ceeb](https://github.com/fallenbagel/jellyseerr/commit/611ceeb5f49ec4760f157eafb03b2dae465d476e))
|
||||
* **lang:** translations update from Hosted Weblate ([#3014](https://github.com/fallenbagel/jellyseerr/issues/3014)) ([3d458dd](https://github.com/fallenbagel/jellyseerr/commit/3d458dd2fdc8807f09af8b4c29bed794b3886f0f))
|
||||
* **lang:** translations update from Hosted Weblate ([#3026](https://github.com/fallenbagel/jellyseerr/issues/3026)) ([16cb53f](https://github.com/fallenbagel/jellyseerr/commit/16cb53f703a6c42b99aa776515f90b3ed153b382))
|
||||
* **language:** update czech language ([8619724](https://github.com/fallenbagel/jellyseerr/commit/8619724c652bfb0604373bcdb8c32a8e87a73fe7))
|
||||
* **logs:** add search filter ([#2505](https://github.com/fallenbagel/jellyseerr/issues/2505)) ([30141f7](https://github.com/fallenbagel/jellyseerr/commit/30141f76e025763bf79fd3c8fb344d45519d5d8d))
|
||||
* **notif:** auto-request notif type ([#2956](https://github.com/fallenbagel/jellyseerr/issues/2956)) ([6c0fd40](https://github.com/fallenbagel/jellyseerr/commit/6c0fd408779bc084698499bca861d042cd735d77))
|
||||
* **perms:** add new permission for viewing recently added media ([#2129](https://github.com/fallenbagel/jellyseerr/issues/2129)) ([a12697b](https://github.com/fallenbagel/jellyseerr/commit/a12697b06143e9a9c5c240c104faabdf2096ffd3))
|
||||
* plex deep links for iOS devices ([#2680](https://github.com/fallenbagel/jellyseerr/issues/2680)) ([575da30](https://github.com/fallenbagel/jellyseerr/commit/575da306b03eea3561de8d7dbe1b4b69674c7b2b))
|
||||
* plex watchlist sync integration ([#2885](https://github.com/fallenbagel/jellyseerr/issues/2885)) ([301f2bf](https://github.com/fallenbagel/jellyseerr/commit/301f2bf7ab0c5e7c5aef9d78a58d6449df0f55b8))
|
||||
* pull down to refresh ([#2908](https://github.com/fallenbagel/jellyseerr/issues/2908)) ([87825a0](https://github.com/fallenbagel/jellyseerr/commit/87825a0e058162e82634503c81deeff1a59634e5))
|
||||
* restore option to cache and optimize images locally ([#2964](https://github.com/fallenbagel/jellyseerr/issues/2964)) ([507227a](https://github.com/fallenbagel/jellyseerr/commit/507227aa496a60d1f46ce1a34c13bb162edc4bb6))
|
||||
* season/episode list on series details ([#2967](https://github.com/fallenbagel/jellyseerr/issues/2967)) ([8a2acb7](https://github.com/fallenbagel/jellyseerr/commit/8a2acb7f2bbe91feb3c6ee45c2066e3a036b83f9))
|
||||
* show alert/prompt when settings changes require restart ([#2401](https://github.com/fallenbagel/jellyseerr/issues/2401)) ([f3e56da](https://github.com/fallenbagel/jellyseerr/commit/f3e56da3b719285095a59d5a0e822087e095b709))
|
||||
* tooltip foundation ([#2950](https://github.com/fallenbagel/jellyseerr/issues/2950)) ([16545ee](https://github.com/fallenbagel/jellyseerr/commit/16545eec225ce942b55935019185a94e471fb93b))
|
||||
* **ui:** revalidate requests slider on discover page ([#2818](https://github.com/fallenbagel/jellyseerr/issues/2818)) ([91e0928](https://github.com/fallenbagel/jellyseerr/commit/91e0928aa0e1353431754750095cb64b93348c21))
|
||||
* user delete modal shows username and requires confirmation ([#2779](https://github.com/fallenbagel/jellyseerr/issues/2779)) ([36d17fe](https://github.com/fallenbagel/jellyseerr/commit/36d17fed6e4e1ca651a4e29f087b2abb53f794cf))
|
||||
* view other users' watchlists ([#2959](https://github.com/fallenbagel/jellyseerr/issues/2959)) ([0839718](https://github.com/fallenbagel/jellyseerr/commit/0839718806a04ee094445dd7276bba7f49424ab7))
|
||||
|
||||
# [1.1.1](https://github.com/fallenbagel/jellyseerr/compare/v1.1.0...v1.1.1) (2022-06-20)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
|
||||
@@ -138,6 +138,7 @@ location ^~ /overseerr {
|
||||
sub_filter 'href="/"' 'href="/$app"';
|
||||
sub_filter 'href="/login"' 'href="/$app/login"';
|
||||
sub_filter 'href:"/"' 'href:"/$app"';
|
||||
sub_filter '\/_next' '\/$app\/_next';
|
||||
sub_filter '/_next' '/$app/_next';
|
||||
sub_filter '/api/v1' '/$app/api/v1';
|
||||
sub_filter '/login/plex/loading' '/$app/login/plex/loading';
|
||||
|
||||
@@ -5470,23 +5470,6 @@ paths:
|
||||
responses:
|
||||
'204':
|
||||
description: Succesfully removed media item
|
||||
/media/{mediaId}/file:
|
||||
delete:
|
||||
summary: Delete media file
|
||||
description: Removes a media file from radarr/sonarr. The `ADMIN` permission is required to perform this action.
|
||||
tags:
|
||||
- media
|
||||
parameters:
|
||||
- in: path
|
||||
name: mediaId
|
||||
description: Media ID
|
||||
required: true
|
||||
example: '1'
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
'204':
|
||||
description: Succesfully removed media item
|
||||
/media/{mediaId}/{status}:
|
||||
post:
|
||||
summary: Update media status
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jellyseerr",
|
||||
"version": "0.1.0",
|
||||
"version": "1.2.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "nodemon -e ts --watch server --watch overseerr-api.yml -e .json,.ts,.yml -x ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/index.ts",
|
||||
|
||||
3
public/preview.jpg:Zone.Identifier
Normal file
3
public/preview.jpg:Zone.Identifier
Normal file
@@ -0,0 +1,3 @@
|
||||
[ZoneTransfer]
|
||||
LastWriterPackageFamilyName=Microsoft.ScreenSketch_8wekyb3d8bbwe
|
||||
ZoneId=3
|
||||
@@ -232,6 +232,10 @@ class PlexAPI {
|
||||
uri: `/library/sections/${id}/all?sort=addedAt%3Adesc&addedAt>>=${Math.floor(
|
||||
options.addedAt / 1000
|
||||
)}`,
|
||||
extraHeaders: {
|
||||
'X-Plex-Container-Start': `0`,
|
||||
'X-Plex-Container-Size': `500`,
|
||||
},
|
||||
});
|
||||
|
||||
return response.MediaContainer.Metadata;
|
||||
|
||||
@@ -213,20 +213,6 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> {
|
||||
);
|
||||
}
|
||||
}
|
||||
public removeMovie = async (movieId: number): Promise<void> => {
|
||||
try {
|
||||
const { id, title } = await this.getMovieByTmdbId(movieId);
|
||||
await this.axios.delete(`/movie/${id}`, {
|
||||
params: {
|
||||
deleteFiles: true,
|
||||
addImportExclusion: false,
|
||||
},
|
||||
});
|
||||
logger.info(`[Radarr] Removed movie ${title}`);
|
||||
} catch (e) {
|
||||
throw new Error(`[Radarr] Failed to remove movie: ${e.message}`);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default RadarrAPI;
|
||||
|
||||
@@ -302,20 +302,6 @@ class SonarrAPI extends ServarrBase<{ seriesId: number; episodeId: number }> {
|
||||
|
||||
return newSeasons;
|
||||
}
|
||||
public removeSerie = async (serieId: number): Promise<void> => {
|
||||
try {
|
||||
const { id, title } = await this.getSeriesByTvdbId(serieId);
|
||||
await this.axios.delete(`/series/${id}`, {
|
||||
params: {
|
||||
deleteFiles: true,
|
||||
addImportExclusion: false,
|
||||
},
|
||||
});
|
||||
logger.info(`[Radarr] Removed serie ${title}`);
|
||||
} catch (e) {
|
||||
throw new Error(`[Radarr] Failed to remove serie: ${e.message}`);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default SonarrAPI;
|
||||
|
||||
@@ -191,7 +191,7 @@ export interface TmdbVideo {
|
||||
|
||||
export interface TmdbTvEpisodeResult {
|
||||
id: number;
|
||||
air_date: string;
|
||||
air_date: string | null;
|
||||
episode_number: number;
|
||||
name: string;
|
||||
overview: string;
|
||||
@@ -372,7 +372,8 @@ export interface TmdbPersonCombinedCredits {
|
||||
crew: TmdbPersonCreditCrew[];
|
||||
}
|
||||
|
||||
export interface TmdbSeasonWithEpisodes extends TmdbTvSeasonResult {
|
||||
export interface TmdbSeasonWithEpisodes
|
||||
extends Omit<TmdbTvSeasonResult, 'episode_count'> {
|
||||
episodes: TmdbTvEpisodeResult[];
|
||||
external_ids: TmdbExternalIds;
|
||||
}
|
||||
|
||||
@@ -200,15 +200,20 @@ class Media {
|
||||
const pageName =
|
||||
process.env.JELLYFIN_TYPE === 'emby' ? 'item' : 'details';
|
||||
const { serverId, hostname, externalHostname } = getSettings().jellyfin;
|
||||
const jellyfinHost =
|
||||
let jellyfinHost =
|
||||
externalHostname && externalHostname.length > 0
|
||||
? externalHostname
|
||||
: hostname;
|
||||
|
||||
jellyfinHost = jellyfinHost!.endsWith('/')
|
||||
? jellyfinHost!.slice(0, -1)
|
||||
: jellyfinHost;
|
||||
|
||||
if (this.jellyfinMediaId) {
|
||||
this.mediaUrl = `${jellyfinHost}/web/index.html#!/${pageName}?id=${this.jellyfinMediaId}&context=home&serverId=${serverId}`;
|
||||
}
|
||||
if (this.jellyfinMediaId4k) {
|
||||
this.mediaUrl4k = `${jellyfinHost}/web/index.html#!/${pageName}?id=${this.jellyfinMediaId4k}&context=home&serverId=${serverId}`;
|
||||
this.mediaUrl4k = `${jellyfinHost}/web/index.html#!/${pageName}?id=${this.jellyfinMediaId}&context=home&serverId=${serverId}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ export const startJobs = (): void => {
|
||||
id: 'plex-watchlist-sync',
|
||||
name: 'Plex Watchlist Sync',
|
||||
type: 'process',
|
||||
interval: 'long',
|
||||
interval: 'short',
|
||||
cronSchedule: jobs['plex-watchlist-sync'].schedule,
|
||||
job: schedule.scheduleJob(jobs['plex-watchlist-sync'].schedule, () => {
|
||||
logger.info('Starting scheduled job: Plex Watchlist Sync', {
|
||||
|
||||
@@ -29,7 +29,7 @@ import type { Video } from './Movie';
|
||||
interface Episode {
|
||||
id: number;
|
||||
name: string;
|
||||
airDate: string;
|
||||
airDate: string | null;
|
||||
episodeNumber: number;
|
||||
overview: string;
|
||||
productionCode: string;
|
||||
@@ -50,7 +50,7 @@ interface Season {
|
||||
seasonNumber: number;
|
||||
}
|
||||
|
||||
export interface SeasonWithEpisodes extends Season {
|
||||
export interface SeasonWithEpisodes extends Omit<Season, 'episodeCount'> {
|
||||
episodes: Episode[];
|
||||
externalIds: ExternalIds;
|
||||
}
|
||||
@@ -141,7 +141,6 @@ export const mapSeasonWithEpisodes = (
|
||||
season: TmdbSeasonWithEpisodes
|
||||
): SeasonWithEpisodes => ({
|
||||
airDate: season.air_date,
|
||||
episodeCount: season.episode_count,
|
||||
episodes: season.episodes.map(mapEpisodeResult),
|
||||
externalIds: mapExternalIds(season.external_ids),
|
||||
id: season.id,
|
||||
|
||||
@@ -244,11 +244,15 @@ authRoutes.post('/jellyfin', async (req, res, next) => {
|
||||
}
|
||||
// First we need to attempt to log the user in to jellyfin
|
||||
const jellyfinserver = new JellyfinAPI(hostname ?? '', undefined, deviceId);
|
||||
const jellyfinHost =
|
||||
let jellyfinHost =
|
||||
externalHostname && externalHostname.length > 0
|
||||
? externalHostname
|
||||
: hostname;
|
||||
|
||||
jellyfinHost = jellyfinHost!.endsWith('/')
|
||||
? jellyfinHost!.slice(0, -1)
|
||||
: jellyfinHost;
|
||||
|
||||
const account = await jellyfinserver.login(body.username, body.password);
|
||||
// Next let's see if the user already exists
|
||||
user = await userRepository.findOne({
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
import RadarrAPI from '@server/api/servarr/radarr';
|
||||
import SonarrAPI from '@server/api/servarr/sonarr';
|
||||
import TautulliAPI from '@server/api/tautulli';
|
||||
import TheMovieDb from '@server/api/themoviedb';
|
||||
import { MediaStatus, MediaType } from '@server/constants/media';
|
||||
import { getRepository } from '@server/datasource';
|
||||
import Media from '@server/entity/Media';
|
||||
@@ -171,100 +168,6 @@ mediaRoutes.delete(
|
||||
}
|
||||
);
|
||||
|
||||
mediaRoutes.delete(
|
||||
'/:id/file',
|
||||
isAuthenticated(Permission.MANAGE_REQUESTS),
|
||||
async (req, res, next) => {
|
||||
try {
|
||||
const settings = getSettings();
|
||||
const mediaRepository = getRepository(Media);
|
||||
const media = await mediaRepository.findOneOrFail({
|
||||
where: { id: Number(req.params.id) },
|
||||
});
|
||||
const is4k = media.serviceUrl4k !== undefined;
|
||||
const isMovie = media.mediaType === MediaType.MOVIE;
|
||||
let serviceSettings;
|
||||
if (isMovie) {
|
||||
serviceSettings = settings.radarr.find(
|
||||
(radarr) => radarr.isDefault && radarr.is4k === is4k
|
||||
);
|
||||
} else {
|
||||
serviceSettings = settings.sonarr.find(
|
||||
(sonarr) => sonarr.isDefault && sonarr.is4k === is4k
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
media.serviceId &&
|
||||
media.serviceId >= 0 &&
|
||||
serviceSettings?.id !== media.serviceId
|
||||
) {
|
||||
if (isMovie) {
|
||||
serviceSettings = settings.radarr.find(
|
||||
(radarr) => radarr.id === media.serviceId
|
||||
);
|
||||
} else {
|
||||
serviceSettings = settings.sonarr.find(
|
||||
(sonarr) => sonarr.id === media.serviceId
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!serviceSettings) {
|
||||
logger.warn(
|
||||
`There is no default ${
|
||||
is4k ? '4K ' : '' + isMovie ? 'Radarr' : 'Sonarr'
|
||||
}/ server configured. Did you set any of your ${
|
||||
is4k ? '4K ' : '' + isMovie ? 'Radarr' : 'Sonarr'
|
||||
} servers as default?`,
|
||||
{
|
||||
label: 'Media Request',
|
||||
mediaId: media.id,
|
||||
}
|
||||
);
|
||||
return;
|
||||
}
|
||||
let service;
|
||||
if (isMovie) {
|
||||
service = new RadarrAPI({
|
||||
apiKey: serviceSettings?.apiKey,
|
||||
url: RadarrAPI.buildUrl(serviceSettings, '/api/v3'),
|
||||
});
|
||||
} else {
|
||||
service = new SonarrAPI({
|
||||
apiKey: serviceSettings?.apiKey,
|
||||
url: SonarrAPI.buildUrl(serviceSettings, '/api/v3'),
|
||||
});
|
||||
}
|
||||
|
||||
if (isMovie) {
|
||||
await (service as RadarrAPI).removeMovie(
|
||||
parseInt(
|
||||
is4k
|
||||
? (media.externalServiceSlug4k as string)
|
||||
: (media.externalServiceSlug as string)
|
||||
)
|
||||
);
|
||||
} else {
|
||||
const tmdb = new TheMovieDb();
|
||||
const series = await tmdb.getTvShow({ tvId: media.tmdbId });
|
||||
const tvdbId = series.external_ids.tvdb_id ?? media.tvdbId;
|
||||
if (!tvdbId) {
|
||||
throw new Error('TVDB ID not found');
|
||||
}
|
||||
await (service as SonarrAPI).removeSerie(tvdbId);
|
||||
}
|
||||
|
||||
return res.status(204).send();
|
||||
} catch (e) {
|
||||
logger.error('Something went wrong fetching media in delete request', {
|
||||
label: 'Media',
|
||||
message: e.message,
|
||||
});
|
||||
next({ status: 404, message: 'Media not found' });
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
mediaRoutes.get<{ id: string }, MediaWatchDataResponse>(
|
||||
'/:id/watch_data',
|
||||
isAuthenticated(Permission.ADMIN),
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import TheMovieDb from '@server/api/themoviedb';
|
||||
import { MediaStatus } from '@server/constants/media';
|
||||
import Media from '@server/entity/Media';
|
||||
import { getSettings } from '@server/lib/settings';
|
||||
import logger from '@server/logger';
|
||||
import {
|
||||
mapCastCredits,
|
||||
@@ -34,6 +36,7 @@ personRoutes.get('/:id', async (req, res, next) => {
|
||||
|
||||
personRoutes.get('/:id/combined_credits', async (req, res, next) => {
|
||||
const tmdb = new TheMovieDb();
|
||||
const settings = getSettings();
|
||||
|
||||
try {
|
||||
const combinedCredits = await tmdb.getPersonCombinedCredits({
|
||||
@@ -41,14 +44,30 @@ personRoutes.get('/:id/combined_credits', async (req, res, next) => {
|
||||
language: req.locale ?? (req.query.language as string),
|
||||
});
|
||||
|
||||
const castMedia = await Media.getRelatedMedia(
|
||||
let castMedia = await Media.getRelatedMedia(
|
||||
combinedCredits.cast.map((result) => result.id)
|
||||
);
|
||||
|
||||
const crewMedia = await Media.getRelatedMedia(
|
||||
let crewMedia = await Media.getRelatedMedia(
|
||||
combinedCredits.crew.map((result) => result.id)
|
||||
);
|
||||
|
||||
if (settings.main.hideAvailable) {
|
||||
castMedia = castMedia.filter(
|
||||
(media) =>
|
||||
(media.mediaType === 'movie' || media.mediaType === 'tv') &&
|
||||
media.status !== MediaStatus.AVAILABLE &&
|
||||
media.status !== MediaStatus.PARTIALLY_AVAILABLE
|
||||
);
|
||||
|
||||
crewMedia = crewMedia.filter(
|
||||
(media) =>
|
||||
(media.mediaType === 'movie' || media.mediaType === 'tv') &&
|
||||
media.status !== MediaStatus.AVAILABLE &&
|
||||
media.status !== MediaStatus.PARTIALLY_AVAILABLE
|
||||
);
|
||||
}
|
||||
|
||||
return res.status(200).json({
|
||||
cast: combinedCredits.cast
|
||||
.map((result) =>
|
||||
|
||||
@@ -307,11 +307,14 @@ settingsRoutes.get('/jellyfin/library', async (req, res) => {
|
||||
settingsRoutes.get('/jellyfin/users', async (req, res) => {
|
||||
const settings = getSettings();
|
||||
const { hostname, externalHostname } = getSettings().jellyfin;
|
||||
const jellyfinHost =
|
||||
let jellyfinHost =
|
||||
externalHostname && externalHostname.length > 0
|
||||
? externalHostname
|
||||
: hostname;
|
||||
|
||||
jellyfinHost = jellyfinHost!.endsWith('/')
|
||||
? jellyfinHost!.slice(0, -1)
|
||||
: jellyfinHost;
|
||||
const userRepository = getRepository(User);
|
||||
const admin = await userRepository.findOneOrFail({
|
||||
select: ['id', 'jellyfinAuthToken', 'jellyfinDeviceId', 'jellyfinUserId'],
|
||||
|
||||
@@ -497,11 +497,14 @@ router.post(
|
||||
//const jellyfinUsersResponse = await jellyfinClient.getUsers();
|
||||
const createdUsers: User[] = [];
|
||||
const { hostname, externalHostname } = getSettings().jellyfin;
|
||||
const jellyfinHost =
|
||||
let jellyfinHost =
|
||||
externalHostname && externalHostname.length > 0
|
||||
? externalHostname
|
||||
: hostname;
|
||||
|
||||
jellyfinHost = jellyfinHost!.endsWith('/')
|
||||
? jellyfinHost!.slice(0, -1)
|
||||
: jellyfinHost;
|
||||
jellyfinClient.setUserId(admin.jellyfinUserId ?? '');
|
||||
const jellyfinUsers = await jellyfinClient.getUsers();
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ function Button<P extends ElementTypes = 'button'>(
|
||||
break;
|
||||
case 'warning':
|
||||
buttonStyle.push(
|
||||
'text-white border border-yellow-500 backdrop-blur bg-yellow-500 bg-opacity-80 hover:bg-opacity-100 hover:border-yellow-400 focus:border-yellow-700 focus:ring-yellow active:bg-opacity-100 active:border-yellow-700'
|
||||
'text-white border border-yellow-500 bg-yellow-500 bg-opacity-80 hover:bg-opacity-100 hover:border-yellow-400 focus:border-yellow-700 focus:ring-yellow active:bg-opacity-100 active:border-yellow-700'
|
||||
);
|
||||
break;
|
||||
case 'success':
|
||||
|
||||
45
src/components/Common/StatusBadgeMini/index.tsx
Normal file
45
src/components/Common/StatusBadgeMini/index.tsx
Normal file
@@ -0,0 +1,45 @@
|
||||
import {
|
||||
BellIcon,
|
||||
CheckIcon,
|
||||
ClockIcon,
|
||||
MinusSmIcon,
|
||||
} from '@heroicons/react/solid';
|
||||
import { MediaStatus } from '@server/constants/media';
|
||||
|
||||
interface StatusBadgeMiniProps {
|
||||
status: MediaStatus;
|
||||
is4k?: boolean;
|
||||
}
|
||||
|
||||
const StatusBadgeMini = ({ status, is4k = false }: StatusBadgeMiniProps) => {
|
||||
const badgeStyle = ['w-5 rounded-full p-0.5 text-white ring-1'];
|
||||
let indicatorIcon: React.ReactNode;
|
||||
|
||||
switch (status) {
|
||||
case MediaStatus.PROCESSING:
|
||||
badgeStyle.push('bg-indigo-500 ring-indigo-400');
|
||||
indicatorIcon = <ClockIcon />;
|
||||
break;
|
||||
case MediaStatus.AVAILABLE:
|
||||
badgeStyle.push('bg-green-500 ring-green-400');
|
||||
indicatorIcon = <CheckIcon />;
|
||||
break;
|
||||
case MediaStatus.PENDING:
|
||||
badgeStyle.push('bg-yellow-500 ring-yellow-400');
|
||||
indicatorIcon = <BellIcon />;
|
||||
break;
|
||||
case MediaStatus.PARTIALLY_AVAILABLE:
|
||||
badgeStyle.push('bg-green-500 ring-green-400');
|
||||
indicatorIcon = <MinusSmIcon />;
|
||||
break;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="inline-flex whitespace-nowrap rounded-full text-xs font-semibold leading-5 ring-1 ring-gray-700">
|
||||
<div className={badgeStyle.join(' ')}>{indicatorIcon}</div>
|
||||
{is4k && <span className="pl-1 pr-2 text-gray-200">4K</span>}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default StatusBadgeMini;
|
||||
@@ -20,7 +20,7 @@ const Tooltip = ({ children, content, tooltipConfig }: TooltipProps) => {
|
||||
return (
|
||||
<>
|
||||
{React.cloneElement(children, { ref: setTriggerRef })}
|
||||
{visible && (
|
||||
{visible && content && (
|
||||
<div
|
||||
ref={setTooltipRef}
|
||||
{...getTooltipProps({
|
||||
|
||||
@@ -121,7 +121,7 @@ const Sidebar = ({ open, setClosed }: SidebarProps) => {
|
||||
>
|
||||
<>
|
||||
<div className="sidebar relative flex h-full w-full max-w-xs flex-1 flex-col bg-gray-800">
|
||||
<div className="sidebar-close-button absolute top-0 right-0 -mr-14 p-1">
|
||||
<div className="sidebar-close-button absolute right-0 -mr-14 p-1">
|
||||
<button
|
||||
className="flex h-12 w-12 items-center justify-center rounded-full focus:bg-gray-600 focus:outline-none"
|
||||
aria-label="Close sidebar"
|
||||
|
||||
@@ -8,20 +8,11 @@ import useSettings from '@app/hooks/useSettings';
|
||||
import { Permission, useUser } from '@app/hooks/useUser';
|
||||
import globalMessages from '@app/i18n/globalMessages';
|
||||
import { ServerIcon, ViewListIcon } from '@heroicons/react/outline';
|
||||
import {
|
||||
CheckCircleIcon,
|
||||
DocumentRemoveIcon,
|
||||
TrashIcon,
|
||||
} from '@heroicons/react/solid';
|
||||
import { CheckCircleIcon, DocumentRemoveIcon } from '@heroicons/react/solid';
|
||||
import { IssueStatus } from '@server/constants/issue';
|
||||
import {
|
||||
MediaRequestStatus,
|
||||
MediaStatus,
|
||||
MediaType,
|
||||
} from '@server/constants/media';
|
||||
import { MediaRequestStatus, MediaStatus } from '@server/constants/media';
|
||||
import { MediaServerType } from '@server/constants/server';
|
||||
import type { MediaWatchDataResponse } from '@server/interfaces/api/mediaInterfaces';
|
||||
import type { RadarrSettings, SonarrSettings } from '@server/lib/settings';
|
||||
import type { MovieDetails } from '@server/models/Movie';
|
||||
import type { TvDetails } from '@server/models/Tv';
|
||||
import axios from 'axios';
|
||||
@@ -40,12 +31,8 @@ const messages = defineMessages({
|
||||
manageModalClearMedia: 'Clear Data',
|
||||
manageModalClearMediaWarning:
|
||||
'* This will irreversibly remove all data for this {mediaType}, including any requests. If this item exists in your Plex library, the media information will be recreated during the next scan.',
|
||||
manageModalRemoveMediaWarning:
|
||||
'* This will irreversibly remove this {mediaType} from {arr}, including all files.',
|
||||
openarr: 'Open in {arr}',
|
||||
removearr: 'Remove from {arr}',
|
||||
openarr4k: 'Open in 4K {arr}',
|
||||
removearr4k: 'Remove from 4K {arr}',
|
||||
downloadstatus: 'Downloads',
|
||||
markavailable: 'Mark as Available',
|
||||
mark4kavailable: 'Mark as Available in 4K',
|
||||
@@ -99,12 +86,6 @@ const ManageSlideOver = ({
|
||||
? `/api/v1/media/${data.mediaInfo.id}/watch_data`
|
||||
: null
|
||||
);
|
||||
const { data: radarrData } = useSWR<RadarrSettings[]>(
|
||||
'/api/v1/settings/radarr'
|
||||
);
|
||||
const { data: sonarrData } = useSWR<SonarrSettings[]>(
|
||||
'/api/v1/settings/sonarr'
|
||||
);
|
||||
|
||||
const deleteMedia = async () => {
|
||||
if (data.mediaInfo) {
|
||||
@@ -113,35 +94,6 @@ const ManageSlideOver = ({
|
||||
}
|
||||
};
|
||||
|
||||
const deleteMediaFile = async () => {
|
||||
if (data.mediaInfo) {
|
||||
await axios.delete(`/api/v1/media/${data.mediaInfo.id}/file`);
|
||||
await axios.delete(`/api/v1/media/${data.mediaInfo.id}`);
|
||||
revalidate();
|
||||
}
|
||||
};
|
||||
|
||||
const isDefaultService = () => {
|
||||
if (data.mediaInfo) {
|
||||
if (data.mediaInfo.mediaType === MediaType.MOVIE) {
|
||||
return (
|
||||
radarrData?.find(
|
||||
(radarr) =>
|
||||
radarr.isDefault && radarr.id === data.mediaInfo?.serviceId
|
||||
) !== undefined
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
sonarrData?.find(
|
||||
(sonarr) =>
|
||||
sonarr.isDefault && sonarr.id === data.mediaInfo?.serviceId
|
||||
) !== undefined
|
||||
);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
const markAvailable = async (is4k = false) => {
|
||||
if (data.mediaInfo) {
|
||||
await axios.post(`/api/v1/media/${data.mediaInfo?.id}/available`, {
|
||||
@@ -374,40 +326,6 @@ const ManageSlideOver = ({
|
||||
</Button>
|
||||
</a>
|
||||
)}
|
||||
|
||||
{hasPermission(Permission.ADMIN) &&
|
||||
data?.mediaInfo?.serviceUrl &&
|
||||
isDefaultService() && (
|
||||
<div>
|
||||
<ConfirmButton
|
||||
onClick={() => deleteMediaFile()}
|
||||
confirmText={intl.formatMessage(
|
||||
globalMessages.areyousure
|
||||
)}
|
||||
className="w-full"
|
||||
>
|
||||
<TrashIcon />
|
||||
<span>
|
||||
{intl.formatMessage(messages.removearr, {
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
})}
|
||||
</span>
|
||||
</ConfirmButton>
|
||||
<div className="mt-1 text-xs text-gray-400">
|
||||
{intl.formatMessage(
|
||||
messages.manageModalRemoveMediaWarning,
|
||||
{
|
||||
mediaType: intl.formatMessage(
|
||||
mediaType === 'movie'
|
||||
? messages.movie
|
||||
: messages.tvshow
|
||||
),
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
@@ -513,54 +431,21 @@ const ManageSlideOver = ({
|
||||
</div>
|
||||
)}
|
||||
{data?.mediaInfo?.serviceUrl4k && (
|
||||
<>
|
||||
<a
|
||||
href={data?.mediaInfo?.serviceUrl4k}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="block"
|
||||
>
|
||||
<Button buttonType="ghost" className="w-full">
|
||||
<ServerIcon />
|
||||
<span>
|
||||
{intl.formatMessage(messages.openarr4k, {
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
})}
|
||||
</span>
|
||||
</Button>
|
||||
</a>
|
||||
{isDefaultService() && (
|
||||
<div>
|
||||
<ConfirmButton
|
||||
onClick={() => deleteMediaFile()}
|
||||
confirmText={intl.formatMessage(
|
||||
globalMessages.areyousure
|
||||
)}
|
||||
className="w-full"
|
||||
>
|
||||
<TrashIcon />
|
||||
<span>
|
||||
{intl.formatMessage(messages.removearr4k, {
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
})}
|
||||
</span>
|
||||
</ConfirmButton>
|
||||
<div className="mt-1 text-xs text-gray-400">
|
||||
{intl.formatMessage(
|
||||
messages.manageModalRemoveMediaWarning,
|
||||
{
|
||||
mediaType: intl.formatMessage(
|
||||
mediaType === 'movie'
|
||||
? messages.movie
|
||||
: messages.tvshow
|
||||
),
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
<a
|
||||
href={data?.mediaInfo?.serviceUrl4k}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="block"
|
||||
>
|
||||
<Button buttonType="ghost" className="w-full">
|
||||
<ServerIcon />
|
||||
<span>
|
||||
{intl.formatMessage(messages.openarr4k, {
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
})}
|
||||
</span>
|
||||
</Button>
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -12,18 +12,22 @@ const PullToRefresh: React.FC = () => {
|
||||
Router.reload();
|
||||
},
|
||||
iconArrow: ReactDOMServer.renderToString(
|
||||
<RefreshIcon className="z-50 m-auto h-9 w-9 rounded-full border-4 border-gray-800 bg-gray-800 text-indigo-500 ring-1 ring-gray-700" />
|
||||
<div className="p-2">
|
||||
<RefreshIcon className="z-50 m-auto h-9 w-9 rounded-full border-4 border-gray-800 bg-gray-800 text-indigo-500 ring-1 ring-gray-700" />
|
||||
</div>
|
||||
),
|
||||
iconRefreshing: ReactDOMServer.renderToString(
|
||||
<RefreshIcon
|
||||
className="z-50 m-auto h-9 w-9 animate-spin rounded-full border-4 border-gray-800 bg-gray-800 text-indigo-500 ring-1 ring-gray-700"
|
||||
<div
|
||||
className="animate-spin p-2"
|
||||
style={{ animationDirection: 'reverse' }}
|
||||
/>
|
||||
>
|
||||
<RefreshIcon className="z-50 m-auto h-9 w-9 rounded-full border-4 border-gray-800 bg-gray-800 text-indigo-500 ring-1 ring-gray-700" />
|
||||
</div>
|
||||
),
|
||||
instructionsPullToRefresh: ReactDOMServer.renderToString(<div />),
|
||||
instructionsReleaseToRefresh: ReactDOMServer.renderToString(<div />),
|
||||
instructionsRefreshing: ReactDOMServer.renderToString(<div />),
|
||||
distReload: 55,
|
||||
distReload: 60,
|
||||
});
|
||||
return () => {
|
||||
PR.destroyAll();
|
||||
|
||||
@@ -357,20 +357,13 @@ const RequestCard = ({ request, onTitleData }: RequestCardProps) => {
|
||||
: request.seasons.length,
|
||||
})}
|
||||
</span>
|
||||
{title.seasons.filter((season) => season.seasonNumber !== 0)
|
||||
.length === request.seasons.length ? (
|
||||
<span className="mr-2 uppercase">
|
||||
<Badge>{intl.formatMessage(globalMessages.all)}</Badge>
|
||||
</span>
|
||||
) : (
|
||||
<div className="hide-scrollbar overflow-x-scroll">
|
||||
{request.seasons.map((season) => (
|
||||
<span key={`season-${season.id}`} className="mr-2">
|
||||
<Badge>{season.seasonNumber}</Badge>
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<div className="hide-scrollbar overflow-x-scroll">
|
||||
{request.seasons.map((season) => (
|
||||
<span key={`season-${season.id}`} className="mr-2">
|
||||
<Badge>{season.seasonNumber}</Badge>
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div className="mt-2 flex items-center text-sm sm:mt-1">
|
||||
|
||||
@@ -420,20 +420,13 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => {
|
||||
: request.seasons.length,
|
||||
})}
|
||||
</span>
|
||||
{title.seasons.filter((season) => season.seasonNumber !== 0)
|
||||
.length === request.seasons.length ? (
|
||||
<span className="mr-2 uppercase">
|
||||
<Badge>{intl.formatMessage(globalMessages.all)}</Badge>
|
||||
</span>
|
||||
) : (
|
||||
<div className="hide-scrollbar flex flex-nowrap overflow-x-scroll">
|
||||
{request.seasons.map((season) => (
|
||||
<span key={`season-${season.id}`} className="mr-2">
|
||||
<Badge>{season.seasonNumber}</Badge>
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<div className="hide-scrollbar flex flex-nowrap overflow-x-scroll">
|
||||
{request.seasons.map((season) => (
|
||||
<span key={`season-${season.id}`} className="mr-2">
|
||||
<Badge>{season.seasonNumber}</Badge>
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -309,7 +309,7 @@ const SettingsMain = () => {
|
||||
</div>
|
||||
</div>
|
||||
<div className="form-row">
|
||||
<label htmlFor="csrfProtection" className="checkbox-label">
|
||||
<label htmlFor="cacheImages" className="checkbox-label">
|
||||
<span className="mr-2">
|
||||
{intl.formatMessage(messages.cacheImages)}
|
||||
</span>
|
||||
|
||||
@@ -77,7 +77,7 @@ const StatusBadge = ({
|
||||
mediaType === 'movie' ? globalMessages.movie : globalMessages.tvshow
|
||||
),
|
||||
});
|
||||
} else if (hasPermission(Permission.ADMIN)) {
|
||||
} else if (hasPermission(Permission.ADMIN) && serviceUrl) {
|
||||
mediaLink = serviceUrl;
|
||||
mediaLinkDescription = intl.formatMessage(messages.openinarr, {
|
||||
arr: mediaType === 'movie' ? 'Radarr' : 'Sonarr',
|
||||
|
||||
@@ -6,6 +6,7 @@ import useSWR from 'swr';
|
||||
|
||||
const messages = defineMessages({
|
||||
somethingwentwrong: 'Something went wrong while retrieving season data.',
|
||||
noepisodes: 'Episode list unavailable.',
|
||||
});
|
||||
|
||||
type SeasonProps = {
|
||||
@@ -29,32 +30,38 @@ const Season = ({ seasonNumber, tvId }: SeasonProps) => {
|
||||
|
||||
return (
|
||||
<div className="flex flex-col justify-center divide-y divide-gray-700">
|
||||
{data.episodes
|
||||
.slice()
|
||||
.reverse()
|
||||
.map((episode) => {
|
||||
return (
|
||||
<div
|
||||
className="flex flex-col space-y-4 py-4 xl:flex-row xl:space-y-4 xl:space-x-4"
|
||||
key={`season-${seasonNumber}-episode-${episode.episodeNumber}`}
|
||||
>
|
||||
<div className="flex-1">
|
||||
<div className="flex flex-col space-y-2 xl:flex-row xl:items-center xl:space-y-0 xl:space-x-2">
|
||||
<h3 className="text-lg">{episode.name}</h3>
|
||||
<AirDateBadge airDate={episode.airDate} />
|
||||
{data.episodes.length === 0 ? (
|
||||
<p>{intl.formatMessage(messages.noepisodes)}</p>
|
||||
) : (
|
||||
data.episodes
|
||||
.slice()
|
||||
.reverse()
|
||||
.map((episode) => {
|
||||
return (
|
||||
<div
|
||||
className="flex flex-col space-y-4 py-4 xl:flex-row xl:space-y-4 xl:space-x-4"
|
||||
key={`season-${seasonNumber}-episode-${episode.episodeNumber}`}
|
||||
>
|
||||
<div className="flex-1">
|
||||
<div className="flex flex-col space-y-2 xl:flex-row xl:items-center xl:space-y-0 xl:space-x-2">
|
||||
<h3 className="text-lg">{episode.name}</h3>
|
||||
{episode.airDate && (
|
||||
<AirDateBadge airDate={episode.airDate} />
|
||||
)}
|
||||
</div>
|
||||
{episode.overview && <p>{episode.overview}</p>}
|
||||
</div>
|
||||
{episode.overview && <p>{episode.overview}</p>}
|
||||
{episode.stillPath && (
|
||||
<img
|
||||
className="h-auto w-full rounded-lg xl:h-32 xl:w-auto"
|
||||
src={`https://image.tmdb.org/t/p/original/${episode.stillPath}`}
|
||||
alt=""
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
{episode.stillPath && (
|
||||
<img
|
||||
className="h-auto w-full rounded-lg xl:h-32 xl:w-auto"
|
||||
src={`https://image.tmdb.org/t/p/original/${episode.stillPath}`}
|
||||
alt=""
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
);
|
||||
})
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -10,6 +10,7 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
|
||||
import PageTitle from '@app/components/Common/PageTitle';
|
||||
import type { PlayButtonLink } from '@app/components/Common/PlayButton';
|
||||
import PlayButton from '@app/components/Common/PlayButton';
|
||||
import StatusBadgeMini from '@app/components/Common/StatusBadgeMini';
|
||||
import Tooltip from '@app/components/Common/Tooltip';
|
||||
import ExternalLinkBlock from '@app/components/ExternalLinkBlock';
|
||||
import IssueModal from '@app/components/IssueModal';
|
||||
@@ -595,75 +596,149 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
||||
{((!mSeason &&
|
||||
request?.status === MediaRequestStatus.APPROVED) ||
|
||||
mSeason?.status === MediaStatus.PROCESSING) && (
|
||||
<Badge badgeType="primary">
|
||||
{intl.formatMessage(globalMessages.requested)}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="primary">
|
||||
{intl.formatMessage(globalMessages.requested)}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.PROCESSING}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{((!mSeason &&
|
||||
request?.status === MediaRequestStatus.PENDING) ||
|
||||
mSeason?.status === MediaStatus.PENDING) && (
|
||||
<Badge badgeType="warning">
|
||||
{intl.formatMessage(globalMessages.pending)}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="warning">
|
||||
{intl.formatMessage(globalMessages.pending)}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini status={MediaStatus.PENDING} />
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{mSeason?.status ===
|
||||
MediaStatus.PARTIALLY_AVAILABLE && (
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(
|
||||
globalMessages.partiallyavailable
|
||||
)}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(
|
||||
globalMessages.partiallyavailable
|
||||
)}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.PARTIALLY_AVAILABLE}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{mSeason?.status === MediaStatus.AVAILABLE && (
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(globalMessages.available)}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(globalMessages.available)}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.AVAILABLE}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{((!mSeason4k &&
|
||||
request4k?.status ===
|
||||
MediaRequestStatus.APPROVED) ||
|
||||
mSeason4k?.status4k === MediaStatus.PROCESSING) &&
|
||||
show4k && (
|
||||
<Badge badgeType="primary">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.requested
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="primary">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.requested
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.PROCESSING}
|
||||
is4k={true}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{((!mSeason4k &&
|
||||
request4k?.status === MediaRequestStatus.PENDING) ||
|
||||
mSeason?.status4k === MediaStatus.PENDING) &&
|
||||
show4k && (
|
||||
<Badge badgeType="warning">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.pending
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="warning">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.pending
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.PENDING}
|
||||
is4k={true}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{mSeason4k?.status4k ===
|
||||
MediaStatus.PARTIALLY_AVAILABLE &&
|
||||
show4k && (
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.partiallyavailable
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.partiallyavailable
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.PARTIALLY_AVAILABLE}
|
||||
is4k={true}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{mSeason4k?.status4k === MediaStatus.AVAILABLE &&
|
||||
show4k && (
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.available
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
<>
|
||||
<div className="hidden md:flex">
|
||||
<Badge badgeType="success">
|
||||
{intl.formatMessage(messages.status4k, {
|
||||
status: intl.formatMessage(
|
||||
globalMessages.available
|
||||
),
|
||||
})}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className="flex md:hidden">
|
||||
<StatusBadgeMini
|
||||
status={MediaStatus.AVAILABLE}
|
||||
is4k={true}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
<ChevronUpIcon
|
||||
className={`${
|
||||
@@ -788,6 +863,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
||||
</div>
|
||||
)}
|
||||
{data.nextEpisodeToAir &&
|
||||
data.nextEpisodeToAir.airDate &&
|
||||
data.nextEpisodeToAir.airDate !== data.firstAirDate && (
|
||||
<div className="media-fact">
|
||||
<span>{intl.formatMessage(messages.nextAirDate)}</span>
|
||||
|
||||
@@ -924,7 +924,7 @@
|
||||
"components.NotificationTypeSelector.adminissuecommentDescription": "Notifica'm quan altres usuaris facin comentaris sobre incidències.",
|
||||
"components.ManageSlideOver.tvshow": "sèries",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedule": "Modifica la tasca programada",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Freqüència",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Freqüència nova",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "Cada {jobScheduleHours, plural, one {hora} other {{jobScheduleHours} hores}}",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorMinutes": "Cada {jobScheduleMinutes, plural, one {minut} other {{jobScheduleMinutes} minuts}}",
|
||||
"components.UserProfile.UserSettings.UserNotificationSettings.pushoverApplicationTokenTip": "<ApplicationRegistrationLink>Registreu una aplicació</ApplicationRegistrationLink> per utilitzar-la amb {applicationTitle}",
|
||||
@@ -1121,5 +1121,6 @@
|
||||
"components.RequestModal.requestcollectiontitle": "Sol·licitud de col·lecció",
|
||||
"components.RequestModal.requestmovie4ktitle": "Sol·licitud de pel·lícula en 4K",
|
||||
"components.RequestModal.requestmovietitle": "Sol·licitud de pel·lícula",
|
||||
"components.RequestModal.requestseriestitle": "Sol·licitud de sèries"
|
||||
"components.RequestModal.requestseriestitle": "Sol·licitud de sèries",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Freqüència actual"
|
||||
}
|
||||
|
||||
@@ -889,6 +889,7 @@
|
||||
"components.TitleCard.mediaerror": "{mediaType} Not Found",
|
||||
"components.TitleCard.tmdbid": "TMDB ID",
|
||||
"components.TitleCard.tvdbid": "TheTVDB ID",
|
||||
"components.TvDetails.Season.noepisodes": "Episode list unavailable.",
|
||||
"components.TvDetails.Season.somethingwentwrong": "Something went wrong while retrieving season data.",
|
||||
"components.TvDetails.TvCast.fullseriescast": "Full Series Cast",
|
||||
"components.TvDetails.TvCrew.fullseriescrew": "Full Series Crew",
|
||||
|
||||
@@ -51,5 +51,214 @@
|
||||
"components.IssueDetails.IssueComment.postedbyedited": "Objavljeno u {relativeTime} od korisnika {username} (Uređeno)",
|
||||
"components.IssueDetails.allseasons": "Sve Sezone",
|
||||
"components.IssueDetails.episode": "Epizode {episodeNumber}",
|
||||
"components.IssueDetails.deleteissueconfirm": "Jeste li sigurni da želite izbrisati ovaj problem?"
|
||||
"components.IssueDetails.deleteissueconfirm": "Jeste li sigurni da želite izbrisati ovaj problem?",
|
||||
"components.IssueDetails.lastupdated": "Zadnje ažurirano",
|
||||
"components.IssueDetails.leavecomment": "Komentar",
|
||||
"components.IssueDetails.nocomments": "Bez komentara.",
|
||||
"components.IssueDetails.openedby": "#{issueId} otvoren u {relativeTime} od korisnka {username}",
|
||||
"components.IssueDetails.openin4karr": "Otvoren u 4K {arr}",
|
||||
"components.IssueDetails.openinarr": "Otvoren u {arr}",
|
||||
"components.IssueDetails.toasteditdescriptionfailed": "Nešto nije u redu prilikom uređivanja opisa problema.",
|
||||
"components.IssueModal.CreateIssueModal.allepisodes": "Sve epizode",
|
||||
"components.IssueDetails.toastissuedeleted": "Problem je uspješno izbrisan!",
|
||||
"components.IssueDetails.unknownissuetype": "Nepoznato",
|
||||
"components.IssueList.issues": "Problem",
|
||||
"components.IssueList.IssueItem.openeduserdate": "{date} od korinika {user}",
|
||||
"components.IssueModal.CreateIssueModal.allseasons": "Sve sezone",
|
||||
"components.IssueModal.issueOther": "Ostalo",
|
||||
"components.IssueModal.issueAudio": "Zvuk",
|
||||
"components.IssueModal.issueSubtitles": "Podnaslov",
|
||||
"components.IssueModal.issueVideo": "Video",
|
||||
"components.IssueList.IssueItem.seasons": "{seasonCount, plural, one {Sezona} other {Sezone}}",
|
||||
"components.Layout.UserDropdown.myprofile": "Profil",
|
||||
"components.Layout.UserDropdown.requests": "Zahtjevi",
|
||||
"components.Layout.VersionStatus.streamstable": "Overseerr Stabilan",
|
||||
"components.Login.password": "Zaporka",
|
||||
"components.ManageSlideOver.openarr4k": "Otvori 4K u {arr}-u",
|
||||
"components.ManageSlideOver.pastdays": "Proteklih {days, number} dana",
|
||||
"components.Login.signinwithplex": "Koristite svoj Plex račun",
|
||||
"components.ManageSlideOver.movie": "film",
|
||||
"components.Login.validationemailrequired": "Morate unijeti valjanu adresu e-pošte",
|
||||
"components.ManageSlideOver.manageModalRequests": "Zahtjevi",
|
||||
"components.ManageSlideOver.manageModalClearMediaWarning": "* Ovo će nepovratno ukloniti sve podatke za ovaj {mediaType}, uključujući sve zahtjeve. Ako ova stavka postoji u vašoj Plex biblioteci, informacije o medijima ponovno će se stvoriti tijekom sljedećeg skeniranja.",
|
||||
"components.ManageSlideOver.manageModalMedia4k": "4K Mediji",
|
||||
"components.ManageSlideOver.manageModalNoRequests": "Nema zahtjeva.",
|
||||
"components.ManageSlideOver.manageModalMedia": "Mediji",
|
||||
"components.ManageSlideOver.manageModalTitle": "Upravljanje {mediaType}",
|
||||
"components.ManageSlideOver.mark4kavailable": "Označi kao dostupno u 4K",
|
||||
"components.MovieDetails.originaltitle": "Izvorni naslov",
|
||||
"components.MovieDetails.overview": "Pregled",
|
||||
"components.ManageSlideOver.openarr": "Otvori u {arr}-u",
|
||||
"components.MovieDetails.cast": "Postava",
|
||||
"components.MovieDetails.budget": "Proračun",
|
||||
"components.ManageSlideOver.opentautulli": "Otvori u Tautulli-u",
|
||||
"components.MediaSlider.ShowMoreCard.seemore": "Vidi više",
|
||||
"components.MovieDetails.markavailable": "Označi kao dostupno",
|
||||
"components.ManageSlideOver.tvshow": "serije",
|
||||
"components.MovieDetails.productioncountries": "{countryCount, plural, one {Država produkcije} other {Države produkcije}}",
|
||||
"components.MovieDetails.managemovie": "Upravljanje filmom",
|
||||
"components.MovieDetails.playonplex": "Reproduciraj na Plex-u",
|
||||
"components.MovieDetails.overviewunavailable": "Pregled nedostupan.",
|
||||
"components.MovieDetails.reportissue": "Prijavi problem",
|
||||
"components.MovieDetails.revenue": "Prihod",
|
||||
"components.MovieDetails.rtaudiencescore": "Rotten Tomatoes ocjena publike",
|
||||
"components.MovieDetails.showless": "Prikaži manje",
|
||||
"components.MovieDetails.showmore": "Prikaži više",
|
||||
"components.MovieDetails.similar": "Slični naslovi",
|
||||
"components.MovieDetails.streamingproviders": "Trenutačno se prikacuje na",
|
||||
"components.NotificationTypeSelector.issuecommentDescription": "Pošaljite obavijest kada problemi dobiju nove komentare.",
|
||||
"components.NotificationTypeSelector.issueresolved": "Problem riješen",
|
||||
"components.NotificationTypeSelector.issuereopened": "Problem ponovno otvoren",
|
||||
"components.NotificationTypeSelector.issueresolvedDescription": "Pošalji obavijest kada se problem riješi.",
|
||||
"components.NotificationTypeSelector.issuereopenedDescription": "Pošalji obavijest kada se problem ponovno otvori.",
|
||||
"components.NotificationTypeSelector.mediaAutoApproved": "Automatsko odobravanje zahtjeva",
|
||||
"components.IssueDetails.issuepagetitle": "Problem",
|
||||
"components.IssueDetails.issuetype": "Tip",
|
||||
"components.IssueDetails.play4konplex": "Reproduciraj u 4K na Plex-u",
|
||||
"components.IssueDetails.playonplex": "Reproduciraj na Plex-u",
|
||||
"components.IssueDetails.problemseason": "Zahvaćene Sezone",
|
||||
"components.IssueDetails.problemepisode": "Zahvaćene Epizode",
|
||||
"components.IssueDetails.reopenissue": "Ponovno otvorite problem",
|
||||
"components.IssueDetails.reopenissueandcomment": "Ponovno otvori s komentarom",
|
||||
"components.IssueDetails.season": "Sezona {seasonNumber}",
|
||||
"components.IssueDetails.toasteditdescriptionsuccess": "Opis problema je uspješno uređen!",
|
||||
"components.IssueDetails.toastissuedeletefailed": "Nešto nije u redu prilikom brisanja problema.",
|
||||
"components.IssueDetails.toaststatusupdated": "Status problema je uspješno ažuriran!",
|
||||
"components.IssueDetails.toaststatusupdatefailed": "Nešto nije u redu prilikom ažuriranja statusa problema.",
|
||||
"components.IssueList.IssueItem.issuestatus": "Status",
|
||||
"components.IssueList.IssueItem.issuetype": "Vrsta",
|
||||
"components.IssueList.IssueItem.opened": "Otvoren",
|
||||
"components.IssueList.IssueItem.problemepisode": "Zahvaćene Epizode",
|
||||
"components.IssueList.IssueItem.unknownissuetype": "Nepoznato",
|
||||
"components.IssueList.IssueItem.episodes": "{episodeCount, plural, one {Epizoda} other {Epizode}}",
|
||||
"components.IssueList.IssueItem.viewissue": "Pogledaj problem",
|
||||
"components.IssueList.showallissues": "Prikaži sve probleme",
|
||||
"components.IssueList.sortAdded": "Najnoviji",
|
||||
"components.IssueList.sortModified": "Zadnje promjene",
|
||||
"components.IssueModal.CreateIssueModal.episode": "Epizoda {episodeNumber}",
|
||||
"components.IssueModal.CreateIssueModal.extras": "Dodaci",
|
||||
"components.IssueModal.CreateIssueModal.problemepisode": "Zahvaćene epizode",
|
||||
"components.IssueModal.CreateIssueModal.problemseason": "Zahvaćene sezone",
|
||||
"components.IssueModal.CreateIssueModal.providedetail": "Navedite detaljno objašnjenje problema na koji ste naišli.",
|
||||
"components.IssueModal.CreateIssueModal.reportissue": "Prijavite problem",
|
||||
"components.IssueModal.CreateIssueModal.season": "Sezona {seasonNumber}",
|
||||
"components.IssueModal.CreateIssueModal.submitissue": "Pošalji problem",
|
||||
"components.IssueModal.CreateIssueModal.toastFailedCreate": "Nešto nije u redu prilikom slanja problema.",
|
||||
"components.IssueModal.CreateIssueModal.toastSuccessCreate": "Problem prijavljen za <strong>{title}</strong> je uspješno predan!",
|
||||
"components.IssueModal.CreateIssueModal.toastviewissue": "Pogledaj problem",
|
||||
"components.IssueModal.CreateIssueModal.validationMessageRequired": "Morate unijeti opis",
|
||||
"components.IssueModal.CreateIssueModal.whatswrong": "Što nije u redu?",
|
||||
"components.LanguageSelector.languageServerDefault": "Default ({language})",
|
||||
"components.LanguageSelector.originalLanguageDefault": "Svi jezici",
|
||||
"components.Layout.LanguagePicker.displaylanguage": "Jezik prikaza",
|
||||
"components.Layout.SearchInput.searchPlaceholder": "Pretražite filmove i TV",
|
||||
"components.Layout.Sidebar.dashboard": "Otkrivanje",
|
||||
"components.Layout.Sidebar.issues": "Problemi",
|
||||
"components.Layout.Sidebar.requests": "Zahtjevi",
|
||||
"components.Layout.Sidebar.settings": "Postavke",
|
||||
"components.Layout.Sidebar.users": "Korisnici",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.seriesrequests": "Zahtjevi za serije",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "Zahtjevi za filmove",
|
||||
"components.Layout.UserDropdown.settings": "Postavke",
|
||||
"components.Layout.UserDropdown.signout": "Odjavi se",
|
||||
"components.Layout.VersionStatus.outofdate": "Zastarjelo",
|
||||
"components.Layout.VersionStatus.streamdevelop": "Overseerr Razvoj",
|
||||
"components.Login.email": "Adresa e-pošte",
|
||||
"components.Login.forgotpassword": "Zaboravljena lozinka?",
|
||||
"components.Login.loginerror": "Nešto nije u redu prilikom pokušaja prijave.",
|
||||
"components.Login.signin": "Prijavite se",
|
||||
"components.Login.signingin": "Prijava…",
|
||||
"components.Layout.VersionStatus.commitsbehind": "",
|
||||
"components.Login.signinheader": "Prijavite se za nastavak",
|
||||
"components.Login.signinwithoverseerr": "Koristite svoj {applicationTitle} račun",
|
||||
"components.Login.validationpasswordrequired": "Morate unijeti lozinku",
|
||||
"components.ManageSlideOver.alltime": "Cijelo vrijeme",
|
||||
"components.ManageSlideOver.downloadstatus": "Preuzimanja",
|
||||
"components.ManageSlideOver.manageModalAdvanced": "Napredna",
|
||||
"components.ManageSlideOver.manageModalClearMedia": "Obriši podatke",
|
||||
"components.ManageSlideOver.manageModalIssues": "Otvoreni problemi",
|
||||
"components.ManageSlideOver.markallseasons4kavailable": "Označi sve sezone kao dostupne u 4K",
|
||||
"components.ManageSlideOver.markallseasonsavailable": "Označi sve sezone kao dostupne",
|
||||
"components.ManageSlideOver.markavailable": "Označi kao dostupno",
|
||||
"components.ManageSlideOver.playedby": "Reproducirano od",
|
||||
"components.ManageSlideOver.plays": "<strong>{playCount, broj}</strong> {playCount, plural, one {reproducirano} other {reproducirano}}",
|
||||
"components.MovieDetails.MovieCast.fullcast": "Glumačka postava",
|
||||
"components.MovieDetails.digitalrelease": "Digitalno izdanje",
|
||||
"components.MovieDetails.mark4kavailable": "Označi kao dostupno u 4K",
|
||||
"components.MovieDetails.originallanguage": "Izvorni jezik",
|
||||
"components.MovieDetails.MovieCrew.fullcrew": "Filmska postava",
|
||||
"components.MovieDetails.physicalrelease": "Fizičko izdanje",
|
||||
"components.MovieDetails.play4konplex": "Reproduciraj u 4K na Plex-u",
|
||||
"components.MovieDetails.recommendations": "Preporuke",
|
||||
"components.MovieDetails.releasedate": "{releaseCount, plural, one {Datum Izlaska} other {Datumi izlaska}}",
|
||||
"components.MovieDetails.rtcriticsscore": "Rotten Tomatoes Tomatometer",
|
||||
"components.MovieDetails.runtime": "{minutes} minute",
|
||||
"components.MovieDetails.studio": "{studioCount, plural, one {Studio} other {Studiji}}",
|
||||
"components.MovieDetails.theatricalrelease": "Izdanje u kinima",
|
||||
"components.MovieDetails.tmdbuserscore": "Ocjena korisnika TMDB-a",
|
||||
"components.MovieDetails.viewfullcrew": "Pogledajte cijelu filmsku postavu",
|
||||
"components.MovieDetails.watchtrailer": "Pogledajte najavu",
|
||||
"components.NotificationTypeSelector.adminissuecommentDescription": "Primite obavijest kada drugi korisnici komentiraju probleme.",
|
||||
"components.NotificationTypeSelector.adminissuereopenedDescription": "Primite obavijest kada problem ponovno otvore drugi korisnici.",
|
||||
"components.NotificationTypeSelector.adminissueresolvedDescription": "Primite obavijest kada drugi korisnici riješe probleme.",
|
||||
"components.NotificationTypeSelector.issuecomment": "Komentiraj problem",
|
||||
"components.NotificationTypeSelector.issuecreated": "Problem prijavljen",
|
||||
"components.NotificationTypeSelector.issuecreatedDescription": "Pošalji obavijest kada se problem prijavi.",
|
||||
"components.NotificationTypeSelector.userissueresolvedDescription": "Primite obavijest kada problemi koje ste prijavili budu riješeni.",
|
||||
"components.NotificationTypeSelector.mediaavailableDescription": "Slanje obavijesti kada medijski zahtjevi postanu dostupni.",
|
||||
"components.NotificationTypeSelector.mediadeclinedDescription": "Slanje obavijesti kada su medijski zahtjevi odbijeni.",
|
||||
"components.NotificationTypeSelector.mediarequested": "Zahtjev čeka odobrenje",
|
||||
"components.NotificationTypeSelector.mediarequestedDescription": "Slanje obavijesti kada korisnici pošalju nove medijske zahtjeve koji zahtijevaju odobrenje.",
|
||||
"components.NotificationTypeSelector.mediaautorequested": "Zahtjev je automatski poslan",
|
||||
"components.NotificationTypeSelector.mediaavailable": "Zahtjev dostupan",
|
||||
"components.NotificationTypeSelector.mediafailedDescription": "Slanje obavijesti kada se medijski zahtjevi ne uspiju dodati u Radarr ili Sonarr.",
|
||||
"components.NotificationTypeSelector.userissuecommentDescription": "Primite obavijest kada problemi koje ste prijavili dobiju nove komentare.",
|
||||
"components.PermissionEdit.autoapprove4kSeries": "Automatsko odobravanje serija u 4K",
|
||||
"components.NotificationTypeSelector.usermediafailedDescription": "Primite obavijest kada se medijski zahtjevi ne uspiju dodati u Radarr ili Sonarr.",
|
||||
"components.NotificationTypeSelector.usermediarequestedDescription": "Primite obavijest kada drugi korisnici pošalju nove medijske zahtjeve koji zahtijevaju odobrenje.",
|
||||
"components.NotificationTypeSelector.usermediaAutoApprovedDescription": "Primite obavijest kada drugi korisnici pošalju nove medijske zahtjeve koji se automatski odobravaju.",
|
||||
"components.NotificationTypeSelector.usermediadeclinedDescription": "Primite obavijest kada vaši medijski zahtjevi budu odbijeni.",
|
||||
"components.PermissionEdit.adminDescription": "Potpuni administratorski pristup. Zaobilazi sve druge provjere dopuštenja.",
|
||||
"components.PermissionEdit.advancedrequest": "Napredni zahtjevi",
|
||||
"components.PermissionEdit.autoapprove4k": "Automatsko odobravanje 4K",
|
||||
"components.PermissionEdit.autoapproveSeriesDescription": "Dozvolite automatsko odobravanje zahtjeva za serijale koji nisu u 4K.",
|
||||
"components.PermissionEdit.autoapprove4kMoviesDescription": "Dozvolite automatsko odobravanje zahtjeva za filmove u 4K.",
|
||||
"components.PermissionEdit.autoapprove4kSeriesDescription": "Dozvolite automatsko odobravanje zahtjeva za serije u 4K.",
|
||||
"components.QuotaSelector.days": "{count, plural, one {danu} other {danu}}",
|
||||
"components.QuotaSelector.movies": "{count, plural, one {film} other {filmova}}",
|
||||
"components.PermissionEdit.autoapproveMoviesDescription": "Dozvolite automatsko odobravanje zahtjeva za filmove koji nisu u 4K.",
|
||||
"components.RequestButton.approve4krequests": "Odobriti {requestCount, plural, one {4K Zahtjev} other {{requestCount} 4K Zahtjeve}}",
|
||||
"components.RequestModal.QuotaDisplay.movielimit": "{limit, plural, one {film} other {filmova}}",
|
||||
"components.RequestButton.approverequests": "Odobriti {requestCount, plural, one {Zatjev} other {{requestCount} Zahtjeve}}",
|
||||
"components.QuotaSelector.seasons": "{count, plural, one {sezona} other {sezone}}",
|
||||
"components.RequestCard.seasons": "{seasonCount, plural, one {Sezona} other {Sezone}}",
|
||||
"components.RequestList.RequestItem.seasons": "{seasonCount, plural, one {Sezona} other {Sezone}}",
|
||||
"components.RequestBlock.seasons": "{seasonCount, plural, one {Sezona} other {Sezone}}",
|
||||
"components.RequestButton.decline4krequests": "Odbiti {requestCount, plural, one {4K Zahtjev} other {{requestCount} 4K Zahtjeve}}",
|
||||
"components.RequestModal.QuotaDisplay.requiredquotaUser": "Ovaj korisnik treba imati još barem <strong>{seasons}</strong> {seasons, plural, one {jedan zahtjev za sezonu} other {nekoliko zahtjeva za sezone}} kako bi mogao preadti zahtjev za ovu seriju.",
|
||||
"components.RequestModal.QuotaDisplay.requiredquota": "Morate imati još barem <strong>{seasons}</strong> {seasons, plural, one {jedan zahtjev za sezonu} other {nekoliko zahtjeva za sezone}} kako bi mogli preadti zahtjev za ovu seriju.",
|
||||
"components.RequestModal.QuotaDisplay.seasonlimit": "{limit, plural, one {sezona} other {sezona/e}}",
|
||||
"components.RequestModal.requestmovies": "{count} {count, plural, one {Zahtjev za film} other {Zahtjevi za filmove}}",
|
||||
"components.RequestModal.requestmovies4k": "{count} {count, plural, one {Zahtjev za film} other {Zahtejvi za filmove}} u 4K",
|
||||
"components.NotificationTypeSelector.mediaAutoApprovedDescription": "Slanje obavijesti kada korisnici pošalju novi medijski zahtjev koji se automatski odobrava.",
|
||||
"components.NotificationTypeSelector.mediaapproved": "Zahtjev odobren",
|
||||
"components.NotificationTypeSelector.mediaapprovedDescription": "Slanje obavijesti kada se medijski zahtjev ručno odobri.",
|
||||
"components.NotificationTypeSelector.mediaautorequestedDescription": "Primite obavijest kada se automatski pošalje novi medijski zahtjevi za stavke na vašoj Plex listi koju pratite.",
|
||||
"components.NotificationTypeSelector.mediadeclined": "Zahtjev je odbijen",
|
||||
"components.NotificationTypeSelector.mediafailed": "Obrada zahtjeva nije uspjela",
|
||||
"components.NotificationTypeSelector.notificationTypes": "Vrste obavijesti",
|
||||
"components.NotificationTypeSelector.userissuecreatedDescription": "Primite obavijest kada drugi korisnici prijave probleme.",
|
||||
"components.NotificationTypeSelector.userissuereopenedDescription": "Primite obavijest kada se problemi koje ste prijavili ponovno otvore.",
|
||||
"components.NotificationTypeSelector.usermediaapprovedDescription": "Primite obavijest kada vaši zahtjevi za medije budu odobreni.",
|
||||
"components.NotificationTypeSelector.usermediaavailableDescription": "Primite obavijest kada vaši medijski zahtjevi postanu dostupni.",
|
||||
"components.PermissionEdit.admin": "Administrator",
|
||||
"components.PermissionEdit.advancedrequestDescription": "Dodajte dozvolu za izmjenu naprednih opcija zahtjeva za medije.",
|
||||
"components.PermissionEdit.autoapprove": "Automatsko odobravanje",
|
||||
"components.PermissionEdit.autoapprove4kMovies": "Automatsko odobravanje 4K filmova",
|
||||
"components.PermissionEdit.autoapprove4kDescription": "Dozvolite automatsko odobravanje svih zahtjeva za 4K medije.",
|
||||
"components.PermissionEdit.autoapproveDescription": "Dozvolite automatsko odobravanje svih zahtjeva koji nisu u 4K mediji.",
|
||||
"components.PermissionEdit.autoapproveMovies": "Automatsko odobravanje filmova",
|
||||
"components.PermissionEdit.autoapproveSeries": "Automatsko odobravanje serijala",
|
||||
"components.RequestButton.declinerequests": "Odbiti {requestCount, plural, one {Zahtjev} other {{requestCount} Zahtjeve}}",
|
||||
"components.RequestModal.QuotaDisplay.requestsremaining": "{remaining, plural, =0 {No} other {<strong>#</strong>}} {type} {remaining, plural, one {zahtjev preostalo} other {zahtjeva preostala}}"
|
||||
}
|
||||
|
||||
@@ -1014,5 +1014,31 @@
|
||||
"i18n.importing": "Importálás…",
|
||||
"i18n.import": "Importálás",
|
||||
"components.PermissionEdit.viewissues": "Problémák Megtekintése",
|
||||
"components.Settings.externalUrl": "Külső URL"
|
||||
"components.Settings.externalUrl": "Külső URL",
|
||||
"components.MovieDetails.physicalrelease": "Fizikai kiadás",
|
||||
"components.MovieDetails.digitalrelease": "Digitális kiadás",
|
||||
"components.RequestCard.cancelrequest": "Kérés visszavonása",
|
||||
"components.RequestCard.declinerequest": "Kérelem elutasítása",
|
||||
"components.RequestCard.editrequest": "Kérelem szerkesztése",
|
||||
"components.Discover.DiscoverWatchlist.discoverwatchlist": "",
|
||||
"components.PermissionEdit.autorequest": "Automatikus kérés",
|
||||
"components.NotificationTypeSelector.mediaautorequested": "A kérelem automatikusan elküldve",
|
||||
"components.MovieDetails.reportissue": "Probléma bejelentése",
|
||||
"components.PermissionEdit.autorequestMovies": "Filmek automatikus kérése",
|
||||
"components.NotificationTypeSelector.issuecomment": "Probléma Megjegyzés",
|
||||
"components.PermissionEdit.autorequestSeries": "Automatikus kérés sorozatok",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.seriesrequests": "Sorozatkérések",
|
||||
"components.MovieDetails.managemovie": "Film kezelése",
|
||||
"components.MovieDetails.rtaudiencescore": "Rotten Tomatoes közönségpontszám",
|
||||
"components.MovieDetails.tmdbuserscore": "TMDB felhasználói pontszám",
|
||||
"components.RequestBlock.delete": "Kérelem törlése",
|
||||
"components.RequestBlock.edit": "Kérelem szerkesztése",
|
||||
"components.RequestBlock.approve": "Kérelem jóváhagyása",
|
||||
"components.RequestBlock.decline": "Kérelem elutasítása",
|
||||
"components.RequestBlock.lastmodifiedby": "Utoljára módosította",
|
||||
"components.RequestBlock.requestdate": "Igénylés dátuma",
|
||||
"components.RequestCard.approverequest": "Kérelem jóváhagyása",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "Filmkérések",
|
||||
"components.Layout.UserDropdown.requests": "Kérések",
|
||||
"components.RequestModal.requestcollectiontitle": "Gyűjtemény kérése"
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.role": "Rolle",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.regionTip": "Filtrer innhold basert på regiontilgjengelighet",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.region": "Utforskelsesregion",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plexbruker",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexuser": "Plex-bruker",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.owner": "Eier",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguageTip": "Filtrer innhold basert på originalspråk",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.originallanguage": "Utforskelsesspråk",
|
||||
@@ -337,7 +337,7 @@
|
||||
"components.MediaSlider.ShowMoreCard.seemore": "Vis mer",
|
||||
"components.Login.validationpasswordrequired": "Du må skrive et passord",
|
||||
"components.Login.validationemailrequired": "Du må bruke en gyldig E-postadresse",
|
||||
"components.Login.signinwithplex": "Bruk Plex-konto",
|
||||
"components.Login.signinwithplex": "Bruk din Plex-konto",
|
||||
"components.Login.signinwithoverseerr": "Bruk {applicationTitle}-konto",
|
||||
"components.Login.signinheader": "Logg inn for å fortsette",
|
||||
"components.Login.signingin": "Logger inn…",
|
||||
@@ -753,7 +753,7 @@
|
||||
"components.Settings.Notifications.NotificationsGotify.validationTokenRequired": "Du må oppgi en applikasjon/API-nøkkel",
|
||||
"i18n.next": "Neste",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedule": "Endre Oppgave",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Frekvens",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Ny Frekvens",
|
||||
"components.TvDetails.firstAirDate": "Første gang sendt",
|
||||
"i18n.deleting": "Sletter…",
|
||||
"components.UserProfile.UserSettings.UserNotificationSettings.emailsettingssaved": "Innstillingene for E-post ble lagret!",
|
||||
@@ -854,8 +854,8 @@
|
||||
"components.Settings.SettingsJobsCache.jobScheduleEditSaved": "Oppgaven ble endret!",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "Hver {jobScheduleHours}. time",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorMinutes": "Hvert {jobScheduleMinutes}. minutt",
|
||||
"components.Settings.SettingsUsers.localLoginTip": "Tillater brukere å kunne logge inn med kun deres E-postadresse og passord istedenfor med Plex OAuth",
|
||||
"components.Settings.SettingsUsers.newPlexLoginTip": "Tillater Plex brukere å logge inn uten å være importert på forhånd",
|
||||
"components.Settings.SettingsUsers.localLoginTip": "Tilllat brukere å logge på med kun E-postadresse og passord istedenfor med Plex OAuth",
|
||||
"components.Settings.SettingsUsers.newPlexLoginTip": "Tillat Plex brukere å logge inn uten å være importert på forhånd",
|
||||
"components.Settings.SonarrModal.validationApplicationUrl": "Du må oppgi en gyldig nettadresse",
|
||||
"components.Settings.SonarrModal.validationBaseUrlTrailingSlash": "Base URL kan ikke slutte med en skråstrek",
|
||||
"components.Settings.locale": "Visningsspråk",
|
||||
@@ -1116,5 +1116,6 @@
|
||||
"components.RequestModal.requestcollectiontitle": "Forespør hele samlingen",
|
||||
"components.Discover.emptywatchlist": "Matriale som du legger til via <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink> vil dukke opp her.",
|
||||
"components.UserProfile.emptywatchlist": "Matriale som du legger til via <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink> vil dukke opp her.",
|
||||
"components.RequestModal.SearchByNameModal.nomatches": "Vi klarte ikke å koble denne serien med et søkbart treff."
|
||||
"components.RequestModal.SearchByNameModal.nomatches": "Vi klarte ikke å koble denne serien med et søkbart treff.",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Nåværende frekvens"
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"components.RequestModal.cancel": "Verzoek annuleren",
|
||||
"components.RequestModal.extras": "Extra's",
|
||||
"components.RequestModal.numberofepisodes": "Aantal afleveringen",
|
||||
"components.RequestModal.pendingrequest": "",
|
||||
"components.RequestModal.pendingrequest": "Verzoek in behandeling",
|
||||
"components.RequestModal.requestCancel": "Verzoek voor <strong>{title}</strong> is geannuleerd.",
|
||||
"components.RequestModal.requestSuccess": "<strong>{title}</strong> is succesvol aangevraagd!",
|
||||
"components.RequestModal.requestadmin": "Dit verzoek zal automatisch goedgekeurd worden.",
|
||||
@@ -291,7 +291,7 @@
|
||||
"components.Settings.Notifications.NotificationsWebhook.customJson": "JSON-payload",
|
||||
"components.Settings.Notifications.NotificationsWebhook.authheader": "Autorisatie-header",
|
||||
"components.Settings.Notifications.NotificationsWebhook.agentenabled": "Agent inschakelen",
|
||||
"components.RequestModal.pending4krequest": "",
|
||||
"components.RequestModal.pending4krequest": "4K-verzoek in behandeling",
|
||||
"components.RequestButton.viewrequest4k": "4K-verzoek bekijken",
|
||||
"components.RequestButton.viewrequest": "Verzoek bekijken",
|
||||
"components.RequestButton.requestmore": "Meer aanvragen",
|
||||
@@ -632,7 +632,7 @@
|
||||
"components.Settings.SettingsJobsCache.jobsandcache": "Taken en cache",
|
||||
"components.Settings.SettingsAbout.about": "Over",
|
||||
"components.ResetPassword.passwordreset": "Wachtwoord opnieuw instellen",
|
||||
"components.Settings.cacheImagesTip": "Cache en serveer geoptimaliseerde afbeeldingen (een aanzienlijke hoeveelheid schijfruimte is nodig)",
|
||||
"components.Settings.cacheImagesTip": "Geoptimaliseerde afbeeldingen cachen en hosten (vereist veel schijfruimte)",
|
||||
"components.Settings.cacheImages": "Afbeeldingscaching inschakelen",
|
||||
"components.Settings.SettingsLogs.logDetails": "Loggegevens",
|
||||
"components.Settings.SettingsLogs.extraData": "Aanvullende gegevens",
|
||||
@@ -713,9 +713,9 @@
|
||||
"components.RequestModal.AdvancedRequester.selecttags": "Labels selecteren",
|
||||
"components.RequestModal.AdvancedRequester.notagoptions": "Geen labels.",
|
||||
"components.Settings.RadarrModal.loadingTags": "Labels laden…",
|
||||
"components.RequestList.RequestItem.mediaerror": "{mediaType} Niet Gevonden",
|
||||
"components.RequestList.RequestItem.mediaerror": "{mediaType} niet gevonden",
|
||||
"components.RequestList.RequestItem.deleterequest": "Verzoek verwijderen",
|
||||
"components.RequestCard.mediaerror": "{mediaType} Niet Gevonden",
|
||||
"components.RequestCard.mediaerror": "{mediaType} niet gevonden",
|
||||
"components.RequestCard.deleterequest": "Verzoek verwijderen",
|
||||
"components.UserProfile.UserSettings.UserNotificationSettings.validationPgpPublicKey": "Je moet een geldige openbare PGP-sleutel opgeven",
|
||||
"components.UserProfile.UserSettings.UserNotificationSettings.telegramsettingssaved": "Instellingen Telegrammeldingen succesvol opgeslagen!",
|
||||
@@ -855,7 +855,7 @@
|
||||
"components.MovieDetails.streamingproviders": "Momenteel te streamen op",
|
||||
"components.Settings.SettingsJobsCache.jobScheduleEditSaved": "Taak succesvol bewerkt!",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorMinutes": "Elk(e) {jobScheduleMinutes, plural, one {minuut} other {{jobScheduleMinutes} minuten}}",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Frequentie",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "Nieuwe frequentie",
|
||||
"components.Settings.SettingsJobsCache.jobScheduleEditFailed": "Er ging iets mis bij het opslaan van de taak.",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedule": "Taak wijzigen",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "Elk(e) {jobScheduleHours, plural, one {uur} other {{jobScheduleHours} uren}}",
|
||||
@@ -893,7 +893,7 @@
|
||||
"components.IssueModal.CreateIssueModal.allepisodes": "Alle afleveringen",
|
||||
"components.IssueModal.issueAudio": "Audio",
|
||||
"components.IssueDetails.nocomments": "Geen opmerkingen.",
|
||||
"components.IssueModal.CreateIssueModal.reportissue": "Een probleem melden",
|
||||
"components.IssueModal.CreateIssueModal.reportissue": "Probleem melden",
|
||||
"components.IssueDetails.allepisodes": "Alle afleveringen",
|
||||
"components.IssueDetails.toasteditdescriptionsuccess": "Probleembeschrijving succesvol bewerkt!",
|
||||
"components.IssueDetails.toastissuedeleted": "Probleem succesvol verwijderd!",
|
||||
@@ -1037,5 +1037,93 @@
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.discordId": "Gebruikers-ID Discord",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.discordIdTip": "Het <FindDiscordIdLink>meercijferige ID-nummer</FindDiscordIdLink> van je Discord-account",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.validationDiscordId": "Je moet een geldige gebruikers-ID van Discord opgeven",
|
||||
"components.Settings.SettingsAbout.appDataPath": "Gegevensmap"
|
||||
"components.Settings.SettingsAbout.appDataPath": "Gegevensmap",
|
||||
"components.RequestBlock.languageprofile": "Taalprofiel",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "Huidige frequentie",
|
||||
"components.StatusBadge.managemedia": "{mediaType} beheren",
|
||||
"components.StatusBadge.openinarr": "Openen in {arr}",
|
||||
"components.StatusBadge.playonplex": "Afspelen op Plex",
|
||||
"components.UserProfile.emptywatchlist": "Media die zijn toegevoegd aan je <PlexWatchlistSupportLink>Plex Kijklijst</PlexWatchlistSupportLink> verschijnen hier.",
|
||||
"components.MovieDetails.digitalrelease": "Digitale release",
|
||||
"i18n.restartRequired": "Opnieuw opstarten vereist",
|
||||
"components.PermissionEdit.viewrecentDescription": "Toestemming geven om de lijst met recent toegevoegde media te bekijken.",
|
||||
"components.PermissionEdit.viewrecent": "Recent toegevoegd bekijken",
|
||||
"components.Settings.deleteServer": "{serverType}-server verwijderen",
|
||||
"components.StatusChecker.appUpdated": "{applicationTitle} bijgewerkt",
|
||||
"components.RequestList.RequestItem.tmdbid": "TMDB ID",
|
||||
"components.RequestList.RequestItem.tvdbid": "TheTVDB ID",
|
||||
"components.StatusChecker.restartRequired": "Server opnieuw opstarten vereist",
|
||||
"components.StatusChecker.restartRequiredDescription": "Start de server opnieuw op om de bijgewerkte instellingen toe te passen.",
|
||||
"components.TitleCard.cleardata": "Gegevens wissen",
|
||||
"components.TitleCard.mediaerror": "{mediatype} niet gevonden",
|
||||
"components.TitleCard.tvdbid": "TheTVDB ID",
|
||||
"components.RequestCard.tmdbid": "TMDB ID",
|
||||
"components.RequestCard.declinerequest": "Verzoek weigeren",
|
||||
"components.RequestCard.editrequest": "Verzoek bewerken",
|
||||
"components.RequestCard.cancelrequest": "Verzoek annuleren",
|
||||
"components.RequestModal.requestcollection4ktitle": "Collectie aanvragen in 4K",
|
||||
"components.RequestModal.requestcollectiontitle": "Collectie aanvragen",
|
||||
"components.RequestModal.requestseries4ktitle": "Serie aanvragen in 4K",
|
||||
"components.RequestModal.requestmovie4ktitle": "Film aanvragen in 4K",
|
||||
"components.RequestModal.requestseriestitle": "Serie aanvragen",
|
||||
"components.RequestModal.requestmovietitle": "Film aanvragen",
|
||||
"components.TvDetails.tmdbuserscore": "Gebruikersscore TMDB",
|
||||
"components.TvDetails.rtaudiencescore": "Publieksscore Rotten Tomatoes",
|
||||
"components.TvDetails.seasonnumber": "Seizoen {seasonNumber}",
|
||||
"components.TvDetails.Season.somethingwentwrong": "Er ging iets mis bij het ophalen van de seizoensgegevens.",
|
||||
"components.TvDetails.seasonstitle": "Seizoenen",
|
||||
"components.Discover.DiscoverWatchlist.discoverwatchlist": "Je Plex Kijklijst",
|
||||
"components.Discover.plexwatchlist": "Je Plex Kijklijst",
|
||||
"components.MovieDetails.physicalrelease": "Fysieke release",
|
||||
"components.PermissionEdit.autorequest": "Automatisch aanvragen",
|
||||
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex Kijklijst synchroniseren",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseries": "Series automatisch aanvragen",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "Automatisch series op je <PlexWatchlistSupportLink>Plex Kijklijst</PlexWatchlistSupportLink> aanvragen",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmoviestip": "Automatisch films op je <PlexWatchlistSupportLink>Plex Kijklijst</PlexWatchlistSupportLink> aanvragen",
|
||||
"components.PermissionEdit.autorequestDescription": "Toestemming geven om niet-4K media in je Plex Kijklijst automatisch aan te vragen.",
|
||||
"components.RequestCard.tvdbid": "TheTVDB ID",
|
||||
"components.Discover.DiscoverWatchlist.watchlist": "Plex Kijklijst",
|
||||
"components.MovieDetails.theatricalrelease": "Bioscooprelease",
|
||||
"components.NotificationTypeSelector.mediaautorequested": "Aanvraag automatisch ingediend",
|
||||
"components.NotificationTypeSelector.mediaautorequestedDescription": "Ontvang een melding wanneer er automatisch nieuwe mediaverzoeken worden ingediend voor items op je Plex Kijklijst.",
|
||||
"components.PermissionEdit.autorequestSeriesDescription": "Toestemming geven om niet-4K series in je Plex Kijklijst automatisch aan te vragen.",
|
||||
"components.PermissionEdit.viewwatchlists": "Plex Kijklijsten bekijken",
|
||||
"components.PermissionEdit.viewwatchlistsDescription": "Toestemming verlenen om de Plex Kijklijsten van andere gebruikers te bekijken.",
|
||||
"components.Settings.SettingsLogs.viewdetails": "Details bekijken",
|
||||
"components.Settings.advancedTooltip": "Deze instelling onjuist configureren, kan resulteren in gebroken functionaliteit",
|
||||
"components.StatusChecker.reloadApp": "{applicationTitle} opnieuw laden",
|
||||
"components.TitleCard.tmdbid": "TMDB ID",
|
||||
"components.StatusChecker.appUpdatedDescription": "Klik op de onderstaande knop om de toepassing opnieuw te laden.",
|
||||
"components.UserProfile.plexwatchlist": "Plex Kijklijst",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmovies": "Films automatisch aanvragen",
|
||||
"components.TvDetails.manageseries": "Serie beheren",
|
||||
"components.MovieDetails.managemovie": "Film beheren",
|
||||
"components.MovieDetails.reportissue": "Probleem melden",
|
||||
"components.PermissionEdit.autorequestMoviesDescription": "Toestemming geven om niet-4K films in je Plex Kijklijst automatisch aan te vragen.",
|
||||
"components.PermissionEdit.autorequestSeries": "Series automatisch aanvragen",
|
||||
"components.PermissionEdit.autorequestMovies": "Films automatisch aanvragen",
|
||||
"components.Settings.experimentalTooltip": "Deze instelling inschakelen, kan leiden tot onverwacht gedrag van de toepassing",
|
||||
"components.Settings.restartrequiredTooltip": "Overseerr moet opnieuw worden gestart om wijzigingen in deze instelling door te voeren",
|
||||
"components.AirDateBadge.airedrelative": "{relativeTime} uitgezonden",
|
||||
"components.AirDateBadge.airsrelative": "Uitzending {relativeTime}",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.seriesrequests": "Serieverzoeken",
|
||||
"components.TvDetails.episodeCount": "{episodeCount, plural, one {# aflevering} other {# afleveringen}}",
|
||||
"components.TvDetails.status4k": "4K {status}",
|
||||
"components.MovieDetails.rtaudiencescore": "Publieksscore Rotten Tomatoes",
|
||||
"components.MovieDetails.rtcriticsscore": "Tomatometer Rotten Tomatoes",
|
||||
"components.MovieDetails.tmdbuserscore": "Gebruikersscore TMDB",
|
||||
"components.RequestBlock.approve": "Verzoek goedkeuren",
|
||||
"components.TvDetails.reportissue": "Probleem melden",
|
||||
"components.TvDetails.rtcriticsscore": "Tomatometer Rotten Tomatoes",
|
||||
"components.RequestModal.SearchByNameModal.nomatches": "We konden geen match vinden voor deze serie.",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "Filmverzoeken",
|
||||
"components.Layout.UserDropdown.requests": "Verzoeken",
|
||||
"components.RequestBlock.decline": "Verzoek weigeren",
|
||||
"components.Discover.emptywatchlist": "Media die zijn toegevoegd aan je <PlexWatchlistSupportLink>Plex Kijklijst</PlexWatchlistSupportLink> verschijnen hier.",
|
||||
"components.RequestBlock.delete": "Verzoek verwijderen",
|
||||
"components.RequestBlock.edit": "Verzoek bewerken",
|
||||
"components.RequestBlock.lastmodifiedby": "Laatst gewijzigd door",
|
||||
"components.RequestBlock.requestdate": "Aanvraagdatum",
|
||||
"components.RequestBlock.requestedby": "Aangevraagd door",
|
||||
"components.RequestCard.approverequest": "Verzoek goedkeuren"
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@
|
||||
"components.Settings.scanning": "Synkar…",
|
||||
"components.Settings.scan": "Skanna bibliotek",
|
||||
"components.Settings.regionTip": "Filtrera innehåll efter region tillgänglighet",
|
||||
"components.Settings.region": "Upptäck Region",
|
||||
"components.Settings.region": "Upptäck region",
|
||||
"components.Settings.originallanguageTip": "Filtrera innehåll efter originalspråk",
|
||||
"components.Settings.originallanguage": "Upptäck språk",
|
||||
"components.Settings.notificationAgentSettingsDescription": "Konfigurera och aktivera aviseringsagenter.",
|
||||
@@ -683,8 +683,8 @@
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.seriesrequestlimit": "Serieförfrågnings gräns",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.movierequestlimit": "Filmförfrågnings gräns",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.enableOverride": "Överskrid den globala gränsen",
|
||||
"components.Settings.SettingsUsers.tvRequestLimitLabel": "Global serieförfrågnings gräns",
|
||||
"components.Settings.SettingsUsers.movieRequestLimitLabel": "Global filmförfrågnings gräns",
|
||||
"components.Settings.SettingsUsers.tvRequestLimitLabel": "Global serieförfrågningsgräns",
|
||||
"components.Settings.SettingsUsers.movieRequestLimitLabel": "Global filmförfrågningsgräns",
|
||||
"components.RequestModal.QuotaDisplay.requiredquotaUser": "Den här användaren behöver ha minst <strong>{seasons}</strong> {seasons, plural, one {säsongsförfrågan} other {säsongsförfrågningar}} kvar för att skicka in en begäran om denna serie.",
|
||||
"components.RequestModal.QuotaDisplay.seasonlimit": "{limit, plural, one {säsong} other {säsonger}}",
|
||||
"components.RequestModal.QuotaDisplay.season": "säsong",
|
||||
|
||||
@@ -986,7 +986,7 @@
|
||||
"components.Settings.Notifications.NotificationsPushbullet.channelTag": "频道标签",
|
||||
"components.Settings.RadarrModal.announced": "已公布",
|
||||
"components.Settings.RadarrModal.released": "已发布",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "频率",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "新频率",
|
||||
"components.Settings.externalUrl": "外部网址",
|
||||
"components.Settings.tautulliApiKey": "API Key",
|
||||
"components.Settings.toastTautulliSettingsFailure": "保存 Tautulli 设置时出现问题。",
|
||||
@@ -1031,5 +1031,42 @@
|
||||
"i18n.import": "导入",
|
||||
"i18n.importing": "导入中…",
|
||||
"components.RequestBlock.languageprofile": "语言配置文件",
|
||||
"components.TitleCard.mediaerror": "未找到{mediaType}"
|
||||
"components.TitleCard.mediaerror": "未找到{mediaType}",
|
||||
"components.MovieDetails.digitalrelease": "数字发行",
|
||||
"components.MovieDetails.physicalrelease": "物理释放",
|
||||
"components.MovieDetails.theatricalrelease": "剧场版",
|
||||
"components.PermissionEdit.viewrecent": "查看最近添加的内容",
|
||||
"components.PermissionEdit.viewrecentDescription": "授予查看最近添加的媒体列表的权限。",
|
||||
"components.StatusChecker.appUpdated": "{applicationTitle} 已更新",
|
||||
"components.StatusChecker.restartRequired": "需要重启服务器",
|
||||
"components.StatusChecker.appUpdatedDescription": "请点击下面的按钮,重新加载应用程序。",
|
||||
"components.StatusChecker.reloadApp": "重新加载 {applicationTitle}",
|
||||
"i18n.restartRequired": "需要重新启动",
|
||||
"components.Settings.deleteServer": "删除 {serverType} 服务器",
|
||||
"components.StatusChecker.restartRequiredDescription": "请重新启动服务器以应用更新的设置。",
|
||||
"components.RequestList.RequestItem.tmdbid": "TMDB ID",
|
||||
"components.Discover.DiscoverWatchlist.watchlist": "Plex 关注列表",
|
||||
"components.MovieDetails.managemovie": "管理电影",
|
||||
"components.MovieDetails.reportissue": "报告问题",
|
||||
"components.NotificationTypeSelector.mediaautorequested": "自动提交的请求",
|
||||
"components.PermissionEdit.viewwatchlistsDescription": "授权查看其他用户的Plex关注列表。",
|
||||
"components.RequestList.RequestItem.tvdbid": "TheTVDB ID",
|
||||
"components.Settings.advancedTooltip": "错误配置此设置可能会导致功能不可用",
|
||||
"components.Settings.experimentalTooltip": "启用此设置可能会导致意外的应用程序行为",
|
||||
"components.TvDetails.reportissue": "报告问题",
|
||||
"components.RequestCard.tmdbid": "TMDB ID",
|
||||
"components.Settings.SettingsLogs.viewdetails": "查看详情",
|
||||
"components.Layout.UserDropdown.requests": "请求",
|
||||
"components.Settings.restartrequiredTooltip": "必须重新启动 Overseerr 才能使更改的设置生效",
|
||||
"components.TvDetails.manageseries": "管理电视节目",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "自动请求您的 <PlexWatchlistSupportLink>Plex 关注列表</PlexWatchlistSupportLink>的媒体",
|
||||
"components.AirDateBadge.airedrelative": "播出{relativeTime}",
|
||||
"components.AirDateBadge.airsrelative": "播出{relativeTime}",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "电影请求",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.seriesrequests": "电视节目请求",
|
||||
"components.NotificationTypeSelector.mediaautorequestedDescription": "当 Plex 关注列表中的项目自动提交新媒体请求时,会收到通知。",
|
||||
"components.PermissionEdit.viewwatchlists": "查看 Plex 关注列表",
|
||||
"components.TvDetails.Season.somethingwentwrong": "在检索季元数据时出了问题。",
|
||||
"components.UserProfile.plexwatchlist": "Plex 关注列表",
|
||||
"components.RequestCard.tvdbid": "TheTVDB ID"
|
||||
}
|
||||
|
||||
@@ -847,7 +847,7 @@
|
||||
"components.MovieDetails.streamingproviders": "目前的流媒體服務",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedule": "編輯作業",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorHours": "每 {jobScheduleHours} 小時",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "頻率",
|
||||
"components.Settings.SettingsJobsCache.editJobSchedulePrompt": "新的頻率",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleSelectorMinutes": "每 {jobScheduleMinutes} 分鐘",
|
||||
"components.Settings.SettingsJobsCache.jobScheduleEditFailed": "儲存作業設定時出了點問題。",
|
||||
"components.Settings.SettingsJobsCache.jobScheduleEditSaved": "作業編輯成功!",
|
||||
@@ -1051,29 +1051,29 @@
|
||||
"components.TitleCard.tmdbid": "TMDB ID",
|
||||
"components.RequestCard.tmdbid": "TMDB ID",
|
||||
"components.RequestList.RequestItem.tvdbid": "TheTVDB ID",
|
||||
"components.Discover.plexwatchlist": "您的 Plex Watchlist",
|
||||
"components.Discover.plexwatchlist": "您的 Plex 關注列表",
|
||||
"components.PermissionEdit.autorequestMovies": "自動提出電影請求",
|
||||
"components.PermissionEdit.autorequestSeries": "自動提出影集請求",
|
||||
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex Watchlist 同步",
|
||||
"components.Settings.SettingsJobsCache.plex-watchlist-sync": "Plex 關注列表同步",
|
||||
"components.PermissionEdit.autorequest": "自動提出請求",
|
||||
"components.Discover.DiscoverWatchlist.discoverwatchlist": "您的 Plex Watchlist",
|
||||
"components.Discover.DiscoverWatchlist.discoverwatchlist": "您的 Plex 關注列表",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmovies": "自動提出電影請求",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseries": "自動提出影集請求",
|
||||
"components.NotificationTypeSelector.mediaautorequested": "請求自動提出",
|
||||
"components.PermissionEdit.autorequestMoviesDescription": "授予從 Plex Watchlist 中自動提出非 4K 電影請求的權限。",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmoviestip": "從您的 <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink> 中自動提出電影請求",
|
||||
"components.NotificationTypeSelector.mediaautorequestedDescription": "當您的 Plex Watchlist 中的媒體自動提出請求時取得通知。",
|
||||
"components.PermissionEdit.autorequestDescription": "授予從 Plex Watchlist 中自動提出非 4K 媒體請求的權限。",
|
||||
"components.PermissionEdit.autorequestSeriesDescription": "授予從 Plex Watchlist 中自動提出非 4K 影集請求的權限。",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "從您的 <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink> 中自動提出影集請求",
|
||||
"components.PermissionEdit.autorequestMoviesDescription": "授予從 Plex 關注列表中自動提出非 4K 電影請求的權限。",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncmoviestip": "從您的 <PlexWatchlistSupportLink>Plex 關注列表</PlexWatchlistSupportLink>中自動提出電影請求",
|
||||
"components.NotificationTypeSelector.mediaautorequestedDescription": "當您的 Plex 關注列表中的媒體自動提出請求時取得通知。",
|
||||
"components.PermissionEdit.autorequestDescription": "授予從 Plex 關注列表中自動提出非 4K 媒體請求的權限。",
|
||||
"components.PermissionEdit.autorequestSeriesDescription": "授予從 Plex 關注列表中自動提出非 4K 影集請求的權限。",
|
||||
"components.UserProfile.UserSettings.UserGeneralSettings.plexwatchlistsyncseriestip": "從您的 <PlexWatchlistSupportLink>Plex 關注列表</PlexWatchlistSupportLink>中自動提出影集請求",
|
||||
"components.Settings.SettingsLogs.viewdetails": "查看詳細信息",
|
||||
"components.TvDetails.reportissue": "報告問題",
|
||||
"components.MovieDetails.managemovie": "管理電影",
|
||||
"components.Discover.DiscoverWatchlist.watchlist": "Plex Watchlist",
|
||||
"components.UserProfile.plexwatchlist": "Plex Watchlist",
|
||||
"components.Discover.DiscoverWatchlist.watchlist": "Plex 關注列表",
|
||||
"components.UserProfile.plexwatchlist": "Plex 關注列表",
|
||||
"components.MovieDetails.reportissue": "報告問題",
|
||||
"components.PermissionEdit.viewwatchlists": "查看 Plex Watchlists",
|
||||
"components.PermissionEdit.viewwatchlistsDescription": "授予查看其他使用者的 Plex Watchlists 的權限。",
|
||||
"components.PermissionEdit.viewwatchlists": "查看 Plex 關注列表",
|
||||
"components.PermissionEdit.viewwatchlistsDescription": "授予查看其他使用者的 Plex 關注列表的權限。",
|
||||
"components.TvDetails.manageseries": "管理影集",
|
||||
"components.Settings.restartrequiredTooltip": "Jellyseerr 必須重新啟動才能應用設定的變更",
|
||||
"components.Layout.UserDropdown.MiniQuotaDisplay.movierequests": "電影請求",
|
||||
@@ -1113,8 +1113,9 @@
|
||||
"components.RequestModal.requestseries4ktitle": "提出 4K 影集請求",
|
||||
"components.RequestModal.requestcollectiontitle": "提出電影系列請求",
|
||||
"components.RequestModal.SearchByNameModal.nomatches": "找不到此影集的數據。",
|
||||
"components.UserProfile.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink> 中的媒體會顯示在這裡。",
|
||||
"components.Discover.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex Watchlist</PlexWatchlistSupportLink> 中的媒體會顯示在這裡。",
|
||||
"components.UserProfile.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex 關注列表</PlexWatchlistSupportLink>中的媒體會顯示在這裡。",
|
||||
"components.Discover.emptywatchlist": "您的 <PlexWatchlistSupportLink>Plex 關注列表</PlexWatchlistSupportLink>中的媒體會顯示在這裡。",
|
||||
"components.Settings.advancedTooltip": "錯誤的設定可能會破壞應用程式功能",
|
||||
"components.Settings.experimentalTooltip": "啟用此設定可能會出現意外的應用程式行為"
|
||||
"components.Settings.experimentalTooltip": "啟用此設定可能會出現意外的應用程式行為",
|
||||
"components.Settings.SettingsJobsCache.editJobScheduleCurrent": "目前的頻率"
|
||||
}
|
||||
|
||||
@@ -470,6 +470,6 @@
|
||||
z-index: 30 !important;
|
||||
}
|
||||
|
||||
.ptr--ptr .ptr--box {
|
||||
.ptr--box {
|
||||
margin-bottom: -13px !important;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user