diff --git a/src/apps/dashboard/features/livetv/components/TunerDeviceCard.tsx b/src/apps/dashboard/features/livetv/components/TunerDeviceCard.tsx index 547ff6b3c..a8486d8e0 100644 --- a/src/apps/dashboard/features/livetv/components/TunerDeviceCard.tsx +++ b/src/apps/dashboard/features/livetv/components/TunerDeviceCard.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useRef, useState } from 'react'; import type { TunerHostInfo } from '@jellyfin/sdk/lib/generated-client/models/tuner-host-info'; import BaseCard from 'apps/dashboard/components/BaseCard'; import DvrIcon from '@mui/icons-material/Dvr'; -import getProviderName from '../utils/getProviderName'; +import getProviderName from '../utils/getTunerName'; import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import ListItemIcon from '@mui/material/ListItemIcon'; diff --git a/src/apps/dashboard/features/livetv/utils/getProviderConfigurationUrl.ts b/src/apps/dashboard/features/livetv/utils/getProviderConfigurationUrl.ts new file mode 100644 index 000000000..499180146 --- /dev/null +++ b/src/apps/dashboard/features/livetv/utils/getProviderConfigurationUrl.ts @@ -0,0 +1,10 @@ +const getProviderConfigurationUrl = (providerId: string) => { + switch (providerId?.toLowerCase()) { + case 'xmltv': + return '/dashboard/livetv/guide?type=xmltv'; + case 'schedulesdirect': + return '/dashboard/livetv/guide?type=schedulesdirect'; + } +}; + +export default getProviderConfigurationUrl; diff --git a/src/apps/dashboard/features/livetv/utils/getProviderName.ts b/src/apps/dashboard/features/livetv/utils/getProviderName.ts index ea43ce870..d3ce3bc18 100644 --- a/src/apps/dashboard/features/livetv/utils/getProviderName.ts +++ b/src/apps/dashboard/features/livetv/utils/getProviderName.ts @@ -1,16 +1,12 @@ -const getTunerName = (providerId: string | null | undefined) => { +const getProviderName = (providerId: string | null | undefined) => { switch (providerId?.toLowerCase()) { - case 'm3u': - return 'M3U'; - case 'hdhomerun': - return 'HDHomeRun'; - case 'hauppauge': - return 'Hauppauge'; - case 'satip': - return 'DVB'; + case 'schedulesdirect': + return 'Schedules Direct'; + case 'xmltv': + return 'XMLTV'; default: return 'Unknown'; } }; -export default getTunerName; +export default getProviderName; diff --git a/src/apps/dashboard/features/livetv/utils/getTunerName.ts b/src/apps/dashboard/features/livetv/utils/getTunerName.ts new file mode 100644 index 000000000..ea43ce870 --- /dev/null +++ b/src/apps/dashboard/features/livetv/utils/getTunerName.ts @@ -0,0 +1,16 @@ +const getTunerName = (providerId: string | null | undefined) => { + switch (providerId?.toLowerCase()) { + case 'm3u': + return 'M3U'; + case 'hdhomerun': + return 'HDHomeRun'; + case 'hauppauge': + return 'Hauppauge'; + case 'satip': + return 'DVB'; + default: + return 'Unknown'; + } +}; + +export default getTunerName; diff --git a/src/apps/dashboard/routes/livetv/index.tsx b/src/apps/dashboard/routes/livetv/index.tsx index 75479447f..f8416105d 100644 --- a/src/apps/dashboard/routes/livetv/index.tsx +++ b/src/apps/dashboard/routes/livetv/index.tsx @@ -12,7 +12,8 @@ import useLiveTasks from 'apps/dashboard/features/tasks/hooks/useLiveTasks'; import Button from '@mui/material/Button'; import RefreshIcon from '@mui/icons-material/Refresh'; import AddIcon from '@mui/icons-material/Add'; -import { Link, useNavigate } from 'react-router-dom'; +import DvrIcon from '@mui/icons-material/Dvr'; +import { Form, Link, useNavigate } from 'react-router-dom'; import { useStartTask } from 'apps/dashboard/features/tasks/api/useStartTask'; import { TaskState } from '@jellyfin/sdk/lib/generated-client/models/task-state'; import TaskProgress from 'apps/dashboard/features/tasks/components/TaskProgress'; @@ -20,6 +21,13 @@ import Menu from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; import ListItemText from '@mui/material/ListItemText'; import Alert from '@mui/material/Alert'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemLink from 'components/ListItemLink'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import Avatar from '@mui/material/Avatar'; +import getProviderConfigurationUrl from 'apps/dashboard/features/livetv/utils/getProviderConfigurationUrl'; +import getProviderName from 'apps/dashboard/features/livetv/utils/getProviderName'; const CONFIG_KEY = 'livetv'; @@ -79,70 +87,96 @@ export const Component = () => { className='mainAnimatedPage type-interior' > - {(isConfigError || isTasksError) ? ( - {globalize.translate('HeaderError')} - ) : ( - - {globalize.translate('HeaderTunerDevices')} +
+ {(isConfigError || isTasksError) ? ( + {globalize.translate('HeaderError')} + ) : ( + + {globalize.translate('HeaderTunerDevices')} - - - - { config?.TunerHosts?.map(tunerHost => ( - - )) } - - - {globalize.translate('HeaderGuideProviders')} - - - - - {(refreshGuideTask && refreshGuideTask.State === TaskState.Running) && ( - + + { config.TunerHosts?.map(tunerHost => ( + + )) } + + + {globalize.translate('HeaderGuideProviders')} + + + + + + + {(refreshGuideTask && refreshGuideTask.State === TaskState.Running) && ( - - )} - - - Schedules Direct - - - XMLTV - - - - )} + )} + + + Schedules Direct + + + XMLTV + + + + + {config.ListingProviders?.map(provider => ( + + + + + ))} + + + )} +
);