diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ab5f59dae..1835e949f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,7 +97,7 @@ When adding new UI text, please try to adhere to the following guidelines: ## Translation -We use [Weblate](https://jellyseerr.borgcube.de/projects/jellyseerr/jellyseerr-frontend/) 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). Translation status diff --git a/cypress/config/settings.cypress.json b/cypress/config/settings.cypress.json index e49d8888b..f376d8804 100644 --- a/cypress/config/settings.cypress.json +++ b/cypress/config/settings.cypress.json @@ -4,7 +4,7 @@ "vapidPublic": "BK_EpP8NDm9waor2zn6_S28o3ZYv4kCkJOfYpO3pt3W6jnPmxrgTLANUBNbbyaNatPnSQ12De9CeqSYQrqWzHTs", "main": { "apiKey": "testkey", - "applicationTitle": "Overseerr", + "applicationTitle": "Jellyseerr", "applicationUrl": "", "csrfProtection": false, "cacheImages": false, @@ -71,7 +71,7 @@ "ignoreTls": false, "requireTls": false, "allowSelfSigned": false, - "senderName": "Overseerr" + "senderName": "Jellyseerr" } }, "discord": { diff --git a/overseerr-api.yml b/jellyseerr-api.yml similarity index 99% rename from overseerr-api.yml rename to jellyseerr-api.yml index a713a5a19..ddd942027 100644 --- a/overseerr-api.yml +++ b/jellyseerr-api.yml @@ -1,19 +1,19 @@ openapi: '3.0.2' info: - title: 'Overseerr API' + title: 'Jellyseerr API' version: '1.0.0' description: | - This is the documentation for the Overseerr API backend. + This is the documentation for the Jellyseerr API backend. Two primary authentication methods are supported: - **Cookie Authentication**: A valid sign-in to the `/auth/plex` or `/auth/local` will generate a valid authentication cookie. - - **API Key Authentication**: Sign-in is also possible by passing an `X-Api-Key` header along with a valid API Key generated by Overseerr. + - **API Key Authentication**: Sign-in is also possible by passing an `X-Api-Key` header along with a valid API Key generated by Jellyseerr. tags: - name: public description: Public API endpoints requiring no authentication. - name: settings - description: Endpoints related to Overseerr's settings and configuration. + description: Endpoints related to Jellyseerr's settings and configuration. - name: auth description: Endpoints related to logging in or out, and the currently authenticated user. - name: users @@ -160,7 +160,7 @@ components: example: en applicationTitle: type: string - example: Overseerr + example: Jellyseerr applicationUrl: type: string example: https://os.example.com @@ -1438,7 +1438,7 @@ components: example: no-reply@example.com senderName: type: string - example: Overseerr + example: Jellyseerr smtpHost: type: string example: 127.0.0.1 @@ -1969,8 +1969,8 @@ components: paths: /status: get: - summary: Get Overseerr status - description: Returns the current Overseerr status in a JSON object. + summary: Get Jellyseerr status + description: Returns the current Jellyseerr status in a JSON object. security: [] tags: - public diff --git a/package.json b/package.json index 745120205..ce508dd31 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "preinstall": "npx only-allow pnpm", "postinstall": "node postinstall-win.js", - "dev": "nodemon -e ts --watch server --watch overseerr-api.yml -e .json,.ts,.yml -x ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/index.ts", + "dev": "nodemon -e ts --watch server --watch jellyseerr-api.yml -e .json,.ts,.yml -x ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/index.ts", "build:server": "tsc --project server/tsconfig.json && copyfiles -u 2 server/templates/**/*.{html,pug} dist/templates && tsc-alias -p server/tsconfig.json", "build:next": "next build", "build": "pnpm build:next && pnpm build:server", diff --git a/public/images/overseerr_poster_not_found.png b/public/images/jellyseerr_poster_not_found.png similarity index 100% rename from public/images/overseerr_poster_not_found.png rename to public/images/jellyseerr_poster_not_found.png diff --git a/public/images/overseerr_poster_not_found_logo_center.png b/public/images/jellyseerr_poster_not_found_logo_center.png similarity index 100% rename from public/images/overseerr_poster_not_found_logo_center.png rename to public/images/jellyseerr_poster_not_found_logo_center.png diff --git a/public/images/overseerr_poster_not_found_logo_top.png b/public/images/jellyseerr_poster_not_found_logo_top.png similarity index 100% rename from public/images/overseerr_poster_not_found_logo_top.png rename to public/images/jellyseerr_poster_not_found_logo_top.png diff --git a/server/api/github.ts b/server/api/github.ts index c2c3fe6a5..500272188 100644 --- a/server/api/github.ts +++ b/server/api/github.ts @@ -72,7 +72,7 @@ class GithubAPI extends ExternalAPI { ); } - public async getOverseerrReleases({ + public async getJellyseerrReleases({ take = 20, }: { take?: number; @@ -88,14 +88,14 @@ class GithubAPI extends ExternalAPI { return data; } catch (e) { logger.warn( - "Failed to retrieve GitHub releases. This may be an issue on GitHub's end. Overseerr can't check if it's on the latest version.", + "Failed to retrieve GitHub releases. This may be an issue on GitHub's end. Jellyseerr can't check if it's on the latest version.", { label: 'GitHub API', errorMessage: e.message } ); return []; } } - public async getOverseerrCommits({ + public async getJellyseerrCommits({ take = 20, branch = 'develop', }: { @@ -114,7 +114,7 @@ class GithubAPI extends ExternalAPI { return data; } catch (e) { logger.warn( - "Failed to retrieve GitHub commits. This may be an issue on GitHub's end. Overseerr can't check if it's on the latest version.", + "Failed to retrieve GitHub commits. This may be an issue on GitHub's end. Jellyseerr can't check if it's on the latest version.", { label: 'GitHub API', errorMessage: e.message } ); return []; diff --git a/server/api/plexapi.ts b/server/api/plexapi.ts index 977d367b1..5007fe05e 100644 --- a/server/api/plexapi.ts +++ b/server/api/plexapi.ts @@ -124,9 +124,9 @@ class PlexAPI { // }, options: { identifier: settings.clientId, - product: 'Overseerr', - deviceName: 'Overseerr', - platform: 'Overseerr', + product: 'Jellyseerr', + deviceName: 'Jellyseerr', + platform: 'Jellyseerr', }, }); } diff --git a/server/index.ts b/server/index.ts index e4e872ab6..88baedb86 100644 --- a/server/index.ts +++ b/server/index.ts @@ -41,9 +41,9 @@ import path from 'path'; import swaggerUi from 'swagger-ui-express'; import YAML from 'yamljs'; -const API_SPEC_PATH = path.join(__dirname, '../overseerr-api.yml'); +const API_SPEC_PATH = path.join(__dirname, '../jellyseerr-api.yml'); -logger.info(`Starting Overseerr version ${getAppVersion()}`); +logger.info(`Starting Jellyseerr version ${getAppVersion()}`); const dev = process.env.NODE_ENV !== 'production'; const app = next({ dev }); const handle = app.getRequestHandler(); diff --git a/server/lib/notifications/agents/slack.ts b/server/lib/notifications/agents/slack.ts index 7a3b9790d..1d6485cc5 100644 --- a/server/lib/notifications/agents/slack.ts +++ b/server/lib/notifications/agents/slack.ts @@ -188,7 +188,7 @@ class SlackAgent type: 'actions', elements: [ { - action_id: 'open-in-overseerr', + action_id: 'open-in-jellyseerr', type: 'button', url, text: { diff --git a/server/lib/watchlistsync.ts b/server/lib/watchlistsync.ts index 4919bf70c..ed4887677 100644 --- a/server/lib/watchlistsync.ts +++ b/server/lib/watchlistsync.ts @@ -130,7 +130,7 @@ class WatchlistSync { switch (e.constructor) { // During watchlist sync, these errors aren't necessarily - // a problem with Overseerr. Since we are auto syncing these constantly, it's + // a problem with Jellyseerr. Since we are auto syncing these constantly, it's // possible they are unexpectedly at their quota limit, for example. So we'll // instead log these as debug messages. case RequestPermissionError: diff --git a/server/logger.ts b/server/logger.ts index d5809a0ed..4708dd20d 100644 --- a/server/logger.ts +++ b/server/logger.ts @@ -43,14 +43,14 @@ const logger = winston.createLogger({ }), new winston.transports.DailyRotateFile({ filename: process.env.CONFIG_DIRECTORY - ? `${process.env.CONFIG_DIRECTORY}/logs/overseerr-%DATE%.log` - : path.join(__dirname, '../config/logs/overseerr-%DATE%.log'), + ? `${process.env.CONFIG_DIRECTORY}/logs/jellyseerr-%DATE%.log` + : path.join(__dirname, '../config/logs/jellyseerr-%DATE%.log'), datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m', maxFiles: '7d', createSymlink: true, - symlinkName: 'overseerr.log', + symlinkName: 'jellyseerr.log', }), new winston.transports.DailyRotateFile({ filename: process.env.CONFIG_DIRECTORY diff --git a/server/routes/auth.ts b/server/routes/auth.ts index 31c846adc..4e470831a 100644 --- a/server/routes/auth.ts +++ b/server/routes/auth.ts @@ -158,7 +158,7 @@ authRoutes.post('/plex', async (req, res, next) => { }); } else { logger.info( - 'Sign-in attempt from Plex user with access to the media server; creating new Overseerr user', + 'Sign-in attempt from Plex user with access to the media server; creating new Jellyseerr user', { label: 'API', ip: req.ip, @@ -274,7 +274,7 @@ authRoutes.post('/jellyfin', async (req, res, next) => { if (user) { deviceId = user.jellyfinDeviceId ?? ''; } else { - deviceId = Buffer.from(`BOT_overseerr_${body.username ?? ''}`).toString( + deviceId = Buffer.from(`BOT_jellyseerr_${body.username ?? ''}`).toString( 'base64' ); } @@ -446,7 +446,7 @@ authRoutes.post('/jellyfin', async (req, res, next) => { }); } else if (!user) { logger.info( - 'Sign-in attempt from Jellyfin user with access to the media server; creating new Overseerr user', + 'Sign-in attempt from Jellyfin user with access to the media server; creating new Jellyseerr user', { label: 'API', ip: req.ip, @@ -584,7 +584,7 @@ authRoutes.post('/local', async (req, res, next) => { .getOne(); if (!user || !(await user.passwordMatch(body.password))) { - logger.warn('Failed sign-in attempt using invalid Overseerr password', { + logger.warn('Failed sign-in attempt using invalid Jellyseerr password', { label: 'API', ip: req.ip, email: body.email, @@ -674,7 +674,7 @@ authRoutes.post('/local', async (req, res, next) => { return res.status(200).json(user?.filter() ?? {}); } catch (e) { logger.error( - 'Something went wrong authenticating with Overseerr password', + 'Something went wrong authenticating with Jellyseerr password', { label: 'API', errorMessage: e.message, diff --git a/server/routes/index.ts b/server/routes/index.ts index f064e6031..7d0ad5d8e 100644 --- a/server/routes/index.ts +++ b/server/routes/index.ts @@ -55,7 +55,7 @@ router.get('/status', async (req, res) => { let commitsBehind = 0; if (currentVersion.startsWith('develop-') && commitTag !== 'local') { - const commits = await githubApi.getOverseerrCommits(); + const commits = await githubApi.getJellyseerrCommits(); if (commits.length) { const filteredCommits = commits.filter( @@ -74,7 +74,7 @@ router.get('/status', async (req, res) => { } } } else if (commitTag !== 'local') { - const releases = await githubApi.getOverseerrReleases(); + const releases = await githubApi.getJellyseerrReleases(); if (releases.length) { const latestVersion = releases[0]; @@ -403,7 +403,7 @@ router.get('/watchproviders/tv', async (req, res, next) => { router.get('/', (_req, res) => { return res.status(200).json({ - api: 'Overseerr API', + api: 'Jellyseerr API', version: '1.0', }); }); diff --git a/server/routes/user/usersettings.ts b/server/routes/user/usersettings.ts index ac89b048f..ab6bd7370 100644 --- a/server/routes/user/usersettings.ts +++ b/server/routes/user/usersettings.ts @@ -419,7 +419,7 @@ userSettingsRoutes.post<{ username: string; password: string }>( const hostname = getHostname(); const deviceId = Buffer.from( - `BOT_overseerr_${req.user.username ?? ''}` + `BOT_jellyseerr_${req.user.username ?? ''}` ).toString('base64'); const jellyfinserver = new JellyfinAPI(hostname, undefined, deviceId); diff --git a/src/components/Blacklist/index.tsx b/src/components/Blacklist/index.tsx index a752e95f8..a8b8dae7f 100644 --- a/src/components/Blacklist/index.tsx +++ b/src/components/Blacklist/index.tsx @@ -298,7 +298,7 @@ const BlacklistedItem = ({ item, revalidateList }: BlacklistedItemProps) => { src={ title?.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${title.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index d9c9a813c..c56781e8e 100644 --- a/src/components/CollectionDetails/index.tsx +++ b/src/components/CollectionDetails/index.tsx @@ -233,7 +233,7 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { src={ data.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${data.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/IssueDetails/index.tsx b/src/components/IssueDetails/index.tsx index 5ceb5796c..d41a6684f 100644 --- a/src/components/IssueDetails/index.tsx +++ b/src/components/IssueDetails/index.tsx @@ -240,7 +240,7 @@ const IssueDetails = () => { src={ data.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${data.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/IssueList/IssueItem/index.tsx b/src/components/IssueList/IssueItem/index.tsx index 7fd58b5e6..53c618fea 100644 --- a/src/components/IssueList/IssueItem/index.tsx +++ b/src/components/IssueList/IssueItem/index.tsx @@ -142,7 +142,7 @@ const IssueItem = ({ issue }: IssueItemProps) => { src={ title.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${title.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx index 72a598f0f..3fb88ab34 100644 --- a/src/components/MovieDetails/index.tsx +++ b/src/components/MovieDetails/index.tsx @@ -505,7 +505,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { src={ data.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${data.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/PWAHeader/index.tsx b/src/components/PWAHeader/index.tsx index 0dde7e421..777b63e0c 100644 --- a/src/components/PWAHeader/index.tsx +++ b/src/components/PWAHeader/index.tsx @@ -2,7 +2,7 @@ interface PWAHeaderProps { applicationTitle?: string; } -const PWAHeader = ({ applicationTitle = 'Overseerr' }: PWAHeaderProps) => { +const PWAHeader = ({ applicationTitle = 'Jellyseerr' }: PWAHeaderProps) => { return ( <> { src={ title.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${title.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/RequestList/RequestItem/index.tsx b/src/components/RequestList/RequestItem/index.tsx index 018fa9154..3d64941ed 100644 --- a/src/components/RequestList/RequestItem/index.tsx +++ b/src/components/RequestList/RequestItem/index.tsx @@ -453,7 +453,7 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => { src={ title.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${title.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/RequestModal/CollectionRequestModal.tsx b/src/components/RequestModal/CollectionRequestModal.tsx index 28aae73a2..4dd795241 100644 --- a/src/components/RequestModal/CollectionRequestModal.tsx +++ b/src/components/RequestModal/CollectionRequestModal.tsx @@ -441,7 +441,7 @@ const CollectionRequestModal = ({ src={ part.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${part.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/components/RequestModal/SearchByNameModal/index.tsx b/src/components/RequestModal/SearchByNameModal/index.tsx index 1b86b614a..1aa55f3f7 100644 --- a/src/components/RequestModal/SearchByNameModal/index.tsx +++ b/src/components/RequestModal/SearchByNameModal/index.tsx @@ -92,7 +92,7 @@ const SearchByNameModal = ({ {item.title}stdout, or in {appDataPath}/logs/overseerr.log.', + 'You can also view these logs directly via stdout, or in {appDataPath}/logs/jellyseerr.log.', time: 'Timestamp', level: 'Severity', label: 'Label', diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index 6312994e8..8b6d68745 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -352,7 +352,7 @@ const TitleCard = ({ src={ image ? `https://image.tmdb.org/t/p/w300_and_h450_face${image}` - : `/images/overseerr_poster_not_found_logo_top.png` + : `/images/jellyseerr_poster_not_found_logo_top.png` } style={{ width: '100%', height: '100%', objectFit: 'cover' }} fill diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx index 77349b5e1..b4f0389fb 100644 --- a/src/components/TvDetails/index.tsx +++ b/src/components/TvDetails/index.tsx @@ -547,7 +547,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => { src={ data.posterPath ? `https://image.tmdb.org/t/p/w600_and_h900_bestv2${data.posterPath}` - : '/images/overseerr_poster_not_found.png' + : '/images/jellyseerr_poster_not_found.png' } alt="" sizes="100vw" diff --git a/src/context/SettingsContext.tsx b/src/context/SettingsContext.tsx index ee94e092e..a1b69ae22 100644 --- a/src/context/SettingsContext.tsx +++ b/src/context/SettingsContext.tsx @@ -10,7 +10,7 @@ export interface SettingsContextProps { const defaultSettings = { initialized: false, - applicationTitle: 'Overseerr', + applicationTitle: 'Jellyseerr', applicationUrl: '', hideAvailable: false, localLogin: true, diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index bd2ce8647..73dfc7b8c 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -904,7 +904,7 @@ "components.Settings.SettingsLogs.level": "Severity", "components.Settings.SettingsLogs.logDetails": "Log Details", "components.Settings.SettingsLogs.logs": "Logs", - "components.Settings.SettingsLogs.logsDescription": "You can also view these logs directly via stdout, or in {appDataPath}/logs/overseerr.log.", + "components.Settings.SettingsLogs.logsDescription": "You can also view these logs directly via stdout, or in {appDataPath}/logs/jellyseerr.log.", "components.Settings.SettingsLogs.message": "Message", "components.Settings.SettingsLogs.pauseLogs": "Pause", "components.Settings.SettingsLogs.resumeLogs": "Resume", diff --git a/src/utils/plex.ts b/src/utils/plex.ts index 448da94a8..5c0d1906e 100644 --- a/src/utils/plex.ts +++ b/src/utils/plex.ts @@ -57,14 +57,14 @@ class PlexOAuth { const browser = Bowser.getParser(window.navigator.userAgent); this.plexHeaders = { Accept: 'application/json', - 'X-Plex-Product': 'Overseerr', + 'X-Plex-Product': 'Jellyseerr', 'X-Plex-Version': 'Plex OAuth', 'X-Plex-Client-Identifier': clientId, 'X-Plex-Model': 'Plex OAuth', 'X-Plex-Platform': browser.getBrowserName(), 'X-Plex-Platform-Version': browser.getBrowserVersion(), 'X-Plex-Device': browser.getOSName(), - 'X-Plex-Device-Name': `${browser.getBrowserName()} (Overseerr)`, + 'X-Plex-Device-Name': `${browser.getBrowserName()} (Jellyseerr)`, 'X-Plex-Device-Screen-Resolution': window.screen.width + 'x' + window.screen.height, 'X-Plex-Language': 'en',