diff --git a/cypress/e2e/discover.cy.ts b/cypress/e2e/discover.cy.ts index 50dacde1..52a5e883 100644 --- a/cypress/e2e/discover.cy.ts +++ b/cypress/e2e/discover.cy.ts @@ -187,7 +187,7 @@ describe('Discover', () => { cy.wait('@getWatchlist'); - const sliderHeader = cy.contains('.slider-header', 'Your Watchlist'); + const sliderHeader = cy.contains('.slider-header', 'Watchlist'); sliderHeader.scrollIntoView(); diff --git a/src/components/Settings/SettingsJellyfin.tsx b/src/components/Settings/SettingsJellyfin.tsx index f4834582..5d56431f 100644 --- a/src/components/Settings/SettingsJellyfin.tsx +++ b/src/components/Settings/SettingsJellyfin.tsx @@ -30,8 +30,9 @@ const messages = defineMessages({ jellyfinSettingsSuccess: '{mediaServerName} settings saved successfully!', jellyfinSettings: '{mediaServerName} Settings', jellyfinSettingsDescription: - 'Optionally configure an external player endpoint for your {mediaServerName} server that is different to the internal URL used during setup', + 'Optionally configure the internal and external endpoints for your {mediaServerName} server. In most cases, the external URL is different to the internal URL.', externalUrl: 'External URL', + internalUrl: 'Internal URL', validationUrl: 'You must provide a valid URL', syncing: 'Syncing', syncJellyfin: 'Sync Libraries', @@ -86,7 +87,11 @@ const SettingsJellyfin: React.FC = ({ const JellyfinSettingsSchema = Yup.object().shape({ jellyfinExternalUrl: Yup.string().matches( - /^(?:(?:(?:https?):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/, + /^(https?:\/\/)?(?:[\w-]+\.)*[\w-]+(?::\d{2,5})?(?:\/[\w-]+)*(?:\/)?$/gm, + intl.formatMessage(messages.validationUrl) + ), + jellyfinInternalUrl: Yup.string().matches( + /^(https?:\/\/)?(?:[\w-]+\.)*[\w-]+(?::\d{2,5})?(?:\/[\w-]+)*(?:\/)?$/gm, intl.formatMessage(messages.validationUrl) ), }); @@ -346,12 +351,14 @@ const SettingsJellyfin: React.FC = ({ { try { await axios.post('/api/v1/settings/jellyfin', { + hostname: values.jellyfinInternalUrl, externalHostname: values.jellyfinExternalUrl, } as JellyfinSettings); @@ -388,6 +395,27 @@ const SettingsJellyfin: React.FC = ({ {({ errors, touched, handleSubmit, isSubmitting, isValid }) => { return (
+
+ +
+
+ +
+ {errors.jellyfinInternalUrl && + touched.jellyfinInternalUrl && ( +
+ {errors.jellyfinInternalUrl} +
+ )} +
+