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": "
-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 @@
-
+
**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:
+
+
+
+
+
+
+
+
+
+
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 @@