* revert(airdate): reverts airdate offset and changes relative time to only display date (not time)
This reverts #1390 as it created more confusion when we offsetted the air date in relevance to the
timezone. It also changes the relative time to use date instead of time (so it will say `aired
yesterday` `today` `5 days ago` instead of `aired x hours ago` since we dont really the airtime
data.
* fix: relate time in days instead of hours
* fix: relative time in days
* fix: relative time in days (but properly)
* Update LocalLogin.tsx
remove data-bwignore="false" from attributes to let Bitwarden Autofill
* Update JellyfinLogin.tsx
remove data-bwignore="false" from attributes to let Bitwarden Autofill
* revert: reverts csrf-csrf back to csurf
This reverts csrf-csrf change brought on by `9e3119` in #1393 back to `csurf` that is maintained
* fix: type declarations for csurf
PostgreSQL requires that the ORDER BY expression must appear in the SELECT list when using DISTINCT.
Since we were using a computed expression in the ORDER BY clause, we need to include it in the
SELECT list as well.
re #1333
* fix: allows every user to be added to the override rules
* chore: code cleanup
* fix(overriderules): displaying more than ten users at a time
* fix(overriderules): pageSize unaffected by duplicate includeIds
Co-authored-by: Gauthier <mail@gauthierth.fr>
* fix: allows every user to be added to the override rules
* chore(overriderules): readding override rules after rebase
* chore(overriderules): removing empty file
* chore(overriderules): fixing bad merge
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
* feat(ui): prevent password manager interference & improve service links (#3989)
(cherry picked from commit ef18b5d1de)
* feat(ui): prevent password manager autofill on Jellyfin setup form
* fix: rebase mess
* feat(ui): set data-form-type attribute
For Dashlane password manager
* feat(ui): add data attribs for dashlane
* feat(ui): set data-form-type to JellyfinLogin
* fix(settings): remove dns server option
This PR removes the DNS Servers option added in #1266 because it doesn't seem to work reliably.
* style: remove whitespace change
Fix Jellyfin/Emby item retrieval to work properly with api tokens by using user-independent item
endpoints. This will resolve the issue where disabled libraries for jellyseerr owner's would fail to
scan even when we migrated to API tokens due to using the user-dependent item view endpoints.
* feat(pushover): attach image to pushover notification payload (#3701)
* fix: api language query parameter (#3720)
* docs: add j0srisk as a contributor for code (#3745) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(tooltip): add tooltip to display exact time on date hover (#3773)
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
* docs: add Loetwiek as a contributor for code (#3776) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* fix(ui): ensure title fits into the `view collection` box (#3696)
* fix(docs): correct openapi docs minor issues (#3648)
* docs: add Fuochi as a contributor for doc (#3826)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat: translations update from Hosted Weblate (#3597)
* feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (1232 of 1234 strings)
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1236 of 1236 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/da/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/el/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 99.5% (1234 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Romanian)
Currently translated at 37.1% (461 of 1240 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 37.0% (459 of 1240 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 34.8% (432 of 1240 strings)
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ro/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 57.4% (712 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 13.2% (164 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 4.8% (60 of 1240 strings)
feat(lang): added translation using Weblate (Bulgarian)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/bg/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 97.9% (1215 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 82.0% (1017 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 72.9% (905 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 72.9% (905 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 71.3% (885 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 64.9% (805 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 64.4% (799 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 63.8% (792 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 63.7% (791 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 57.5% (714 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 49.9% (619 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 35.9% (446 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 35.9% (446 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 32.1% (399 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 24.6% (306 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 18.9% (235 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 17.5% (217 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 17.3% (215 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 8.0% (100 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 3.3% (41 of 1240 strings)
feat(lang): added translation using Weblate (Ukrainian)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/uk/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Czech)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 99.6% (1236 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/cs/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Croatian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.8% (1238 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.8% (1238 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.6% (1236 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.5% (1235 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.5% (1235 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 97.5% (1210 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.5% (1185 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.6% (1182 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.6% (1182 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.2% (1177 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.2% (1177 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 94.3% (1166 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 91.7% (1134 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 91.7% (1134 of 1236 strings)
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hungarian)
Currently translated at 91.3% (1133 of 1240 strings)
feat(lang): translated using Weblate (Hungarian)
Currently translated at 89.3% (1108 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hebrew)
Currently translated at 13.9% (172 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: osh <osh@osh.cc>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/he/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Polish)
Currently translated at 99.1% (1225 of 1236 strings)
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Italian)
Currently translated at 92.8% (1148 of 1236 strings)
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ar/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1236 of 1236 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1235 of 1236 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1235 of 1236 strings)
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Finnish)
Currently translated at 2.6% (33 of 1240 strings)
feat(lang): added translation using Weblate (Finnish)
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fi/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Serbian)
Currently translated at 50.8% (630 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hans/
Translation: Overseerr/Overseerr Frontend
---------
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
* feat(lang): add lang config for Bulgarian, Finnish, Ukrainian, Indonesian, Slovak, Turkish and Maori (#3834)
* fix: correct deeplinks on iPad (#3883)
* feat(studios): add a24 to studios list (#3902)
* docs: add demrich as a contributor for code (#3906) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(watchlist): Cache watchlist requests with matching E-Tags (#3901)
* perf(watchlist): add E-Tag caching to Plex watchlist requests
* refactor(watchlist): increase frequency of watchlist requests
* fix: sync watchlist every 3 min instead of 3 sec
* docs: add maxnatamo as a contributor for code (#3907) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(plex): refresh token schedule (#3875)
* feat: refresh token schedule
fix#3861
* fix(i18n): add i18n message
* refactor(plextv): use randomUUID crypto instead custom function
* docs: add DamsDev1 as a contributor for code (#3924) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* fix: correct icon showing on certain phones when not pulled (#3939)
* feat: add support for requesting "Specials" for TV Shows (#3724)
* feat: add support for requesting "Specials" for TV Shows
This commit is responsible for adding support in Overseerr for requesting "Special" episodes for TV
Shows. This request has become especially pertinent when you consider shows like "Doctor Who". These
shows have Specials that are critical to understanding the plot of a TV show.
fix#779
* chore(yarn.lock): undo inappropriate changes to yarn.lock
I was informed by @sct in a comment on the #3724 PR that it was not appropriate to commit the
changes that ended up being made to the yarn.lock file. This commit is responsible, then, for
undoing the changes to the yarn.lock file that ended up being submitted.
* refactor: change loose equality to strict equality
I received a comment from OwsleyJr pointing out that we are using loose equality when we could
alternatively just be using strict equality to increase the robustness of our code. This commit
does exactly that by squashing out previous usages of loose equality in my commits and replacing
them with strict equality
* refactor: move 'Specials' string to a global message
Owsley pointed out that we are redefining the 'Specials' string multiple times throughout this PR.
Instead, we can just move it as a global message. This commit does exactly that. It squashes out and
previous declarations of the 'Specials' string inside the src files, and moves it directly to the
global messages file.
* docs: add AhmedNSidd as a contributor for code (#3964) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(lang): Translations update from Hosted Weblate (#3835)
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/bg/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/uk/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1241 of 1241 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Hungarian)
Currently translated at 99.2% (1231 of 1240 strings)
Co-authored-by: Dargo <fuszi88@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Polish)
Currently translated at 98.8% (1227 of 1241 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: senza <senza@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pl/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1241 of 1241 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Robin Van de Vyvere <irazoxgames@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1241 of 1241 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1241 of 1241 strings)
Co-authored-by: Frostar <dasangra@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1241 of 1241 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nackophilz <zrv4flra@anonaddy.me>
Co-authored-by: TayZ3r <artimmo@hotmail.fr>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1241 of 1241 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Finnish)
Currently translated at 2.9% (36 of 1240 strings)
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fi/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Albanian)
Currently translated at 95.8% (1189 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: W L <wl@mailhole.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sq/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1241 of 1241 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hyun Lee <hyun@yahoo.com>
Co-authored-by: cutiekeek <cutiekeek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Portuguese (Portugal))
Currently translated at 98.4% (1221 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rafael Souto <git@rafaelsouto.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_PT/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.9% (1239 of 1240 strings)
Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Chinese (Traditional Han script))
Currently translated at 98.2% (1219 of 1241 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marc Lerno <mlerno1192@student.carlalbert.edu>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hant/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translation: Overseerr/Overseerr Frontend
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
feat(lang): translated using Weblate (Norwegian Bokmål)
Currently translated at 89.9% (1115 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: exentler <gurandsrud@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nb_NO/
Translation: Overseerr/Overseerr Frontend
---------
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Dargo <fuszi88@gmail.com>
Co-authored-by: senza <senza@users.noreply.hosted.weblate.org>
Co-authored-by: Robin Van de Vyvere <irazoxgames@gmail.com>
Co-authored-by: Frostar <dasangra@hotmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Nackophilz <zrv4flra@anonaddy.me>
Co-authored-by: TayZ3r <artimmo@hotmail.fr>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: W L <wl@mailhole.de>
Co-authored-by: Hyun Lee <hyun@yahoo.com>
Co-authored-by: cutiekeek <cutiekeek@gmail.com>
Co-authored-by: Rafael Souto <git@rafaelsouto.com>
Co-authored-by: Marc Lerno <mlerno1192@student.carlalbert.edu>
Co-authored-by: exentler <gurandsrud@gmail.com>
* feat(ui): prevent password manager interference & improve service links (#3989)
* docs: add s0up4200 as a contributor for code (#4047) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* fix(ui): update Plex Logo (#3955)
* docs: add JackW6809 as a contributor for code (#4048) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat: requests/issues menu count (#3470)
* feat: request and issue count added to sidebar/mobile menu
* fix: added permission check for count visibility
* refactor: modified badge design for count
* fix: properly update issue and request counts in certain scenarios (#4051)
* fix: center count badge on sidebar and mobile menu (#4052)
* fix: request english trailers as a fallback when using other languages (#4009)
Co-authored-by: Stancu Florin <florin@stancu.me>
* docs: add StancuFlorin as a contributor for code (#4053) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat: added the PWA badge indicator for requests pending (#3411)
refactor: removed unnecessary code when sending web push notification
fix: moved all notify user logic into webpush
refactor: n
refactor: remove all unnecessary prettier changes
fix: n
fix: n
fix: n
fix: n
fix: increment sw version
fix: n
---------
Co-authored-by: Isaac M <masesisaac@gmail.com>
Co-authored-by: Joseph Risk <j0srisk@gmail.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Loetwiek <79059734+Loetwiek@users.noreply.github.com>
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
Co-authored-by: Fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
Co-authored-by: Fuochi <ffuochi@hotmail.com>
Co-authored-by: Weblate (bot) <hosted@weblate.org>
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Co-authored-by: Jordan Jones <me@jjones.tech>
Co-authored-by: Brandon Cohen <brandon@z3hn.dev>
Co-authored-by: David Emrich <demrich@me.com>
Co-authored-by: Max T. Kristiansen <me@maxtrier.dk>
Co-authored-by: Damien Fajole <60252259+DamsDev1@users.noreply.github.com>
Co-authored-by: Ahmed Siddiqui <36286128+AhmedNSidd@users.noreply.github.com>
Co-authored-by: Dargo <fuszi88@gmail.com>
Co-authored-by: senza <senza@users.noreply.hosted.weblate.org>
Co-authored-by: Robin Van de Vyvere <irazoxgames@gmail.com>
Co-authored-by: Frostar <dasangra@hotmail.com>
Co-authored-by: Nackophilz <zrv4flra@anonaddy.me>
Co-authored-by: TayZ3r <artimmo@hotmail.fr>
Co-authored-by: Oskari Lavinto <olavinto@protonmail.com>
Co-authored-by: W L <wl@mailhole.de>
Co-authored-by: Hyun Lee <hyun@yahoo.com>
Co-authored-by: cutiekeek <cutiekeek@gmail.com>
Co-authored-by: Rafael Souto <git@rafaelsouto.com>
Co-authored-by: Marc Lerno <mlerno1192@student.carlalbert.edu>
Co-authored-by: exentler <gurandsrud@gmail.com>
Co-authored-by: soup <s0up4200@pm.me>
Co-authored-by: JackOXI <53652452+JackW6809@users.noreply.github.com>
Co-authored-by: Stancu Florin <StancuFlorin@users.noreply.github.com>
Co-authored-by: Stancu Florin <florin@stancu.me>
Co-authored-by: Brandon Cohen <cohbrandon@gmail.com>
* refactor: rename some remaining Overseerr occurrences
This PR renames some remaining occurrences of Overseerr to Jellyseerr. This includes the OpenAPI
specification, log file names and some variables and console messages.
* fix(i18n): add missing translation
This PR will ensure that the airdate is in the user's local timezone so that its more user friendly and the relative time calculation would be consistent
fix#1373
* fix: add email requirement for local users
Because of a misunderstanding, and the requirement to have a mandatory email for local users was
removed, when it shouldn't have been.
re #900fix#1367
* fix: add missing check for Emby
* feat: support disabling jellyfin login
* feat: revamp login screen
Update the login screen for better usability, especially with OpenID
Connect and Plex login, allowing one-click login and removing the
accordion layout. Additionally, ensures that media server login is
hidden when disabled in the settings.
* test: update cypress login command
Fix the "Remove From *arr" button in the slideover of the movie/series details page. The issue was
caused by an attempt to delete a file that didn't exist.
* refactor(overriderules): move override rules out of the service modal
This PR moves override rules out of the service modal. This will make override rules more visible
than inside the service modal popup. This will also avoid having a modal inside a modal (override
rules modal inside of service modal)
* fix: resolve typing error
* feat(linked-accounts): create page and display linked media server accounts
* feat(dropdown): add new shared Dropdown component
Adds a shared component for plain dropdown menus, based on the headlessui Menu component. Updates
the `ButtonWithDropdown` component to use the same inner components, ensuring that the only
difference between the two components is the trigger button, and both use the same components for
the actual dropdown menu.
* refactor(modal): add support for configuring button props
* feat(linked-accounts): add support for linking/unlinking jellyfin accounts
* feat(linked-accounts): support linking/unlinking plex accounts
* fix(linked-accounts): probibit unlinking accounts in certain cases
Prevents the primary administrator from unlinking their media server account (which would break
sync). Additionally, prevents users without a configured local email and password from unlinking
their accounts, which would render them unable to log in.
* feat(linked-accounts): support linking/unlinking emby accounts
* style(dropdown): improve style class application
* fix(server): improve error handling and API spec
* style(usersettings): improve syntax & performance of user password checks
* style(linkedaccounts): use applicationName in page description
* fix(linkedaccounts): resolve typo
* refactor(app): remove RequestError class
By default, useSWRInfinite revalidates the first page every time a new page is loaded, resulting in
additional requests being sent. This PR disables this behavior.
fix#1380
* feat(settings): add a disclaimer for dns servers and ipv4 first settings
This PR adds a disclaimer to warn the user that he should use the network settings of his
containers/system first instead of this one.
* fix: add missing translations
* feat: create a new Advanced Network Settings section
* Update src/components/Settings/SettingsNetwork/index.tsx
Co-authored-by: fallenbagel <98979876+fallenbagel@users.noreply.github.com>
* Update src/i18n/locale/en.json
Co-authored-by: fallenbagel <98979876+fallenbagel@users.noreply.github.com>
* fix: rename to Force IPv4 Resolution First
---------
Co-authored-by: fallenbagel <98979876+fallenbagel@users.noreply.github.com>
* refactor(settings): move network settings to their own settings tab
This PR moves the network settings out of the General Settings section to a new Netowrk Settings
tab.
* fix: add missing translations
* fix: fix cypress tests for network settings
* refactor: create a separate section for network settings
* fix: assign the keep-alive value explicitly
The Node.js documentation mentions that the default keep-alive value is not used when creating a
global agent manually, which is done in customProxyAgent.ts.
re #1365
* fix: typo
* ci: set the pnpm version number explicitly
pnpm latest version is now v10. We still use v9, and the latest version of pnpm was used in
Dockerfile instead of v9.
* ci: add missing pnpm v9
By default, the jellyfinAuthToken of every user was always retrieved from the database, and
sometimes sent back to the client. Any logged-in user could retrieve this token via a request
containing admin user information, and use it to gain full access to Jellyfin. This PR removes the
auth token and the device ID from the fields selected by default by TypeORM.
Due to merging issues with upstream, some jobs for the Plex media server where also running on
Jellyfin/Emby instances. This PR makes them run only when the media server is Plex.
fix#1329
This PR fixes a bug where the validation error message is displayed over and over because of a React
useEffect dependency issue. Previously, the `validateLibraries()` function was being called inside a
useEffect that depended on a state that this function was updating.
* ci: push individual arch digest only and merge from digest
* ci: correct syntax for docker manifest
* ci: add the missing id to the build step
* ci: set proper ids and output digest that is dependant on matrix.id
* ci: proper dynamic outputs by manually echoing it out
* ci: remove unnecessary test step
* ci: fix typo when passing sanitised platform to github env
* ci: hardcode a platform & owner for testing sanitation
* ci: fix typo
* ci: fix typo
* ci: fix yet another typo
* ci: fix yet another typo
* ci: another typo when echoing the tested variables fixed
* ci: properly echo the values from github env
* ci: attempt to echo out the sanitised variables
* ci: finalise the sanitation test and remove it from lint & test build
This has to be done now that arm64 and amd64 runs as two seperate jobs. Otherwise, whichever
finishes the last would override the other one when pushed
Added platform specific cache scoping and turned off provenance to prevent manifest merging. In
addition we are now using ubuntu24.04 in an attempt to get the job to run as ubuntu-22.04 were
stalled for more than 18 hours.
* ci: utilise the linux arm64 hosted runners
This is an attempt to utilise the linux arm64 hosted runners which should reduce the build times
significantly. In addition, this should leverage the github's built-in caching.
* ci: fix typo
- upgrade jellyseerr to 2.3.0
- disable HPA as it's not documented and not useful
- migrate container image to ghcr.io registry
Signed-off-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>
* feat(settings): add settings for custom DNS servers and IPv4 resolution first
This PR adds settings to change the DNS servers Jellyseerr uses and to force Jellyseerr to resolve
DNS queries using IPv4 first. These settings aim to make it easier for less experienced users to fix
network errors related to DNS resolution.
* style: fix missing newline
* docs: update the current list of features we offer
* docs: add the missing `)`
Co-authored-by: Gauthier <mail@gauthierth.fr>
* docs: use proper acronym case
Co-authored-by: Gauthier <mail@gauthierth.fr>
* docs: add the missing `)`
Co-authored-by: Gauthier <mail@gauthierth.fr>
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
If you setup an override rule on a service that is not created yet, the override rule doesn't get
added to the service because it has no ID, but a record for that override rule is nonthless created.
This PR allows override rules only when the service is setup.
This change is done to adhere with the TMDB rule of having one apikey per app and since jellyseerr
has diverged from overseerr, it is best practice to use our own apikey so that TMDB can properly
identify any issues that could be caused by jellyseerr
Adds a guard clause to skip region migration if discoverRegion and
streamingRegion properties already exist in settings. This prevents
accidental overwrites of existing region settings during multiple runs
and ensures the migration only executes when needed.
Previously, the migration would run every time regardless of whether the
new region properties existed, potentially overwriting user preferences.
fix#1251
* fix: resolve plex user mismatch due to caching issues
This commit addresses an issue where cached responses for PlexTV API
requests could return incorrect user data when multiple users were logged in.
This was caused by a shared cache key that did not account for differences
in auth tokens, i.e `X-Plex-Token`. The `serializeCacheKey` method should
now include headers in the cache key generation to ensure unique cache keys.
This should fix the plex user mismatch that occurred due to the same
cache key being used without accounting for the difference in auth
token.
fix#1227
* fix: adds the default params and optional params, add the headers in all methods
* refactor: apply review commits and rename params to options in cachekey
* chore: update nodejs to 22 in an attempt to fix undici errors
This is an attempt to fix the undici errors introduced after the switch
from axios to native fetch. The decision was made as it native fetch on
node 20 seems to be "experimental" and
> since native fetch is no longer experimental since Node 21
* chore: increase the required node version
* build: update nodejs version to 22
* chore: update nodejs version to 22
* chore: update @types/node to v22
* chore(gen-docs): update the gen-docs node engine requirement to 22
* refactor: replace streaming providers' name with their corresponding logo
re #919
* refactor: change default image opacity and the on hover opacity as well to match the overall ui/ux
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
This commit resolves an issue where the continue button in setup step 3 remained disabled after a
page refresh even when libraries are toggled. This was happening because
`mediaServerSettingsComplete` state was reset on refresh and not correctly re-initialized.
This change optimises the media updates to avoid unneccessary lifecycle hook executions which
results in potential recursion for POSTGRESQL compatibility. This should prevent an issue where
after a TV request, the tv request would get sent to sonarr and notification for it would get sent
over and over and over again
This PR clears the Radarr/Sonarr cache after a request has been made, because the media status on
Radarr/Sonarr will no longer be good. It also resolves a bug that prevented the media from being
deleted after a request had been sent to Radarr/Sonarr.
fix#1207
This PR adds an error message when the database has no admin user and Jellyseerr has already been
set up (i.e. settings.json is filled in), instead of having a generic error message.
When a series is requested, an event is triggered by TypeORM after the request status has been
updated. The function executed by this event updated the request status to "PROCESSING", even if the
request already had this status. This triggered the same function once again, which repeated the
update, in an endless loop.
The request count subquery was causing issues with some PostgreSQL
configurations due to case sensitivity in column aliases. Modified the
query to use an explicit subquery with a properly named alias to ensure
consistent behavior across different database setups.
When the streaming region is set to another value than the default one, the setting starts toggling
itself from the default value to the new value and vice-versa constantly
fix#1200
* fix: properly fetch sonarr/radarr specific override rules and fix its application
- This will fetch the proper sonarr/radarr specific override rule to apply.
- This will skip override rules for anime TV shows unless the `overrideRule`
explicitly includes the anime keyword.
- Apply the most specific override rule first (e.g., rules with multiple
conditions like `genre`, `language`, and `keywords`)
- Debug logs to for override rules
* fix(overriderules): apply overrides to "auto_approve" permission users but not "advaned_request"
This decision is done because it makes no sense to give advanced request users who gets to choose
what values to choose but then the minute they request, it gets overridden, rendering the whole
modal completely useless. In addition, admin/manage_request permission users who modify requests,
the minute they modify it will get overridden as well so it makes no sense to override their
requests
* fix: use default service instance for override rules
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
Updated the logic of override rules to be applied during the request phase and not during
send-to-arr phase. In addition, override rules will only apply for non-admin/non-auto-approve users.
fix#1195
* feat: add a setting for special episodes
This PR adds a separate setting for special episodes and disables them by default, to avoid unwanted
library status updates.
* refactor(settings): re-order setting for allow specials request
---------
Co-authored-by: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
* feat: create the basis for the override rules
* feat: add support for sonarr and keywords to override rules
* feat: apply override rules in the media request
* feat: add users to override rules
* fix: save the settings modified by the override rules
* fix: resolve type errors
* style: run prettier
* fix: add missing migration
* fix: correct sonarr override rules
* fix: create PostgreSQL migration and fix SQLite migration
* fix: resolve type naming and fix i18n issue
* fix: remove unrelated changes to the PR
The Sort Direction was loaded with values from the localStorage, but `undefined` was assigned if no
previous Sort Direction existed, causing the client to send undefined as a string for the Sort
Direction.
fix#1147
If Jellyseerr can't connect to Radarr/Sonarr, the "Recent Requests" slider will not load because of
the error throwed when trying to get the Quality Profile. This PR catch this error so the recent
requests are well displayed.
* feat: add separate setting for streaming region
Currently, the "Currently Streaming On" information is based on the Discover Region setting. This PR
adds a new setting to specify which region should be used to display the streaming region.
re #890
* fix: add missing newline
* fix: rename migration function
* fix: use tmdb first as metadata provider and fallback to tvdb
This PR changes the order of the metadata provider to TMDB first and then fallback to TheTVDB if no
TMDB metadata is available. Previously, TheTVDB was used first and there was no fallback if the
latter failed.
fix#1137
* feat: add logs
* fix: add logs
* fix: add show name
Previously, the "Play on Jellyfin" or "Watch Trailers" buttons used the onClick event and
window.open to open links, instead of using 'a' elements with a href.
* docs: add a troubleshooting page
This troubleshooting page explains how to solve dns blockage issues from ISPs and how to fix some
slowdowns / ipv6 errors with the forceIpv4First environment variable.
fix#1098
* fix: specify the difference between DNS blocking and total blocking from the ISP
Refactoring avatarproxy to retrieve avatars from the Jellyfin API instead of the public endpoint
broke Emby avatars that doesn't have this API method.
fix#1101
When writing the settings.json file ensure that the file is fully written by writing it to temporary
file before renaming it to the final settings path. This should prevent issues where the config gets
lost due to the file being corrupted.
* feat(pushover): attach image to pushover notification payload (#3701)
* fix: api language query parameter (#3720)
* docs: add j0srisk as a contributor for code (#3745) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(tooltip): add tooltip to display exact time on date hover (#3773)
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
* docs: add Loetwiek as a contributor for code (#3776) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* fix(ui): ensure title fits into the `view collection` box (#3696)
* fix(docs): correct openapi docs minor issues (#3648)
* docs: add Fuochi as a contributor for doc (#3826)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat: translations update from Hosted Weblate (#3597)
* feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (1232 of 1234 strings)
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1236 of 1236 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/da/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/el/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 99.5% (1234 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Romanian)
Currently translated at 37.1% (461 of 1240 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 37.0% (459 of 1240 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 34.8% (432 of 1240 strings)
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ro/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 57.4% (712 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 13.2% (164 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 4.8% (60 of 1240 strings)
feat(lang): added translation using Weblate (Bulgarian)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/bg/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 97.9% (1215 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 82.0% (1017 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 72.9% (905 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 72.9% (905 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 71.3% (885 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 64.9% (805 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 64.4% (799 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 63.8% (792 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 63.7% (791 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 57.5% (714 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 49.9% (619 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 35.9% (446 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 35.9% (446 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 32.1% (399 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 24.6% (306 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 18.9% (235 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 17.5% (217 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 17.3% (215 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 8.0% (100 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 3.3% (41 of 1240 strings)
feat(lang): added translation using Weblate (Ukrainian)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/uk/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Czech)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 99.6% (1236 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/cs/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Croatian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.8% (1238 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.8% (1238 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.6% (1236 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.5% (1235 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.5% (1235 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 97.5% (1210 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.5% (1185 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.6% (1182 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.6% (1182 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.2% (1177 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.2% (1177 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 94.3% (1166 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 91.7% (1134 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 91.7% (1134 of 1236 strings)
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hungarian)
Currently translated at 91.3% (1133 of 1240 strings)
feat(lang): translated using Weblate (Hungarian)
Currently translated at 89.3% (1108 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hebrew)
Currently translated at 13.9% (172 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: osh <osh@osh.cc>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/he/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Polish)
Currently translated at 99.1% (1225 of 1236 strings)
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Italian)
Currently translated at 92.8% (1148 of 1236 strings)
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ar/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1236 of 1236 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1235 of 1236 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1235 of 1236 strings)
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Finnish)
Currently translated at 2.6% (33 of 1240 strings)
feat(lang): added translation using Weblate (Finnish)
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fi/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Serbian)
Currently translated at 50.8% (630 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hans/
Translation: Overseerr/Overseerr Frontend
---------
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
* feat(lang): add lang config for Bulgarian, Finnish, Ukrainian, Indonesian, Slovak, Turkish and Maori (#3834)
* fix: correct deeplinks on iPad (#3883)
* feat(studios): add a24 to studios list (#3902)
* docs: add demrich as a contributor for code (#3906) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(watchlist): Cache watchlist requests with matching E-Tags (#3901)
* perf(watchlist): add E-Tag caching to Plex watchlist requests
* refactor(watchlist): increase frequency of watchlist requests
* fix: sync watchlist every 3 min instead of 3 sec
* docs: add maxnatamo as a contributor for code (#3907) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(plex): refresh token schedule (#3875)
* feat: refresh token schedule
fix#3861
* fix(i18n): add i18n message
* refactor(plextv): use randomUUID crypto instead custom function
* docs: add DamsDev1 as a contributor for code (#3924) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* fix: correct icon showing on certain phones when not pulled (#3939)
* feat: add support for requesting "Specials" for TV Shows (#3724)
* feat: add support for requesting "Specials" for TV Shows
This commit is responsible for adding support in Overseerr for requesting "Special" episodes for TV
Shows. This request has become especially pertinent when you consider shows like "Doctor Who". These
shows have Specials that are critical to understanding the plot of a TV show.
fix#779
* chore(yarn.lock): undo inappropriate changes to yarn.lock
I was informed by @sct in a comment on the #3724 PR that it was not appropriate to commit the
changes that ended up being made to the yarn.lock file. This commit is responsible, then, for
undoing the changes to the yarn.lock file that ended up being submitted.
* refactor: change loose equality to strict equality
I received a comment from OwsleyJr pointing out that we are using loose equality when we could
alternatively just be using strict equality to increase the robustness of our code. This commit
does exactly that by squashing out previous usages of loose equality in my commits and replacing
them with strict equality
* refactor: move 'Specials' string to a global message
Owsley pointed out that we are redefining the 'Specials' string multiple times throughout this PR.
Instead, we can just move it as a global message. This commit does exactly that. It squashes out and
previous declarations of the 'Specials' string inside the src files, and moves it directly to the
global messages file.
* docs: add AhmedNSidd as a contributor for code (#3964) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
---------
Co-authored-by: Isaac M <masesisaac@gmail.com>
Co-authored-by: Joseph Risk <j0srisk@gmail.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Loetwiek <79059734+Loetwiek@users.noreply.github.com>
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
Co-authored-by: Fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
Co-authored-by: Fuochi <ffuochi@hotmail.com>
Co-authored-by: Weblate (bot) <hosted@weblate.org>
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Co-authored-by: Jordan Jones <me@jjones.tech>
Co-authored-by: Brandon Cohen <brandon@z3hn.dev>
Co-authored-by: David Emrich <demrich@me.com>
Co-authored-by: Max T. Kristiansen <me@maxtrier.dk>
Co-authored-by: Damien Fajole <60252259+DamsDev1@users.noreply.github.com>
Co-authored-by: Ahmed Siddiqui <36286128+AhmedNSidd@users.noreply.github.com>
When a series has no equivalent in TheTVDB used by Sonarr, a popup is displayed to select the series
on TheTVDB. The images in this popup come from artworks.thetvdb.com, which was not an authorized
domain for Next.js images.
fix#1075
* fix: use less strict validation for external URLs
Default url validation from the Yup module doesn't allow URLs like "http://custom-host", while it is
a correct value for an external URL.
fix#1068
* fix: resolve GitHub CodeQL review
* feat: improve discord notifications
Added a field in the general notification settings to allow a role to be mentioned in the webhook
message via discord notification agent
* feat: add discord role id notification - locales
* Update reverse-proxy.mdx
Fix posters not showing up when using sub-folder (at least with NPM)
* Update docs/extending-jellyseerr/reverse-proxy.mdx
Added `avatarproxy` support
Co-authored-by: Gauthier <mail@gauthierth.fr>
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
This commit improves the logging of jellyfin api. This will also fix the wrong logging of throwing
an invalid credentials when jellyfin/emby is unreachable.
re #1053
* perf: remove eager load of Blacklist entity from Media entity
Try to resolve some performance issues by removing the eager loading of Blacklist items from the
Media entity
* fix: fix ManageSlideOver for blacklist
* perf(blacklist): request data only when modal is shown
For admin users, the button to blacklist a media (used on every media card) was displaying a Modal,
that was requesting data BEFORE the modal was displayed. This resulted in dozens of additional
requests everytime media cards were displayed.
* perf(blacklist): remove useless ratelimit
This PR fix a bug when a translation message has two single quote like "message": "hello 'world'",
the extractMessages function was escaping the message correcly.
This commit adds extraction of basic authentication credentials from the URL and then pass the
credentials as the `Authorization` header. And then credentials are removed from the URL before
being passed to fetch. This is done because fetch request cannot be constructed using a URL with
credentials
fix#1027
* fix: use fs/promises for settings
This PR switches from synchronous operations with the 'fs' module to asynchronous operations with
the 'fs/promises' module. It also corrects a small error with hostname migration.
* fix: add missing merge function of default and current config
* feat: add bypass list, bypass local addresses and username/password to proxy setting
This PR adds more options to the proxy setting, like username/password authentication, bypass list
of domains and bypass local addresses. The UX is taken from *arrs.
* fix: add error handling for proxy creating
* fix: remove logs
* fix: use fs/promises for settings
This PR switches from synchronous operations with the 'fs' module to asynchronous operations with
the 'fs/promises' module. It also corrects a small error with hostname migration.
* fix: add missing merge function of default and current config
* refactor: add more logs to migration
Currently, the language profiles removed with Sonarr v4 are still available for compatibility
reasons. However, Jellyseerr still queries and displays language profiles (marking them as
“Deprecated”). This PR hides and does not query language profiles unless Sonarr v3 is used.
fix#207
* feat: add more logs to migrations and create a settings backup
* fix: avoid backup to be replaced at next startup
* fix: resolve review comments
* fix: try to fix CodeQL warnings
* fix: cache Jellyfin/Emby avatars from API
Previously, avatars were cached using image links from Jellyfin/Emby. Now, avatar images are
obtained directly from the API to avoid some configuration bugs.
* fix: update avatar on new login
* fix: rewrite avatarproxy and CachedImage
Avatar proxy was allowing every request to be proxied, no matter the original ressource's origin or
filetype. This PR fixes it be allowing only relevant resources to be cached, i.e. Jellyfin/Emby
images and TMDB images.
fix#1012, #1013
* fix: resolve CodeQL error
* fix: resolve CodeQL error
* fix: resolve review comments
* fix: resolve review comment
* fix: resolve CodeQL error
* fix: update imageproxy path
During the migration from Axios to fetch, we overlooked the fact that Axios automatically handled
CSRF tokens, while fetch does not. When CSRF protection was turned on, requests were failing with an
"invalid CSRF token" error for users accessing the app even via HTTPS. This commit
overrides fetch to ensure that the CSRF token is included in all requests.
fix#1011
Currently, we sync with sonarr/radarr with whatever value those return. Radarr/Sonarr syncs the
activity from the download clients every few minutes. This leads to inaccurate estimated download
times, because of the refresh delay with Jellyseerr and the *arrs.
This PR fixes this by making a request to the *arrs to refresh the monitored downloads just before
we get these downloads information.
re #866
The time-to-live (TTL) of cookies stored in the database was incorrect because the connect-typeorm
library takes a TTL in seconds and not milliseconds, making cookies valid for ~82 years instead of
30 days.
fix#991
* feat: allow requests managers to delete media files
* fix(i18n): add missing translations
* fix(i18n): remove french translation
* refactor: use fetch API
* fix(blacklist): add blacklist to mobile menu
The "Blacklist" menu was only available in the desktop sidebar, not in the mobile menu.
fix#979
* fix: export translations
* refactor: proxy and cache user avatar images
* fix: extract keys
* fix: set avatar image URL
* fix: show the correct avatar in the list of available users in advanced request
* fix(s): set correct src URL for cached image
* fix: remove unexpired unused image when a user changes their avatar
* fix: requested changes
* refactor: use 'mime' package to detmerine file extension
* style: grammar
* refactor: checks if the default avatar is cached to avoid creating duplicates for different users
* fix: fix vulnerability
* fix: fix incomplete URL substring sanitization
* refactor: only cache avatar with http url protocol
* fix: remove log and correctly set the if statement for the cached image component
* fix: avatar images not showing on issues page
* style: formatting
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
* feat: blacklist media items
re #490
* feat: blacklist media items
* feat: blacklist media items
* style: formatting
* refactor: close the manage slide-over when the media item is removed from the blacklist
* fix: fix media data in the db when blacklisting an item
* refactor: refactor component to accept show boolean
* refactor: hide watchlist button in the media page when it's blacklisted. Also add a blacklist button
* style: formatting
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
This fix changes the behavior of how Overseerr requests series data from Sonarr. Previously, when adding new seasons to a partially available series, Overseerr would initiate a SeriesSearch, causing Sonarr to search for all monitored seasons of the series, including those already available. This behavior is now corrected by executing a MissingEpisodeSearchCommand for the specific seriesId, which aligns with the intended behavior of only searching for and adding the newly requested seasons that are not already available.
Resolves: https://github.com/Fallenbagel/jellyseerr/issues/710
* Added the ability to set the API key with the env var API_KEY
* Adding debug statements
* Updating
* feat: adding env var for API key
* feat: update
* fix(settings/index.ts): remove a print statement that logs the API key to the console
* Update en.json
* docs: added documentation about API_KEY environment variable
* feat: add a check to ensure API key always uses env var if provided
* feat: always check the API_KEY env var at startup
* chore: add back the gitkeeps under ./config, accidentally deleted in prev commit
* chore: revert change made to docker-compose that was accidentally committed
When the email is modified in the user settings and it is already taken by someone else, a generic
message saying that something wrong happened, without saying that it is because the email is already
taken by another user. This PR adds this error message for the email.
* feat: add Media Server Selection to Setup Page
Introduce the ability to select the media server type on the setup page. Users can now choose their
preferred media server (e.g., Plex through the Plex sign-in or Emby/Jellyfin sign-in to select
either Emby or Jellyfin). The selected media server type is then reflected in the application
settings. This enhancement provides users with increased flexibility and customization options
during the initial setup process, eliminating the need to rely on environment variables (which
cannot be set if using platforms like snaps). Existing Emby users, who use the environment variable,
should log out and log back in after updating to set their mediaServerType to Emby.
BREAKING CHANGE: This commit deprecates the JELLYFIN_TYPE variable to identify Emby media server and
instead rely on the mediaServerType that is set in the `settings.json`. Existing environment
variable users can log out and log back in to set the mediaServerType to `3` (Emby).
* feat(api): add severType to the api
BREAKING CHANGE: This adds a serverType to the `/auth/jellyfin` which requires a serverType to be
set (`jellyfin`/`emby`)
* refactor: use enums for serverType and rename selectedservice to serverType
* refactor(auth): jellyfin/emby authentication to set MediaServerType
* fix: issue page formatMessage for 4k media
* refactor: cleaner way of handling serverType change using MediaServerType instead of strings
instead of using strings now it will use MediaServerType enums for serverType
* revert: removed conditional render of the auto-request permission
reverts the conditional render toshow the auto-request permission if the mediaServerType was set to
Plex as this should be handled in a different PR and Cypress tests should be modified
accordingly(currently cypress test would fail if this conditional check is there)
* feat: add server type step to setup
* feat: migrate existing emby setups to use emby mediaServerType
* fix: scan jobs not running when media server type is emby
* fix: emby media server type migration
* refactor: change emby logo to full logo
* style: decrease emby logo size in setup screen
* refactor: use title case for servertype i18n message
* refactor(i18n): fix a typo
* refactor: use enums instead of numbers
* fix: remove old references to JELLYFIN_TYPE environment variable
* fix: go back to the last step when refresh the setup page
* fix: move "scanning in background" tip next to the scanning section
* fix: redirect the setup page when Jellyseerr is already setup
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
* fix: handle status badge for season packs
When a series is downloaded with a season pack, the status tooltip displays only the name of the
first episode as a title, and displays a list of all episodes as a description, with the same file
being repeated for each episode. This PR fixes this, using the season number as the tooltip title
and showing only the season pack file currently being downloaded.
* fix: add missing i18n translation
* feat(jellyfinapi): create Jellyfin API key from admin user
* fix(jellyfinapi): add migration script for Jellyfin API key
* feat(jellyfinapi): use Jellyfin API key instead of admin auth token
* fix(jellyfinapi): fix api key migration
* feat(jellyfinapi): add API key field to Jellyfin settings
* fix: move the API key field in the Jellyfin settings
* feat: adds button on the page of a media item to add or remove it from a user's watchlist
re #730
* fix: whitespace and i18n key
* style: fix code format to the required standards
* refactor: change axios for the fetch api
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
* fix: remove email requirement for the user, and use the username if no email provided
* fix: update translations
* fix: remove useless console.log
* test: fix user list test
* fix: disallow Plex users from changing their email
This commit reverts the nextjs error handler fix that was introduced in #882 as that change requires
further refactor which should be held off for another version owing to the fact that there are
currently a lot of changes ready for the next version of jellyseerr.
* refactor: auto close manage slide on media delete
re #841
* fix: close manage slide-over when removing media item from *arr
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
* refactor: switch ExternalAPI to Fetch API
* fix: add missing auth token in Plex request
* fix: send proper URL params
* ci: try to fix format checker
* ci: ci: try to fix format checker
* ci: try to fix format checker
* refactor: make tautulli use the ExternalAPI class
* refactor: add rate limit to fetch api
* refactor: add rate limit to fetch api
* refactor: switch server from axios to fetch api
* refactor: switch frontend from axios to fetch api
* fix: switch from URL objects to strings
* fix: use the right search params for ExternalAPI
* fix: better log for ExternalAPI errors
* feat: add retry to external API requests
* fix: try to fix network errors with IPv6
* fix: imageProxy rate limit
* revert: remove retry to external API requests
* feat: set IPv4 first as an option
* fix(jellyfinapi): add missing argument in JellyfinAPI constructor
* refactor: clean the rate limit utility
* docs: add querystring support to docker methods
* docs: add query string support to the rest of the tabs
* docs: add admonition for named volumes and emby variable
* docs: setup docusaurus for documentation
* docs: setup tailwind content for docusaurus
* chore: ensure tailwindcss is installed so pages deploy works
* docs: add cname to point to docs
* ci: override format checking for pnpm-lock in gen-docs folder
* docs(gen-docs): readme for docusaurus
* chore(gen-docs): remove unnecessary image files
* docs: remove installation instructions (moved to docs)
* ci: rename docusaurus workflows to a more explicit name
* style(gen-docs): custom color for links
* docs: add more doc pages
* style: gradient menu link bg, proper jellyseerr font & footer bg color
* docs: fix proper link to relative pages
* style: tab-items also now uses the proper jellyseerr colors
* style: use prismTheme shadesOfPurple for codeblock/syntax highlighting
* docs: fix broken links
* docs: fix broken links
* docs: fix broken anchors
* chore(gen-docs): local search bar
* style(gen-docs): tab colors
* docs: reverse-proxy documentation
* style(gen-docs): jellyseerr-like cards
* docs: rename baremetal to build from source
* docs: nixpkg version check component
* docs: conditionally render override package derivation block and admonitions
* docs: users section of the documentation
This fix aborts the media availability sync job if the following conditions are met:
a) auth token has expired
b) connection to jellyfin/emby has been lost
Previously, the sync job will continue even if auth token was invalid or
connection was lost, thereby, resulting in removal of series/movies that
were never removed on jellyfin/emby/sonarr/radarr. This also removed the
requests. With the current fix, the sync job should refuse to run unless
the auth token is valid.
* build(postinstall): postinstall script to downgrade typeorm on windows
This is a temporary fix for windows baremetal users until we fix#478
re #478
* fix: use win32 as explained in nodejs docs
* fix: remove DNS caching
DNS caching was initially implemented to avoid too many DNS requests, as Node.js does not cache
them. However, the cacheable-lookup library we used to implement this cache created more problems
than it solved, as it caused many unresolved DNS request errors that weren't occurring before.
* fix: add PNPM lock file to Prettier ignore list
* revert: prettier on PNPM
* refactor: update Next.js and React.js
* refactor: update Next.js images
* refactor: update ESLint rules and fix warnings/errors
* fix: remove old intl polyfill
* fix: add proper size to next/image components
* fix: adjust full-size for next/image components
* fix: temporary allow all domains for image optimization
* build: fixes an issue where dev env could lead to javascript heap out of memory
* fix: resolve webpack cache issue with country-flag-icons
* refactor: switch compiler from Babel to SWC
* fix: resize logo in sidebar
* fix: break word on long path to avoid text overflow
* chore: added sharp for production image optimisation
* fix: change extract script for i18n to a custom script
* fix: resolve GitHub CodeQL alert
* chore: temporarily remove builds for ARMv7
* fix: resize avatar images
* refactor: update Node.js to v20
* fix: resolve various UI issues
* build: migrate yarn to pnpm and restrict engine to node@^20.0.0
* ci: specify the pnpm version to use in workflow actions
* ci: fix typo in pnpm action-setup for cypress workflow
* test(cypress): use pnpm instead of yarn
* style: ran prettier on pnpm-lock
* ci(cypress): setup nodejs v20 in cypress workflow
* ci: pnpm cache to reduce install time
* ci: use sh shell to get pnpm store directory
* build(dockerfile): migrate to pnpm from yarn in docker builds
* build(dockerfile): copy the proper pnpm lockfile
* build: install pnpm for all platforms
* build(dockerfile): remove unnecessary `&&` on apk installation steps
* build: migrate pnpm 8 to 9
* build(dockerfile): add node-gyp back in
* build(dockerfile): install node-gyp through npm
* build(dockerfile): ignore scripts to not run husky install when devdependencies are pruned
* build: migrate to pnpm from yarn
* chore: remove a section that is no longer relevant
---------
Co-authored-by: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
* feat(pushover): attach image to pushover notification payload (#3701)
* fix: api language query parameter (#3720)
* docs: add j0srisk as a contributor for code (#3745) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat(tooltip): add tooltip to display exact time on date hover (#3773)
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
* docs: add Loetwiek as a contributor for code (#3776) [skip ci]
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* fix(ui): ensure title fits into the `view collection` box (#3696)
* fix(docs): correct openapi docs minor issues (#3648)
* docs: add Fuochi as a contributor for doc (#3826)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
* feat: translations update from Hosted Weblate (#3597)
* feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (1232 of 1234 strings)
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1236 of 1236 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/da/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/el/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 99.5% (1234 of 1240 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Romanian)
Currently translated at 37.1% (461 of 1240 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 37.0% (459 of 1240 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 34.8% (432 of 1240 strings)
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ro/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 57.4% (712 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 13.2% (164 of 1240 strings)
feat(lang): translated using Weblate (Bulgarian)
Currently translated at 4.8% (60 of 1240 strings)
feat(lang): added translation using Weblate (Bulgarian)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/bg/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 97.9% (1215 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 82.0% (1017 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 72.9% (905 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 72.9% (905 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 71.3% (885 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 64.9% (805 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 64.4% (799 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 63.8% (792 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 63.7% (791 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 57.5% (714 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 49.9% (619 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 35.9% (446 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 35.9% (446 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 32.1% (399 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 24.6% (306 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 18.9% (235 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 17.5% (217 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 17.3% (215 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 8.0% (100 of 1240 strings)
feat(lang): translated using Weblate (Ukrainian)
Currently translated at 3.3% (41 of 1240 strings)
feat(lang): added translation using Weblate (Ukrainian)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/uk/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1240 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Czech)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 99.6% (1236 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/cs/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Croatian)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.8% (1238 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.8% (1238 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.6% (1236 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.5% (1235 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.5% (1235 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 99.1% (1230 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 97.5% (1210 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.5% (1185 of 1240 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.6% (1182 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.6% (1182 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.2% (1177 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 95.2% (1177 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 94.3% (1166 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 91.7% (1134 of 1236 strings)
feat(lang): translated using Weblate (Croatian)
Currently translated at 91.7% (1134 of 1236 strings)
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hungarian)
Currently translated at 91.3% (1133 of 1240 strings)
feat(lang): translated using Weblate (Hungarian)
Currently translated at 89.3% (1108 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hebrew)
Currently translated at 13.9% (172 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: osh <osh@osh.cc>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/he/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Polish)
Currently translated at 99.1% (1225 of 1236 strings)
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Italian)
Currently translated at 92.8% (1148 of 1236 strings)
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ar/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1236 of 1236 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1235 of 1236 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1235 of 1236 strings)
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1236 of 1236 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Finnish)
Currently translated at 2.6% (33 of 1240 strings)
feat(lang): added translation using Weblate (Finnish)
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fi/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Serbian)
Currently translated at 50.8% (630 of 1240 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1240 of 1240 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1234 of 1234 strings)
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hans/
Translation: Overseerr/Overseerr Frontend
---------
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
* feat(lang): add lang config for Bulgarian, Finnish, Ukrainian, Indonesian, Slovak, Turkish and Maori (#3834)
---------
Co-authored-by: Isaac M <masesisaac@gmail.com>
Co-authored-by: Joseph Risk <j0srisk@gmail.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Loetwiek <79059734+Loetwiek@users.noreply.github.com>
Co-authored-by: Loetwiek <lodommerholtcm@gmail.com>
Co-authored-by: Fuochi <ffuochi@hotmail.com>
Co-authored-by: Weblate (bot) <hosted@weblate.org>
Co-authored-by: Cleiton Carvalho <cleitonsilvacarvalho@gmail.com>
Co-authored-by: Nandor Rusz <nandor.rusz@vodafone.de>
Co-authored-by: Thomas Schöneberg <ta.schoeneberg@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Kenneth Hansen <erathor@live.dk>
Co-authored-by: BeardedWatermelon <BeardedWatermelon@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <SoundwaveUwU@users.noreply.hosted.weblate.org>
Co-authored-by: SoundwaveUwU <noreply@1000-7.space>
Co-authored-by: Димитър Мазнеков (Topper) <d.maznekov@gmail.com>
Co-authored-by: Кирилл Тюрин <1337soundwave1337@gmail.com>
Co-authored-by: Don Cezar <goldie.czr@gmail.com>
Co-authored-by: Dragos <themsk@yahoo.com>
Co-authored-by: Eduard Oancea <uberfly@420blaze.it>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: Michael Michael <michaelvelosk@gmail.com>
Co-authored-by: Сергій <sergiy.goncharuk.1@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Karel Krýda <karel.kryda@gmail.com>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Co-authored-by: Stjepan <stjepstjepanovic@gmail.com>
Co-authored-by: lpispek <lpispek@gmail.com>
Co-authored-by: Levente Szajkó <leviko112@gmail.com>
Co-authored-by: osh <osh@osh.cc>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Baptiste <baptiste.nee@me.com>
Co-authored-by: Dimitri <dimitridroeck@gmail.com>
Co-authored-by: Maxime Lafarie <maxime.lafarie@gmail.com>
Co-authored-by: Miguel <mig.mllr@gmail.com>
Co-authored-by: asurare <jonathan.biteau16@gmail.com>
Co-authored-by: Per Erik <urbanlolface@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Co-authored-by: Eero Konttaniemi <eero.konttaniemi@gmail.com>
Co-authored-by: Milan Smudja <smudja@gmail.com>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Haohao Zhang <hyacz@foxmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Co-authored-by: Jordan Jones <me@jjones.tech>
* refactor(jellyfinsettings): abstract jellyfin hostname, updated ui to reflect it, better validation
This PR refactors and abstracts jellyfin hostname into, jellyfin ip, jellyfin port, jellyfin useSsl,
and jellyfin urlBase. This makes it more consistent with how plex settings are stored as well. In
addition, this improves validation as validation can be applied seperately to them instead of as one
whole regex doing the work to validate the url.
UI was updated to reflect this.
BREAKING CHANGE: Jellyfin settings now does not include a hostname. Instead it abstracted it to ip,
port, useSsl, and urlBase. However, migration of old settings to new settings should work
automatically.
* refactor: remove console logs and use getHostname and ApiErrorCodes
* fix: store req.body jellyfin settings temporarily and store only if valid
This should fix the issue where settings are saved even if the url
was invalid. Now the settings will only be saved if the url is
valid. Sort of like a test connection.
* refactor: clean up commented out code
* refactor(i18n): extract translation keys
* fix(auth): auth failing with jellyfin login is disabled
* fix(settings): jellyfin migrations replacing the rest of the settings
* fix(settings): jellyfin hostname should be carried out if hostname exists
* fix(settings): merging the wrong settings source
* refactor(settings): use migrator for dynamic settings migrations
* refactor(settingsmigrator): settings migration handler and the migrations
* test(cypress): fix cypress tests failing
cypress settings were lacking some of the jobs so when the startJobs() is called when the app
starts, it was failing to schedule the jobs where their cron timings were not specified in the
cypress settings. Therefore, this commit adds those jobs back. In addition, other setting options
were added to keep cypress settings consistent with a normal user.
* chore(prettierignore): ignore cypress/config/settings.cypress.json as it does not need prettier
* chore(prettier): ran formatter on cypress config to fix format check error
format check locally passes on this file. However, it fails during the github actions format check.
Therefore, json language features formatter was run instead of prettier to see if that fixes the
issue.
* test(cypress): add only missing jobs to the cypress settings
* ci: attempt at trying to get formatter to pass on cypress config json file
* refactor: revert the changes brought to try and fix formatter
added back the rest of the cypress settings and removed cypress settings from .prettierignore
* refactor(settings): better erorr logging when jellyfin connection test fails in settings page
validation for ipv6 was sort of broken where for example `::1` was being sent as `1`, therefore,
logins were broken. This PR fixes it by using nodejs `net.isIPv4()` & `net.isIPv6` for ipv4 and ipv6
validation.
possibly related to and fixes#795
After the Media Availability Sync job rund on deleted media, the setting button is still visible
even if neither the media file nor the media request no longer exists. This PR hides this button
when it's no longer the case
When you have a 4k server setup, and request a 4k item, when it becomes available it also sets the
normal item as available thus not allowing the user to request for the normal item
Email is mandatory for every user and required during the setup of Jellyseerr, but it is possible to
set it empty afterwards in the user settings. When the email is empty, users are not able to connect
to Jellyseer. This PR makes the email field mandatory in the user settings.
fix#803
* refactor(jellyfinapi): use the external api class for jellyfin api requests
refactors jellyfin api requests to be handled by the external api
to be consistent with how other external api requests are made
related #728, related #387
* style: prettier formatted
* refactor(jellyfinapi): rename device in auth header as jellyseerr
* refactor(error): rename api error code generic to unknown
* refactor(errorcodes): consistent casing of error code enums
* fix(api): save user email on the first try
fix#227
* fix(api): remove todo
* fix(logging): handle media server connection refused error/toast (#748)
* fix(logging): handle media server connection refused error/toast
Properly log as connection refused if the jellyfin/emby server is unreachable. Previously it used to
throw a credentials error which lead to a lot of confusion
* refactor(i8n): extract translation keys
* refactor(auth): error message for a more consistent format
* refactor(auth/errors): use custom error types and error codes instead of abusing error messages
* refactor(i8n): replace connection refused translation key with invalidurl
* fix(error): combine auth and api error class into a single one called network error
* fix(error): use the new network error and network error codes in auth/api
* refactor(error): rename NetworkError to ApiError
---------
Co-authored-by: Fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
* fix(logging): handle media server connection refused error/toast
Properly log as connection refused if the jellyfin/emby server is unreachable. Previously it used to
throw a credentials error which lead to a lot of confusion
* refactor(i8n): extract translation keys
* refactor(auth): error message for a more consistent format
* refactor(auth/errors): use custom error types and error codes instead of abusing error messages
* refactor(i8n): replace connection refused translation key with invalidurl
* fix(error): combine auth and api error class into a single one called network error
* fix(error): use the new network error and network error codes in auth/api
* refactor(error): rename NetworkError to ApiError
* fix(jellyfinapi): refactors jellyfin library sync to support automatic grouping and collections
Previously, #450 added support for automatic library grouping. However, some users reported that
they were getting a 401 when using custom authentication such as LDAP. Therefore, that PR was
reverted (#524). This PR adds back the support for automatic library grouping for jellyfin
authentication users using the endpoint `/Library/MediaFolders` and fallsback to User views endpoint
if they're unable to sync the libraries (some, not all LDAP users had issues. Some reported that it
worked despite having custom authentication). Once it falls back to user views endpoint for syncing,
now it will detect if automatic grouping is enabled giving a warning that its not supported when
using some custom authentication methods. This PR also fixed collection syncing by expanding the
boxsets when syncing.
fix#256, fix#489, re #450, #524, fix#515, fix#474, fix#473
* refactor(i18n): adds the suffix "jellyfin" to jellyfin library sync message keys
* refactor(i18n): extract translation keys
* refactor: remove console logs
* refactor: remove more console logs
* refactor: apply review suggestions
* chore: fix prettier failing on .github file
The jellyfinMediaId(4k) properties were inferred as string | undefined, causing them to be set to
undefined when assigning null. This prevented the media from being saved correctly to the SQLite
database, as it doesn't accept undefined values. This resolves the availabilitySync job issue where
the "play on" button wasn't being removed for all media server types.
fix#668
* feat: merge check if first jellyfin user is admin
re #610
* refactor(i18n): extract admin error message into en locale
---------
Co-authored-by: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
Previously `jellyfinMediaId4k` was being assigned even if 4k server was not setup or even if 4k
content were not present. This fixes it by conditionally assigning the jellyfinMediaId and
JellyfinMediaId4k
fix#681
* refactor: jellyfin authentication
This refactor standardizes the authentication approach in Jellyfin to mirror the method employed in
Plex authentication for consistency
* feat: use gravatar for jellyfin users' with missing jellyfin avatars
* feat(job): media availability support for jellyfin/emby
This refactors the media availability job to support jellyfin/emby for media removal automatically.
Needs further testing on 4k items (as I have not yet tested with 4k), however, non-4k items work as
intended.
fix#406, fix#193, fix#516, fix#362, fix#84
* fix(availabilitysync): use the correct 4k jellyfinMediaId
* fix: season mapping for plex
Fixes a bug introduced with this PR where media availability sync job removed the seasons from all
series even when those seasons existed
All seasons are processed now, but those without any episodes are filtered out again as unavailable.
This fixes in issue where jellyfin reports all seasons as virtual
This disables seasonfolder option in sonarr for jellyfin/emby users as physical seasonFolders are
necessary as virtualFolders are ignored since #126fix#575
This commit addresses a rendering issue with the date picker component.
The problem was traced back to a misconfiguration in the tailwindcss settings, resulting in an
incorrect width for the popup.
fix#415
This fix addresses an issue on the Watchlist page where changes to the watchlist were not
immediately reflected. Previously, after removing an item from the watchlist, the update
required a full page reload or revalidating upon focusing the window or tab. With this fix,
the watchlist now correctly mutates and updates in real-time, providing a seamless user
experience.
This fix resolves a Watchlist page bug where the isAddedToWatchlist prop was missing.
Without this prop, the removal button for watchlist items was absent. In this fix, the
isAddedToWatchlist prop is re-added and set to true, allowing users to remove items from
their local watchlist directly on the Watchlist page.
Adding Jellyfin Setting for Custom "Forgot Password" URL. Useful in cases where you are using a custom authentication provider such as the LDAP plugin, Authelia, lldap, or any other external auth scheme with its own password reset page.
As allcontributors bot does not support having two lists of allcontributors seperately,
unfortunately had to remove upstream contributors from the .all-contributorsrc. However, they will
be added manually by @Fallenbagel to the README.md
Previously when you expand the `Your Watchlist` slider from the discover page to see all your
watchlist items, you only see the first 20 items. This commit fixes that so you can see all your
local watchlist items when you expand that slider. In addition, this commit also fixes the visiblity
of profile watchlist slider for local watchlists
In an attempt to fix version compatibility of `GLIBC_2.28` base was upgraded from core18 to core20.
Node-js plugin was deprecated for core20 and instead npm plugin has to be used. As npm plugin cannot
specify the package manager to use, yarn is now installed globally during the override-build phase.
Changes base to core20 in an attempt to fix the error `node: /lib/x86_64-linux-gnu/libc.so.6:
version `GLIBC_2.28' not found (required by node)` during snap builds
Implemented dynamic URL generation for the 'Forgot Password' feature. If jellyfin external hostname
is set, the URL is generated based on it; otherwise, jellyfin hostname is used as the base URL. The
URL includes additional parameters to handle emby support.
fix#199, fix#424, re #212
Reverted #450 which addressed the issue where the automatic grouping enabled libraries were not
functioning correctly. The previous fix inadvertently caused a bug for Jellyfin LDAP users,
preventing library syncing with a 401 error. Reverting this change temporarily until support for
automatic library grouping can be re-implemented
fix#489
* feat: select default seriesType for anime
Added flexibility to set default anime series type in service settings. Now you can choose
'standard' for anime if you prefer it, making it easier to use features like searching for season
packs on Sonarr.
fix#3626
* feat: extracted translations
* feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 11.2% (139 of 1233 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 11.3% (139 of 1226 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 7.8% (96 of 1226 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 7.4% (91 of 1226 strings)
feat(lang): translated using Weblate (Korean)
Currently translated at 1.7% (21 of 1226 strings)
feat(lang): added translation using Weblate (Korean)
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: 김상구 (Studio) <spair0039@gmail.com>
Co-authored-by: 최효근 <gyrms7532@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Greek)
Currently translated at 100.0% (1233 of 1233 strings)
Co-authored-by: BeardedWatermelon <periklis.karantonis@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/el/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Serbian)
Currently translated at 49.7% (608 of 1222 strings)
Co-authored-by: Dzonkins <nikoladjordjevic.ns@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1228 of 1228 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1222 of 1222 strings)
feat(lang): translated using Weblate (Spanish)
Currently translated at 100.0% (1222 of 1222 strings)
Co-authored-by: Angel <adelpozoman@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Romanian)
Currently translated at 33.0% (408 of 1234 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 29.7% (367 of 1234 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 27.9% (345 of 1234 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 27.8% (344 of 1233 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 27.6% (339 of 1226 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 27.4% (337 of 1226 strings)
feat(lang): translated using Weblate (Romanian)
Currently translated at 22.8% (279 of 1223 strings)
Co-authored-by: Bunduc Dragos <bunduc.dragos@gmail.com>
Co-authored-by: DragoPrime <emperordrago@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ro/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Russian)
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (Russian)
Currently translated at 87.4% (1069 of 1223 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kirill Zhukov <siper13@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1222 of 1222 strings)
feat(lang): translated using Weblate (Danish)
Currently translated at 100.0% (1222 of 1222 strings)
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Emil Nymann <ens@hiper.dk>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/da/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Hungarian)
Currently translated at 86.3% (1055 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ZsiGiT <zsigit@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Dutch)
Currently translated at 99.4% (1226 of 1233 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (Dutch)
Currently translated at 100.0% (1222 of 1222 strings)
Co-authored-by: Bas <bashankamp+weblate@gmail.com>
Co-authored-by: COTMO <moermantom1@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.6% (1229 of 1233 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1228 of 1228 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1222 of 1222 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.2% (1213 of 1222 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.1% (1212 of 1222 strings)
feat(lang): translated using Weblate (Portuguese (Brazil))
Currently translated at 99.1% (1212 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mateus <mateusbernardo@protonmail.com>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Co-authored-by: Tijuco <sendtomy@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Czech)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 99.7% (1223 of 1226 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 96.4% (1179 of 1222 strings)
feat(lang): translated using Weblate (Czech)
Currently translated at 89.1% (1090 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marek <marek@pavelka.xyz>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/cs/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Arabic)
Currently translated at 100.0% (1233 of 1233 strings)
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ar/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (1222 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_PT/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (German)
Currently translated at 99.9% (1233 of 1234 strings)
feat(lang): translated using Weblate (German)
Currently translated at 99.5% (1228 of 1234 strings)
feat(lang): translated using Weblate (German)
Currently translated at 99.5% (1227 of 1233 strings)
feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (German)
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (German)
Currently translated at 95.9% (1172 of 1222 strings)
feat(lang): translated using Weblate (German)
Currently translated at 95.9% (1172 of 1222 strings)
feat(lang): translated using Weblate (German)
Currently translated at 94.7% (1158 of 1222 strings)
Co-authored-by: Ben <ben.david.wallner@gmail.com>
Co-authored-by: Furkan Çakar <cakar.55.furkan@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Juli <snowjuli@protonmail.com>
Co-authored-by: Leo Schultheiss <leoschultheiss@yahoo.de>
Co-authored-by: inkarnation <94744834+inkarnation@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 99.6% (1229 of 1233 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1228 of 1228 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 90.0% (1104 of 1226 strings)
feat(lang): translated using Weblate (Swedish)
Currently translated at 90.0% (1101 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: Topfield99 <timmiesonne@live.se>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Lithuanian)
Currently translated at 58.7% (725 of 1233 strings)
feat(lang): translated using Weblate (Lithuanian)
Currently translated at 58.6% (719 of 1226 strings)
feat(lang): translated using Weblate (Lithuanian)
Currently translated at 51.0% (624 of 1222 strings)
feat(lang): translated using Weblate (Lithuanian)
Currently translated at 43.9% (537 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: PovilasID <povilas.sidaravicius@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/lt/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 99.5% (1217 of 1223 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 99.4% (1216 of 1223 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 98.6% (1207 of 1223 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 97.2% (1189 of 1223 strings)
feat(lang): translated using Weblate (Catalan)
Currently translated at 94.3% (1154 of 1223 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maite Guix <maite.guix@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Croatian)
Currently translated at 89.9% (1103 of 1226 strings)
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Italian)
Currently translated at 92.2% (1138 of 1233 strings)
feat(lang): translated using Weblate (Italian)
Currently translated at 88.5% (1092 of 1233 strings)
feat(lang): translated using Weblate (Italian)
Currently translated at 85.8% (1058 of 1233 strings)
feat(lang): translated using Weblate (Italian)
Currently translated at 86.0% (1052 of 1223 strings)
feat(lang): translated using Weblate (Italian)
Currently translated at 83.2% (1017 of 1222 strings)
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Gian Marco Cinalli <gm.cinalli@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mirco Cau <mircocau@gmail.com>
Co-authored-by: eggermn <egger.mn@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1226 of 1226 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 99.9% (1225 of 1226 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 99.9% (1225 of 1226 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 99.8% (1224 of 1226 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 99.9% (1223 of 1224 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1222 of 1222 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 98.0% (1198 of 1222 strings)
feat(lang): translated using Weblate (Chinese (Simplified))
Currently translated at 96.7% (1182 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jassy lin <linjiaxinme@gmail.com>
Co-authored-by: anpplex <anpplex@gmail.com>
Co-authored-by: kx <yoboy.rox@gmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hans/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1234 of 1234 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1233 of 1233 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.9% (1225 of 1226 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1224 of 1224 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1223 of 1223 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1222 of 1222 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1222 of 1222 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.5% (1216 of 1222 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.5% (1216 of 1222 strings)
feat(lang): translated using Weblate (French)
Currently translated at 99.5% (1216 of 1222 strings)
feat(lang): translated using Weblate (French)
Currently translated at 100.0% (1222 of 1222 strings)
Co-authored-by: Hordo <hordocast@mailo.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mathieu <math_du_88@yahoo.fr>
Co-authored-by: Maxent <rouaultmaxent@gmail.com>
Co-authored-by: Rémi Guerrero <remidu34070@hotmail.fr>
Co-authored-by: Sulli <susu.leduc@gmail.com>
Co-authored-by: Symness <simon@frayssines.fr>
Co-authored-by: Valentin <droidente@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend
* feat(lang): translated using Weblate (Chinese (Traditional))
Currently translated at 99.7% (1219 of 1222 strings)
feat(lang): translated using Weblate (Chinese (Traditional))
Currently translated at 89.6% (1095 of 1222 strings)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 주서현 <adan.89lion@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hant/
Translation: Overseerr/Overseerr Frontend
---------
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: 김상구 (Studio) <spair0039@gmail.com>
Co-authored-by: 최효근 <gyrms7532@gmail.com>
Co-authored-by: BeardedWatermelon <periklis.karantonis@gmail.com>
Co-authored-by: Dzonkins <nikoladjordjevic.ns@gmail.com>
Co-authored-by: Angel <adelpozoman@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Bunduc Dragos <bunduc.dragos@gmail.com>
Co-authored-by: DragoPrime <emperordrago@gmail.com>
Co-authored-by: Kirill Zhukov <siper13@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Emil Nymann <ens@hiper.dk>
Co-authored-by: ZsiGiT <zsigit@gmail.com>
Co-authored-by: Bas <bashankamp+weblate@gmail.com>
Co-authored-by: COTMO <moermantom1@gmail.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: Mateus <mateusbernardo@protonmail.com>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Co-authored-by: Tijuco <sendtomy@protonmail.com>
Co-authored-by: Marek <marek@pavelka.xyz>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: Ben <ben.david.wallner@gmail.com>
Co-authored-by: Furkan Çakar <cakar.55.furkan@gmail.com>
Co-authored-by: Juli <snowjuli@protonmail.com>
Co-authored-by: Leo Schultheiss <leoschultheiss@yahoo.de>
Co-authored-by: inkarnation <94744834+inkarnation@users.noreply.github.com>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: Topfield99 <timmiesonne@live.se>
Co-authored-by: PovilasID <povilas.sidaravicius@gmail.com>
Co-authored-by: Maite Guix <maite.guix@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Gian Marco Cinalli <gm.cinalli@gmail.com>
Co-authored-by: Mirco Cau <mircocau@gmail.com>
Co-authored-by: eggermn <egger.mn@gmail.com>
Co-authored-by: Jassy lin <linjiaxinme@gmail.com>
Co-authored-by: anpplex <anpplex@gmail.com>
Co-authored-by: kx <yoboy.rox@gmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Co-authored-by: Hordo <hordocast@mailo.com>
Co-authored-by: Mathieu <math_du_88@yahoo.fr>
Co-authored-by: Maxent <rouaultmaxent@gmail.com>
Co-authored-by: Rémi Guerrero <remidu34070@hotmail.fr>
Co-authored-by: Sulli <susu.leduc@gmail.com>
Co-authored-by: Symness <simon@frayssines.fr>
Co-authored-by: Valentin <droidente@gmail.com>
Co-authored-by: 주서현 <adan.89lion@gmail.com>
* fix: Include all defaults in payload
* style(src/components/settings/notifications/notificationswebhook/index.tsx): prettier format
format changes from previous commit using prettier. line length requirement now met.
* fix(server/lib/settings.ts): update default settings for first install
* fix: handle issue causing incorrect media to change back to unknown
* fix: prevent start if plex client is unavailable
* fix: initialize radarr and sonarr clients before the scan starts
* fix: compensate for multiple *arr servers
* fix: added a more reliable season lookup
* refactor: modified tuples to increase code readability
* fix: importing friends
update checkUserAccess to use getUsers
* refactor(server/api/plextv.ts): clean up
removed unused getFriends function, and its interface.
renamed friends variable.
* Make a (shallow) copy of radarr/sonarr tags into a request before adding user tags
* Undo random formatting changes
* more undoing formatting changes
* Fix undefined case.
* Prettier format
* feat: auto tagging requested media with username
Relating to discussion: https://github.com/sct/overseerr/discussions/3313
Adding an option to the Radarr and Sonarr service to enable automatic tagging
with the username requesting the media.
Current format, to reduce tag clutter if a user changes displayname:
`[user.id] - [user.displayName]`
* fix: modified new secondary tip language
---------
Co-authored-by: Brandon Cohen <brandon@z3hn.dev>
* refactor: decoupled PTR by removing import and creating new touch logic
* fix: overscroll behavior on mobile is now prevented on the y axis
* feat: added shadow effects to icon
* fix: modified cypress test
* fix: added better scroll lock functionality
* fix: hide icon if scroll value is negative
* fix: changed to allow usage on all touch devices
* fix: added extra check for unmonitored movies in radarr
* feat: created new radarr/sonarr routes to grab existing series data
* refactor: updated job routes to check by external service id
* fix: season check will now also look at episode file count
description:What version of Overseerr are you running? (You can find this in Settings → About → Version.)
description:What version of Jellyseerr are you running? (You can find this in Settings → About → Version.)
validations:
required:true
- type:textarea
@@ -55,6 +55,16 @@ body:
- tablet
validations:
required:true
- type:dropdown
id:database
attributes:
options:
- SQLite (default)
- PostgreSQL
label:Database
description:Which database backend are you using?
validations:
required:true
- type:input
id:device
attributes:
@@ -87,5 +97,5 @@ body:
label:Code of Conduct
description:By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/fallenbagel/jellyseerr/blob/develop/CODE_OF_CONDUCT.md)
options:
- label:I agree to follow Overseerr's Code of Conduct
- label:I agree to follow Jellyseerr's Code of Conduct
description:By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/fallenbagel/jellyseerr/blob/develop/CODE_OF_CONDUCT.md)
options:
- label:I agree to follow Overseerr's Code of Conduct
- label:I agree to follow Jellyseerr's Code of Conduct
* add better checks on 4k detection of series ([bc9017f](https://github.com/fallenbagel/jellyseerr/commit/bc9017f54d84ec24c4d74d38e1b4e24219425d41))
* added a refresh interval if download status is in progress ([#3275](https://github.com/fallenbagel/jellyseerr/issues/3275)) ([1e2c6f4](https://github.com/fallenbagel/jellyseerr/commit/1e2c6f46ab66c836f321b5d8e34f1e8124c0b542))
* **build:** increase threshold for amount of data to be fetched when SSR'ing ([#3320](https://github.com/fallenbagel/jellyseerr/issues/3320)) ([d7b83d2](https://github.com/fallenbagel/jellyseerr/commit/d7b83d22cee3d20db564cc0564d42802b02327e3))
* hide remove button when default service is not configured ([7d4455b](https://github.com/fallenbagel/jellyseerr/commit/7d4455ba6bfd12e2730f7085cbb87df246f01d22))
* **jellyfin scan:** temporary workaround fix for jellyfin scan when display specials within season ([38fb66d](https://github.com/fallenbagel/jellyseerr/commit/38fb66d31e41232c01898d0d362af8338eb7b960)), closes [#215](https://github.com/fallenbagel/jellyseerr/issues/215) [#176](https://github.com/fallenbagel/jellyseerr/issues/176) [#246](https://github.com/fallenbagel/jellyseerr/issues/246)
* logger was set to info for the wrong logs ([#3354](https://github.com/fallenbagel/jellyseerr/issues/3354)) ([c36a4ba](https://github.com/fallenbagel/jellyseerr/commit/c36a4ba2b8df05873f5dfd0946a9bc3dc4ecfd1d))
* remove unnecessary parenthesis from api key generation ([#3336](https://github.com/fallenbagel/jellyseerr/issues/3336)) ([6bd3f01](https://github.com/fallenbagel/jellyseerr/commit/6bd3f015d65507efca60279007bd2b86ee860643))
* **snapcraft:** use the correct config folder for image cache ([#3302](https://github.com/fallenbagel/jellyseerr/issues/3302)) ([c93467b](https://github.com/fallenbagel/jellyseerr/commit/c93467b3acf2c256324297e7e8f21e9944005dd4))
* **ui:** hide mini status badge if non-4K media status is unknown ([#3346](https://github.com/fallenbagel/jellyseerr/issues/3346)) ([50f06da](https://github.com/fallenbagel/jellyseerr/commit/50f06dabbffc693f0843584a64d1d96e77982820))
* **ui:** hide search bar behind slideover when opened ([#3348](https://github.com/fallenbagel/jellyseerr/issues/3348)) ([b3882de](https://github.com/fallenbagel/jellyseerr/commit/b3882de8930a70adb2f93a27be6370bfa1826587))
* **ui:** prevent title cards from flickering when quickly hovering across them ([#3349](https://github.com/fallenbagel/jellyseerr/issues/3349)) ([eb5502a](https://github.com/fallenbagel/jellyseerr/commit/eb5502a16f86e37a933f6beca0678c2d228e77d5))
* **watchlist:** correctly load more than 20 watchlist items ([#3351](https://github.com/fallenbagel/jellyseerr/issues/3351)) ([af880a6](https://github.com/fallenbagel/jellyseerr/commit/af880a6c839794b34bddcd7e0fe56353aa48ba36))
### Features
* add a button in ManageSlideOver to remove the movie and the file from Radarr/Sonarr ([2e74584](https://github.com/fallenbagel/jellyseerr/commit/2e7458457e995dd3ec6dd96035fe997646cdd446))
* full title of download item on hover with tooltip ([#3296](https://github.com/fallenbagel/jellyseerr/issues/3296)) ([33e7691](https://github.com/fallenbagel/jellyseerr/commit/33e7691b94d7d369a0a1410e434850bc51e5572e))
### Performance Improvements
* **imageproxy:** do not set cookies to image proxy so CDNs can cache images ([#3332](https://github.com/fallenbagel/jellyseerr/issues/3332)) ([966639d](https://github.com/fallenbagel/jellyseerr/commit/966639df430d32f6bfebdb16314dc4590d21caf8))
* pass in library type when scanning recently added items ([#3287](https://github.com/fallenbagel/jellyseerr/issues/3287)) ([8942eb8](https://github.com/fallenbagel/jellyseerr/commit/8942eb8b7c4fa1d16aa2e72e8ba7120a653c9aa2))
* **ui:** air date will use UTC for timezone ([#3297](https://github.com/fallenbagel/jellyseerr/issues/3297)) ([3e43586](https://github.com/fallenbagel/jellyseerr/commit/3e43586acc0804c3fff524509caa890a104e132b))
* **ui:** correct range slider styling in chrome ([#3299](https://github.com/fallenbagel/jellyseerr/issues/3299)) ([d954328](https://github.com/fallenbagel/jellyseerr/commit/d9543289111d72245564d25d300a71b0ea3954ba))
* **ui:** show 5 icons when possible on mobile menu ([#3298](https://github.com/fallenbagel/jellyseerr/issues/3298)) ([7040da1](https://github.com/fallenbagel/jellyseerr/commit/7040da1334f6d18e19a494c73caa17f7df552dfe))
* **ui:** style range thumbs correctly for firefox ([#3294](https://github.com/fallenbagel/jellyseerr/issues/3294)) ([9d10e6a](https://github.com/fallenbagel/jellyseerr/commit/9d10e6a88c0996671f1d9d20792e1930dbc82329))
* add bg-opacity to in-progress status badges ([#3190](https://github.com/fallenbagel/jellyseerr/issues/3190)) ([68223f4](https://github.com/fallenbagel/jellyseerr/commit/68223f4b1e98b01825516dcba39cbb2d3df31a70))
* added download status and title to request card/item error components ([#3186](https://github.com/fallenbagel/jellyseerr/issues/3186)) ([3309f77](https://github.com/fallenbagel/jellyseerr/commit/3309f77aa4be1d70b27693531c119a8e26822518))
* arrow icons were misplaced on mobile in slider edit ([#3260](https://github.com/fallenbagel/jellyseerr/issues/3260)) ([d328485](https://github.com/fallenbagel/jellyseerr/commit/d328485161b9cae6a70ef0713b4878207bc6015e))
* **build:** update usage of publish snap action ([#3272](https://github.com/fallenbagel/jellyseerr/issues/3272)) ([51b05cd](https://github.com/fallenbagel/jellyseerr/commit/51b05cd8fbb5d332807d8c00b2ffb7b10c3d0179))
* changed overflow scroll to only if necessary ([#3184](https://github.com/fallenbagel/jellyseerr/issues/3184)) ([27feeea](https://github.com/fallenbagel/jellyseerr/commit/27feeea69121336557deda1f32b65a5daa146f82))
* convert genre/studio to string in create slider ([#3201](https://github.com/fallenbagel/jellyseerr/issues/3201)) ([93afead](https://github.com/fallenbagel/jellyseerr/commit/93afead92e497f2e5bce67a34fffdaa08d20c7f2))
* correct checkbox position (again) for slider edits ([#3227](https://github.com/fallenbagel/jellyseerr/issues/3227)) ([3ba6df1](https://github.com/fallenbagel/jellyseerr/commit/3ba6df1a41c084c4a6a90354338047623abef521))
* correct grid sizing for webkit on streaming services ([#3248](https://github.com/fallenbagel/jellyseerr/issues/3248)) ([6fd11cf](https://github.com/fallenbagel/jellyseerr/commit/6fd11cf4254e1a19310592bec78a6de52bc073a8))
* correct issue detail bottom padding on mobile displays ([#3268](https://github.com/fallenbagel/jellyseerr/issues/3268)) ([3db010b](https://github.com/fallenbagel/jellyseerr/commit/3db010b9eaec62aa08d973a61caf1801471bbf3e))
* correct link to correct keyword results for series ([#3208](https://github.com/fallenbagel/jellyseerr/issues/3208)) ([4e9be7a](https://github.com/fallenbagel/jellyseerr/commit/4e9be7a3f7304ee7be5ee6fd34b1ea8f6c0cf399))
* correct spacing between sliders ([#3225](https://github.com/fallenbagel/jellyseerr/issues/3225)) ([62e2de7](https://github.com/fallenbagel/jellyseerr/commit/62e2de70bf37b72d5f63370b662d4103a642775b))
* correctly check mobile menu permissions ([#3271](https://github.com/fallenbagel/jellyseerr/issues/3271)) ([f4a22dc](https://github.com/fallenbagel/jellyseerr/commit/f4a22dc437404558f301ccfc195cf0a300dd1ff2))
* correctly restore selected streaming service filters ([#3249](https://github.com/fallenbagel/jellyseerr/issues/3249)) ([154f3e7](https://github.com/fallenbagel/jellyseerr/commit/154f3e72efbf0b663358b3029156f54516f01a2f))
* create shared class to add bottom spacing ([#3269](https://github.com/fallenbagel/jellyseerr/issues/3269)) ([5d1c6f7](https://github.com/fallenbagel/jellyseerr/commit/5d1c6f706555613d97ed9e61d8b665543c2f239b))
* **deps:** update dependency @heroicons/react to v2 ([#2970](https://github.com/fallenbagel/jellyseerr/issues/2970)) ([dd48d59](https://github.com/fallenbagel/jellyseerr/commit/dd48d59b20e2d1800ea30912116f4a4f1bb7928f))
* **deps:** update dependency axios to v1 ([#3202](https://github.com/fallenbagel/jellyseerr/issues/3202)) ([421029e](https://github.com/fallenbagel/jellyseerr/commit/421029ebab66c9a6622ba47e56d7f6473524cce4))
* **deps:** update dependency swr to v2 ([#3212](https://github.com/fallenbagel/jellyseerr/issues/3212)) ([7b6db50](https://github.com/fallenbagel/jellyseerr/commit/7b6db50ae55b1fc60d19a5cff62dd46bb989fa51))
* **experimental:** use new RT API (sorta) ([#3179](https://github.com/fallenbagel/jellyseerr/issues/3179)) ([357cab8](https://github.com/fallenbagel/jellyseerr/commit/357cab87ac7752b8e119b51c938b343c661d83c2))
* improve small screen layout for discover editing ([#3221](https://github.com/fallenbagel/jellyseerr/issues/3221)) ([d23b213](https://github.com/fallenbagel/jellyseerr/commit/d23b2132de05f072f7f9daad83d81421d747cf99))
* include new package calendar css in build ([#3235](https://github.com/fallenbagel/jellyseerr/issues/3235)) ([c2a1a20](https://github.com/fallenbagel/jellyseerr/commit/c2a1a20a3bb20039a1936c7fe0ecb9e8311a0aea))
* issues with issues ([#3267](https://github.com/fallenbagel/jellyseerr/issues/3267)) ([fd21971](https://github.com/fallenbagel/jellyseerr/commit/fd219717c01c558814d7a80de6304272b5a7944e))
* multiple genre filtering now works ([#3282](https://github.com/fallenbagel/jellyseerr/issues/3282)) ([5076938](https://github.com/fallenbagel/jellyseerr/commit/507693881b939819413f0959df5ef6b7a357eb5c))
* prevent double encode if we are on /search endpoint ([#3238](https://github.com/fallenbagel/jellyseerr/issues/3238)) ([a343f8a](https://github.com/fallenbagel/jellyseerr/commit/a343f8ad915491a9c81512c7e541a1dac8906025))
* **request:** approve request when retrying request ([#3234](https://github.com/fallenbagel/jellyseerr/issues/3234)) ([b515701](https://github.com/fallenbagel/jellyseerr/commit/b5157010c46cd9083993d5ee0172007b83d631da))
* **request:** mark request as approved if media is already available when retrying failed request ([#3244](https://github.com/fallenbagel/jellyseerr/issues/3244)) ([cb65074](https://github.com/fallenbagel/jellyseerr/commit/cb650745f6a33e69391a633e6d272831f314e098))
* restore border to ghost button and fix discover slider visibility toggle position ([#3226](https://github.com/fallenbagel/jellyseerr/issues/3226)) ([2eebb7f](https://github.com/fallenbagel/jellyseerr/commit/2eebb7fd3941b34fe9472aaf9d28265df8cce311))
* restore status badges on titles on actors page when hide available media enabled ([#3206](https://github.com/fallenbagel/jellyseerr/issues/3206)) ([9d3446d](https://github.com/fallenbagel/jellyseerr/commit/9d3446d370499c3251159393e5c791b01225e05c))
* screen would zoom on mobile if date picker input was selected ([#3241](https://github.com/fallenbagel/jellyseerr/issues/3241)) ([3aefddd](https://github.com/fallenbagel/jellyseerr/commit/3aefddd48834d86150d5f5cceb2d08af3a78847b))
* series displayed an empty season with series list/request modal ([#3147](https://github.com/fallenbagel/jellyseerr/issues/3147)) ([2179637](https://github.com/fallenbagel/jellyseerr/commit/2179637d437999290eaa4152f6f37c71fc3d8ba3))
* tooltip shows properly if not in progress ([#3185](https://github.com/fallenbagel/jellyseerr/issues/3185)) ([6face8c](https://github.com/fallenbagel/jellyseerr/commit/6face8cc4564b978fb98af32659b326d8c5cede8))
* **ui:** series first air date sorting ([#3283](https://github.com/fallenbagel/jellyseerr/issues/3283)) ([374c78c](https://github.com/fallenbagel/jellyseerr/commit/374c78c989cc86bb144a954a91d5d183c4b591c0))
* update StatusBadgeMini to shrink on title cards (and remove ring) ([#3210](https://github.com/fallenbagel/jellyseerr/issues/3210)) ([042a1a9](https://github.com/fallenbagel/jellyseerr/commit/042a1a950fdd4d4a61edf4bc19657f9b7a526da8))
* discover slider edit arrow buttons for reordering ([#3259](https://github.com/fallenbagel/jellyseerr/issues/3259)) ([da00d45](https://github.com/fallenbagel/jellyseerr/commit/da00d454e17e8b00d04f6e26f6dd5153ed6ced81))
* **lang:** translations update from Hosted Weblate ([#3030](https://github.com/fallenbagel/jellyseerr/issues/3030)) ([0d8b390](https://github.com/fallenbagel/jellyseerr/commit/0d8b390b678731e76bd1f0f8a0a4952c11e77f4d))
* new mobile menu ([#3251](https://github.com/fallenbagel/jellyseerr/issues/3251)) ([fcbca17](https://github.com/fallenbagel/jellyseerr/commit/fcbca1722f31f32633a57bc5048f46c9da057d87))
* translations update from Hosted Weblate ([#3218](https://github.com/fallenbagel/jellyseerr/issues/3218)) ([5940ff7](https://github.com/fallenbagel/jellyseerr/commit/5940ff7f5f62eed9ac5aa6f02803418aaa09813a))
* **ui:** add episode number to front of episode name in season details ([#3086](https://github.com/fallenbagel/jellyseerr/issues/3086)) ([a672b32](https://github.com/fallenbagel/jellyseerr/commit/a672b324ec391a20f6f3a1daed82a8d276a52c2c))
* **ui:** request card progress bar ([#3123](https://github.com/fallenbagel/jellyseerr/issues/3123)) ([03853a1](https://github.com/fallenbagel/jellyseerr/commit/03853a1b9155c8a2153c8885022a74619af1bc15))
@@ -17,8 +17,8 @@ All help is welcome and greatly appreciated! If you would like to contribute to
1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository to your own GitHub account and [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device:
@@ -48,11 +48,11 @@ All help is welcome and greatly appreciated! If you would like to contribute to
4. Run the development environment:
```bash
yarn
yarn dev
pnpm install
pnpm dev
```
- Alternatively, you can use [Docker](https://www.docker.com/) with `docker-compose up -d`. This method does not require installing NodeJS or Yarn on your machine directly.
- Alternatively, you can use [Docker](https://www.docker.com/) with `dockercompose up -d`. This method does not require installing NodeJS or Yarn on your machine directly.
5. Create your patch and test your changes.
@@ -93,14 +93,54 @@ When adding new UI text, please try to adhere to the following guidelines:
8. If an additional description or "tip" is required for a form field, it should be styled using the global CSS class `label-tip`.
9. In full sentences, abbreviations like "info" or "auto" should not be used in place of full words, unless referencing the name/label of a specific setting or option which has an abbreviation in its name.
10. Do your best to check for spelling errors and grammatical mistakes.
11. Do not misspell "Overseerr."
11. Do not misspell "Jellyseerr."
## Translation
We use [Weblate](https://hosted.weblate.org/engage/overseerr/) for our translations, and your help with localizing Overseerr would be greatly appreciated! If your language is not listed below, please [open a feature request](https://github.com/fallenbagel/jellyseerr/issues/new/choose).
We use [Weblate](https://jellyseerr.borgcube.de/projects/jellyseerr/jellyseerr-frontend/) for our translations, and your help with localizing Jellyseerr would be greatly appreciated! If your language is not listed below, please [open a feature request](https://github.com/fallenbagel/jellyseerr/issues/new/choose).
If you are adding a new feature that requires a database migration, you will need to create 2 migrations: one for SQLite and one for PostgreSQL. Here is how you could do it:
1. Create a PostgreSQL database or use an existing one:
This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js) and [Radarr](https://github.com/Radarr/Radarr) contribution guides.
This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Overseerr](https://github.com/sct/Overseerr) contribution guides.
**Jellyseerr** is a free and open source software application for managing requests for your media library. It is a a fork of Overseerr built to bring support for Jellyfin & Emby media servers!
_The original Overseerr team have been busy and Jellyfin/Emby support aren't on their roadmap, so we started this project as we wanted to bring the Overseerr experience to the Jellyfin/Emby Community!_
**Jellyseerr** is a free and open source software application for managing requests for your media library. It integrates with the media server of your choice: [Jellyfin](https://jellyfin.org), [Plex](https://plex.tv), and [Emby](https://emby.media/). In addition, it integrates with your existing services, such as **[Sonarr](https://sonarr.tv/)**, **[Radarr](https://radarr.video/)**.
## Current Features
- Full Jellyfin/Emby/Plex integration. Authenticate and manage user access with Jellyfin/Emby/Plex!
- Supports Movies, Shows, Mixed Libraries!
-Ability to change email addresses for smtp purposes
- Ability to import all jellyfin/emby users
- Full Jellyfin/Emby/Plex integration including authentication with user import & management.
- Support for **PostgreSQL** and **SQLite** databases.
-Supports Movies, Shows and Mixed Libraries.
- Ability to change email addresses for SMTP purposes.
- Easy integration with your existing services. Currently, Jellyseerr supports Sonarr and Radarr. More to come!
- Jellyfin/Emby/Plex library scan, to keep track of the titles which are already available.
- Customizable request system, which allows users to request individual seasons or movies in a friendly, easy-to-use interface.
@@ -23,104 +29,31 @@ _The original Overseerr team have been busy and Jellyfin/Emby support aren't on
- Granular permission system.
- Support for various notification agents.
- Mobile-friendly design, for when you need to approve requests on the go!
(Upcoming Features include: Multiple Server Instances, Music Support, and much more!)
- Support for watchlisting & blacklisting media.
With more features on the way! Check out our [issue tracker](https://github.com/fallenbagel/jellyseerr/issues) to see the features which have already been requested.
## Getting Started
#### Pre-requisite (Important)
Check out our documentation for instructions on how to install and run Jellyseerr:
_*On Jellyfin/Emby, ensure the `settings > Home > Automatically group content from the following folders into views such as 'Movies', 'Music' and 'TV'` is turned off*_
### Launching Jellyseerr using Docker
Check out our dockerhub for instructions on how to install and run Jellyseerr:
https://hub.docker.com/r/fallenbagel/jellyseerr
### Launching Jellyseerr manually:
#### Windows
Pre-requisites:
- Nodejs (atleast LTS version)
- Yarn
- Download the source code from the github (Either develop branch or main for stable)
- Check out the [Jellyseerr Documentation](https://docs.jellyseerr.dev) before asking for help. Your question might already be in the docs!
- You can get support on [Discord](https://discord.gg/ckbvBtDJgC).
- You can ask questions in the Help category of our [GitHub Discussions](https://github.com/fallenbagel/jellyseerr/discussions).
- Bug reports and feature requests can be submitted via [GitHub Issues](https://github.com/fallenbagel/jellyseerr/issues).
@@ -143,4 +76,265 @@ You can help improve Jellyseerr too! Check out our [Contribution Guide](https://
## Contributors ✨
Thanks goes to all wonderful people who contributed directly to Jellyseerr and Overseerr.
Thanks goes to these wonderful people from Overseerr ([emoji key](https://allcontributors.org/docs/en/emoji-key)) and all those that contributed directly to Jellyseerr:
### Jellyseerr Contributors ✨
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<td align="center" valign="top" width="14.28%"><a href="https://nvds.be"><img src="https://avatars.githubusercontent.com/u/5257222?v=4?s=100" width="100px;" alt="Nicolai Van der Storm"/><br /><sub><b>Nicolai Van der Storm</b></sub></a><br /><a href="https://github.com/fallenbagel/jellyseerr/commits?author=NicolaiVdS" title="Code">💻</a></td>
**Jellyseerr** is a free and open source software application for managing requests for your media library. It integrates with the media server of your choice: [Jellyfin](https://jellyfin.org), [Plex](https://plex.tv), and [Emby](https://emby.media/). In addition, it integrates with your existing services, such as **[Sonarr](https://sonarr.tv/)**, **[Radarr](https://radarr.video/)**.
## Features
- **Full Plex integration**. Login and manage user access with Plex.
- **Syncs to your Plex library** to show what titles you already have.
- **Full Jellyfin/Emby/Plex integration**. Login and manage user access with Jellyfin/Emby/Plex.
- **Syncs to your Jellyfin/Emby/Plex library** to show what titles you already have.
- Supports Movies, Shows and Mixed Libraries.
- **Integrates with Sonarr and Radarr**. With more services to come in the future.
- Optionally set **Override rules** for requests to match with your defined conditions.
- **Easy to use request system** allowing users to request individual seasons or movies in a friendly, clean UI.
- **Simple request management UI**. Don't dig through the app to approve recent requests.
- **Mobile-friendly design**, for when you need to approve requests on the go.
- Granular permission system.
- Localization into other languages.
- Support for **PostgreSQL** and **SQLite** databases.
- Support for various notification agents.
- Easily **Watchlist** or **Blacklist** media.
- More features to come!
## Motivation
The primary motivation for starting this project was to have an incredibly performant and easy to use application. There is a heavy focus on the user experience for both the server owner and the users. We feel requesting should be **effortless for the user**. Find the media you want, click request, and branch off efficiently into other titles that interest you, all in one seamless flow. For the server owner, Overseerr takes all the hassle out of approving your users' requests.
The primary motivation for starting Jellyseerr was to bring Jellyfin and Emby support to Overseerr. However, over time, **Jellyseerr** has evolved into its own distinct application with unique features. Designed as a one-stop shop for media requests, it offers a simple, easy-to-use experience for managing requests on Jellyfin, Emby, and Plex servers.
## We need your help!
Overseerr is an ambitious project. We have already poured a lot of work into this, and have a lot more to do. We need your valuable feedback and help to find and fix bugs. Also, with Overseerr being an open-source project, anyone is welcome to contribute. Contribution includes building new features, patching bugs, translating the application, or even just writing documentation.
[Jellyseerr](https://github.com/Fallenbagel/jellyseerr) is an ambitious project where developers/contributors poured a lot of work into, and that builds on top of [Overseerr](https://github.com/sct/overseerr). And we have a lot more to do as well.
We value your feedback and support in identifying and fixing bugs to make Jellyseerr even better. As an open-source project, we welcome contributions from everyone. While Jellyseerr has diverged from Overseerr and evolved into its own unique application, we still encourage contributions to Overseerr, as it played a crucial role in inspiring what Jellyseerr has become today.
Contribution includes building new features, patching bugs, translating the application, or even just writing documentation.
If you would like to contribute, please be sure to review our [contribution guidelines](https://github.com/fallenbagel/jellyseerr/blob/develop/CONTRIBUTING.md).
description: Configure the database for Jellyseerr
sidebar_position: 2
---
# Configuring the Database
Jellyseerr supports SQLite and PostgreSQL. The database connection can be configured using the following environment variables:
## SQLite Options
If you want to use SQLite, you can simply set the `DB_TYPE` environment variable to `sqlite`. This is the default configuration so even if you don't set any other options, SQLite will be used.
```dotenv
DB_TYPE="sqlite" # Which DB engine to use, either "sqlite" or "postgres". The default is "sqlite".
CONFIG_DIRECTORY="config" # (optional) The path to the config directory where the db file is stored. The default is "config".
DB_LOG_QUERIES="false" # (optional) Whether to log the DB queries for debugging. The default is "false".
```
## PostgreSQL Options
### TCP Connection
If your PostgreSQL server is configured to accept TCP connections, you can specify the host and port using the `DB_HOST` and `DB_PORT` environment variables. This is useful for remote connections where the server uses a network host and port.
```dotenv
DB_TYPE="postgres" # Which DB engine to use, either "sqlite" or "postgres". The default is "sqlite".
DB_HOST="localhost" # (optional) The host (URL) of the database. The default is "localhost".
DB_PORT="5432" # (optional) The port to connect to. The default is "5432".
DB_USER= # (required) Username used to connect to the database.
DB_PASS= # (required) Password of the user used to connect to the database.
DB_NAME="jellyseerr" # (optional) The name of the database to connect to. The default is "jellyseerr".
DB_LOG_QUERIES="false" # (optional) Whether to log the DB queries for debugging. The default is "false".
```
### Unix Socket Connection
If your PostgreSQL server is configured to accept Unix socket connections, you can specify the path to the socket directory using the `DB_SOCKET_PATH` environment variable. This is useful for local connections where the server uses a Unix socket.
```dotenv
DB_TYPE="postgres" # Which DB engine to use, either "sqlite" or "postgres". The default is "sqlite".
DB_SOCKET_PATH="/var/run/postgresql" # (required) The path to the PostgreSQL Unix socket directory.
DB_USER= # (required) Username used to connect to the database.
DB_PASS= # (optional) Password of the user used to connect to the database, depending on the server's authentication configuration.
DB_NAME="jellyseerr" # (optional) The name of the database to connect to. The default is "jellyseerr".
DB_LOG_QUERIES="false" # (optional) Whether to log the DB queries for debugging. The default is "false".
```
### SSL configuration
The following options can be used to further configure ssl. Certificates can be provided as a string or a file path, with the string version taking precedence.
```dotenv
DB_USE_SSL="false" # (optional) Whether to enable ssl for database connection. This must be "true" to use the other ssl options. The default is "false".
DB_SSL_REJECT_UNAUTHORIZED="true" # (optional) Whether to reject ssl connections with unverifiable certificates i.e. self-signed certificates without providing the below settings. The default is "true".
DB_SSL_CA= # (optional) The CA certificate to verify the connection, provided as a string. The default is "".
DB_SSL_CA_FILE= # (optional) The path to a CA certificate to verify the connection. The default is "".
DB_SSL_KEY= # (optional) The private key for the connection in PEM format, provided as a string. The default is "".
DB_SSL_KEY_FILE= # (optinal) Path to the private key for the connection in PEM format. The default is "".
DB_SSL_CERT= # (optional) Certificate chain in pem format for the private key, provided as a string. The default is "".
DB_SSL_CERT_FILE= # (optional) Path to certificate chain in pem format for the private key. The default is "".
```
---
### Migrating from SQLite to PostgreSQL
1. Set up your PostgreSQL database and configure Jellyseerr to use it
2. Run Jellyseerr to create the tables in the PostgreSQL database
3. Stop Jellyseerr
4. Run the following command to export the data from the SQLite database and import it into the PostgreSQL database:
:::info
Edit the postgres connection string to match your setup.
If you don't have or don't want to use docker, you can build the working pgloader version [in this PR](https://github.com/dimitri/pgloader/pull/1531) from source and use the same options as below.
:::
:::caution
The most recent release of pgloader has an issue quoting the table columns. Use the version in the docker container to avoid this issue.
description: Configure a reverse proxy for Jellyseerr.
sidebar_position: 1
---
# Reverse Proxy
{% hint style="warning" %}
Base URLs cannot be configured in Overseerr. With this limitation, only subdomain configurations are supported.
:::warning
Base URLs cannot be configured in Jellyseerr. With this limitation, only subdomain configurations are supported.
A Nginx subfolder workaround configuration is provided below, but it is not officially supported.
{% endhint %}
:::
## Nginx
{% tabs %}
{% tab title="SWAG" %}
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
A sample proxy configuration is included in [SWAG (Secure Web Application Gateway)](https://github.com/linuxserver/docker-swag).
However, this page is still the only source of truth, so the SWAG sample configuration is not guaranteed to be up-to-date. If you find an inconsistency, please [report it to the LinuxServer team](https://github.com/linuxserver/reverse-proxy-confs/issues/new) or [submit a pull request to update it](https://github.com/linuxserver/reverse-proxy-confs/pulls).
To use the bundled configuration file, simply rename `overseerr.subdomain.conf.sample` in the `proxy-confs` folder to `overseerr.subdomain.conf`.
Alternatively, you can create a new file `overseerr.subdomain.conf` in `proxy-confs` with the following configuration:
This Nginx subfolder reverse proxy is an unsupported workaround, and only provided as an example. The filters may stop working when Overseerr is updated.
:::warning
This Nginx subfolder reverse proxy is an unsupported workaround, and only provided as an example. The filters may stop working when Jellyseerr is updated.
If you encounter any issues with Overseerr while using this workaround, we may ask you to try to reproduce the problem without the Nginx proxy.
{% endhint %}
If you encounter any issues with Jellyseerr while using this workaround, we may ask you to try to reproduce the problem without the Nginx proxy.
:::
Add the following location block to your existing `nginx.conf` file.
```nginx
location ^~ /overseerr {
set $app 'overseerr';
location ^~ /jellyseerr {
set $app 'jellyseerr';
# Remove /overseerr path to pass to the app
rewrite ^/overseerr/?(.*)$ /$1 break;
# Remove /jellyseerr path to pass to the app
rewrite ^/jellyseerr/?(.*)$ /$1 break;
proxy_pass http://127.0.0.1:5055; # NO TRAILING SLASH
A sample proxy configuration is included in [SWAG (Secure Web Application Gateway)](https://github.com/linuxserver/docker-swag).
However, this page is still the only source of truth, so the SWAG sample configuration is not guaranteed to be up-to-date. If you find an inconsistency, please [report it to the LinuxServer team](https://github.com/linuxserver/reverse-proxy-confs/issues/new) or [submit a pull request to update it](https://github.com/linuxserver/reverse-proxy-confs/pulls).
To use the bundled configuration file, simply rename `jellyseerr.subdomain.conf.sample` in the `proxy-confs` folder to `jellyseerr.subdomain.conf`.
Alternatively, you can create a new file `jellyseerr.subdomain.conf` in `proxy-confs` with the following configuration:
You can then add a jail using this filter in `jail.local`. Please see the [Fail2ban documentation](https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jails) for details on how to configure the jail.
**We do not officially support these third-party integrations.** If you run into any issues, please seek help on the appropriate support channels for the integration itself!
{% endhint %}
- [Organizr](https://organizr.app/), a HTPC/homelab services organizer
- [Heimdall](https://github.com/linuxserver/Heimdall), an application dashboard and launcher
- [LunaSea](https://docs.lunasea.app/modules/overseerr), a self-hosted controller for mobile and macOS
- [Requestrr](https://github.com/darkalfx/requestrr/wiki/Configuring-Overseerr), a Discord chatbot
- [Doplarr](https://github.com/kiranshila/Doplarr), a Discord request bot
- [Overseerr Assistant](https://github.com/RemiRigal/Overseerr-Assistant), a browser extension for requesting directly from TMDB and IMDb
- [ha-overseerr](https://github.com/vaparr/ha-overseerr), a custom Home Assistant component
- [OverCLIrr](https://github.com/WillFantom/OverCLIrr), a command-line tool
- [Overseerr Exporter](https://github.com/WillFantom/overseerr-exporter), a Prometheus exporter
You can now access Jellyseerr by visiting `http://localhost:5055` in your web browser.
:::
#### Extending the installation
<Tabs groupId="unix-extensions" queryString>
<TabItem value="linux" label="Linux">
To run jellyseerr as a systemd service:
1. create the environment file at `/etc/jellyseerr/jellyseerr.conf`:
```bash
## Jellyseerr's default port is 5055, if you want to use both, change this.
## specify on which port to listen
PORT=5055
## specify on which interface to listen, by default jellyseerr listens on all interfaces
#HOST=127.0.0.1
## Uncomment if you want to force Node.js to resolve IPv4 before IPv6 (advanced users only)
# FORCE_IPV4_FIRST=true
```
2. Then run the following commands:
```bash
which node
```
Copy the path to node, it should be something like `/usr/bin/node`.
3. Create the systemd service file at `/etc/systemd/system/jellyseerr.service`, using either `sudo systemctl edit jellyseerr` or `sudo nano /etc/systemd/system/jellyseerr.service`:
```bash
[Unit]
Description=Jellyseerr Service
Wants=network-online.target
After=network-online.target
[Service]
EnvironmentFile=/etc/jellyseerr/jellyseerr.conf
Environment=NODE_ENV=production
Type=exec
Restart=on-failure
WorkingDirectory=/opt/jellyseerr
ExecStart=/usr/bin/node dist/index.js
[Install]
WantedBy=multi-user.target
```
:::note
If you are using a different path to node, replace `/usr/bin/node` with the path to node.
:::
4. Enable and start the service:
```bash
sudo systemctl enable jellyseerr
sudo systemctl start jellyseerr
```
</TabItem>
<TabItem value="macos" label="macOS">
To run jellyseerr as a launchd service:
1. Find the path to node:
```bash
which node
```
Copy the path to node, it should be something like `/usr/local/bin/node`.
2. Create a launchd plist file at `~/Library/LaunchAgents/com.jellyseerr.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.jellyseerr</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>/opt/jellyseerr/dist/index.js</string>
</array>
<key>WorkingDirectory</key>
<string>/opt/jellyseerr</string>
<key>EnvironmentVariables</key>
<dict>
<key>NODE_ENV</key>
<string>production</string>
<key>PORT</key>
<string>5055</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
```
:::note
If you are using a different path to node, replace `/usr/local/bin/node` with the path to node.
Details on how to install Docker can be found on the [official Docker website](https://docs.docker.com/get-docker/).
Refer to [Configuring Databases](/extending-jellyseerr/database-config#postgresql-options) for details on how to configure your database.
:::
## Unix (Linux, macOS)
:::warning
Be sure to replace `/path/to/appdata/config` in the below examples with a valid host directory path. If this volume mount is not configured correctly, your Jellyseerr settings/data will not be persisted when the container is recreated (e.g., when updating the image or rebooting your machine).
The `TZ` environment variable value should also be set to the [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) of your time zone!
:::
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs groupId="docker-methods" queryString>
<TabItem value="docker-cli" label="Docker CLI">
For details on the Docker CLI, please [review the official `docker run` documentation](https://docs.docker.com/engine/reference/run/).
#### Installation:
```bash
docker run -d \
--name jellyseerr \
-e LOG_LEVEL=debug \
-e TZ=Asia/Tashkent \
-e PORT=5055 `#optional` \
-p 5055:5055 \
-v /path/to/appdata/config:/app/config \
--restart unless-stopped \
fallenbagel/jellyseerr
```
:::tip
If you are using emby, make sure to set the `JELLYFIN_TYPE` environment variable to `emby`.
`-e JELLYFIN_TYPE=emby`
:::
To run the container as a specific user/group, you may optionally add `--user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]` to the above command.
#### Updating:
Stop and remove the existing container:
```bash
docker stop jellyseerr && docker rm Jellyseerr
```
Pull the latest image:
```bash
docker pull fallenbagel/jellyseerr
```
Finally, run the container with the same parameters originally used to create the container:
```bash
docker run -d ...
```
:::tip
You may alternatively use a third-party updating mechanism, such as [Watchtower](https://github.com/containrrr/watchtower) or [Ouroboros](https://github.com/pyouroboros/ouroboros), to keep Jellyseerr up-to-date automatically.
You could also use [diun](https://github.com/crazy-max/diun) to receive notifications when a new image is available.
For details on how to use Docker Compose, please [review the official Compose documentation](https://docs.docker.com/compose/reference/).
#### Installation:
Define the `jellyseerr` service in your `compose.yaml` as follows:
```yaml
---
services:
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
- LOG_LEVEL=debug
- TZ=Asia/Tashkent
- PORT=5055 #optional
ports:
- 5055:5055
volumes:
- /path/to/appdata/config:/app/config
restart: unless-stopped
```
:::tip
If you are using emby, make sure to set the `JELLYFIN_TYPE` environment variable to `emby`.
:::
Then, start all services defined in the Compose file:
```bash
docker compose up -d
```
#### Updating:
Pull the latest image:
```bash
docker compose pull jellyseerr
```
Then, restart all services defined in the Compose file:
```bash
docker compose up -d
```
:::tip
You may alternatively use a third-party mechanism like [dockge](https://github.com/louislam/dockge) to manage your docker compose files.
:::
</TabItem>
</Tabs>
## Unraid
1. Ensure you have the **Community Applications** plugin installed.
2. Inside the **Community Applications** app store, search for **Jellyseerr**.
3. Click the **Install Button**.
4. On the following **Add Container** screen, make changes to the **Host Port** and **Host Path 1** \(Appdata\) as needed.
5. If you want to use emby, make sure to set the `JELLYFIN_TYPE` environment variable to `emby`. Otherwise, remove the variable.
6. Click apply and access "Jellyseerr" at your `<ServerIP:HostPort>` in a web browser.
## Windows
Please refer to the [Docker Desktop for Windows user manual](https://docs.docker.com/docker-for-windows/) for details on how to install Docker on Windows. There is no need to install a Linux distro if using named volumes like in the example below.
:::warning
**WSL2 will need to be installed to prevent DB corruption!** Please see the [Docker Desktop WSL 2 backend documentation](https://docs.docker.com/docker-for-windows/wsl/) for instructions on how to enable WSL2. The commands below will only work with WSL2 installed!
:::
First, create a volume to store the configuration data for Jellyseerr using using either the Docker CLI:
```bash
docker volume create jellyseerr-data
```
or the Docker Desktop app:
1. Open the Docker Desktop app
2. Head to the Volumes tab
3. Click on the "New Volume" button near the top right
4. Enter a name for the volume (example: `jellyseerr-data`) and hit "Create"
Then, restart all services defined in the Compose file:
```bash
docker compose up -d
```
</TabItem>
</Tabs>
:::tip
If you are using a named volume, then you can safely **ignore** the warning about the `/app/config` folder being incorrectly mounted.
If you are using emby, make sure to set the `JELLYFIN_TYPE` environment variable to `emby`.
:::
To access the files inside the volume created above, navigate to `\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\jellyseerr-data\_data` using File Explorer.
:::info
Docker on Windows works differently than it does on Linux; it runs Docker inside of a stripped-down Linux VM. Volume mounts are exposed to Docker inside this VM via SMB mounts. While this is fine for media, it is unacceptable for the `/app/config` directory because SMB does not support file locking. This will eventually corrupt your database, which can lead to slow behavior and crashes.
**If you must run Docker on Windows, you should put the `/app/config` directory mount inside the VM and not on the Windows host.** (This also applies to other containers with SQLite databases.)
Named volumes, like in the example commands above, are automatically mounted inside the VM. Therefore the warning on the setup about the `/app/config` folder being incorrectly mounted page should be ignored.
**Overseerr is currently in BETA.** If you would like to help test the bleeding edge, please use the image **`fallenbagel/jellyseerr:develop`**!
{% endhint %}
{% hint style="info" %}
After running Overseerr for the first time, configure it by visiting the web UI at `http://[address]:5055` and completing the setup steps.
{% endhint %}
## Docker
{% hint style="warning" %}
Be sure to replace `/path/to/appdata/config` in the below examples with a valid host directory path. If this volume mount is not configured correctly, your Overseerr settings/data will not be persisted when the container is recreated (e.g., when updating the image or rebooting your machine).
The `TZ` environment variable value should also be set to the [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) of your time zone!
{% endhint %}
{% tabs %}
{% tab title="Docker CLI" %}
For details on the Docker CLI, please [review the official `docker run` documentation](https://docs.docker.com/engine/reference/run/).
**Installation:**
```bash
docker run -d \
--name overseerr \
-e LOG_LEVEL=debug \
-e TZ=Asia/Tokyo \
-e PORT=5055`#optional` \
-p 5055:5055 \
-v /path/to/appdata/config:/app/config \
--restart unless-stopped \
fallenbagel/jellyseerr
```
To run the container as a specific user/group, you may optionally add `--user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]` to the above command.
**Updating:**
Stop and remove the existing container:
```bash
docker stop overseerr && docker rm overseerr
```
Pull the latest image:
```bash
docker pull fallenbagel/jellyseerr
```
Finally, run the container with the same parameters originally used to create the container:
```bash
docker run -d ...
```
{% hint style="info" %}
You may alternatively use a third-party updating mechanism, such as [Watchtower](https://github.com/containrrr/watchtower) or [Ouroboros](https://github.com/pyouroboros/ouroboros), to keep Overseerr up-to-date automatically.
{% endhint %}
{% endtab %}
{% tab title="Docker Compose" %}
For details on how to use Docker Compose, please [review the official Compose documentation](https://docs.docker.com/compose/reference/).
**Installation:**
Define the `overseerr` service in your `docker-compose.yml` as follows:
```yaml
---
version:'3'
services:
overseerr:
image:fallenbagel/jellyseerr:latest
container_name:overseerr
environment:
- LOG_LEVEL=debug
- TZ=Asia/Tokyo
- PORT=5055#optional
ports:
- 5055:5055
volumes:
- /path/to/appdata/config:/app/config
restart:unless-stopped
```
Then, start all services defined in the Compose file:
```bash
docker-compose up -d
```
**Updating:**
Pull the latest image:
```bash
docker-compose pull overseerr
```
Then, restart all services defined in the Compose file:
```bash
docker-compose up -d
```
{% endtab %}
{% endtabs %}
## Unraid
1. Ensure you have the **Community Applications** plugin installed.
2. Inside the **Community Applications** app store, search for **Overseerr**.
3. Click the **Install Button**.
4. On the following **Add Container** screen, make changes to the **Host Port** and **Host Path 1**\(Appdata\) as needed.
5. Click apply and access "Overseerr" at your `<ServerIP:HostPort>` in a web browser.
## Windows
Please refer to the [Docker Desktop for Windows user manual](https://docs.docker.com/docker-for-windows/) for details on how to install Docker on Windows. There is no need to install a Linux distro if using named volumes like in the example below.
{% hint style="danger" %}
**WSL2 will need to be installed to prevent DB corruption!** Please see the [Docker Desktop WSL 2 backend documentation](https://docs.docker.com/docker-for-windows/wsl/) for instructions on how to enable WSL2. The commands below will only work with WSL2 installed!
{% endhint %}
First, create a volume to store the configuration data for Overseerr using using either the Docker CLI:
```bash
docker volume create overseerr-data
```
or the Docker Desktop app:
1. Open the Docker Desktop app
2. Head to the Volumes tab
3. Click on the "New Volume" button near the top right
4. Enter a name for the volume (example: `overseerr-data`) and hit "Create"
To access the files inside the volume created above, navigate to `\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\overseerr-data\_data` using File Explorer.
{% hint style="info" %}
Docker on Windows works differently than it does on Linux; it runs Docker inside of a stripped-down Linux VM. Volume mounts are exposed to Docker inside this VM via SMB mounts. While this is fine for media, it is unacceptable for the `/app/config` directory because SMB does not support file locking. This will eventually corrupt your database, which can lead to slow behavior and crashes.
**If you must run Docker on Windows, you should put the `/app/config` directory mount inside the VM and not on the Windows host.** (This also applies to other containers with SQLite databases.)
Named volumes, like in the example commands above, are automatically mounted inside the VM. Therefore the warning on the setup about the `/app/config` folder being incorrectly mounted page should be ignored.
{% endhint %}
## Linux
{% hint style="info" %}
The [Overseerr snap](https://snapcraft.io/overseerr) is the only officially supported Linux install method aside from [Docker](#docker).
Currently, the listening port cannot be changed, so port `5055` will need to be available on your host. To install `snapd`, please refer to the [Snapcraft documentation](https://snapcraft.io/docs/installing-snapd).
{% endhint %}
**Installation:**
```
sudo snap install overseerr
```
{% hint style="danger" %}
To install the development build, add the `--edge` argument to the above command (i.e., `sudo snap install overseerr --edge`). However, note that this version can break any moment. Be prepared to troubleshoot any issues that arise!
{% endhint %}
**Updating:**
Snap will keep Overseerr up-to-date automatically. You can force a refresh by using the following command.
Once installed, you will not be notified of updates, so you can update with:
```bash
emerge @live-rebuild
```
or use `app-portage/smart-live-rebuild`
{% hint style="danger" %}
This version can break any moment. Be prepared to troubleshoot any issues that arise!
{% endhint %}
{% endtab %}
{% tab title="Swizzin" %}
{% hint style="danger" %}
This implementation is not yet merged to master due to missing functionality. You can beta test the limited implementation or follow the status on [the pull request](https://github.com/swizzin/swizzin/pull/567).
{% endhint %}
The installation is not implemented via Docker, but barebones. The latest release version of Overseerr will be used.
Please see the [swizzin documentation](https://swizzin.ltd/applications/overseerr) for more information.
Helm values can be found in the Jellyseerr repository under [charts/jellyseerr-chart/README.md](https://github.com/Fallenbagel/jellyseerr/tree/develop/charts/jellyseerr-chart).
Verify the signature with [cosign](https://docs.sigstore.dev/cosign/system_config/installation/) (replace [tag], with the TAG you want to verify) :
In order to use postgres, you will need to add override the default module of jellyseerr with the following as the current default module is not compatible with postgres:
If you can't find the solution to your problem here, please read [Need Help?](./need-help.md) and reach out to us on [Discord](https://discord.gg/ckbvBtDJgC).
_Please do not post questions or support requests on the GitHub issue tracker!_
{% endhint %}
## General
### How do I keep Overseerr up-to-date?
Use a third-party update mechanism (such as [Watchtower](https://github.com/containrrr/watchtower), [Ouroboros](https://github.com/pyouroboros/ouroboros), or [Pullio](https://hotio.dev/pullio)) to keep Overseerr up-to-date automatically.
### How can I access Overseerr outside of my home network?
The easiest but least secure method is to simply forward an external port (e.g., `5055`) on your router to the internal port used by Overseerr (default is TCP `5055`). Visit [Port Forward](http://portforward.com/) for instructions for your particular router. You would then be able to access Overseerr via `http://EXTERNAL-IP-ADDRESS:5055`.
A more advanced, user-friendly, and secure (if using SSL) method is to set up a web server and use a reverse proxy to access Overseerr. Please refer to our [reverse proxy examples](../extending-overseerr/reverse-proxy.md) for more information.
The most secure method (but also the most inconvenient method) is to set up a VPN tunnel to your home server. You would then be able to access Overseerr as if you were on your local network, via `http://LOCAL-IP-ADDRESS:5055`.
### Are there mobile apps for Overseerr?
Since Overseerr has an almost native app experience when installed as a Progressive Web App (PWA), there are no plans to develop mobile apps for Overseerr.
Out of the box, Overseerr already fulfills most of the [PWA install criteria](https://web.dev/install-criteria/). You simply need to make sure that your Overseerr instance is being served over HTTPS (e.g., via a [reverse proxy](../extending-overseerr/reverse-proxy.md)).
### Overseerr is amazing! But it is not translated in my language yet! Can I help with translations?
You sure can! We are using [Weblate](https://hosted.weblate.org/engage/overseerr/) for translations. If your language is not listed, please [open a feature request on GitHub](https://github.com/sct/overseerr/issues/new/choose).
### Where can I find the changelog?
You can find the changelog for your version (stable/`latest`,s or `develop`) in the **Settings → About** page in your Overseerr instance.
You can alternatively review the [stable release history](https://github.com/fallenbagel/jellyseerr/releases) and [`develop` branch commit history](https://github.com/fallenbagel/jellyseerr/commits/develop) on GitHub.
### Some media is missing from Overseerr that I know is in Plex!
Overseerr currently supports the following agents:
- New Plex Movie
- Legacy Plex Movie
- New Plex TV
- Legacy Plex TV
- TheTVDB
- TMDB
- [HAMA](https://github.com/ZeroQI/Hama.bundle)
Please verify that your library is using one of the agents previously listed.
When changing agents, a full metadata refresh of your Plex library is required. (Caution: This can take a long time depending on the size of your library.)
#### Troubleshooting Steps
First, check the Overseerr logs for media items that are missing. The logs will contain an error as to why that item could not be matched.
1. Verify that you are using one of the agents mentioned above.
2. Refresh the metadata for just that item.
3. Run a full scan in Overseerr to see if that item is now matched properly.
4. If the item is now seen by Overseerr then repeat step 2 for each missing item. If you have a large amount of items missing then a full metadata refresh is recommended for that library.
5. Run a full scan on Overseerr after refreshing all unmatched items.
You can also perform the following to verify the media item has a GUID Overseerr can match:
1. Go to the media item in Plex and **"Get info"** and click on **"View XML"**.
2. Verify that the media item's GUID follows one of the below formats:
4. Legacy Plex Movie agent `guid="com.plexapp.agents.imdb://tt0765446"`
### Where can I find the log files?
Please see [these instructions on how to locate and share your logs](./need-help.md#how-can-i-share-my-logs).
## Users
### Why can't I see all of my Plex users?
Please see the [documentation for importing users from Plex](../using-overseerr/users/README.md#importing-users-from-plex).
### Can I create local users in Overseerr?
Yes! Please see the [documentation for creating local users](../using-overseerr/users/README.md#creating-local-users).
### Is is possible to set user roles in Overseerr?
Permissions can be configured for each user via the **User List** or their **User Settings** page. The list of assignable permissions is still growing, so if you have any suggestions, [submit a feature request](https://github.com/fallenbagel/jellyseerr/issues/new/choose)!
## Requests
### I receive 409 or 400 errors when requesting a movie or TV series!
Verify you are running v3 of both Radarr and Sonarr. Overseerr is not backwards-compatible with previous versions.
### Can I allow users to submit 4K requests?
Yes! If you keep both non-4K and 4K content in your media libraries, you can link separate 4K Radarr/Sonarr servers to allow users to submit 4K requests. (You must configure default non-4K **and** default 4K Radarr/Sonarr servers.)
Please see the [Services documentation](../using-overseerr/settings/README.md#services) for details on how to configure your Radarr and/or Sonarr servers.
Note that users must also have the **Request 4K**, **Request 4K Movies**, and/or **Request 4K Series** permissions in order to submit requests for 4K content.
### I approved a requested movie and Radarr didn't search for it!
Check the minimum availability setting in your Radarr server. If a movie does not meet the minimum availability requirement, no search will be performed. Also verify that Radarr did not perform a search, by checking the Radarr logs. Lastly, verify that the item was not already being monitored by Radarr prior to approving the request.
### Help! My request still shows "requested" even though it is in Plex!
See "[Some media is missing from Overseerr that I know is in Plex!](#some-media-is-missing-from-overseerr-that-i-know-is-in-plex)" for troubleshooting steps.
### Series requests keep failing!
If you configured a URL base in Sonarr, make sure you have also configured the [URL Base](../using-overseerr/settings/README.md#url-base) setting for your Sonarr server in Overseerr.
Also, check that you are using Sonarr v3 and that you have configured a default language profile in Overseerr.
Language profile support for Sonarr was added in [v1.20.0](https://github.com/fallenbagel/jellyseerr/releases/tag/v1.20.0) along with a new, _required_**Language Profile** setting. If series requests are failing, make sure that you have a default language profile configured for each of your Sonarr servers in **Settings → Services**.
## Notifications
### I am getting "Username and Password not accepted" when attempting to send email notifications via Gmail!
If you have 2-Step Verification enabled on your account, you will need to create an [app password](https://support.google.com/mail/answer/185833).
### The logo image in email notifications is broken!
This may be an issue with how you are proxying your Overseerr instance. A good first troubleshooting step is to verify that the [`Content-Security-Policy` HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) being set by your proxy (if any) is configured appropriately to allow external embedding of the image.
For Gmail users, another possible issue is that Google's image URL proxy is being blocked from fetching the image. If using Cloudflare, overzealous firewall rules could be the culprit.
Before seeking assistance, please make sure you have first tried these following:
- **Updating** Overseerr to the latest version.
- **Stopping and restarting** Overseerr.
- **Restarting** your machine.
- **Clearing** your browser cache.
- **Analyzing** your logs, you just might find the solution yourself!
- **Searching** the [documentation](../README.md), [installation guide](../getting-started/installation.md), and [FAQs](./faq.md).
If you still have questions after troubleshooting on your own, feel free to ask on [Discord](https://discord.gg/ckbvBtDJgC)! (Please review our [Code of Conduct](https://github.com/fallenbagel/jellyseerr/blob/develop/CODE_OF_CONDUCT.md) before posting.)
Be sure to also include a link to your logs. (Please see [How can I share my logs?](#how-can-i-share-my-logs) below.)
## What should I include when requesting support?
Please try to include as much information as possible. A vague statement like "it doesn't work" provides very little to go on, and makes it difficult for us to help you.
Try to answer the following questions:
- What version of Overseerr are you running? (You can find this in Settings → About → Version.)
- How did you install Overseerr? Are you using the official Docker or snap images, or images published by a third-party?
- How are you accessing Overseerr?
- Are you accessing Overseerr through your reverse proxy or via a local IP address?
- What browser are you using? What browser extensions are enabled?
- What were you trying to do, and how did you attempt it?
- What command did you enter?
- What did you click on?
- What settings did you change?
- Did you follow official instructions, or a third-party guide?
- Provide a step-by-step list of what you tried.
- Provide a brief description of your setup.
- What exactly do you see?
- Did something happen?
- Did something not happen?
- Are there any error messages showing?
- Provide screenshots to help us see what you are seeing.
- Share your Overseerr logs, which show exactly what happened and are often critical for identifying issues (see [How can I share my logs?](#how-can-i-share-my-logs) below).
## How can I share my logs?
1. Locate the current log file at `<your Overseerr config directory>/logs/overseerr.log`.
2. Open the log file and **copy its contents** into a [**secret gist** on GitHub](https://gist.github.com/). If you upload your logs elsewhere, we may ask you to share them again via GitHub Gist.
3.**Share the link/URL to your secret gist** in the [`#support` channel in our Discord server](https://discord.gg/ckbvBtDJgC).
Add the following to your `compose.yaml` to use Google's DNS:
```yaml
---
services:
jellyseerr:
dns:
- 8.8.8.8
```
or for Cloudflare's DNS:
```yaml
---
services:
jellyseerr:
dns:
- 1.1.1.1
```
or for Quad9's DNS:
```yaml
---
services:
jellyseerr:
dns:
- 9.9.9.9
```
You can try them all and see which one works for your network.
</TabItem>
<TabItem value="windows" label="Windows">
1. Open the Control Panel.
2. Click on Network and Internet.
3. Click on Network and Sharing Center.
4. Click on Change adapter settings.
5. Right-click the network interface connected to the internet and select Properties.
6. Select Internet Protocol Version 4 (TCP/IPv4) and click Properties.
7. Select Use the following DNS server addresses and enter `8.8.8.8` for Google's DNS or `1.1.1.1` for Cloudflare's DNS or `9.9.9.9` for Quad9's DNS.
</TabItem>
<TabItem value="linux" label="Linux">
1. Open a terminal.
2. Edit the `/etc/resolv.conf` file with your favorite text editor.
3. Add the following line to use Google's DNS:
```bash
nameserver 8.8.8.8
```
or for Cloudflare's DNS:
```bash
nameserver 1.1.1.1
```
or for Quad9's DNS:
```bash
nameserver 9.9.9.9
```
</TabItem>
</Tabs>
### Option 2: Force IPV4 resolution first
Sometimes there are configuration issues with IPV6 that prevent the hostname resolution from working correctly.
You can try to force the resolution to use IPV4 first by going to `Settings > Networking > Advanced Networking` and enabling `Force IPv4 Resolution First` setting and restarting. You can also add the environment variable, `FORCE_IPV4_FIRST=true`:
description: Understand which data you should back up.
sidebar_position: 4
---
# Which data does Jellyseerr save and where?
## Settings
All configurations from the **Settings** panel in the Jellyseerr web UI are saved, including integrations with Radarr, Sonarr, Jellyfin, Plex, and notification settings.
These settings are stored in the `settings.json` file located in the Jellyseerr data folder.
## User Data
Apart from the settings, all other data—including user accounts, media requests, blacklist etc. are stored in the database (either SQLite or PostgreSQL).
# Backup
### SQLite
If your backup system uses filesystem snapshots (such as Kubernetes with Volsync), you can directly back up the Jellyseerr data folder.
Otherwise, you need to stop the Jellyseerr application and back up the `config` folder.
For advanced users, it's possible to back up the database without stopping the application by using the [SQLite CLI](https://www.sqlite.org/download.html). Run the following command to create a backup:
After restoring your `db/db.sqlite3` file and, optionally, the `settings.json` file, the `config` folder structure should look like this:
```
.
├── cache <-- Optional
├── db
│ └── db.sqlite3
├── logs <-- Optional
└── settings.json <-- Optional (required if you want to avoid reconfiguring Jellyseerr)
```
Once the files are restored, start the Jellyseerr application.
### PostgreSQL
Install the [PostgreSQL client](https://www.postgresql.org/download/) and restore the PostgreSQL database using the following command (replace the placeholders accordingly):
:::info
Depending on how your PostgreSQL instance is configured, you may need to add these options to the command below.
-h, --host=HOSTNAME database server host or socket directory
The Discord notification agent enables you to post notifications to a channel in a server you manage.
{% hint style="info" %}
:::info
Users can optionally opt-in to being mentioned in Discord notifications by configuring their [Discord user ID](https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID-) in their user settings.
{% endhint %}
:::
## Configuration
@@ -12,6 +18,10 @@ Users can optionally opt-in to being mentioned in Discord notifications by confi
You can find the webhook URL in the Discord application, at **Server Settings → Integrations → Webhooks**.
### Notification Role ID (optional)
If a role ID is specified, it will be included in the webhook message. See [Discord role ID](https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID).
### Bot Username (optional)
If you would like to override the name you configured for your bot in Discord, you may set this value to whatever you like!
description: Configure email notifications for your users.
sidebar_position: 1
---
# Email
## Configuration
{% hint style="info" %}
If the [Application URL](../settings/README.md#application-url) setting is configured in **Settings → General**, Overseerr will explicitly set the origin server hostname when connecting to the SMTP host.
{% endhint %}
:::info
If the [Application URL](/using-jellyseerr/settings/general#application-title) setting is configured in **Settings → General**, Jellyseerr will explicitly set the origin server hostname when connecting to the SMTP host.
:::
### Sender Name (optional)
Configure a friendly name for the email sender (e.g., "Overseerr").
Configure a friendly name for the email sender (e.g., "Jellyseerr").
### Sender Address
@@ -18,7 +24,7 @@ Depending on your email provider, this may need to be an address you own. For ex
### SMTP Host
Set this to the hostname or IP address of your SMTP host/server.
Set this to the hostname or IP address of your SMTP server.
### SMTP Port
@@ -26,16 +32,15 @@ Set this to a supported port number for your SMTP host. `465` and `587` are comm
### Encryption Method
In most cases, [Use Implicit TLS](https://tools.ietf.org/html/rfc8314) should be selected for port 465, and [Use STARTTLS if available](https://en.wikipedia.org/wiki/Opportunistic_TLS) for port 587. Please refer to your email provider's documentations for details on how to configure this setting.
In most cases, [Use Implicit TLS](https://tools.ietf.org/html/rfc8314) should be selected for port 465, and [Use STARTTLS](https://en.wikipedia.org/wiki/Opportunistic_TLS) if available for port 587. Please refer to your email provider's documentations for details on how to configure this setting.
The default value for this setting is **Use STARTTLS if available**.
### SMTP Username & Password
{% hint style="info" %}
:::info
If your account has two-factor authentication enabled, you may need to create an application password instead of using your account password.
{% endhint %}
:::
Configure these values as appropriate to authenticate with your SMTP host.
description: Configure notifications for your users.
sidebar_position: 3
---
# Notifications
## Supported Notification Agents
Jellyseerr currently supports the following notification agents:
import DocCardList from '@theme/DocCardList';
<DocCardList />
## Setting Up Notifications
Simply configure your desired notification agents in **Settings -> Notifications** in the Jellyseerr web UI.
Users can customize their notification preferences in their own user notification settings.
## Requesting New Notification Agents
If we do not currently support your preferred notification agent, feel free to [submit a feature request on GitHub](https://github.com/Fallenbagel/jellyseerr/issues). However, please be sure to search first and confirm that there is not already an existing request for the agent!
description: Configure web push notifications for your users.
sidebar_position: 2
---
# Web Push
The web push notification agent enables you and your users to receive Jellyseerr notifications in a supported browser.
This notification agent does not require any configuration, but is not enabled in Jellyseerr by default.
:::warning
Web push notifications require a secure connection to your Jellyseerr instance. Refer to the [Reverse Proxy](/extending-jellyseerr/reverse-proxy) documentation for more information.
:::
To set up web push notifications, simply enable the agent in **Settings → Notifications → Web Push**. You and your users will then be prompted to allow notifications in your web browser.
Users can opt out of these notifications, or customize the notification types they would like to subscribe to, in their user settings.
:::info
Web push notifications offer a native notification experience without the need to install an app.
description: Configure global and default settings for Jellyseerr.
sidebar_position: 1
---
# General
## API Key
This is your Jellyseerr API key, which can be used to integrate Jellyseerr with third-party applications. Do **not** share this key publicly, as it can be used to gain administrator access!
If you need to generate a new API key for any reason, simply click the button to the right of the text box.
If you want to set the API key, rather than letting it be randomly generated, you can use the API_KEY environment variable. Whatever that variable is set to will be your API key.
## Application Title
If you aren't a huge fan of the name "Jellyseerr" and would like to display something different to your users, you can customize the application title!
## Application URL
Set this to the externally-accessible URL of your Jellyseerr instance.
You must configure this setting in order to enable password reset and generation emails.
## Enable Proxy Support
If you have Jellyseerr behind a reverse proxy, enable this setting to allow Jellyseerr to correctly register client IP addresses. For details, please see the [Express Documentation](https://expressjs.com/en/guide/behind-proxies.html).
This setting is **disabled** by default.
## Enable CSRF Protection
:::warning
**This is an advanced setting.** Please only enable this setting if you are familiar with CSRF protection and how it works.
:::
CSRF stands for [cross-site request forgery](https://en.wikipedia.org/wiki/Cross-site_request_forgery). When this setting is enabled, all external API access that alters Jellyseerr application data is blocked.
If you do not use Jellyseerr integrations with third-party applications to add/modify/delete requests or users, you can consider enabling this setting to protect against malicious attacks.
One caveat, however, is that HTTPS is required, meaning that once this setting is enabled, you will no longer be able to access your Jellyseerr instance over _HTTP_ (including using an IP address and port number).
If you enable this setting and find yourself unable to access Jellyseerr, you can disable the setting by modifying `settings.json` in `/app/config`.
This setting is **disabled** by default.
## Enable Image Caching
When enabled, Jellseerr will proxy and cache images from pre-configured sources (such as TMDB). This can use a significant amount of disk space.
Images are saved in the `config/cache/images` and stale images are cleared out every 24 hours.
You should enable this if you are having issues with loading images directly from TMDB in your browser.
## Display Language
Set the default display language for Jellyseerr. Users can override this setting in their user settings.
## Discover Region, Discover Language & Streaming Region
These settings filter content shown on the "Discover" home page based on regional availability and original language, respectively. The Streaming Region filters the available streaming providers on the media page. Users can override these global settings by configuring these same options in their user settings.
## Hide Available Media
When enabled, media which is already available will not appear on the "Discover" home page, or in the "Recommended" or "Similar" categories or other links on media detail pages.
Available media will still appear in search results, however, so it is possible to locate and view hidden items by searching for them by title.
This setting is **disabled** by default.
## Allow Partial Series Requests
When enabled, users will be able to submit requests for specific seasons of TV series. If disabled, users will only be able to submit requests for all unavailable seasons.
Jellyseerr performs certain maintenance tasks as regularly-scheduled jobs, but they can also be manually triggered on this page.
Jellyseerr also caches requests to external API endpoints to optimize performance and avoid making unnecessary API calls. If necessary, the cache for any particular endpoint can be cleared by clicking the "Flush Cache" button.
You can also view the current image cache size as well as the total number of cached images.
description: Configure your Jellyfin, Emby, or Plex server settings.
sidebar_position: 3
---
# Media Server
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs groupId="media-server-type" queryString>
<TabItem value="jellyfin" label="Jellyfin">
:::info
To set up Jellyfin, make sure you log in using an account with administrative privileges.
The email address can be any email address and is only used for notifications, password resets, and local sign-in.
It is **not** tied to your Jellyfin account.
:::
### Jellyfin Libraries
In this section, simply select the libraries you would like Jellyseerr to scan. Jellyseerr will periodically check the selected libraries for available content to update the media status that is displayed to users.
If you do not see your Jellyfin library listed, verify your Jellyfin settings are correct and click the Sync Libraries button.
### Manual Library Scan
Jellyseerr will perform a full scan of your Jellyfin libraries once every 24 hours (recently added items are fetched more frequently). If this is your first time configuring Jellyfin, a one-time full manual library scan is recommended!
### Jellyfin Settings
This section is where you configure the connection to your Jellyfin server.
<Tabs groupId="versions" queryString>
<TabItem value="latest" label="Latest">
#### Internal URL
The internal URL is the URL that Jellyseerr will use to communicate with your Jellyfin server. This URL should be accessible from the machine running Jellyseerr.
In most cases, this will be the hostname or IP address of the machine running Jellyfin, followed by the port number Jellyfin is running on (usually 8096).
:::note
When running Jellyseerr in a docker container with a bridged network (default), the container's network will be separate from the host network. Therefore, you cannot use `localhost` or `127.0.0.1` as the internal URL as it will resolve to the container itself.
:::
:::tip
If you are running Jellyfin in a docker container, you can put both Jellyseerr and Jellyfin on the same docker network by using a custom [docker network](https://docs.docker.com/reference/cli/docker/network/). This will allow you to use the container name as the internal URL.
:::
#### External URL
The external URL is the URL that your users will use to access Jellyfin. This URL is used to generate links in `Play on Jellyfin` buttons, Jellyfin avatars and other places where users need to access Jellyfin directly.
In most cases, the external URL will be different from the internal URL. This is especially true if you are connecting to Jellyfin using docker container names or local IP addresses.
#### Forgot Password URL
The forgot password URL is the URL that users will be directed to when they click the "Forgot Password" button on the login page. This URL should be accessible from the machine running Jellyseerr.
By default, this field is empty and the "Forgot Password" button on the login page will redirect to the Jellyfin internal URL with the path `/web/index.html#!/forgotpassword`.
You can customize this URL to point to a custom password reset page if you have one.
</TabItem>
<TabItem value="develop" label="develop">
#### Hostname or IP Address
If you have Jellyseerr installed on the same network as Jellyfin, you can set this to the local IP address of your Jellyfin server. Otherwise, this should be set to a valid hostname (e.g., jellyfin.myawesomeserver.com).
In most cases, this will be the hostname or IP address of the machine running Jellyfin.
:::note
When running Jellyseerr in a docker container with a bridged network (default), the container's network will be separate from the host network. Therefore, you cannot use `localhost` or `127.0.0.1` as the internal URL as it will resolve to the container itself.
:::
:::tip
If you are running Jellyfin in a docker container, you can put both Jellyseerr and Jellyfin on the same docker network by using a custom [docker network](https://docs.docker.com/reference/cli/docker/network/). This will allow you to use the container name as the internal URL.
:::
#### Port
This value should be set to the port that your Jellyfin server listens on. The default port that Jellyfin uses is 8096, but you may need to set this to 443 or some other value if your Jellyfin server is hosted on a VPS or a different machine and is behind a reverse proxy.
#### Use SSL
Enable this setting to connect to Jellyfin via HTTPS rather than HTTP. Note that self-signed certificates are **not** officially supported.
#### External URL
The external URL is the URL that your users will use to access Jellyfin. This URL is used to generate links in `Play on Jellyfin` buttons, Jellyfin avatars and other places where users need to access Jellyfin directly.
In most cases, the external URL will be different from the internal URL. This is especially true if you are connecting to Jellyfin using docker container names or local IP addresses.
#### Forgot Password URL
The forgot password URL is the URL that users will be directed to when they click the "Forgot Password" button on the login page. This URL should be accessible from the machine running Jellyseerr.
By default, this field is empty and the "Forgot Password" button on the login page will redirect to the Jellyfin internal URL with the path `/web/index.html#!/forgotpassword`.
You can customize this URL to point to a custom password reset page if you have one.
</TabItem>
</Tabs>
</TabItem>
<TabItem value="emby" label="Emby">
:::info
To set up Emby, make sure you log in using an account with administrative privileges.
The email address can be any email address and is only used for notifications, password resets, and local sign-in.
It is **not** tied to your Emby account.
:::
### Emby Libraries
In this section, simply select the libraries you would like Jellyseerr to scan. Jellyseerr will periodically check the selected libraries for available content to update the media status that is displayed to users.
If you do not see your Emby library listed, verify your Emby settings are correct and click the Sync Libraries button.
### Manual Library Scan
Jellyseerr will perform a full scan of your Emby libraries once every 24 hours (recently added items are fetched more frequently). If this is your first time configuring Emby, a one-time full manual library scan is recommended!
### Emby Settings
This section is where you configure the connection to your Emby server.
<Tabs groupId="versions" queryString>
<TabItem value="latest" label="Latest">
#### Internal URL
The internal URL is the URL that Jellyseerr will use to communicate with your Emby server. This URL should be accessible from the machine running Jellyseerr.
In most cases, this will be the hostname or IP address of the machine running Emby, followed by the port number Emby is running on (usually 8096).
:::note
When running Jellyseerr in a docker container with a bridged network (default), the container's network will be separate from the host network. Therefore, you cannot use `localhost` or `127.0.0.1` as the internal URL as it will resolve to the container itself.
:::
:::tip
If you are running Emby in a docker container, you can put both Jellyseerr and Emby on the same docker network by using a custom [docker network](https://docs.docker.com/reference/cli/docker/network/). This will allow you to use the container name as the internal URL.
:::
#### External URL
The external URL is the URL that your users will use to access Emby. This URL is used to generate links in `Play on Emby` buttons, Emby avatars and other places where users need to access Emby directly.
In most cases, the external URL will be different from the internal URL. This is especially true if you are connecting to Emby using docker container names or local IP addresses.
#### Forgot Password URL
The forgot password URL is the URL that users will be directed to when they click the "Forgot Password" button on the login page. This URL should be accessible from the machine running Jellyseerr.
By default, this field is empty and the "Forgot Password" button on the login page will redirect to the Emby internal URL with the path `/web/index.html#!/forgotpassword.html`.
You can customize this URL to point to a custom password reset page if you have one.
</TabItem>
<TabItem value="develop" label="develop">
#### Hostname or IP Address
If you have Jellyseerr installed on the same network as Emby, you can set this to the local IP address of your Emby server. Otherwise, this should be set to a valid hostname (e.g., jellyfin.myawesomeserver.com).
In most cases, this will be the hostname or IP address of the machine running Emby.
:::note
When running Jellyseerr in a docker container with a bridged network (default), the container's network will be separate from the host network. Therefore, you cannot use `localhost` or `127.0.0.1` as the internal URL as it will resolve to the container itself.
:::
:::tip
If you are running Emby in a docker container, you can put both Jellyseerr and Emby on the same docker network by using a custom [docker network](https://docs.docker.com/reference/cli/docker/network/). This will allow you to use the container name as the internal URL.
:::
#### Port
This value should be set to the port that your Emby server listens on. The default port that Emby uses is 8096, but you may need to set this to 443 or some other value if your Emby server is hosted on a VPS or a different machine and is behind a reverse proxy.
#### Use SSL
Enable this setting to connect to Emby via HTTPS rather than HTTP. Note that self-signed certificates are **not** officially supported.
#### External URL
The external URL is the URL that your users will use to access Emby. This URL is used to generate links in `Play on Emby` buttons, Emby avatars and other places where users need to access Emby directly.
In most cases, the external URL will be different from the internal URL. This is especially true if you are connecting to Emby using docker container names or local IP addresses.
#### Forgot Password URL
The forgot password URL is the URL that users will be directed to when they click the "Forgot Password" button on the login page. This URL should be accessible from the machine running Jellyseerr.
By default, this field is empty and the "Forgot Password" button on the login page will redirect to the Emby internal URL with the path `/web/index.html#!/startup/forgotpassword.html`.
You can customize this URL to point to a custom password reset page if you have one.
</TabItem>
</Tabs>
</TabItem>
<TabItem value="plex" label="Plex">
### Plex Settings
:::info
To set up Plex, you can either enter your details manually or select a server retrieved from [plex.tv](https://plex.tv/). Press the button to the right of the "Server" dropdown to retrieve available servers.
Depending on your setup/configuration, you may need to enter your Plex server details manually in order to establish a connection from Jellyseerr.
:::
#### Hostname or IP Address
If you have Jellyseerr installed on the same network as Plex, you can set this to the local IP address of your Plex server. Otherwise, this should be set to a valid hostname (e.g., `plex.myawesomeserver.com`).
#### Port
This value should be set to the port that your Plex server listens on. The default port that Plex uses is `32400`, but you may need to set this to `443` or some other value if your Plex server is hosted on a VPS or cloud provider.
#### Use SSL
Enable this setting to connect to Plex via HTTPS rather than HTTP. Note that self-signed certificates are _not_ supported.
#### Web App URL (optional)
The **Play on Plex** buttons on media pages link to items on your Plex server. By default, these links use the [Plex Web App](https://support.plex.tv/articles/200288666-opening-plex-web-app/) hosted from plex.tv, but you can provide the URL to the web app on your Plex server and we'll use that instead!
Note that you will need to enter the full path to the web app (e.g., `https://plex.myawesomeserver.com/web`).
### Plex Libraries
In this section, simply select the libraries you would like Jellyseerr to scan. Jellyseerr will periodically check the selected libraries for available content to update the media status that is displayed to users.
If you do not see your Plex libraries listed, verify your Plex settings are correct and click the **Sync Libraries** button.
### Manual Library Scan
Jellyseerr will perform a full scan of your Plex libraries once every 24 hours (recently added items are fetched more frequently). If this is your first time configuring Plex, a one-time full manual library scan is recommended!
**If you keep separate copies of non-4K and 4K content in your media libraries, you will need to set up multiple Radarr/Sonarr instances and link each of them to Jellyseerr.**
Jellyseerr checks these linked servers to determine whether or not media has already been requested or is available, so two servers of each type are required _if you keep separate non-4K and 4K copies of media._
**If you only maintain one copy of media, you can instead simply set up one server and set the "Quality Profile" setting on a per-request basis.**
:::
### Radarr/Sonarr Settings
:::warning
**Only v3 & V4 Radarr/Sonarr servers are supported!** If your Radarr/Sonarr server is still running v2, you will need to upgrade in order to add it to Jellyseerr.
::::
#### Default Server
At least one server needs to be marked as "Default" in order for requests to be sent successfully to Radarr/Sonarr.
If you have separate 4K Radarr/Sonarr servers, you need to designate default 4K servers _in addition to_ default non-4K servers.
#### 4K Server
Only select this option if you have separate non-4K and 4K servers. If you only have a single Radarr/Sonarr server, do _not_ check this box!
#### Server Name
Enter a friendly name for the Radarr/Sonarr server.
#### Hostname or IP Address
If you have Jellyseerr installed on the same network as Radarr/Sonarr, you can set this to the local IP address of your Radarr/Sonarr server. Otherwise, this should be set to a valid hostname (e.g., `radarr.myawesomeserver.com`).
#### Port
This value should be set to the port that your Radarr/Sonarr server listens on. By default, Radarr uses port `7878` and Sonarr uses port `8989`, but you may need to set this to `443` or some other value if your Radarr/Sonarr server is hosted on a VPS or cloud provider.
#### Use SSL
Enable this setting to connect to Radarr/Sonarr via HTTPS rather than HTTP. Note that self-signed certificates are _not_ supported.
#### API Key
Enter your Radarr/Sonarr API key here. Do _not_ share these key publicly, as they can be used to gain administrator access to your Radarr/Sonarr servers!
You can locate the required API keys in Radarr/Sonarr in **Settings → General → Security**.
#### URL Base
If you have configured a URL base for your Radarr/Sonarr server, you _must_ enter it here in order for Jellyeerr to connect to those services!
You can verify whether or not you have a URL base configured in your Radarr/Sonarr server at **Settings → General → Host**. (Note that a restart of your Radarr/Sonarr server is required if you modify this setting!)
#### Profiles, Root Folder, Minimum Availability
Select the default settings you would like to use for all new requests. Note that all of these options are required, and that requests will fail if any of these are not configured!
#### External URL (optional)
If the hostname or IP address you configured above is not accessible outside your network, you can set a different URL here. This "external" URL is used to add clickable links to your Radarr/Sonarr servers on media detail pages.
#### Enable Scan (optional)
Enable this setting if you would like to scan your Radarr/Sonarr server for existing media/request status. It is recommended that you enable this setting, so that users cannot submit requests for media which has already been requested or is already available.
#### Enable Automatic Search (optional)
Enable this setting to have Radarr/Sonarr to automatically search for media upon approval of a request.
description: Configure global and default user settings.
sidebar_position: 2
---
# Users
## Enable Local Sign-In
When enabled, users who have configured passwords will be allowed to sign in using their email address.
When disabled, your mediaserver OAuth becomes the only sign-in option, and any "local users" you have created will not be able to sign in to Jellyseerr.
This setting is **enabled** by default.
## Enable Jellyfin/Emby/Plex Sign-In
When enabled, users will be able to sign in to Jellyseerr using their Jellyfin/Emby/Plex credentials, provided they have linked their media server accounts.
When disabled, users will only be able to sign in using their email address. Users without a password set will not be able to sign in to Jellyseerr.
This setting is **enabled** by default.
## Enable New Jellyfin/Emby/Plex Sign-In
When enabled, users with access to your media server will be able to sign in to Jellyseerr even if they have not yet been imported. Users will be automatically assigned the permissions configured in the [Default Permissions](#default-permissions) setting upon first sign-in.
This setting is **enabled** by default.
## Global Movie Request Limit & Global Series Request Limit
Select the request limits you would like granted to users.
Unless an override is configured, users are granted these global request limits.
Note that users with the **Manage Users** permission are exempt from request limits, since that permission also grants the ability to submit requests on behalf of other users.
## Default Permissions
Select the permissions you would like assigned to new users to have by default upon account creation.
If [Enable New Jellyfin/Emby/Plex Sign-In](#enable-new-jellyfinembyplex-sign-in) is enabled, any user with access to your media server will be able to sign in to Jellyseerr, and they will be granted the permissions you select here upon first sign-in.
This setting only affects new users, and has no impact on existing users. In order to modify permissions for existing users, you will need to edit the users.
description: Add users to your Jellyseerr instance.
sidebar_position: 2
---
# Adding Users
There are currently two methods to add users to Jellyseerr: importing Mediaserver users and creating "local users." All new users are created with the [default permissions](/using-jellyseerr/settings/users#default-permissions) defined in **Settings → Users**.
### Importing Mediaserver Users
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs groupId="media-server-type" queryString>
<TabItem value="jellyfin" label="Jellyfin">
Clicking the **Import Jellyfin Users** button on the **User List** page will fetch the list of users with access to the Jellyfin server and add them to Jellyseerr automatically.
Importing Jellyfin users is not required, however. Any user with access to the Jellyfin server can log in to Jellyseerr even if they have not been imported, and will be assigned the configured [default permissions](/using-jellyseerr/settings/users#default-permissions) upon their first login.
:::tip
To disable new Jellyfin sign-ins, navigate to **Settings → Users** and uncheck the [**Enable New Jellyfin Sign-In**](/using-jellyseerr/settings/users#enable-new-jellyfinembyplex-sign-in) box.
:::
</TabItem>
<TabItem value="emby" label="Emby">
Clicking the **Import Emby Users** button on the **User List** page will fetch the list of users with access to the Emby server and add them to Jellyseerr automatically.
Importing Emby users is not required, however. Any user with access to the Emby server can log in to Jellyseerr even if they have not been imported, and will be assigned the configured [default permissions](/using-jellyseerr/settings/users#default-permissions) upon their first login.
:::tip
To disable new Emby sign-ins, navigate to **Settings → Users** and uncheck the [**Enable New Emby Sign-In**](/using-jellyseerr/settings/users#enable-new-jellyfinembyplex-sign-in) box.
:::
</TabItem>
<TabItem value="plex" label="Plex">
Clicking the **Import Plex Users** button on the **User List** page will fetch the list of users with access to the Plex server from [plex.tv](https://www.plex.tv/), and add them to Jellyseerr automatically.
Importing Plex users is not required, however. Any user with access to the Plex server can log in to Jellyseerr even if they have not been imported, and will be assigned the configured [default permissions](/using-jellyseerr/settings/users#default-permissions) upon their first login.
:::tip
To disable new Plex sign-ins, navigate to **Settings → Users** and uncheck the [**Enable New Plex Sign-In**](/using-jellyseerr/settings/users#enable-new-jellyfinembyplex-sign-in) box.
:::
</TabItem>
</Tabs>
### Creating Local Users
If you would like to grant Jellyseerr access to a user who doesn't have their own Plex account and/or access to the Plex server, you can manually add them by clicking the **Create Local User** button.
#### Email Address
Enter a valid email address at which the user can receive messages pertaining to their account and other notifications. The email address currently cannot be modified after the account is created.
#### Automatically Generate Password
If an [application URL](/using-jellyseerr/settings/general#application-url) is set and [email notifications](/using-jellyseerr/notifications/email) have been configured and enabled, Jellyseerr can automatically generate a password for the new user.
#### Password
If you would prefer to manually configure a password, enter a password here that is a minimum of 8 characters.
From the **User List**, you can click the **Edit** button to modify a particular user's settings.
You can also click the check boxes and click the **Bulk Edit** button to set user permissions for multiple users at once.
## General
### Display Name
You can optionally set a "friendly name" for any user. This name will be used in lieu of their media server (Jellyfin/Emby/Plex) username (for users imported from the media server) or their email address (for manually-created local users).
### Email
:::note
This field is read-only for users imported from Plex.
:::
You can optionally set a proper email address for any user. This email address will be used for notifications, local sign-in and password resets.
By default, users imported from Jellyfin/Emby will use their media server username as their email address.
:::warning
You cannot leave this field blank.
:::
### Display Language
Users can override the [global display language](/using-jellyseerr/settings/general#display-language) to use Jellyseerr in their preferred language.
### Discover Region & Discover Language
Users can override the [global filter settings](/using-jellyseerr/settings/general#discover-region-discover-language--streaming-region) to suit their own preferences.
### Movie Request Limit & Series Request Limit
You can override the default settings and assign different request limits for specific users by checking the **Enable Override** box and selecting the desired request limit and time period.
Unless an override is configured, users are granted the global request limits.
Note that users with the **Manage Users** permission are exempt from request limits, since that permission also grants the ability to submit requests on behalf of other users.
Users are also unable to modify their own request limits.
## Password
All "local users" are assigned passwords upon creation, but users imported from Plex can also optionally configure passwords to enable sign-in using their email address.
Passwords must be a minimum of 8 characters long.
## Notifications
Users can configure their personal notification settings here. Please see [Notifications](/using-jellyseerr/notifications/) for details on configuring and enabling notifications.
## Permissions
Users cannot modify their own permissions. Users with the **Manage Users** permission can manage permissions of other users, except those of users with the **Admin** permission.
description: Your owner account is the primary account for managing Jellyseerr.
sidebar_position: 1
---
# Owner Account
The user account created during Jellyseerr setup is the "Owner" account, which cannot be deleted or modified by other users. This account's credentials are used to authenticate with your media server and configure Jellyseerr settings.
:::note
In case of Jellyfin/Emby, the owner account is also used for API access to your media server. This account should have a valid authentication token for your media server.
:::
:::tip
If your authentication token is ever invalidated or changed, you can refresh it by re-authenticating with your media server.
Overseerr currently supports the following notification agents:
- [Email](./email.md)
- [Web Push](./webpush.md)
- [Discord](./discord.md)
- [Gotify](./gotify.md)
- [LunaSea](./lunasea.md)
- [Pushbullet](./pushbullet.md)
- [Pushover](./pushover.md)
- [Slack](./slack.md)
- [Telegram](./telegram.md)
- [Webhooks](./webhooks.md)
## Setting Up Notifications
Simply configure your desired notification agents in **Settings → Notifications**.
Users can customize their personal notification preferences in their own user notification settings.
## Requesting New Notification Agents
If we do not currently support your preferred notification agent, feel free to [submit a feature request on GitHub](https://github.com/sct/overseerr/issues). However, please be sure to search first and confirm that there is not already an existing request for the agent!
Copy either a device- or user-based webhook URL from the LunaSea app into this field.
### Profile Name (optional)
If not using the `default` profile in the LunaSea app, specify the name of the profile here.
Note that the entered profile name **_must_** match the name in LunaSea exactly (including any capitalization, punctuation, and/or whitespace).
{% hint style="info" %}
Please refer to the [LunaSea documentation](https://docs.lunasea.app/lunasea/notifications/overseerr) for more details on configuring these notifications.
Users can optionally configure personal notifications in their user settings.
User notifications are separate from system notifications, and the available notification types are dependent on user permissions.
{% endhint %}
## Configuration
### Access Token
[Create an access token](https://www.pushbullet.com/#settings) and set it here to grant Overseerr access to the Pushbullet API.
### Channel Tag (optional)
Optionally, [create a channel](https://www.pushbullet.com/my-channel) to allow other users to follow the notification feed using the specified channel tag.
Users can optionally configure personal notifications in their user settings.
User notifications are separate from system notifications, and the available notification types are dependent on user permissions.
{% endhint %}
## Configuration
### Application/API Token
[Register an application](https://pushover.net/apps/build) and enter the API token in this field. (You can use one of the [official icons in our GitHub repository](https://github.com/fallenbagel/jellyseerr/tree/develop/public) when configuring the application.)
For more details on registering applications or the API token, please see the [Pushover API documentation](https://pushover.net/api#registration).
### User Key
Set this to the user key for your Pushover account. Alternatively, you can set this to a group key to deliver notifications to multiple users.
For more details, please see the [Pushover API documentation](https://pushover.net/api#identifiers).
The webhook notification agent enables you to send a custom JSON payload to any endpoint for specific notification events.
## Configuration
### Webhook URL
The URL you would like to post notifications to. Your JSON will be sent as the body of the request.
### Authorization Header (optional)
{% hint style="info" %}
This is typically not needed. Please refer to your webhook provider's documentation for details.
{% endhint %}
This value will be sent as an `Authorization` HTTP header.
### JSON Payload
Customize the JSON payload to suit your needs. Overseerr provides several [template variables](#template-variables) for use in the payload, which will be replaced with the relevant data when the notifications are triggered.
| `{{notification_type}}` | The type of notification (e.g. `MEDIA_PENDING` or `ISSUE_COMMENT`) |
| `{{event}}` | A friendly description of the notification event |
| `{{subject}}` | The notification subject (typically the media title) |
| `{{message}}` | The notification message body (the media overview/synopsis for request notifications; the issue description for issue notificatons) |
| `{{image}}` | The notification image (typically the media poster) |
### Notify User
These variables are for the target recipient of the notification.
| `{{notifyuser_username}}` | The target notification recipient's username |
| `{{notifyuser_email}}` | The target notification recipient's email address |
| `{{notifyuser_avatar}}` | The target notification recipient's avatar URL |
| `{{notifyuser_settings_discordId}}` | The target notification recipient's Discord ID (if set) |
| `{{notifyuser_settings_telegramChatId}}` | The target notification recipient's Telegram Chat ID (if set) |
{% hint style="info" %}
The `notifyuser` variables are not defined for the following request notification types, as they are intended for application administrators rather than end users:
- Request Pending Approval
- Request Automatically Approved
- Request Processing Failed
On the other hand, the `notifyuser` variables _will_ be replaced with the requesting user's information for the below notification types:
- Request Approved
- Request Declined
- Request Available
If you would like to use the requesting user's information in your webhook, please instead include the relevant variables from the [Request](#request) section below.
{% endhint %}
### Special
The following variables must be used as a key in the JSON payload (e.g., `"{{extra}}": []`).
| `{{commentedBy_username}}` | The commenting user's username |
| `{{commentedBy_email}}` | The commenting user's email address |
| `{{commentedBy_avatar}}` | The commenting user's avatar URL |
| `{{commentedBy_settings_discordId}}` | The commenting user's Discord ID (if set) |
| `{{commentedBy_settings_telegramChatId}}` | The commenting user's Telegram Chat ID (if set) |
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.