import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import Badge from '../Common/Badge'; import Button from '../Common/Button'; import useSWR from 'swr'; import type { RadarrSettings, SonarrSettings, } from '../../../server/lib/settings'; import LoadingSpinner from '../Common/LoadingSpinner'; import RadarrModal from './RadarrModal'; import Modal from '../Common/Modal'; import Transition from '../Transition'; import axios from 'axios'; import SonarrModal from './SonarrModal'; import Alert from '../Common/Alert'; import PageTitle from '../Common/PageTitle'; import globalMessages from '../../i18n/globalMessages'; 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?', edit: 'Edit', delete: 'Delete', 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;