import axios from 'axios'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import useSWR from 'swr'; import type { RadarrSettings, SonarrSettings, } from '../../../server/lib/settings'; import globalMessages from '../../i18n/globalMessages'; import Alert from '../Common/Alert'; import Badge from '../Common/Badge'; import Button from '../Common/Button'; import LoadingSpinner from '../Common/LoadingSpinner'; import Modal from '../Common/Modal'; import PageTitle from '../Common/PageTitle'; import Transition from '../Transition'; import RadarrModal from './RadarrModal'; import SonarrModal from './SonarrModal'; const messages = defineMessages({ services: 'Services', radarrsettings: 'Radarr Settings', radarrSettingsDescription: 'Configure your Radarr connection below. You can have multiple Radarr configurations, but only two can be active as defaults at any time (one for standard HD and one for 4K). Administrators can override the server which is used for new requests.', sonarrsettings: 'Sonarr Settings', sonarrSettingsDescription: 'Configure your Sonarr connection below. You can have multiple Sonarr configurations, but only two can be active as defaults at any time (one for standard HD and one for 4K). Administrators can override the server which is used for new requests.', deleteserverconfirm: 'Are you sure you want to delete this server?', ssl: 'SSL', default: 'Default', default4k: 'Default 4K', address: 'Address', activeProfile: 'Active Profile', addradarr: 'Add Radarr Server', addsonarr: 'Add Sonarr Server', nodefault: 'No Default Server', nodefaultdescription: 'At least one server must be marked as default before any requests will make it to your services.', }); interface ServerInstanceProps { name: string; isDefault?: boolean; isDefault4K?: boolean; hostname: string; port: number; isSSL?: boolean; externalUrl?: string; profileName: string; isSonarr?: boolean; onEdit: () => void; onDelete: () => void; } const ServerInstance: React.FC = ({ name, hostname, port, profileName, isDefault4K = false, isDefault = false, isSSL = false, isSonarr = false, externalUrl, onEdit, onDelete, }) => { const intl = useIntl(); const internalUrl = (isSSL ? 'https://' : 'http://') + hostname + ':' + String(port); const serviceUrl = externalUrl ?? internalUrl; return (
  • {name}

    {isDefault && {intl.formatMessage(messages.default)}} {isDefault4K && ( {intl.formatMessage(messages.default4k)} )} {isSSL && ( {intl.formatMessage(messages.ssl)} )}

    {intl.formatMessage(messages.address)} {internalUrl}

    {intl.formatMessage(messages.activeProfile)} {profileName}

    {isSonarr
  • ); }; const SettingsServices: React.FC = () => { const intl = useIntl(); const { data: radarrData, error: radarrError, revalidate: revalidateRadarr, } = useSWR('/api/v1/settings/radarr'); const { data: sonarrData, error: sonarrError, revalidate: revalidateSonarr, } = useSWR('/api/v1/settings/sonarr'); const [editRadarrModal, setEditRadarrModal] = useState<{ open: boolean; radarr: RadarrSettings | null; }>({ open: false, radarr: null, }); const [editSonarrModal, setEditSonarrModal] = useState<{ open: boolean; sonarr: SonarrSettings | null; }>({ open: false, sonarr: null, }); const [deleteServerModal, setDeleteServerModal] = useState<{ open: boolean; type: 'radarr' | 'sonarr'; serverId: number | null; }>({ open: false, type: 'radarr', serverId: null, }); const deleteServer = async () => { await axios.delete( `/api/v1/settings/${deleteServerModal.type}/${deleteServerModal.serverId}` ); setDeleteServerModal({ open: false, serverId: null, type: 'radarr' }); revalidateRadarr(); revalidateSonarr(); }; return ( <>

    {intl.formatMessage(messages.radarrsettings)}

    {intl.formatMessage(messages.radarrSettingsDescription)}

    {editRadarrModal.open && ( setEditRadarrModal({ open: false, radarr: null })} onSave={() => { revalidateRadarr(); setEditRadarrModal({ open: false, radarr: null }); }} /> )} {editSonarrModal.open && ( setEditSonarrModal({ open: false, sonarr: null })} onSave={() => { revalidateSonarr(); setEditSonarrModal({ open: false, sonarr: null }); }} /> )} deleteServer()} onCancel={() => setDeleteServerModal({ open: false, serverId: null, type: 'radarr', }) } title="Delete Server" > {intl.formatMessage(messages.deleteserverconfirm)}
    {!radarrData && !radarrError && } {radarrData && !radarrError && ( <> {radarrData.length > 0 && !radarrData.some( (radarr) => radarr.isDefault && !radarr.is4k ) && (

    {intl.formatMessage(messages.nodefaultdescription)}

    )}
      {radarrData.map((radarr) => ( setEditRadarrModal({ open: true, radarr })} onDelete={() => setDeleteServerModal({ open: true, serverId: radarr.id, type: 'radarr', }) } /> ))}
    )}

    {intl.formatMessage(messages.sonarrsettings)}

    {intl.formatMessage(messages.sonarrSettingsDescription)}

    {!sonarrData && !sonarrError && } {sonarrData && !sonarrError && ( <> {sonarrData.length > 0 && !sonarrData.some( (sonarr) => sonarr.isDefault && !sonarr.is4k ) && (

    {intl.formatMessage(messages.nodefaultdescription)}

    )}
      {sonarrData.map((sonarr) => ( setEditSonarrModal({ open: true, sonarr })} onDelete={() => setDeleteServerModal({ open: true, serverId: sonarr.id, type: 'sonarr', }) } /> ))}
    )}
    ); }; export default SettingsServices;