import { t } from 'i18next'; import { useCallback, useEffect, useMemo, useState, WheelEvent } from 'react'; import { useTranslation } from 'react-i18next'; import { PopoverPlayQueue } from '/@/renderer/features/now-playing/components/popover-play-queue'; import { PlayerConfig } from '/@/renderer/features/player/components/player-config'; import { CustomPlayerbarSlider } from '/@/renderer/features/player/components/playerbar-slider'; import { SleepTimerButton } from '/@/renderer/features/player/components/sleep-timer-button'; import { usePlayer } from '/@/renderer/features/player/context/player-context'; import { useSetRating } from '/@/renderer/features/shared/hooks/use-set-rating'; import { useCreateFavorite } from '/@/renderer/features/shared/mutations/create-favorite-mutation'; import { useDeleteFavorite } from '/@/renderer/features/shared/mutations/delete-favorite-mutation'; import { useHotkeys } from '/@/renderer/hooks/use-hotkeys'; import { AUTO_DJ_MODE, AUTO_DJ_STRATEGY, type AutoDJStrategy, useAppStoreActions, useAutoDJSettings, useCurrentServer, useFullScreenPlayerStore, useGeneralSettings, useHotkeySettings, usePlayerData, usePlayerMuted, usePlayerSong, usePlayerVolume, useSetFullScreenPlayerStore, useSettingsStoreActions, useSidebarRightExpanded, useSideQueueType, useVolumeWheelStep, useVolumeWidth, } from '/@/renderer/store'; import { useFullScreenPlayerStoreActions } from '/@/renderer/store/full-screen-player.store'; import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { Button } from '/@/shared/components/button/button'; import { Flex } from '/@/shared/components/flex/flex'; import { Group } from '/@/shared/components/group/group'; import { NumberInput } from '/@/shared/components/number-input/number-input'; import { Paper } from '/@/shared/components/paper/paper'; import { Popover } from '/@/shared/components/popover/popover'; import { Rating } from '/@/shared/components/rating/rating'; import { SegmentedControl } from '/@/shared/components/segmented-control/segmented-control'; import { Select } from '/@/shared/components/select/select'; import { Stack } from '/@/shared/components/stack/stack'; import { Switch } from '/@/shared/components/switch/switch'; import { Text } from '/@/shared/components/text/text'; import { useMediaQuery } from '/@/shared/hooks/use-media-query'; import { useThrottledCallback } from '/@/shared/hooks/use-throttled-callback'; import { useThrottledValue } from '/@/shared/hooks/use-throttled-value'; import { LibraryItem, QueueSong, ServerType } from '/@/shared/types/domain-types'; const calculateVolumeUp = (volume: number, volumeWheelStep: number) => { let volumeToSet: number; const newVolumeGreaterThanHundred = volume + volumeWheelStep > 100; if (newVolumeGreaterThanHundred) { volumeToSet = 100; } else { volumeToSet = volume + volumeWheelStep; } return volumeToSet; }; const calculateVolumeDown = (volume: number, volumeWheelStep: number) => { let volumeToSet: number; const newVolumeLessThanZero = volume - volumeWheelStep < 0; if (newVolumeLessThanZero) { volumeToSet = 0; } else { volumeToSet = volume - volumeWheelStep; } return volumeToSet; }; export const RightControls = () => { const { showRatings } = useGeneralSettings(); return ( {showRatings && } ); }; const AutoDJButton = () => { const { t } = useTranslation(); const settings = useAutoDJSettings(); const { setSettings } = useSettingsStoreActions(); const itemLabels = useMemo(() => { return { description: t('setting.autoDJ_itemCount_description'), title: t('setting.autoDJ_itemCount'), }; }, [t]); const strategySelectData = useMemo( () => [ { label: t('setting.autoDJ_strategy_option_similar'), value: AUTO_DJ_STRATEGY.SIMILAR, }, { label: t('setting.autoDJ_strategy_option_library_random'), value: AUTO_DJ_STRATEGY.LIBRARY_RANDOM, }, ], [t], ); const strategyLabels = settings.mode === AUTO_DJ_MODE.ALBUMS ? { description: '', title: t('setting.autoDJ_albumStrategy'), } : { description: '', title: t('setting.autoDJ_songStrategy'), }; const strategyValue = settings.mode === AUTO_DJ_MODE.ALBUMS ? (settings.albumStrategy ?? AUTO_DJ_STRATEGY.SIMILAR) : (settings.songStrategy ?? AUTO_DJ_STRATEGY.SIMILAR); return ( e.stopPropagation()} p="sm"> {t('setting.autoDJ_enabled')} setSettings({ autoDJ: { enabled: e.currentTarget.checked }, }) } /> setSettings({ autoDJ: { mode: value as 'albums' | 'songs', }, }) } value={settings.mode} w="100%" />