mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-18 00:55:50 +00:00
Updated Guide component and utils
This commit is contained in:
parent
275a93b9b5
commit
688ca2b405
3 changed files with 513 additions and 692 deletions
|
|
@ -33,12 +33,10 @@ import { useElementSize } from '@mantine/hooks';
|
|||
import { VariableSizeList } from 'react-window';
|
||||
import {
|
||||
buildChannelIdMap,
|
||||
calculateDesiredScrollPosition,
|
||||
calculateEarliestProgramStart,
|
||||
calculateEnd,
|
||||
calculateHourTimeline,
|
||||
calculateLatestProgramEnd,
|
||||
calculateLeftScrollPosition,
|
||||
calculateNowPosition,
|
||||
calculateScrollPosition,
|
||||
calculateScrollPositionByTimeClick,
|
||||
|
|
@ -47,7 +45,6 @@ import {
|
|||
computeRowHeights,
|
||||
createRecording,
|
||||
createSeriesRule,
|
||||
evaluateSeriesRule,
|
||||
fetchPrograms,
|
||||
fetchRules,
|
||||
filterGuideChannels,
|
||||
|
|
@ -66,6 +63,7 @@ import {
|
|||
PX_PER_MS,
|
||||
calcProgressPct,
|
||||
sortChannels,
|
||||
evaluateSeriesRulesByTvgId,
|
||||
} from '../utils/guideUtils';
|
||||
import API from '../api';
|
||||
import { getShowVideoUrl } from '../utils/cards/RecordingCardUtils.js';
|
||||
|
|
@ -739,13 +737,22 @@ export default function TVChannelGuide({ startDate, endDate }) {
|
|||
return;
|
||||
}
|
||||
|
||||
await createRecording(channel, program);
|
||||
await createRecording({
|
||||
channel: `${channel.id}`,
|
||||
start_time: program.start_time,
|
||||
end_time: program.end_time,
|
||||
custom_properties: { program },
|
||||
});
|
||||
showNotification({ title: 'Recording scheduled' });
|
||||
}, []);
|
||||
|
||||
const saveSeriesRule = useCallback(async (program, mode) => {
|
||||
await createSeriesRule(program, mode);
|
||||
await evaluateSeriesRule(program);
|
||||
await createSeriesRule({
|
||||
tvg_id: program.tvg_id,
|
||||
mode,
|
||||
title: program.title,
|
||||
});
|
||||
await evaluateSeriesRulesByTvgId(program.tvg_id);
|
||||
// recordings_refreshed WS event triggers the debounced fetchRecordings()
|
||||
showNotification({
|
||||
title: mode === 'new' ? 'Record new episodes' : 'Record all episodes',
|
||||
|
|
|
|||
|
|
@ -9,20 +9,36 @@ import useEPGsStore from '../../store/epgs';
|
|||
import useSettingsStore from '../../store/settings';
|
||||
import useVideoStore from '../../store/useVideoStore';
|
||||
import useLocalStorage from '../../hooks/useLocalStorage';
|
||||
import { showNotification } from '../../utils/notificationUtils.js';
|
||||
import * as guideUtils from '../../utils/guideUtils';
|
||||
import * as recordingCardUtils from '../../utils/cards/RecordingCardUtils.js';
|
||||
import * as dateTimeUtils from '../../utils/dateTimeUtils.js';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
|
||||
// Mock dependencies
|
||||
vi.mock('../../store/channels');
|
||||
vi.mock('../../store/logos');
|
||||
vi.mock('../../store/epgs');
|
||||
vi.mock('../../store/settings');
|
||||
vi.mock('../../store/useVideoStore');
|
||||
vi.mock('../../hooks/useLocalStorage');
|
||||
vi.mock('../../api');
|
||||
vi.mock('../../store/channels', () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
vi.mock('../../store/logos', () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
vi.mock('../../store/epgs', () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
vi.mock('../../store/settings', () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
vi.mock('../../store/useVideoStore', () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
vi.mock('../../hooks/useLocalStorage', () => ({
|
||||
default: vi.fn(),
|
||||
}));
|
||||
vi.mock('../../api', () => ({
|
||||
default: {
|
||||
getAllChannelIds: vi.fn(),
|
||||
getChannelsSummary: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock('@mantine/hooks', () => ({
|
||||
useElementSize: () => ({
|
||||
|
|
@ -235,7 +251,7 @@ vi.mock('../../components/forms/SeriesRecordingModal', () => ({
|
|||
}));
|
||||
vi.mock('../../components/ProgramDetailModal', () => ({
|
||||
__esModule: true,
|
||||
default: ({ program, channel, opened, onClose, onRecord }) =>
|
||||
default: ({ program, opened, onClose, onRecord }) =>
|
||||
opened ? (
|
||||
<div data-testid="program-detail-modal">
|
||||
<div>{program?.title}</div>
|
||||
|
|
@ -252,11 +268,11 @@ vi.mock('../../utils/guideUtils', async () => {
|
|||
fetchPrograms: vi.fn(),
|
||||
createRecording: vi.fn(),
|
||||
createSeriesRule: vi.fn(),
|
||||
evaluateSeriesRule: vi.fn(),
|
||||
fetchRules: vi.fn(),
|
||||
filterGuideChannels: vi.fn(),
|
||||
getGroupOptions: vi.fn(),
|
||||
getProfileOptions: vi.fn(),
|
||||
sortChannels: vi.fn((ch) => ch),
|
||||
};
|
||||
});
|
||||
vi.mock('../../utils/cards/RecordingCardUtils.js', async () => {
|
||||
|
|
@ -403,7 +419,6 @@ describe('Guide', () => {
|
|||
);
|
||||
guideUtils.createRecording.mockResolvedValue(undefined);
|
||||
guideUtils.createSeriesRule.mockResolvedValue(undefined);
|
||||
guideUtils.evaluateSeriesRule.mockResolvedValue(undefined);
|
||||
guideUtils.getGroupOptions.mockReturnValue([
|
||||
{ value: 'all', label: 'All Groups' },
|
||||
{ value: 'group-1', label: 'News' },
|
||||
|
|
@ -666,8 +681,7 @@ describe('Guide', () => {
|
|||
|
||||
await waitFor(() => {
|
||||
expect(guideUtils.createRecording).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ id: 'channel-1' }),
|
||||
expect.objectContaining({ id: 'prog-1' })
|
||||
expect.objectContaining({ channel: 'channel-1' }),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue