diff --git a/.all-contributorsrc b/.all-contributorsrc index b5166196f..5a1ddadd5 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -899,6 +899,15 @@ "contributions": [ "code" ] + }, + { + "login": "RemiRigal", + "name": "RemiRigal", + "avatar_url": "https://avatars.githubusercontent.com/u/19256051?v=4", + "profile": "https://github.com/RemiRigal", + "contributions": [ + "code" + ] } ], "badgeTemplate": "\"All-orange.svg\"/>", diff --git a/.gitattributes b/.gitattributes index 2883a5d26..eb5d2314f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -24,3 +24,24 @@ *.woff binary *.pyc binary *.pdf binary + +# +## Theses files/directories should be excluded from git archives +# + +.husky export-ignore +.vscode export-ignore +docs export-ignore + +.git* export-ignore +*ignore export-ignore +*.md export-ignore + +.all-contributorsrc export-ignore +.editorconfig export-ignore +Dockerfile.local export-ignore +docker-compose.yml export-ignore +stylelint.config.js export-ignore + +public/os_logo_filled.png export-ignore +public/preview.jpg export-ignore diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d117c4ec..f08f361d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: name: Lint & Test Build if: github.event_name == 'pull_request' runs-on: ubuntu-20.04 - container: node:16.17-alpine + container: node:20.9-alpine steps: - name: Checkout uses: actions/checkout@v3 diff --git a/Dockerfile b/Dockerfile index 851ba4721..85b703062 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.17-alpine AS BUILD_IMAGE +FROM node:20.9-alpine AS BUILD_IMAGE WORKDIR /app @@ -7,10 +7,9 @@ ENV TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64} RUN \ case "${TARGETPLATFORM}" in \ - 'linux/arm64' | 'linux/arm/v7') \ - apk add --no-cache python3 make g++ && \ - ln -s /usr/bin/python3 /usr/bin/python \ - ;; \ + 'linux/arm64' | 'linux/arm/v7') \ + apk add --no-cache python3 make g++ \ + ;; \ esac COPY package.json yarn.lock ./ @@ -33,7 +32,7 @@ RUN touch config/DOCKER RUN echo "{\"commitTag\": \"${COMMIT_TAG}\"}" > committag.json -FROM node:16.17-alpine +FROM node:20.9-alpine WORKDIR /app diff --git a/Dockerfile.local b/Dockerfile.local index 39e0534f3..0edc660bf 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -1,4 +1,4 @@ -FROM node:16.17-alpine +FROM node:20.9-alpine COPY . /app WORKDIR /app diff --git a/README.md b/README.md index 86f20ca02..516eaca80 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Docker pulls GitHub -All Contributors +All Contributors **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! @@ -146,4 +146,146 @@ 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: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sct
sct

πŸ’» 🎨 πŸ€”
Alex Zoitos
Alex Zoitos

πŸ’»
Brandon Cohen
Brandon Cohen

πŸ’» πŸ“–
Ahreluth
Ahreluth

🌍
KovalevArtem
KovalevArtem

🌍
GiyomuWeb
GiyomuWeb

🌍
Angry Cuban
Angry Cuban

πŸ“–
jvennik
jvennik

🌍
darknessgp
darknessgp

πŸ’»
salty
salty

πŸš‡
Shutruk
Shutruk

🌍
Krystian Charubin
Krystian Charubin

🎨
Kieron Boswell
Kieron Boswell

πŸ’»
samwiseg0
samwiseg0

πŸ’¬ πŸš‡
ecelebi29
ecelebi29

πŸ’» πŸ“–
MārtiΕ†Ε‘ MoΕΎeiko
MārtiΕ†Ε‘ MoΕΎeiko

πŸ’»
mazzetta86
mazzetta86

🌍
Paul Hagedorn
Paul Hagedorn

🌍
Shagon94
Shagon94

🌍
sebstrgg
sebstrgg

🌍
Danshil Mungur
Danshil Mungur

πŸ’» πŸ“–
doob187
doob187

πŸš‡
johnpyp
johnpyp

πŸ’»
Jakob Ankarhem
Jakob Ankarhem

πŸ“– πŸ’» 🌍
Jayesh
Jayesh

πŸ’»
flying-sausages
flying-sausages

πŸ“–
hirenshah
hirenshah

πŸ“–
TheCatLady
TheCatLady

πŸ’» 🌍 πŸ“–
Chris Pritchard
Chris Pritchard

πŸ’» πŸ“–
Tamberlox
Tamberlox

🌍
David
David

πŸ’»
Douglas Parker
Douglas Parker

πŸ“–
Daniel Carter
Daniel Carter

πŸ’»
nuro
nuro

πŸ“–
α—ͺΡ”Ξ½ΞΉΞ· α—·Ο…Π½ΚŸ
α—ͺΡ”Ξ½ΞΉΞ· α—·Ο…Π½ΚŸ

πŸš‡
JonnyWong16
JonnyWong16

πŸ“–
Roxedus
Roxedus

πŸ“–
WoisWoi
WoisWoi

🌍
HubDuck
HubDuck

🌍 πŸ“–
costaht
costaht

πŸ“– 🌍
Shjosan
Shjosan

🌍
kobaubarr
kobaubarr

🌍
Ricardo GonzΓ‘lez
Ricardo GonzΓ‘lez

🌍
Torkil
Torkil

🌍
Jagandeep Brar
Jagandeep Brar

πŸ“–
dtalens
dtalens

🌍
Alex Cortelyou
Alex Cortelyou

πŸ’»
Jono Cairns
Jono Cairns

πŸ’»
DJScias
DJScias

🌍
Dabu-dot
Dabu-dot

🌍
Jabster28
Jabster28

πŸ’»
littlerooster
littlerooster

🌍
Dustin Hildebrandt
Dustin Hildebrandt

πŸ’»
Bruno Guerreiro
Bruno Guerreiro

🌍
Alexander NeuhΓ€user
Alexander NeuhΓ€user

🌍
Livio
Livio

🎨
tangentThought
tangentThought

πŸ’»
NicolΓ‘s Espinoza
NicolΓ‘s Espinoza

πŸ’»
sootylunatic
sootylunatic

🌍
JoKerIsCraZy
JoKerIsCraZy

🌍
Daddie0
Daddie0

🌍
Simone
Simone

🌍
Seohyun Joo
Seohyun Joo

🌍
Sergey
Sergey

🌍
Shaaft
Shaaft

🌍
sr093906
sr093906

🌍
Nackophilz
Nackophilz

🌍
Sean Chambers
Sean Chambers

πŸ’»
deniscerri
deniscerri

🌍
tomgacz
tomgacz

🌍
Andersborrits
Andersborrits

🌍
Maxent
Maxent

🌍
Samuel BartΓ­k
Samuel BartΓ­k

πŸ’»
Chun Yeung Wong
Chun Yeung Wong

πŸ’»
TheMeanCanEHdian
TheMeanCanEHdian

πŸ’»
Gylesie
Gylesie

πŸ’»
Fhd-pro
Fhd-pro

🌍
PovilasID
PovilasID

🌍
byakurau
byakurau

🌍
miknii
miknii

🌍
Mackenzie
Mackenzie

πŸ’»
soup
soup

πŸ“–
ceptonit
ceptonit

πŸ“–
aedelbro
aedelbro

πŸ’»
Pedro Nascimento
Pedro Nascimento

πŸ’»
Owen Voke
Owen Voke

πŸ’»
Sebastian K
Sebastian K

πŸ’»
jariz
jariz

πŸ’»
Alex
Alex

πŸ’»
Zeb Muller
Zeb Muller

πŸ’»
Shane Friedman
Shane Friedman

πŸ’»
Izaac BrΓ₯nn
Izaac BrΓ₯nn

πŸ’»
Salman Tariq
Salman Tariq

πŸ’»
Andrew Kennedy
Andrew Kennedy

πŸ’»
Fallenbagel
Fallenbagel

πŸ’»
Anton K. (ai Doge)
Anton K. (ai Doge)

πŸ’»
Marco Faggian
Marco Faggian

πŸ’»
Eric Nemchik
Eric Nemchik

πŸ’»
RemiRigal
RemiRigal

πŸ’»
+ + + + + diff --git a/cypress/config/settings.cypress.json b/cypress/config/settings.cypress.json index bb7b661b0..7a4bbef5d 100644 --- a/cypress/config/settings.cypress.json +++ b/cypress/config/settings.cypress.json @@ -3,147 +3,147 @@ "vapidPrivate": "tmnslaO8ZWN6bNbSEv_rolPeBTlNxOwCCAHrM9oZz3M", "vapidPublic": "BK_EpP8NDm9waor2zn6_S28o3ZYv4kCkJOfYpO3pt3W6jnPmxrgTLANUBNbbyaNatPnSQ12De9CeqSYQrqWzHTs", "main": { - "apiKey": "testkey", - "applicationTitle": "Overseerr", - "applicationUrl": "", - "csrfProtection": false, - "cacheImages": false, - "defaultPermissions": 32, - "defaultQuotas": { - "movie": {}, - "tv": {} - }, - "hideAvailable": false, - "localLogin": true, - "newPlexLogin": true, - "region": "", - "originalLanguage": "", - "trustProxy": false, - "partialRequestsEnabled": true, - "locale": "en" + "apiKey": "testkey", + "applicationTitle": "Overseerr", + "applicationUrl": "", + "csrfProtection": false, + "cacheImages": false, + "defaultPermissions": 32, + "defaultQuotas": { + "movie": {}, + "tv": {} + }, + "hideAvailable": false, + "localLogin": true, + "newPlexLogin": true, + "region": "", + "originalLanguage": "", + "trustProxy": false, + "partialRequestsEnabled": true, + "locale": "en" }, "plex": { - "name": "Seerr", - "ip": "192.168.1.1", - "port": 32400, - "useSsl": false, - "libraries": [ - { - "id": "1", - "name": "Movies", - "enabled": true, - "type": "movie" - } - ], - "machineId": "test" + "name": "Seerr", + "ip": "192.168.1.1", + "port": 32400, + "useSsl": false, + "libraries": [ + { + "id": "1", + "name": "Movies", + "enabled": true, + "type": "movie" + } + ], + "machineId": "test" }, "tautulli": {}, "radarr": [], "sonarr": [], "public": { - "initialized": true + "initialized": true }, "notifications": { - "agents": { - "email": { - "enabled": false, - "options": { - "emailFrom": "", - "smtpHost": "", - "smtpPort": 587, - "secure": false, - "ignoreTls": false, - "requireTls": false, - "allowSelfSigned": false, - "senderName": "Overseerr" - } - }, - "discord": { - "enabled": false, - "types": 0, - "options": { - "webhookUrl": "", - "enableMentions": true - } - }, - "lunasea": { - "enabled": false, - "types": 0, - "options": { - "webhookUrl": "" - } - }, - "slack": { - "enabled": false, - "types": 0, - "options": { - "webhookUrl": "" - } - }, - "telegram": { - "enabled": false, - "types": 0, - "options": { - "botAPI": "", - "chatId": "", - "sendSilently": false - } - }, - "pushbullet": { - "enabled": false, - "types": 0, - "options": { - "accessToken": "" - } - }, - "pushover": { - "enabled": false, - "types": 0, - "options": { - "accessToken": "", - "userToken": "" - } - }, - "webhook": { - "enabled": false, - "types": 0, - "options": { - "webhookUrl": "", - "jsonPayload": "IntcbiAgICBcIm5vdGlmaWNhdGlvbl90eXBlXCI6IFwie3tub3RpZmljYXRpb25fdHlwZX19XCIsXG4gICAgXCJldmVudFwiOiBcInt7ZXZlbnR9fVwiLFxuICAgIFwic3ViamVjdFwiOiBcInt7c3ViamVjdH19XCIsXG4gICAgXCJtZXNzYWdlXCI6IFwie3ttZXNzYWdlfX1cIixcbiAgICBcImltYWdlXCI6IFwie3tpbWFnZX19XCIsXG4gICAgXCJ7e21lZGlhfX1cIjoge1xuICAgICAgICBcIm1lZGlhX3R5cGVcIjogXCJ7e21lZGlhX3R5cGV9fVwiLFxuICAgICAgICBcInRtZGJJZFwiOiBcInt7bWVkaWFfdG1kYmlkfX1cIixcbiAgICAgICAgXCJ0dmRiSWRcIjogXCJ7e21lZGlhX3R2ZGJpZH19XCIsXG4gICAgICAgIFwic3RhdHVzXCI6IFwie3ttZWRpYV9zdGF0dXN9fVwiLFxuICAgICAgICBcInN0YXR1czRrXCI6IFwie3ttZWRpYV9zdGF0dXM0a319XCJcbiAgICB9LFxuICAgIFwie3tyZXF1ZXN0fX1cIjoge1xuICAgICAgICBcInJlcXVlc3RfaWRcIjogXCJ7e3JlcXVlc3RfaWR9fVwiLFxuICAgICAgICBcInJlcXVlc3RlZEJ5X2VtYWlsXCI6IFwie3tyZXF1ZXN0ZWRCeV9lbWFpbH19XCIsXG4gICAgICAgIFwicmVxdWVzdGVkQnlfdXNlcm5hbWVcIjogXCJ7e3JlcXVlc3RlZEJ5X3VzZXJuYW1lfX1cIixcbiAgICAgICAgXCJyZXF1ZXN0ZWRCeV9hdmF0YXJcIjogXCJ7e3JlcXVlc3RlZEJ5X2F2YXRhcn19XCJcbiAgICB9LFxuICAgIFwie3tpc3N1ZX19XCI6IHtcbiAgICAgICAgXCJpc3N1ZV9pZFwiOiBcInt7aXNzdWVfaWR9fVwiLFxuICAgICAgICBcImlzc3VlX3R5cGVcIjogXCJ7e2lzc3VlX3R5cGV9fVwiLFxuICAgICAgICBcImlzc3VlX3N0YXR1c1wiOiBcInt7aXNzdWVfc3RhdHVzfX1cIixcbiAgICAgICAgXCJyZXBvcnRlZEJ5X2VtYWlsXCI6IFwie3tyZXBvcnRlZEJ5X2VtYWlsfX1cIixcbiAgICAgICAgXCJyZXBvcnRlZEJ5X3VzZXJuYW1lXCI6IFwie3tyZXBvcnRlZEJ5X3VzZXJuYW1lfX1cIixcbiAgICAgICAgXCJyZXBvcnRlZEJ5X2F2YXRhclwiOiBcInt7cmVwb3J0ZWRCeV9hdmF0YXJ9fVwiXG4gICAgfSxcbiAgICBcInt7Y29tbWVudH19XCI6IHtcbiAgICAgICAgXCJjb21tZW50X21lc3NhZ2VcIjogXCJ7e2NvbW1lbnRfbWVzc2FnZX19XCIsXG4gICAgICAgIFwiY29tbWVudGVkQnlfZW1haWxcIjogXCJ7e2NvbW1lbnRlZEJ5X2VtYWlsfX1cIixcbiAgICAgICAgXCJjb21tZW50ZWRCeV91c2VybmFtZVwiOiBcInt7Y29tbWVudGVkQnlfdXNlcm5hbWV9fVwiLFxuICAgICAgICBcImNvbW1lbnRlZEJ5X2F2YXRhclwiOiBcInt7Y29tbWVudGVkQnlfYXZhdGFyfX1cIlxuICAgIH0sXG4gICAgXCJ7e2V4dHJhfX1cIjogW11cbn0i" - } - }, - "webpush": { - "enabled": false, - "options": {} - }, - "gotify": { - "enabled": false, - "types": 0, - "options": { - "url": "", - "token": "" - } + "agents": { + "email": { + "enabled": false, + "options": { + "emailFrom": "", + "smtpHost": "", + "smtpPort": 587, + "secure": false, + "ignoreTls": false, + "requireTls": false, + "allowSelfSigned": false, + "senderName": "Overseerr" + } + }, + "discord": { + "enabled": false, + "types": 0, + "options": { + "webhookUrl": "", + "enableMentions": true + } + }, + "lunasea": { + "enabled": false, + "types": 0, + "options": { + "webhookUrl": "" + } + }, + "slack": { + "enabled": false, + "types": 0, + "options": { + "webhookUrl": "" + } + }, + "telegram": { + "enabled": false, + "types": 0, + "options": { + "botAPI": "", + "chatId": "", + "sendSilently": false + } + }, + "pushbullet": { + "enabled": false, + "types": 0, + "options": { + "accessToken": "" + } + }, + "pushover": { + "enabled": false, + "types": 0, + "options": { + "accessToken": "", + "userToken": "" + } + }, + "webhook": { + "enabled": false, + "types": 0, + "options": { + "webhookUrl": "", + "jsonPayload": "IntcbiAgICBcIm5vdGlmaWNhdGlvbl90eXBlXCI6IFwie3tub3RpZmljYXRpb25fdHlwZX19XCIsXG4gICAgXCJldmVudFwiOiBcInt7ZXZlbnR9fVwiLFxuICAgIFwic3ViamVjdFwiOiBcInt7c3ViamVjdH19XCIsXG4gICAgXCJtZXNzYWdlXCI6IFwie3ttZXNzYWdlfX1cIixcbiAgICBcImltYWdlXCI6IFwie3tpbWFnZX19XCIsXG4gICAgXCJ7e21lZGlhfX1cIjoge1xuICAgICAgICBcIm1lZGlhX3R5cGVcIjogXCJ7e21lZGlhX3R5cGV9fVwiLFxuICAgICAgICBcInRtZGJJZFwiOiBcInt7bWVkaWFfdG1kYmlkfX1cIixcbiAgICAgICAgXCJ0dmRiSWRcIjogXCJ7e21lZGlhX3R2ZGJpZH19XCIsXG4gICAgICAgIFwic3RhdHVzXCI6IFwie3ttZWRpYV9zdGF0dXN9fVwiLFxuICAgICAgICBcInN0YXR1czRrXCI6IFwie3ttZWRpYV9zdGF0dXM0a319XCJcbiAgICB9LFxuICAgIFwie3tyZXF1ZXN0fX1cIjoge1xuICAgICAgICBcInJlcXVlc3RfaWRcIjogXCJ7e3JlcXVlc3RfaWR9fVwiLFxuICAgICAgICBcInJlcXVlc3RlZEJ5X2VtYWlsXCI6IFwie3tyZXF1ZXN0ZWRCeV9lbWFpbH19XCIsXG4gICAgICAgIFwicmVxdWVzdGVkQnlfdXNlcm5hbWVcIjogXCJ7e3JlcXVlc3RlZEJ5X3VzZXJuYW1lfX1cIixcbiAgICAgICAgXCJyZXF1ZXN0ZWRCeV9hdmF0YXJcIjogXCJ7e3JlcXVlc3RlZEJ5X2F2YXRhcn19XCJcbiAgICB9LFxuICAgIFwie3tpc3N1ZX19XCI6IHtcbiAgICAgICAgXCJpc3N1ZV9pZFwiOiBcInt7aXNzdWVfaWR9fVwiLFxuICAgICAgICBcImlzc3VlX3R5cGVcIjogXCJ7e2lzc3VlX3R5cGV9fVwiLFxuICAgICAgICBcImlzc3VlX3N0YXR1c1wiOiBcInt7aXNzdWVfc3RhdHVzfX1cIixcbiAgICAgICAgXCJyZXBvcnRlZEJ5X2VtYWlsXCI6IFwie3tyZXBvcnRlZEJ5X2VtYWlsfX1cIixcbiAgICAgICAgXCJyZXBvcnRlZEJ5X3VzZXJuYW1lXCI6IFwie3tyZXBvcnRlZEJ5X3VzZXJuYW1lfX1cIixcbiAgICAgICAgXCJyZXBvcnRlZEJ5X2F2YXRhclwiOiBcInt7cmVwb3J0ZWRCeV9hdmF0YXJ9fVwiXG4gICAgfSxcbiAgICBcInt7Y29tbWVudH19XCI6IHtcbiAgICAgICAgXCJjb21tZW50X21lc3NhZ2VcIjogXCJ7e2NvbW1lbnRfbWVzc2FnZX19XCIsXG4gICAgICAgIFwiY29tbWVudGVkQnlfZW1haWxcIjogXCJ7e2NvbW1lbnRlZEJ5X2VtYWlsfX1cIixcbiAgICAgICAgXCJjb21tZW50ZWRCeV91c2VybmFtZVwiOiBcInt7Y29tbWVudGVkQnlfdXNlcm5hbWV9fVwiLFxuICAgICAgICBcImNvbW1lbnRlZEJ5X2F2YXRhclwiOiBcInt7Y29tbWVudGVkQnlfYXZhdGFyfX1cIlxuICAgIH0sXG4gICAgXCJ7e2V4dHJhfX1cIjogW11cbn0i" + } + }, + "webpush": { + "enabled": false, + "options": {} + }, + "gotify": { + "enabled": false, + "types": 0, + "options": { + "url": "", + "token": "" + } + } } - } }, "jobs": { - "plex-recently-added-scan": { - "schedule": "0 */5 * * * *" - }, - "plex-full-scan": { - "schedule": "0 0 3 * * *" - }, - "radarr-scan": { - "schedule": "0 0 4 * * *" - }, - "sonarr-scan": { - "schedule": "0 30 4 * * *" - }, - "download-sync": { - "schedule": "0 * * * * *" - }, - "download-sync-reset": { - "schedule": "0 0 1 * * *" - } + "plex-recently-added-scan": { + "schedule": "0 */5 * * * *" + }, + "plex-full-scan": { + "schedule": "0 0 3 * * *" + }, + "radarr-scan": { + "schedule": "0 0 4 * * *" + }, + "sonarr-scan": { + "schedule": "0 30 4 * * *" + }, + "download-sync": { + "schedule": "0 * * * * *" + }, + "download-sync-reset": { + "schedule": "0 0 1 * * *" + } } - } +} diff --git a/overseerr-api.yml b/overseerr-api.yml index b712d7c80..e070361be 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -1351,6 +1351,8 @@ components: type: string userToken: type: string + sound: + type: string GotifySettings: type: object properties: @@ -1786,6 +1788,9 @@ components: pushoverUserKey: type: string nullable: true + pushoverSound: + type: string + nullable: true telegramEnabled: type: boolean telegramBotUsername: @@ -3083,6 +3088,33 @@ paths: responses: '204': description: Test notification attempted + /settings/notifications/pushover/sounds: + get: + summary: Get Pushover sounds + description: Returns valid Pushover sound options in a JSON array. + tags: + - settings + parameters: + - in: query + name: token + required: true + schema: + type: string + nullable: false + responses: + '200': + description: Returned Pushover settings + content: + application/json: + schema: + type: array + items: + type: object + properties: + name: + type: string + description: + type: string /settings/notifications/gotify: get: summary: Get Gotify notification settings diff --git a/public/offline.html b/public/offline.html index 732782ee1..da4ba235a 100644 --- a/public/offline.html +++ b/public/offline.html @@ -17,7 +17,7 @@ } h1 { - color: #6366F1; + color: #6366f1; } p { @@ -37,7 +37,7 @@