diff --git a/streammasterwebui/.eslintrc.json b/streammasterwebui/.eslintrc.json index 1165a41b3..baf8c8007 100644 --- a/streammasterwebui/.eslintrc.json +++ b/streammasterwebui/.eslintrc.json @@ -3,7 +3,7 @@ "browser": true, "es2022": true }, - "extends": [ "react-app","prettier"], + "extends": ["react-app", "prettier"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { @@ -29,4 +29,4 @@ "version": "18" } } -} \ No newline at end of file +} diff --git a/streammasterwebui/.vscode/extensions.json b/streammasterwebui/.vscode/extensions.json index e0a7c2537..f4f7cc251 100644 --- a/streammasterwebui/.vscode/extensions.json +++ b/streammasterwebui/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "ZixuanChen.vitest-explorer"] + "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "ZixuanChen.vitest-explorer"] } diff --git a/streammasterwebui/.vscode/launch.json b/streammasterwebui/.vscode/launch.json index 5d4e6c321..eba4f9146 100644 --- a/streammasterwebui/.vscode/launch.json +++ b/streammasterwebui/.vscode/launch.json @@ -18,10 +18,7 @@ "type": "node-terminal", "request": "launch", "command": "npm run dev", - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ], + "resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"], "serverReadyAction": { "pattern": "Local:.+(http://.+)", "uriFormat": "http://%s", diff --git a/streammasterwebui/.vscode/settings.json b/streammasterwebui/.vscode/settings.json index fee495b6d..787572c2b 100644 --- a/streammasterwebui/.vscode/settings.json +++ b/streammasterwebui/.vscode/settings.json @@ -14,21 +14,21 @@ // "source.sortMembers": true // "source.organizeImports": true }, - - "emmet.excludeLanguages": [], - "emmet.includeLanguages": { - "markdown": "html", - "javascript": "javascriptreact", - "typescript": "typescriptreact" - }, - "emmet.showSuggestionsAsSnippets": true, - "emmet.triggerExpansionOnTab": true, - "files.exclude": { - "**/*.js.map": { - "when": "$(basename)" - }, - "**/node_modules": true, + + "emmet.excludeLanguages": [], + "emmet.includeLanguages": { + "markdown": "html", + "javascript": "javascriptreact", + "typescript": "typescriptreact" + }, + "emmet.showSuggestionsAsSnippets": true, + "emmet.triggerExpansionOnTab": true, + "files.exclude": { + "**/*.js.map": { + "when": "$(basename)" }, + "**/node_modules": true + }, "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, @@ -44,17 +44,7 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, - "eslint.validate": [ - "css", - "html", - "javascript", - "javascriptreact", - "json", - "markdown", - "typescript", - "typescriptreact", - "yaml" - ], + "eslint.validate": ["css", "html", "javascript", "javascriptreact", "json", "markdown", "typescript", "typescriptreact", "yaml"], "html.customData": ["./node_modules/vidstack/vscode.html-data.json"], "bookmarks.useWorkaroundForFormatters": true, "bookmarks.saveBookmarksInProject": true, @@ -63,34 +53,34 @@ "prettier.singleQuote": true, "prettier.singleAttributePerLine": false, "prettier.printWidth": 120, - "fileNestingUpdater.autoUpdate": true, - "fileNestingUpdater.autoUpdateInterval": 720, - "fileNestingUpdater.promptOnAutoUpdate": true, - "fileNestingUpdater.upstreamRepo": "antfu/vscode-file-nesting-config", - "fileNestingUpdater.upstreamBranch": "main", - "filesize.showGzipInStatusBar": true, - "gremlins.showInProblemPane": true, - "workbench.iconTheme": "material-icon-theme", - "powermode.combo.location": "off", - "powermode.enabled": true, - "powermode.explosions.duration": 300, - "powermode.explosions.size": 5, - "powermode.shake.enabled": false, - "template-string-converter.autoRemoveTemplateString": true, - "template-string-converter.addBracketsToProps": true, - "html.autoClosingTags": true, - "javascript.autoClosingTags": true, - "javascript.suggest.completeFunctionCalls": true, - "typescript.suggest.completeFunctionCalls": true, - "javascript.inlayHints.functionLikeReturnTypes.enabled": true, - "typescript.inlayHints.functionLikeReturnTypes.enabled": true, - "javascript.inlayHints.parameterNames.enabled": "all", - "typescript.inlayHints.parameterNames.enabled": "all", - "javascript.suggest.autoImports": true, - "search.exclude": { - "**/coverage": true, - "**/node_modules": true - }, - "typescript.autoClosingTags": true, - "typescript.suggest.autoImports": true, + "fileNestingUpdater.autoUpdate": true, + "fileNestingUpdater.autoUpdateInterval": 720, + "fileNestingUpdater.promptOnAutoUpdate": true, + "fileNestingUpdater.upstreamRepo": "antfu/vscode-file-nesting-config", + "fileNestingUpdater.upstreamBranch": "main", + "filesize.showGzipInStatusBar": true, + "gremlins.showInProblemPane": true, + "workbench.iconTheme": "material-icon-theme", + "powermode.combo.location": "off", + "powermode.enabled": true, + "powermode.explosions.duration": 300, + "powermode.explosions.size": 5, + "powermode.shake.enabled": false, + "template-string-converter.autoRemoveTemplateString": true, + "template-string-converter.addBracketsToProps": true, + "html.autoClosingTags": true, + "javascript.autoClosingTags": true, + "javascript.suggest.completeFunctionCalls": true, + "typescript.suggest.completeFunctionCalls": true, + "javascript.inlayHints.functionLikeReturnTypes.enabled": true, + "typescript.inlayHints.functionLikeReturnTypes.enabled": true, + "javascript.inlayHints.parameterNames.enabled": "all", + "typescript.inlayHints.parameterNames.enabled": "all", + "javascript.suggest.autoImports": true, + "search.exclude": { + "**/coverage": true, + "**/node_modules": true + }, + "typescript.autoClosingTags": true, + "typescript.suggest.autoImports": true } diff --git a/streammasterwebui/components/ChannelHandlerSelector.tsx b/streammasterwebui/components/ChannelHandlerSelector.tsx index a293678ef..12f1e7b1b 100644 --- a/streammasterwebui/components/ChannelHandlerSelector.tsx +++ b/streammasterwebui/components/ChannelHandlerSelector.tsx @@ -37,10 +37,13 @@ const ChannelHandlerSelector = ({ className: propertyClassName, onChange, value const getHandlersOptions = (): SelectItem[] => { const test = Object.entries(VideoStreamHandlers) .splice(0, Object.keys(VideoStreamHandlers).length / 2) - .map(([number, word]) => ({ - label: word, - value: number - } as SelectItem)); + .map( + ([number, word]) => + ({ + label: word, + value: number + } as SelectItem) + ); return test; }; @@ -57,12 +60,10 @@ const ChannelHandlerSelector = ({ className: propertyClassName, onChange, value options={getHandlersOptions()} placeholder="Handler" style={{ - backgroundColor: 'var(--mask-bg)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' - }} value={channelHandler.toString()} virtualScrollerOptions={{ diff --git a/streammasterwebui/components/InfoMessageOverLayDialog.tsx b/streammasterwebui/components/InfoMessageOverLayDialog.tsx index 56f45a623..21a7a3db5 100644 --- a/streammasterwebui/components/InfoMessageOverLayDialog.tsx +++ b/streammasterwebui/components/InfoMessageOverLayDialog.tsx @@ -3,36 +3,23 @@ import { Dialog } from 'primereact/dialog'; import { OverlayPanel } from 'primereact/overlaypanel'; import React, { useCallback, useEffect, useRef, useState } from 'react'; -type Severity = 'error' | 'info' | 'success' | 'warn' +type Severity = 'error' | 'info' | 'success' | 'warn'; interface InfoMessageOverLayDialogProperties { - readonly blocked?: boolean - readonly children: React.ReactNode - readonly closable?: boolean - readonly header?: string - readonly infoMessage: string | undefined - readonly maximizable?: boolean - readonly onClose: () => void - readonly overlayColSize?: number - readonly severity?: Severity | null - readonly show: boolean + readonly blocked?: boolean; + readonly children: React.ReactNode; + readonly closable?: boolean; + readonly header?: string; + readonly infoMessage: string | undefined; + readonly maximizable?: boolean; + readonly onClose: () => void; + readonly overlayColSize?: number; + readonly severity?: Severity | null; + readonly show: boolean; } -const InfoMessageOverLayDialog: React.FC = ( - props -) => { - const { - blocked = false, - children, - closable = true, - header = '', - infoMessage, - maximizable = true, - onClose, - overlayColSize = 4, - severity, - show - } = props; +const InfoMessageOverLayDialog: React.FC = (props) => { + const { blocked = false, children, closable = true, header = '', infoMessage, maximizable = true, onClose, overlayColSize = 4, severity, show } = props; const [showDialog, setShowDialog] = useState(show); @@ -76,10 +63,7 @@ const InfoMessageOverLayDialog: React.FC = ( return 'text-yellow-500'; } default: { - if ( - infoMessage?.toLowerCase().includes('error') - || infoMessage?.toLowerCase().includes('failed') - ) { + if (infoMessage?.toLowerCase().includes('error') || infoMessage?.toLowerCase().includes('failed')) { return 'text-red-500'; } @@ -101,23 +85,14 @@ const InfoMessageOverLayDialog: React.FC = ( visible={showDialog} > -
- {children} -
+
{children}
- +
-

- {infoMessage} -

+

{infoMessage}

diff --git a/streammasterwebui/components/SMTextColor.tsx b/streammasterwebui/components/SMTextColor.tsx index dda06c064..da1fe0bf1 100644 --- a/streammasterwebui/components/SMTextColor.tsx +++ b/streammasterwebui/components/SMTextColor.tsx @@ -1,9 +1,5 @@ interface SMTextColorProperties { - readonly italicized?: boolean - readonly text: string | undefined // Use a boolean to determine if text should be italicized + readonly italicized?: boolean; + readonly text: string | undefined; // Use a boolean to determine if text should be italicized } -export const SMTextColor = ({ italicized, text }: SMTextColorProperties) => ( - - {text} - -); +export const SMTextColor = ({ italicized, text }: SMTextColorProperties) => {text}; diff --git a/streammasterwebui/components/buttons/AddButton.tsx b/streammasterwebui/components/buttons/AddButton.tsx index c7ae43ff9..cdabbb6f3 100644 --- a/streammasterwebui/components/buttons/AddButton.tsx +++ b/streammasterwebui/components/buttons/AddButton.tsx @@ -1,12 +1,6 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const AddButton: React.FC = ({ - disabled = false, - iconFilled, - label, - onClick, - tooltip = 'Add' -}) => ( +const AddButton: React.FC = ({ disabled = false, iconFilled, label, onClick, tooltip = 'Add' }) => ( = ({ - disabled = true, - onClick, - tooltip = 'Auto Set' -}) => ( - +const AutoSetButton: React.FC = ({ disabled = true, onClick, tooltip = 'Auto Set' }) => ( + ); export default AutoSetButton; diff --git a/streammasterwebui/components/buttons/BanButton.tsx b/streammasterwebui/components/buttons/BanButton.tsx index c9234128f..9fc6c22a6 100644 --- a/streammasterwebui/components/buttons/BanButton.tsx +++ b/streammasterwebui/components/buttons/BanButton.tsx @@ -1,19 +1,7 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const BanButton: React.FC = ({ - className, - disabled = false, - onClick, - tooltip = '' -}) => ( - +const BanButton: React.FC = ({ className, disabled = false, onClick, tooltip = '' }) => ( + ); export default BanButton; diff --git a/streammasterwebui/components/buttons/BookButton.tsx b/streammasterwebui/components/buttons/BookButton.tsx index 78c86ff0d..124b647b5 100644 --- a/streammasterwebui/components/buttons/BookButton.tsx +++ b/streammasterwebui/components/buttons/BookButton.tsx @@ -1,20 +1,7 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const BookButton: React.FC = ({ - disabled = false, - iconFilled = true, - label, - onClick, - tooltip = '' -}) => ( - +const BookButton: React.FC = ({ disabled = false, iconFilled = true, label, onClick, tooltip = '' }) => ( + ); export default BookButton; diff --git a/streammasterwebui/components/buttons/ClearButton.tsx b/streammasterwebui/components/buttons/ClearButton.tsx index 0211a205c..25eba3624 100644 --- a/streammasterwebui/components/buttons/ClearButton.tsx +++ b/streammasterwebui/components/buttons/ClearButton.tsx @@ -1,16 +1,7 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const ClearButton: React.FC = ({ - disabled = true, - onClick, - tooltip = '' -}) => ( - +const ClearButton: React.FC = ({ disabled = true, onClick, tooltip = '' }) => ( + ); export default ClearButton; diff --git a/streammasterwebui/components/buttons/ClockButton.tsx b/streammasterwebui/components/buttons/ClockButton.tsx index 4b2ef03ca..61a1b4e0c 100644 --- a/streammasterwebui/components/buttons/ClockButton.tsx +++ b/streammasterwebui/components/buttons/ClockButton.tsx @@ -1,5 +1,7 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const ClockButton: React.FC = ({ disabled = false, label, onClick, tooltip = 'Time Shift', iconFilled }) => ; +const ClockButton: React.FC = ({ disabled = false, label, onClick, tooltip = 'Time Shift', iconFilled }) => ( + +); export default ClockButton; diff --git a/streammasterwebui/components/buttons/DeleteButton.tsx b/streammasterwebui/components/buttons/DeleteButton.tsx index 98ab5b527..ca50bbcc4 100644 --- a/streammasterwebui/components/buttons/DeleteButton.tsx +++ b/streammasterwebui/components/buttons/DeleteButton.tsx @@ -1,12 +1,6 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const DeleteButton: React.FC = ({ - disabled = false, - iconFilled, - label, - onClick, - tooltip = 'Delete Stream' -}) => ( +const DeleteButton: React.FC = ({ disabled = false, iconFilled, label, onClick, tooltip = 'Delete Stream' }) => ( = ({ - disabled = false, - iconFilled, - label, - onClick, - tooltip = 'Edit' -}) => ( +const EditButton: React.FC = ({ disabled = false, iconFilled, label, onClick, tooltip = 'Edit' }) => ( = ({ - disabled = true, - iconFilled = true, - onClick, - tooltip = '' -}) => ( - +const ImageButton: React.FC = ({ disabled = true, iconFilled = true, onClick, tooltip = '' }) => ( + ); export default ImageButton; diff --git a/streammasterwebui/components/buttons/OKButton.tsx b/streammasterwebui/components/buttons/OKButton.tsx index e46f836eb..4bf2c7a3c 100644 --- a/streammasterwebui/components/buttons/OKButton.tsx +++ b/streammasterwebui/components/buttons/OKButton.tsx @@ -1,16 +1,11 @@ import { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; import BaseButton from './BaseButton'; -const OKButton: React.FC = ({ - iconFilled = true, - label, - onClick, - tooltip = '' -}) => ( +const OKButton: React.FC = ({ iconFilled = true, label, onClick, tooltip = '' }) => ( = ({ - disabled = false, - onClick, - tooltip = '' -}) => ( - +const RefreshButton: React.FC = ({ disabled = false, onClick, tooltip = '' }) => ( + ); export default RefreshButton; diff --git a/streammasterwebui/components/buttons/ResetButton.tsx b/streammasterwebui/components/buttons/ResetButton.tsx index 8f3a3a338..e3ab48f2a 100644 --- a/streammasterwebui/components/buttons/ResetButton.tsx +++ b/streammasterwebui/components/buttons/ResetButton.tsx @@ -1,18 +1,8 @@ import { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; import BaseButton from './BaseButton'; -const ResetButton: React.FC = ({ - disabled = false, - onClick, - tooltip = '' -}) => ( - +const ResetButton: React.FC = ({ disabled = false, onClick, tooltip = '' }) => ( + ); export default ResetButton; diff --git a/streammasterwebui/components/buttons/RightArrowButton.tsx b/streammasterwebui/components/buttons/RightArrowButton.tsx index 5671b659b..ce64ecf65 100644 --- a/streammasterwebui/components/buttons/RightArrowButton.tsx +++ b/streammasterwebui/components/buttons/RightArrowButton.tsx @@ -1,19 +1,8 @@ import { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; import BaseButton from './BaseButton'; -const RightArrowButton: React.FC = ({ - disabled = false, - onClick, - tooltip = 'Add' -}) => ( - +const RightArrowButton: React.FC = ({ disabled = false, onClick, tooltip = 'Add' }) => ( + ); export default RightArrowButton; diff --git a/streammasterwebui/components/buttons/VisibleButton.tsx b/streammasterwebui/components/buttons/VisibleButton.tsx index ec821e4a2..01ac25599 100644 --- a/streammasterwebui/components/buttons/VisibleButton.tsx +++ b/streammasterwebui/components/buttons/VisibleButton.tsx @@ -1,17 +1,11 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const VisibleButton: React.FC = ({ - disabled = false, - iconFilled = true, - label, - onClick, - tooltip = 'Toggle Visibility' -}) => ( +const VisibleButton: React.FC = ({ disabled = false, iconFilled = true, label, onClick, tooltip = 'Toggle Visibility' }) => ( diff --git a/streammasterwebui/components/buttons/XButton.tsx b/streammasterwebui/components/buttons/XButton.tsx index c6c5feeff..491f92021 100644 --- a/streammasterwebui/components/buttons/XButton.tsx +++ b/streammasterwebui/components/buttons/XButton.tsx @@ -1,5 +1,7 @@ import BaseButton, { type ChildButtonProps as ChildButtonProperties } from './BaseButton'; -const XButton: React.FC = ({ disabled = false, onClick, tooltip = 'Remove', iconFilled, label }) => ; +const XButton: React.FC = ({ disabled = false, onClick, tooltip = 'Remove', iconFilled, label }) => ( + +); export default XButton; diff --git a/streammasterwebui/components/channelGroups/ChannelGroupEditor.tsx b/streammasterwebui/components/channelGroups/ChannelGroupEditor.tsx index 911a298f4..6ea4af8de 100644 --- a/streammasterwebui/components/channelGroups/ChannelGroupEditor.tsx +++ b/streammasterwebui/components/channelGroups/ChannelGroupEditor.tsx @@ -8,12 +8,12 @@ const ChannelGroupEditor = (props: ChannelGroupEditorProperties) => { const onUpdateStream = React.useCallback( async (groupName: string) => { if ( - props.data === undefined - || props.data.id === undefined - || props.data.id === '' - || !groupName - || groupName === '' - || props.data.user_Tvg_group === groupName + props.data === undefined || + props.data.id === undefined || + props.data.id === '' || + !groupName || + groupName === '' || + props.data.user_Tvg_group === groupName ) { return; } diff --git a/streammasterwebui/components/channelGroups/ChannelGroupVisibleDialog.tsx b/streammasterwebui/components/channelGroups/ChannelGroupVisibleDialog.tsx index 49a0fc220..4d72c1b62 100644 --- a/streammasterwebui/components/channelGroups/ChannelGroupVisibleDialog.tsx +++ b/streammasterwebui/components/channelGroups/ChannelGroupVisibleDialog.tsx @@ -50,10 +50,13 @@ const ChannelGroupVisibleDialog = ({ id, onClose, skipOverLayer = false, value } }); } else if (selectSelectedItems) { const toSend = {} as UpdateChannelGroupsRequest; - toSend.channelGroupRequests = selectSelectedItems.map((item) => ({ - channelGroupId: item.id, - toggleVisibility: true - } as UpdateChannelGroupRequest)); + toSend.channelGroupRequests = selectSelectedItems.map( + (item) => + ({ + channelGroupId: item.id, + toggleVisibility: true + } as UpdateChannelGroupRequest) + ); UpdateChannelGroups(toSend) .then(() => { setInfoMessage('Channel Group Toggle Visibility Successfully'); diff --git a/streammasterwebui/components/columns/createMultiSelectColumnConfigHook.tsx b/streammasterwebui/components/columns/createMultiSelectColumnConfigHook.tsx index 7f60573b8..628387bc4 100644 --- a/streammasterwebui/components/columns/createMultiSelectColumnConfigHook.tsx +++ b/streammasterwebui/components/columns/createMultiSelectColumnConfigHook.tsx @@ -19,96 +19,89 @@ interface ColumnConfigInputs { width?: number; } -const createMultiSelectColumnConfigHook = ({ - dataField, - fieldType, - headerTitle, - maxWidth, - minWidth, - width, - EditorComponent, - queryHook -}: ColumnConfigInputs) => ({ enableEdit = false, useFilter = true, values }: { enableEdit?: boolean; useFilter?: boolean; values?: string[] | undefined }) => { - const { data, isLoading, isFetching, isError } = queryHook ? queryHook() : { data: undefined, isError: false, isFetching: false, isLoading: false }; - - const bodyTemplate = (bodyData: VideoStreamDto) => { - const value = bodyData[dataField]; - - if (value === undefined) { - return ; - } +const createMultiSelectColumnConfigHook = + ({ dataField, fieldType, headerTitle, maxWidth, minWidth, width, EditorComponent, queryHook }: ColumnConfigInputs) => + ({ enableEdit = false, useFilter = true, values }: { enableEdit?: boolean; useFilter?: boolean; values?: string[] | undefined }) => { + const { data, isLoading, isFetching, isError } = queryHook ? queryHook() : { data: undefined, isError: false, isFetching: false, isLoading: false }; - if (!enableEdit) { - return {value.toString()}; - } + const bodyTemplate = (bodyData: VideoStreamDto) => { + const value = bodyData[dataField]; - if (EditorComponent) { - // if (headerTitle === 'Group') { - // console.log('EditorComponent', bodyData) - // } + if (value === undefined) { + return ; + } - return ; - } + if (!enableEdit) { + return {value.toString()}; + } - return {value.toString()}; - }; + if (EditorComponent) { + // if (headerTitle === 'Group') { + // console.log('EditorComponent', bodyData) + // } - const itemTemplate = (option: string) => ( -
- {option} -
- ); - - const filterTemplate = (options: ColumnFilterElementTemplateOptions) => ( - { - if (isEmptyObject(e.value)) { - options.filterApplyCallback(); - } else { - options.filterApplyCallback(e.value); - } - }} - options={values && values.length > 0 ? values : data} - placeholder="Any" - value={options.value} - /> - ); - - if (dataField === undefined) { - console.error('dataField is undefined'); - } - - const columnConfig: ColumnMeta = { - align: 'left', - bodyTemplate, - field: dataField, - fieldType, - filter: useFilter, - filterField: dataField, - header: headerTitle, - sortable: true, - - style: { - maxWidth: maxWidth === undefined ? (width === undefined ? undefined : `${width}rem`) : `${maxWidth}rem`, - minWidth: minWidth === undefined ? (width === undefined ? undefined : `${width}rem`) : `${minWidth}rem`, - width: width === undefined ? (minWidth === undefined ? undefined : `${minWidth}rem`) : `${width}rem` + return ; + } + + return {value.toString()}; + }; + + const itemTemplate = (option: string) => ( +
+ {option} +
+ ); + + const filterTemplate = (options: ColumnFilterElementTemplateOptions) => ( + { + if (isEmptyObject(e.value)) { + options.filterApplyCallback(); + } else { + options.filterApplyCallback(e.value); + } + }} + options={values && values.length > 0 ? values : data} + placeholder="Any" + value={options.value} + /> + ); + + if (dataField === undefined) { + console.error('dataField is undefined'); } - }; - if (queryHook !== undefined) { - columnConfig.filterElement = filterTemplate; - } + const columnConfig: ColumnMeta = { + align: 'left', + bodyTemplate, + field: dataField, + fieldType, + filter: useFilter, + filterField: dataField, + header: headerTitle, + sortable: true, + + style: { + maxWidth: maxWidth === undefined ? (width === undefined ? undefined : `${width}rem`) : `${maxWidth}rem`, + minWidth: minWidth === undefined ? (width === undefined ? undefined : `${width}rem`) : `${minWidth}rem`, + width: width === undefined ? (minWidth === undefined ? undefined : `${minWidth}rem`) : `${width}rem` + } + }; + + if (queryHook !== undefined) { + columnConfig.filterElement = filterTemplate; + } - return { - columnConfig, - isError, - isFetching, - isLoading + return { + columnConfig, + isError, + isFetching, + isLoading + }; }; -}; export default createMultiSelectColumnConfigHook; diff --git a/streammasterwebui/components/dataSelector/TableHeader.tsx b/streammasterwebui/components/dataSelector/TableHeader.tsx index 1c800d809..6d9467244 100644 --- a/streammasterwebui/components/dataSelector/TableHeader.tsx +++ b/streammasterwebui/components/dataSelector/TableHeader.tsx @@ -12,7 +12,15 @@ interface TableHeaderProperties { setRowClick: (value: boolean) => void; } -const TableHeader: React.FC = ({ headerName, onMultiSelectClick, rowClick, setRowClick, enableExport, exportCSV, dataSelectorProps }) => ( +const TableHeader: React.FC = ({ + headerName, + onMultiSelectClick, + rowClick, + setRowClick, + enableExport, + exportCSV, + dataSelectorProps +}) => (
diff --git a/streammasterwebui/components/dataSelector/bodyTemplate.tsx b/streammasterwebui/components/dataSelector/bodyTemplate.tsx index 270746f2d..709ff95ba 100644 --- a/streammasterwebui/components/dataSelector/bodyTemplate.tsx +++ b/streammasterwebui/components/dataSelector/bodyTemplate.tsx @@ -38,9 +38,7 @@ function streamsBodyTemplate(activeCount: string, totalCount: string) { return (
- {activeCount} - / - {totalCount} + {activeCount}/{totalCount}
); } diff --git a/streammasterwebui/components/dataSelector/getEmptyFilter.tsx b/streammasterwebui/components/dataSelector/getEmptyFilter.tsx index c2edd3c58..bfda1ba33 100644 --- a/streammasterwebui/components/dataSelector/getEmptyFilter.tsx +++ b/streammasterwebui/components/dataSelector/getEmptyFilter.tsx @@ -2,10 +2,7 @@ import { FilterMatchMode } from 'primereact/api'; import { type DataTableFilterMeta } from 'primereact/datatable'; import { type ColumnMeta } from './DataSelectorTypes'; -function getEmptyFilter( - columns: ColumnMeta[], - showHidden: boolean | null | undefined -): DataTableFilterMeta { +function getEmptyFilter(columns: ColumnMeta[], showHidden: boolean | null | undefined): DataTableFilterMeta { const filter = columns.reduce((object, item: ColumnMeta) => { if (item.field === 'isHidden') { return { diff --git a/streammasterwebui/components/dataSelector/isPagedTableDto.tsx b/streammasterwebui/components/dataSelector/isPagedTableDto.tsx index 3618bebbd..5335388b6 100644 --- a/streammasterwebui/components/dataSelector/isPagedTableDto.tsx +++ b/streammasterwebui/components/dataSelector/isPagedTableDto.tsx @@ -10,13 +10,13 @@ function isPagedTableDto(value: unknown): value is PagedTableDto { const value_ = value as any; return ( - value_ - && (value_.data === undefined || Array.isArray(value_.data)) - && typeof value_.first === 'number' - && typeof value_.pageNumber === 'number' - && typeof value_.pageSize === 'number' - && typeof value_.totalItemCount === 'number' - && typeof value_.totalPageCount === 'number' + value_ && + (value_.data === undefined || Array.isArray(value_.data)) && + typeof value_.first === 'number' && + typeof value_.pageNumber === 'number' && + typeof value_.pageSize === 'number' && + typeof value_.totalItemCount === 'number' && + typeof value_.totalPageCount === 'number' ); } diff --git a/streammasterwebui/components/inputs/TextInput.tsx b/streammasterwebui/components/inputs/TextInput.tsx index 5c5cf8920..07e3c385b 100644 --- a/streammasterwebui/components/inputs/TextInput.tsx +++ b/streammasterwebui/components/inputs/TextInput.tsx @@ -5,18 +5,18 @@ import { v4 as uuidv4 } from 'uuid'; import CopyButton from '../buttons/CopyButton'; interface TextInputProperties { - readonly autoFocus?: boolean - readonly dontValidate?: boolean - readonly isUrl?: boolean - readonly isValid?: boolean - readonly label?: string - readonly onChange: (value: string) => void - readonly onEnter?: () => void - readonly onResetClick?: () => void - readonly placeHolder?: string - readonly showClear?: boolean - readonly showCopy?: boolean - readonly value: string + readonly autoFocus?: boolean; + readonly dontValidate?: boolean; + readonly isUrl?: boolean; + readonly isValid?: boolean; + readonly label?: string; + readonly onChange: (value: string) => void; + readonly onEnter?: () => void; + readonly onResetClick?: () => void; + readonly placeHolder?: string; + readonly showClear?: boolean; + readonly showCopy?: boolean; + readonly value: string; } const TextInput = ({ @@ -75,11 +75,7 @@ const TextInput = ({ try { // Construct the URL and return it with the query parameters const constructedURL = new URL(value_); - return ( - constructedURL.origin - + constructedURL.pathname - + constructedURL.search - ); + return constructedURL.origin + constructedURL.pathname + constructedURL.search; } catch { // If there's an error constructing the URL (meaning it's not a valid URL), return val as is return value_; @@ -100,30 +96,13 @@ const TextInput = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [value]); - const doShowClear = (): boolean => ( - showClear === true - && originalInput !== undefined - && input !== originalInput - ); + const doShowClear = (): boolean => showClear === true && originalInput !== undefined && input !== originalInput; const doShowCopy = (): boolean => showCopy === true && input !== undefined && input !== ''; return ( -
- +
+ {doShowClear() && originalInput && ( { options={options} placeholder="Play List" style={{ - backgroundColor: 'var(--mask-bg)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' - }} value={selectedM3UFile} valueTemplate={selectedTemplate} diff --git a/streammasterwebui/components/schedulesDirect/SchedulesDirectCountrySelector.tsx b/streammasterwebui/components/schedulesDirect/SchedulesDirectCountrySelector.tsx index 1623dd23d..8463318e6 100644 --- a/streammasterwebui/components/schedulesDirect/SchedulesDirectCountrySelector.tsx +++ b/streammasterwebui/components/schedulesDirect/SchedulesDirectCountrySelector.tsx @@ -30,7 +30,10 @@ const SchedulesDirectCountrySelector = (props: SchedulesDirectCountrySelectorPro if (getCountriesQuery.data.Europe) { countries.push( - ...getCountriesQuery.data.Europe.filter((c) => c?.shortName !== undefined && c.shortName.trim() !== '').map((c) => ({ label: c.fullName, value: c.shortName })) + ...getCountriesQuery.data.Europe.filter((c) => c?.shortName !== undefined && c.shortName.trim() !== '').map((c) => ({ + label: c.fullName, + value: c.shortName + })) ); } @@ -44,13 +47,19 @@ const SchedulesDirectCountrySelector = (props: SchedulesDirectCountrySelectorPro if (getCountriesQuery.data.Caribbean) { countries.push( - ...getCountriesQuery.data.Caribbean.filter((c) => c?.shortName !== undefined && c.shortName.trim() !== '').map((c) => ({ label: c.fullName, value: c.shortName })) + ...getCountriesQuery.data.Caribbean.filter((c) => c?.shortName !== undefined && c.shortName.trim() !== '').map((c) => ({ + label: c.fullName, + value: c.shortName + })) ); } if (getCountriesQuery.data.Oceania) { countries.push( - ...getCountriesQuery.data.Oceania.filter((c) => c?.shortName !== undefined && c.shortName.trim() !== '').map((c) => ({ label: `${c.shortName}-${c.fullName}`, value: c.shortName })) + ...getCountriesQuery.data.Oceania.filter((c) => c?.shortName !== undefined && c.shortName.trim() !== '').map((c) => ({ + label: `${c.shortName}-${c.fullName}`, + value: c.shortName + })) ); } @@ -72,12 +81,10 @@ const SchedulesDirectCountrySelector = (props: SchedulesDirectCountrySelectorPro options={options} placeholder="Country" style={{ - backgroundColor: 'var(--mask-bg)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' - }} value={country} /> diff --git a/streammasterwebui/components/sharedEPGM3U/FileRefreshDialog.tsx b/streammasterwebui/components/sharedEPGM3U/FileRefreshDialog.tsx index 14123bde8..95f0a2104 100644 --- a/streammasterwebui/components/sharedEPGM3U/FileRefreshDialog.tsx +++ b/streammasterwebui/components/sharedEPGM3U/FileRefreshDialog.tsx @@ -5,16 +5,12 @@ import OKButton from '../buttons/OKButton'; import RefreshButton from '../buttons/RefreshButton'; interface FileRefreshDialogProperties { - readonly fileType: 'epg' | 'm3u' - readonly inputInfoMessage?: string - readonly onRefreshFile: () => void + readonly fileType: 'epg' | 'm3u'; + readonly inputInfoMessage?: string; + readonly onRefreshFile: () => void; } -const FileRefreshDialog = ({ - fileType, - inputInfoMessage, - onRefreshFile -}: FileRefreshDialogProperties) => { +const FileRefreshDialog = ({ fileType, inputInfoMessage, onRefreshFile }: FileRefreshDialogProperties) => { const labelName = fileType.toUpperCase(); const [showOverlay, setShowOverlay] = useState(false); @@ -54,10 +50,7 @@ const FileRefreshDialog = ({
- setShowOverlay(true)} - tooltip={`Refresh ${labelName}`} - /> + setShowOverlay(true)} tooltip={`Refresh ${labelName}`} /> ); }; diff --git a/streammasterwebui/components/sharedEPGM3U/FileRemoveDialog.tsx b/streammasterwebui/components/sharedEPGM3U/FileRemoveDialog.tsx index 22de73846..642ec95ae 100644 --- a/streammasterwebui/components/sharedEPGM3U/FileRemoveDialog.tsx +++ b/streammasterwebui/components/sharedEPGM3U/FileRemoveDialog.tsx @@ -3,16 +3,12 @@ import InfoMessageOverLayDialog from '../InfoMessageOverLayDialog'; import XButton from '../buttons/XButton'; interface FileRemoveDialogProperties { - readonly fileType: 'epg' | 'm3u' - readonly infoMessage?: string - readonly onDeleteFile: () => void + readonly fileType: 'epg' | 'm3u'; + readonly infoMessage?: string; + readonly onDeleteFile: () => void; } -const FileRemoveDialog = ({ - fileType, - infoMessage: inputInfoMessage, - onDeleteFile -}: FileRemoveDialogProperties) => { +const FileRemoveDialog = ({ fileType, infoMessage: inputInfoMessage, onDeleteFile }: FileRemoveDialogProperties) => { const labelName = fileType.toUpperCase(); const [showOverlay, setShowOverlay] = useState(false); @@ -43,27 +39,16 @@ const FileRemoveDialog = ({ >
- + Are you sure you want to delete?
- +
- setShowOverlay(true)} - tooltip={`Delete ${labelName}`} - /> + setShowOverlay(true)} tooltip={`Delete ${labelName}`} /> ); }; diff --git a/streammasterwebui/components/videoStream/VideoStreamSelector.tsx b/streammasterwebui/components/videoStream/VideoStreamSelector.tsx index e7ca18582..e0d9dd19d 100644 --- a/streammasterwebui/components/videoStream/VideoStreamSelector.tsx +++ b/streammasterwebui/components/videoStream/VideoStreamSelector.tsx @@ -42,9 +42,7 @@ export const VideoStreamSelector = (props: VideoStreamSelectorProperties) => { ]; } - const returnValue = [...videoStreamsQuery.data] - .sort((a, b) => a.name.localeCompare(b.name)) - .map((a) => ({ label: a.name, value: a } as SelectItem)); + const returnValue = [...videoStreamsQuery.data].sort((a, b) => a.name.localeCompare(b.name)).map((a) => ({ label: a.name, value: a } as SelectItem)); return returnValue; }, [videoStreamsQuery.data]); diff --git a/streammasterwebui/components/videoStream/VideoStreamVisibleDialog.tsx b/streammasterwebui/components/videoStream/VideoStreamVisibleDialog.tsx index 2a1e76522..643938c4b 100644 --- a/streammasterwebui/components/videoStream/VideoStreamVisibleDialog.tsx +++ b/streammasterwebui/components/videoStream/VideoStreamVisibleDialog.tsx @@ -95,10 +95,13 @@ const VideoStreamVisibleDialog = ({ id, iconFilled, onClose, skipOverLayer, valu const toSend = {} as UpdateVideoStreamsRequest; - toSend.videoStreamUpdates = selectVideoStreamsInternal.map((a) => ({ - id: a.id, - toggleVisibility: true - } as UpdateVideoStreamRequest)); + toSend.videoStreamUpdates = selectVideoStreamsInternal.map( + (a) => + ({ + id: a.id, + toggleVisibility: true + } as UpdateVideoStreamRequest) + ); await UpdateVideoStreams(toSend) .then(() => { diff --git a/streammasterwebui/components/videoStreamPanel/InputWrapper.tsx b/streammasterwebui/components/videoStreamPanel/InputWrapper.tsx index c871af4c6..f5036f5cf 100644 --- a/streammasterwebui/components/videoStreamPanel/InputWrapper.tsx +++ b/streammasterwebui/components/videoStreamPanel/InputWrapper.tsx @@ -1,23 +1,15 @@ import React from 'react'; interface InputWrapperProperties { - readonly columnSize: number - readonly label: string - readonly renderInput: () => React.ReactNode + readonly columnSize: number; + readonly label: string; + readonly renderInput: () => React.ReactNode; } -const InputWrapper: React.FC = ({ - columnSize, - label, - renderInput -}) => ( -
+const InputWrapper: React.FC = ({ columnSize, label, renderInput }) => ( +
{label}
-
- {renderInput()} -
+
{renderInput()}
); diff --git a/streammasterwebui/components/videoStreamPanel/VideoStreamPanel.tsx b/streammasterwebui/components/videoStreamPanel/VideoStreamPanel.tsx index 1a9b30fb0..99a583ec3 100644 --- a/streammasterwebui/components/videoStreamPanel/VideoStreamPanel.tsx +++ b/streammasterwebui/components/videoStreamPanel/VideoStreamPanel.tsx @@ -202,23 +202,23 @@ const VideoStreamPanel = ({ group, onEdit, onSave, videoStream }: VideoStreamPan onClick={() => { videoStream ? onEdit?.({ - id: videoStream.id, - tvg_ID: epgId, - tvg_chno: channelNumber, - tvg_group: channelGroup, - tvg_logo: iconSource, - tvg_name: name, - url - } as UpdateVideoStreamRequest) + id: videoStream.id, + tvg_ID: epgId, + tvg_chno: channelNumber, + tvg_group: channelGroup, + tvg_logo: iconSource, + tvg_name: name, + url + } as UpdateVideoStreamRequest) : onSave?.({ - childVideoStreams: videoStream === undefined ? dataSource : videoStreams, - tvg_ID: epgId, - tvg_chno: channelNumber, - tvg_group: channelGroup, - tvg_logo: iconSource, - tvg_name: name, - url - } as CreateVideoStreamRequest); + childVideoStreams: videoStream === undefined ? dataSource : videoStreams, + tvg_ID: epgId, + tvg_chno: channelNumber, + tvg_group: channelGroup, + tvg_logo: iconSource, + tvg_name: name, + url + } as CreateVideoStreamRequest); setDataSource(); }} diff --git a/streammasterwebui/features/streamGroupEditor/StreamGroupChannelGroupsSelector.tsx b/streammasterwebui/features/streamGroupEditor/StreamGroupChannelGroupsSelector.tsx index 1ff4b03bb..9bdaa134c 100644 --- a/streammasterwebui/features/streamGroupEditor/StreamGroupChannelGroupsSelector.tsx +++ b/streammasterwebui/features/streamGroupEditor/StreamGroupChannelGroupsSelector.tsx @@ -16,7 +16,7 @@ interface StreamGroupChannelGroupsInputs { const StreamGroupChannelGroupsSelector = ({ className, streamGroupId }: StreamGroupChannelGroupsInputs) => { const { data: selectedData } = useStreamGroupChannelGroupGetChannelGroupsFromStreamGroupQuery( - streamGroupId === undefined ? skipToken : (streamGroupId > 0 ? streamGroupId : skipToken) + streamGroupId === undefined ? skipToken : streamGroupId > 0 ? streamGroupId : skipToken ); const { data: channelGroups } = useChannelGroupsGetChannelGroupIdNamesQuery(); diff --git a/streammasterwebui/index.html b/streammasterwebui/index.html index e3cc84bd5..5d8aa1576 100644 --- a/streammasterwebui/index.html +++ b/streammasterwebui/index.html @@ -1,19 +1,16 @@ - + - - + Stream Master - - - - + + + + - +
- - - \ No newline at end of file + + diff --git a/streammasterwebui/lib/common/global.d.ts b/streammasterwebui/lib/common/global.d.ts index 2252512c9..1f505b8db 100644 --- a/streammasterwebui/lib/common/global.d.ts +++ b/streammasterwebui/lib/common/global.d.ts @@ -1,15 +1,15 @@ export interface StreamMasterApiData { - apiKey: string - apiRoot: string - baseHostURL: string - isDebug: boolean - urlBase: string - version: string + apiKey: string; + apiRoot: string; + baseHostURL: string; + isDebug: boolean; + urlBase: string; + version: string; } declare global { interface Window { - StreamMaster: StreamMasterApiData + StreamMaster: StreamMasterApiData; } } export {}; diff --git a/streammasterwebui/lib/common/isPagedTableDto.tsx b/streammasterwebui/lib/common/isPagedTableDto.tsx index 40c19eeef..6af1d5e13 100644 --- a/streammasterwebui/lib/common/isPagedTableDto.tsx +++ b/streammasterwebui/lib/common/isPagedTableDto.tsx @@ -1,32 +1,30 @@ export interface PagedTableInformation { - first: number - pageNumber: number - pageSize: number - totalItemCount: number - totalPageCount: number + first: number; + pageNumber: number; + pageSize: number; + totalItemCount: number; + totalPageCount: number; } export interface PagedDataDto { - data?: T[] + data?: T[]; } -export type PagedTableDto = PagedDataDto & PagedTableInformation & {} +export type PagedTableDto = PagedDataDto & PagedTableInformation & {}; -function isPagedTableDto( - value: PagedTableDto | T[] -): value is PagedTableDto { +function isPagedTableDto(value: PagedTableDto | T[]): value is PagedTableDto { if (!value || Array.isArray(value)) { return false; } return ( - value - && (value.data === undefined || Array.isArray(value.data)) - && typeof value.first === 'number' - && typeof value.pageNumber === 'number' - && typeof value.pageSize === 'number' - && typeof value.totalItemCount === 'number' - && typeof value.totalPageCount === 'number' + value && + (value.data === undefined || Array.isArray(value.data)) && + typeof value.first === 'number' && + typeof value.pageNumber === 'number' && + typeof value.pageSize === 'number' && + typeof value.totalItemCount === 'number' && + typeof value.totalPageCount === 'number' ); } diff --git a/streammasterwebui/lib/common/streammaster_enums.tsx b/streammasterwebui/lib/common/streammaster_enums.tsx index d0ce130cb..ccaed3128 100644 --- a/streammasterwebui/lib/common/streammaster_enums.tsx +++ b/streammasterwebui/lib/common/streammaster_enums.tsx @@ -1,7 +1,7 @@ export enum AuthenticationType { None = 0, // = 1, - Forms = 2, + Forms = 2 } export enum SMFileTypes { @@ -14,24 +14,24 @@ export enum SMFileTypes { Image = 6, TvLogo = 7, ProgrammeIcon = 8, - ChannelIcon = 9, + ChannelIcon = 9 } export enum StreamingProxyTypes { SystemDefault = 0, None = 1, StreamMaster = 2, - FFMpeg = 3, + FFMpeg = 3 } export enum VideoStreamHandlers { SystemDefault = 0, None = 1, - Loop = 2, + Loop = 2 } export enum M3UFileStreamUrlPrefix { SystemDefault = 0, TS = 1, - M3U8 = 2, + M3U8 = 2 } diff --git a/streammasterwebui/lib/hooks/useCopyToClipboard.tsx b/streammasterwebui/lib/hooks/useCopyToClipboard.tsx index 232fad923..40f4f8166 100644 --- a/streammasterwebui/lib/hooks/useCopyToClipboard.tsx +++ b/streammasterwebui/lib/hooks/useCopyToClipboard.tsx @@ -1,7 +1,9 @@ import { useState } from 'react'; -type CopiedValue = string | null -interface CopyFunction { (text: string): Promise; } // Return success +type CopiedValue = string | null; +interface CopyFunction { + (text: string): Promise; +} // Return success const useCopyToClipboard = (): [CopiedValue, CopyFunction] => { const [copiedText, setCopiedText] = useState(null); diff --git a/streammasterwebui/lib/hooks/useScrollAndKeyEvents.tsx b/streammasterwebui/lib/hooks/useScrollAndKeyEvents.tsx index 6503b8bc9..b0f6fdd34 100644 --- a/streammasterwebui/lib/hooks/useScrollAndKeyEvents.tsx +++ b/streammasterwebui/lib/hooks/useScrollAndKeyEvents.tsx @@ -19,7 +19,8 @@ function useScrollAndKeyEvents(): UseScrollAndKeyEventsResult { if (direction === 'up' && atTop) { return 'blocked'; - } if (direction === 'down' && atBottom) { + } + if (direction === 'down' && atBottom) { return 'blocked'; } return 'moved'; diff --git a/streammasterwebui/lib/locales/default_setting.tsx b/streammasterwebui/lib/locales/default_setting.tsx index e17ba3fc7..53bf13dd0 100644 --- a/streammasterwebui/lib/locales/default_setting.tsx +++ b/streammasterwebui/lib/locales/default_setting.tsx @@ -1,11 +1,10 @@ interface DefaultSettingType { - [key: string]: string - ffMpegOptions: string + [key: string]: string; + ffMpegOptions: string; } const defaultSetting: DefaultSettingType = { - ffMpegOptions: - '-hide_banner -loglevel error -i {streamUrl} -c copy -f mpegts pipe:1' + ffMpegOptions: '-hide_banner -loglevel error -i {streamUrl} -c copy -f mpegts pipe:1' }; export const getDefaultSetting = (key: string): string => defaultSetting[key] ?? ''; diff --git a/streammasterwebui/lib/locales/help_en.tsx b/streammasterwebui/lib/locales/help_en.tsx index b3a1f6991..b662fc34f 100644 --- a/streammasterwebui/lib/locales/help_en.tsx +++ b/streammasterwebui/lib/locales/help_en.tsx @@ -1,6 +1,6 @@ interface help_enType { - [key: string]: string - ffMpegOptions: string + [key: string]: string; + ffMpegOptions: string; } const help_en: help_enType = { @@ -12,29 +12,22 @@ const help_en: help_enType = { backup: 'Backup', cacheIcons: 'Cache Icons to the local disk to speed things up', cleanURLs: 'Remove URLs from being logged', - clientUserAgent: - 'Client User Agent used for downloads, epg/m3u/icons/schedules direct', + clientUserAgent: 'Client User Agent used for downloads, epg/m3u/icons/schedules direct', development: 'Development', deviceID: 'HDHR Device ID and capability ID', dummyRegex: 'EPG will be set to dummy if this matches the channel EPG', - ffMpegOptions: - "FFMPeg Options: '{streamUrl}' will be replaced with the stream URL.", - ffmPegExecutable: - 'FFMPeg Executable. The name "ffmpeg(.exe)" will be searched in the OS path as well', + ffMpegOptions: "FFMPeg Options: '{streamUrl}' will be replaced with the stream URL.", + ffmPegExecutable: 'FFMPeg Executable. The name "ffmpeg(.exe)" will be searched in the OS path as well', filesEPG: 'Files / EPG', general: 'General', - globalStreamLimit: - 'Global Stream Limit for custom URLs that do not belong to a M3U playlist', + globalStreamLimit: 'Global Stream Limit for custom URLs that do not belong to a M3U playlist', keywordSearch: 'Keyword Search', - m3UIgnoreEmptyEPGID: - 'Ignore Streams with an empty EPG ID or EPG ID of "Dummy"', - maxConnectRetry: - 'How many times to retry receiving data from the source stream', + m3UIgnoreEmptyEPGID: 'Ignore Streams with an empty EPG ID or EPG ID of "Dummy"', + maxConnectRetry: 'How many times to retry receiving data from the source stream', maxConnectRetryTimeMS: 'Receiving Data Retry Timeout in MS', overWriteM3UChannels: 'Overwrite M3U Channels Numbers even if they are set', password: 'Password', - preloadPercentage: - 'How much of the buffer (in percentage) to preload before starting playback. 0 Disables preloading', + preloadPercentage: 'How much of the buffer (in percentage) to preload before starting playback. 0 Disables preloading', rememberme: 'Remember Me', ringBufferSizeMB: 'Buffer Size (MB)', sdPassword: 'Sched Direct Password', diff --git a/streammasterwebui/lib/redux/hooks.ts b/streammasterwebui/lib/redux/hooks.ts index ec3d51f3b..a757faf0f 100644 --- a/streammasterwebui/lib/redux/hooks.ts +++ b/streammasterwebui/lib/redux/hooks.ts @@ -1,11 +1,9 @@ -import { - useDispatch, - useSelector, - type TypedUseSelectorHook -} from 'react-redux'; +import { useDispatch, useSelector, type TypedUseSelectorHook } from 'react-redux'; import { AppDispatch, type RootState } from './store'; // Use throughout your app instead of plain `useDispatch` and `useSelector` -interface DispatchFunction { (): AppDispatch; } +interface DispatchFunction { + (): AppDispatch; +} export const useAppDispatch: DispatchFunction = useDispatch; export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/streammasterwebui/lib/redux/slices/appInfoSlice.ts b/streammasterwebui/lib/redux/slices/appInfoSlice.ts index 8ee2ae9b2..426629619 100644 --- a/streammasterwebui/lib/redux/slices/appInfoSlice.ts +++ b/streammasterwebui/lib/redux/slices/appInfoSlice.ts @@ -2,9 +2,9 @@ import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import { type RootState } from '../store'; interface AppInfoPayload { - appName?: string - isHubConnected: boolean - isHubDisconnected: boolean + appName?: string; + isHubConnected: boolean; + isHubDisconnected: boolean; } const initialState: AppInfoPayload = { diff --git a/streammasterwebui/lib/redux/slices/channelGroupToRemoveSlice.ts b/streammasterwebui/lib/redux/slices/channelGroupToRemoveSlice.ts index c02c91963..655eca9e8 100644 --- a/streammasterwebui/lib/redux/slices/channelGroupToRemoveSlice.ts +++ b/streammasterwebui/lib/redux/slices/channelGroupToRemoveSlice.ts @@ -3,11 +3,11 @@ import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import { type RootState } from '../store'; interface SetChannelGroupToRemoveSlicePayload { - toRemove: number - typename: string + toRemove: number; + typename: string; } -type QueryFilterState = Record +type QueryFilterState = Record; const initialState: QueryFilterState = {}; @@ -15,10 +15,7 @@ const channelGroupToRemoveSlice = createSlice({ initialState, name: 'channelGroupToRemove', reducers: { - setChannelGroupToRemove: ( - state, - action: PayloadAction - ) => { + setChannelGroupToRemove: (state, action: PayloadAction) => { const { typename, toRemove } = action.payload; if (toRemove !== null && toRemove !== undefined) { diff --git a/streammasterwebui/lib/redux/slices/queryAdditionalFiltersSlice.ts b/streammasterwebui/lib/redux/slices/queryAdditionalFiltersSlice.ts index b3cd09d95..92cc8f67f 100644 --- a/streammasterwebui/lib/redux/slices/queryAdditionalFiltersSlice.ts +++ b/streammasterwebui/lib/redux/slices/queryAdditionalFiltersSlice.ts @@ -3,14 +3,11 @@ import { type RootState } from '../store'; import { type AdditionalFilterProps as AdditionalFilterProperties } from '../../common/common'; interface SetQueryAdditionalFilterPayload { - filter: AdditionalFilterProperties | null | undefined - typename: string + filter: AdditionalFilterProperties | null | undefined; + typename: string; } -type QueryAdditionalFiltersState = Record< - string, - AdditionalFilterProperties | undefined -> +type QueryAdditionalFiltersState = Record; const initialState: QueryAdditionalFiltersState = {}; @@ -18,10 +15,7 @@ const queryAdditionalFiltersSlice = createSlice({ initialState, name: 'queryAdditionalFilters', reducers: { - setQueryAdditionalFilter: ( - state, - action: PayloadAction - ) => { + setQueryAdditionalFilter: (state, action: PayloadAction) => { const { typename, filter } = action.payload; if (filter !== null && filter !== undefined) { @@ -33,9 +27,6 @@ const queryAdditionalFiltersSlice = createSlice({ } }); -export const selectQueryAdditionalFilters = ( - state: RootState, - typename: string -) => state.queryAdditionalFilters[typename]; +export const selectQueryAdditionalFilters = (state: RootState, typename: string) => state.queryAdditionalFilters[typename]; export const { setQueryAdditionalFilter } = queryAdditionalFiltersSlice.actions; export default queryAdditionalFiltersSlice.reducer; diff --git a/streammasterwebui/lib/redux/slices/queryFilterSlice.ts b/streammasterwebui/lib/redux/slices/queryFilterSlice.ts index b36b141a7..b9de2bbba 100644 --- a/streammasterwebui/lib/redux/slices/queryFilterSlice.ts +++ b/streammasterwebui/lib/redux/slices/queryFilterSlice.ts @@ -3,11 +3,11 @@ import { type RootState } from '../store'; import { type GetApiArg as GetApiArgument } from '../../common/common'; interface SetQueryFilterPayload { - filter: GetApiArgument | undefined - typename: string + filter: GetApiArgument | undefined; + typename: string; } -type QueryFilterState = Record +type QueryFilterState = Record; const initialState: QueryFilterState = {}; @@ -15,10 +15,7 @@ const queryFilterSlice = createSlice({ initialState, name: 'queryFilter', reducers: { - setQueryFilterInternal: ( - state, - action: PayloadAction - ) => { + setQueryFilterInternal: (state, action: PayloadAction) => { const { typename, filter } = action.payload; if (filter !== null && filter !== undefined) { diff --git a/streammasterwebui/lib/redux/slices/selectAllSlice.ts b/streammasterwebui/lib/redux/slices/selectAllSlice.ts index c80bbef96..6cc74e49d 100644 --- a/streammasterwebui/lib/redux/slices/selectAllSlice.ts +++ b/streammasterwebui/lib/redux/slices/selectAllSlice.ts @@ -2,11 +2,11 @@ import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import { type RootState } from '../store'; interface SetSelectAllPayload { - isSelectAll: boolean - typename: string + isSelectAll: boolean; + typename: string; } -type SelectAllState = Record +type SelectAllState = Record; const initialState: SelectAllState = {}; @@ -14,10 +14,7 @@ const selectAllSlice = createSlice({ initialState, name: 'selectAll', reducers: { - setSelectAllInternal: ( - state, - action: PayloadAction - ) => { + setSelectAllInternal: (state, action: PayloadAction) => { const { typename, isSelectAll } = action.payload; state[typename] = isSelectAll; diff --git a/streammasterwebui/lib/redux/slices/selectedItemsSlice.ts b/streammasterwebui/lib/redux/slices/selectedItemsSlice.ts index 4ee72b6d5..3195dd1ea 100644 --- a/streammasterwebui/lib/redux/slices/selectedItemsSlice.ts +++ b/streammasterwebui/lib/redux/slices/selectedItemsSlice.ts @@ -2,11 +2,11 @@ import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import { RootState } from '../store'; interface SetSelectedItemsPayload { - items: any | undefined - typename: string + items: any | undefined; + typename: string; } -type QuerySelectedItemsState = Record +type QuerySelectedItemsState = Record; const initialState: QuerySelectedItemsState = {}; @@ -14,10 +14,7 @@ const selectedItemsSlice = createSlice({ initialState, name: 'selectedItems', reducers: { - setSelectedItemsInternal: ( - state, - action: PayloadAction - ) => { + setSelectedItemsInternal: (state, action: PayloadAction) => { const { typename, items } = action.payload; if (!state[typename]) { diff --git a/streammasterwebui/lib/redux/slices/showHiddenSlice.ts b/streammasterwebui/lib/redux/slices/showHiddenSlice.ts index 141f08baa..c93dc01b0 100644 --- a/streammasterwebui/lib/redux/slices/showHiddenSlice.ts +++ b/streammasterwebui/lib/redux/slices/showHiddenSlice.ts @@ -2,11 +2,11 @@ import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import { RootState } from '../store'; interface SetShowHiddenPayload { - hidden: boolean | null | undefined - typename: string + hidden: boolean | null | undefined; + typename: string; } -type ShowHiddenState = Record +type ShowHiddenState = Record; const initialState: ShowHiddenState = {}; @@ -14,10 +14,7 @@ const showHiddenSlice = createSlice({ initialState, name: 'showHidden', reducers: { - setShowHiddenInternal: ( - state, - action: PayloadAction - ) => { + setShowHiddenInternal: (state, action: PayloadAction) => { const { typename, hidden } = action.payload; state[typename] = hidden; diff --git a/streammasterwebui/lib/redux/slices/sortInfoSlice.ts b/streammasterwebui/lib/redux/slices/sortInfoSlice.ts index 0a17bd62d..cdb0e9a51 100644 --- a/streammasterwebui/lib/redux/slices/sortInfoSlice.ts +++ b/streammasterwebui/lib/redux/slices/sortInfoSlice.ts @@ -69,9 +69,9 @@ const sortInfoSlice = createSlice({ if (state[typename].sortField && state[typename].sortOrder) { const newValue = state[typename].sortField - ? (state[typename].sortOrder === -1 + ? state[typename].sortOrder === -1 ? `${state[typename].sortField} desc` - : `${state[typename].sortField} asc`) + : `${state[typename].sortField} asc` : ''; // const res = updateOrderBy(state[typename].orderBy, newValue); diff --git a/streammasterwebui/lib/redux/slices/useAppInfo.ts b/streammasterwebui/lib/redux/slices/useAppInfo.ts index 8108757a4..0db3f7ecd 100644 --- a/streammasterwebui/lib/redux/slices/useAppInfo.ts +++ b/streammasterwebui/lib/redux/slices/useAppInfo.ts @@ -1,9 +1,6 @@ import { useDispatch, useSelector } from 'react-redux'; import { type AppDispatch, type RootState } from '../store'; -import { - setHubDisconnected as setDisconnectedInternal, - setHubConnected as setHubConnectedInternal -} from './appInfoSlice'; +import { setHubDisconnected as setDisconnectedInternal, setHubConnected as setHubConnectedInternal } from './appInfoSlice'; export const useAppInfo = () => { const dispatch: AppDispatch = useDispatch(); @@ -16,9 +13,7 @@ export const useAppInfo = () => { dispatch(setHubConnectedInternal(isHubConnectedValue)); }; - const isHubConnected = useSelector( - (rootState: RootState) => rootState.appInfo.isHubConnected - ); + const isHubConnected = useSelector((rootState: RootState) => rootState.appInfo.isHubConnected); return { isHubConnected, setHubConnected, setHubDisconnected }; }; diff --git a/streammasterwebui/lib/redux/slices/useChannelGroupToRemove.ts b/streammasterwebui/lib/redux/slices/useChannelGroupToRemove.ts index 2aff3efd8..c2fc88b82 100644 --- a/streammasterwebui/lib/redux/slices/useChannelGroupToRemove.ts +++ b/streammasterwebui/lib/redux/slices/useChannelGroupToRemove.ts @@ -14,9 +14,7 @@ export const useChannelGroupToRemove = (typename: string) => { ); }; - const channelGroupToRemove = useSelector( - (rootState: RootState) => rootState.channelGroupToRemove[typename] - ); + const channelGroupToRemove = useSelector((rootState: RootState) => rootState.channelGroupToRemove[typename]); return { channelGroupToRemove, setChannelGroupToRemove }; }; diff --git a/streammasterwebui/lib/redux/slices/useQueryAdditionalFilters.ts b/streammasterwebui/lib/redux/slices/useQueryAdditionalFilters.ts index 4c912b879..c791d6fe8 100644 --- a/streammasterwebui/lib/redux/slices/useQueryAdditionalFilters.ts +++ b/streammasterwebui/lib/redux/slices/useQueryAdditionalFilters.ts @@ -15,9 +15,7 @@ export const useQueryAdditionalFilters = (typename: string) => { ); }; - const queryAdditionalFilter = useSelector( - (rootState: RootState) => rootState.queryAdditionalFilters[typename] - ); + const queryAdditionalFilter = useSelector((rootState: RootState) => rootState.queryAdditionalFilters[typename]); return { queryAdditionalFilter, setQueryAdditionalFilter }; }; diff --git a/streammasterwebui/lib/redux/slices/useQueryFilter.ts b/streammasterwebui/lib/redux/slices/useQueryFilter.ts index 71ff8fe34..c5cf2207a 100644 --- a/streammasterwebui/lib/redux/slices/useQueryFilter.ts +++ b/streammasterwebui/lib/redux/slices/useQueryFilter.ts @@ -15,9 +15,7 @@ export const useQueryFilter = (typename: string) => { ); }; - const queryFilter = useSelector( - (rootState: RootState) => rootState.queryFilter[typename] - ); + const queryFilter = useSelector((rootState: RootState) => rootState.queryFilter[typename]); return { queryFilter, setQueryFilter }; }; diff --git a/streammasterwebui/lib/redux/slices/useSelectAll.ts b/streammasterwebui/lib/redux/slices/useSelectAll.ts index ab1b1c909..2a3675e5a 100644 --- a/streammasterwebui/lib/redux/slices/useSelectAll.ts +++ b/streammasterwebui/lib/redux/slices/useSelectAll.ts @@ -14,9 +14,7 @@ export const useSelectAll = (typename: string) => { ); }; - const selectAll = useSelector( - (rootState: RootState) => rootState.selectAll[typename] - ); + const selectAll = useSelector((rootState: RootState) => rootState.selectAll[typename]); return { selectAll, setSelectAll }; }; diff --git a/streammasterwebui/lib/redux/slices/useSelectedItemsSlice.ts b/streammasterwebui/lib/redux/slices/useSelectedItemsSlice.ts index 640184be5..64af07c4b 100644 --- a/streammasterwebui/lib/redux/slices/useSelectedItemsSlice.ts +++ b/streammasterwebui/lib/redux/slices/useSelectedItemsSlice.ts @@ -26,9 +26,7 @@ export const useSelectedItems = (typename: string) => { ); }; - const rawSelectedItems = useSelector( - (rootState: RootState) => rootState.selectedItems[typename] - ); + const rawSelectedItems = useSelector((rootState: RootState) => rootState.selectedItems[typename]); const selectSelectedItems = castToArrayOfType(rawSelectedItems); return { selectSelectedItems, setSelectSelectedItems }; }; diff --git a/streammasterwebui/lib/redux/slices/useShowHidden.ts b/streammasterwebui/lib/redux/slices/useShowHidden.ts index ec9b20d88..c741b1f12 100644 --- a/streammasterwebui/lib/redux/slices/useShowHidden.ts +++ b/streammasterwebui/lib/redux/slices/useShowHidden.ts @@ -15,9 +15,7 @@ export const useShowHidden = (typename: string) => { ); }; - const showHidden = useSelector( - (rootState: RootState) => rootState.showHidden[typename] - ); + const showHidden = useSelector((rootState: RootState) => rootState.showHidden[typename]); if (showHidden === undefined) { setShowHidden(null); diff --git a/streammasterwebui/lib/redux/slices/useSortInfo.ts b/streammasterwebui/lib/redux/slices/useSortInfo.ts index cce0b6550..9e0982bcb 100644 --- a/streammasterwebui/lib/redux/slices/useSortInfo.ts +++ b/streammasterwebui/lib/redux/slices/useSortInfo.ts @@ -6,10 +6,7 @@ import { setSortInfoInternal } from './sortInfoSlice'; export const useSortInfo = (typename: string) => { const dispatch: AppDispatch = useDispatch(); - const setSortInfo = (isSortInfo: { - sortField?: string - sortOrder?: -1 | 0 | 1 - }) => { + const setSortInfo = (isSortInfo: { sortField?: string; sortOrder?: -1 | 0 | 1 }) => { dispatch( setSortInfoInternal({ sortField: isSortInfo.sortField, @@ -19,9 +16,7 @@ export const useSortInfo = (typename: string) => { ); }; - const sortInfo = useSelector( - (rootState: RootState) => rootState.sortInfo[typename] - ); + const sortInfo = useSelector((rootState: RootState) => rootState.sortInfo[typename]); return { setSortInfo, sortInfo }; }; diff --git a/streammasterwebui/lib/settings.ts b/streammasterwebui/lib/settings.ts index 93a01f977..40d53245b 100644 --- a/streammasterwebui/lib/settings.ts +++ b/streammasterwebui/lib/settings.ts @@ -2,6 +2,4 @@ export const isClient = typeof window !== 'undefined'; export const isDev = process.env.NODE_ENV === 'development'; -export const baseHostURL = isClient && !isDev - ? `${window.location.protocol}//${window.location.host}` - : 'http://127.0.0.1:7095'; +export const baseHostURL = isClient && !isDev ? `${window.location.protocol}//${window.location.host}` : 'http://127.0.0.1:7095'; diff --git a/streammasterwebui/lib/signalr/createSingletonListener.ts b/streammasterwebui/lib/signalr/createSingletonListener.ts index e03a9b1cd..5a7967a57 100644 --- a/streammasterwebui/lib/signalr/createSingletonListener.ts +++ b/streammasterwebui/lib/signalr/createSingletonListener.ts @@ -1,14 +1,11 @@ import { isDev as isDevelopment } from '../settings'; export interface SingletonListener { - addListener: (callback: (data: any) => void) => void - removeListener: (callback: (data: any) => void) => void + addListener: (callback: (data: any) => void) => void; + removeListener: (callback: (data: any) => void) => void; } -export function createSingletonListener( - messageName: string, - connection: signalR.HubConnection -): SingletonListener { +export function createSingletonListener(messageName: string, connection: signalR.HubConnection): SingletonListener { let listenerCount = 0; return { diff --git a/streammasterwebui/lib/signalr/singletonListeners.ts b/streammasterwebui/lib/signalr/singletonListeners.ts index 6136d883a..db2a5739f 100644 --- a/streammasterwebui/lib/signalr/singletonListeners.ts +++ b/streammasterwebui/lib/signalr/singletonListeners.ts @@ -1,63 +1,18 @@ import { createSingletonListener } from './createSingletonListener'; import { hubConnection } from './signalr'; -export const singletonChannelGroupsListener = createSingletonListener( - 'ChannelGroupsRefresh', - hubConnection -); -export const singletonEPGFilesListener = createSingletonListener( - 'EPGFilesRefresh', - hubConnection -); -export const singletonM3UFilesListener = createSingletonListener( - 'M3UFilesRefresh', - hubConnection -); -export const singletonProgrammesListener = createSingletonListener( - 'ProgrammesRefresh', - hubConnection -); -export const singletonSchedulesDirectListener = createSingletonListener( - 'SchedulesDirectsRefresh', - hubConnection -); -export const singletonSettingsListener = createSingletonListener( - 'SettingsRefresh', - hubConnection -); -export const singletonStreamGroupChannelGroupListener = createSingletonListener( - 'StreamGroupChannelGroupsRefresh', - hubConnection -); -export const singletonStreamGroupVideoStreamsListener = createSingletonListener( - 'StreamGroupVideoStreamsRefresh', - hubConnection -); -export const singletonStreamGroupsListener = createSingletonListener( - 'StreamGroupsRefresh', - hubConnection -); -export const singletonVideoStreamLinksListener = createSingletonListener( - 'VideoStreamLinksRefresh', - hubConnection -); -export const singletonVideoStreamLinksRemoveListener = createSingletonListener( - 'VideoStreamLinksRemove', - hubConnection -); -export const singletonVideoStreamsListener = createSingletonListener( - 'VideoStreamsRefresh', - hubConnection -); -export const singletonIconsListener = createSingletonListener( - 'IconsRefresh', - hubConnection -); -export const singletonLogsListener = createSingletonListener( - 'LogsRefresh', - hubConnection -); -export const singletonStatisticListener = createSingletonListener( - 'streamstatisticsresultsupdate', - hubConnection -); +export const singletonChannelGroupsListener = createSingletonListener('ChannelGroupsRefresh', hubConnection); +export const singletonEPGFilesListener = createSingletonListener('EPGFilesRefresh', hubConnection); +export const singletonM3UFilesListener = createSingletonListener('M3UFilesRefresh', hubConnection); +export const singletonProgrammesListener = createSingletonListener('ProgrammesRefresh', hubConnection); +export const singletonSchedulesDirectListener = createSingletonListener('SchedulesDirectsRefresh', hubConnection); +export const singletonSettingsListener = createSingletonListener('SettingsRefresh', hubConnection); +export const singletonStreamGroupChannelGroupListener = createSingletonListener('StreamGroupChannelGroupsRefresh', hubConnection); +export const singletonStreamGroupVideoStreamsListener = createSingletonListener('StreamGroupVideoStreamsRefresh', hubConnection); +export const singletonStreamGroupsListener = createSingletonListener('StreamGroupsRefresh', hubConnection); +export const singletonVideoStreamLinksListener = createSingletonListener('VideoStreamLinksRefresh', hubConnection); +export const singletonVideoStreamLinksRemoveListener = createSingletonListener('VideoStreamLinksRemove', hubConnection); +export const singletonVideoStreamsListener = createSingletonListener('VideoStreamsRefresh', hubConnection); +export const singletonIconsListener = createSingletonListener('IconsRefresh', hubConnection); +export const singletonLogsListener = createSingletonListener('LogsRefresh', hubConnection); +export const singletonStatisticListener = createSingletonListener('streamstatisticsresultsupdate', hubConnection); diff --git a/streammasterwebui/lib/styles/dataSelector.css b/streammasterwebui/lib/styles/dataSelector.css index 984eee859..21d00d143 100644 --- a/streammasterwebui/lib/styles/dataSelector.css +++ b/streammasterwebui/lib/styles/dataSelector.css @@ -66,7 +66,7 @@ padding-bottom: 0rem !important; } -.dataselector .p-datatable .p-datatable-tbody>tr>td { +.dataselector .p-datatable .p-datatable-tbody > tr > td { padding: 0.1rem 0 !important; height: 1.8rem !important; max-height: 1.8rem !important; @@ -87,4 +87,4 @@ .p-datatable-header { padding: 0 !important; -} \ No newline at end of file +} diff --git a/streammasterwebui/lib/styles/index.css b/streammasterwebui/lib/styles/index.css index c68b85cce..0174ebcfd 100644 --- a/streammasterwebui/lib/styles/index.css +++ b/streammasterwebui/lib/styles/index.css @@ -10,7 +10,6 @@ body { -moz-osx-font-smoothing: grayscale; height: 98vh; - } h2 { @@ -25,4 +24,4 @@ h2 { .card { background: var(--surface-card); margin-bottom: 1rem; -} \ No newline at end of file +} diff --git a/streammasterwebui/lib/styles/theme.css b/streammasterwebui/lib/styles/theme.css index aff9e9e78..b83751ee8 100644 --- a/streammasterwebui/lib/styles/theme.css +++ b/streammasterwebui/lib/styles/theme.css @@ -20,7 +20,7 @@ --button-success-bg: #6dc831ee; --focus-border-color: var(--blue-500); --input-height: 1.4rem; - --dropdown-input-height: 2.0rem; + --dropdown-input-height: 2rem; --orange-color: #fe7600; } @@ -239,14 +239,10 @@ color: #0e1315; } */ - .p-inputgroup-addon { padding: 0.5rem !important; } - - - .p-inputnumber-buttons-stacked { align-items: center !important; } @@ -262,4 +258,4 @@ .p-fieldset-legend { color: var(--main-border-color); -} \ No newline at end of file +} diff --git a/streammasterwebui/public/Content/Fonts/fonts.css b/streammasterwebui/public/Content/Fonts/fonts.css index f62b65b06..4818200bc 100644 --- a/streammasterwebui/public/Content/Fonts/fonts.css +++ b/streammasterwebui/public/Content/Fonts/fonts.css @@ -2,19 +2,14 @@ font-weight: 300; font-style: normal; font-family: 'Roboto'; - src: - url('Roboto-Light.woff2?v=1.3.0') format('woff2'), - url('Roboto-Light.woff?v=1.3.0') format('woff'), - url('Roboto-Light.ttf?v=1.3.0') format('truetype'); + src: url('Roboto-Light.woff2?v=1.3.0') format('woff2'), url('Roboto-Light.woff?v=1.3.0') format('woff'), url('Roboto-Light.ttf?v=1.3.0') format('truetype'); } @font-face { font-weight: 400; font-style: normal; font-family: 'Roboto'; - src: - url('Roboto-Regular.woff2?v=1.3.0') format('woff2'), - url('Roboto-Regular.woff?v=1.3.0') format('woff'), + src: url('Roboto-Regular.woff2?v=1.3.0') format('woff2'), url('Roboto-Regular.woff?v=1.3.0') format('woff'), url('Roboto-Regular.ttf?v=1.3.0') format('truetype'); } @@ -22,9 +17,7 @@ font-weight: normal; font-style: normal; font-family: 'Roboto'; - src: - url('Roboto-Regular.woff2?v=1.3.0') format('woff2'), - url('Roboto-Regular.woff?v=1.3.0') format('woff'), + src: url('Roboto-Regular.woff2?v=1.3.0') format('woff2'), url('Roboto-Regular.woff?v=1.3.0') format('woff'), url('Roboto-Regular.ttf?v=1.3.0') format('truetype'); } @@ -32,9 +25,7 @@ font-weight: 400; font-style: normal; font-family: 'Ubuntu Mono'; - src: - url('UbuntuMono-Regular.eot?#iefix&v=1.3.0') format('embedded-opentype'), - url('UbuntuMono-Regular.woff?v=1.3.0') format('woff'), + src: url('UbuntuMono-Regular.eot?#iefix&v=1.3.0') format('embedded-opentype'), url('UbuntuMono-Regular.woff?v=1.3.0') format('woff'), url('UbuntuMono-Regular.ttf?v=1.3.0') format('truetype'); } @@ -46,7 +37,5 @@ font-weight: normal; font-style: normal; font-family: 'text-security-disc'; - src: - url('text-security-disc.woff?v=1.3.0') format('woff'), - url('text-security-disc.ttf?v=1.3.0') format('truetype'); + src: url('text-security-disc.woff?v=1.3.0') format('woff'), url('text-security-disc.ttf?v=1.3.0') format('truetype'); } diff --git a/streammasterwebui/public/index.html b/streammasterwebui/public/index.html index f94b47c8c..cd4e59316 100644 --- a/streammasterwebui/public/index.html +++ b/streammasterwebui/public/index.html @@ -1,4 +1,4 @@ - + @@ -7,10 +7,7 @@ - +