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 { useAudioDevices } from '/@/renderer/features/settings/components/playback/audio-settings'; import { ListConfigBooleanControl, ListConfigTable, } from '/@/renderer/features/shared/components/list-config-menu'; 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, useHotkeySettings, usePlaybackSettings, usePlaybackType, usePlayerData, usePlayerMuted, usePlayerSong, usePlayerVolume, useSetFullScreenPlayerStore, useSettingsStoreActions, useShowFavorites, useShowRatings, useSidebarRightExpanded, useSideQueueType, useVolumeMax, 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 { ContextMenu } from '/@/shared/components/context-menu/context-menu'; 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 { Slider } from '/@/shared/components/slider/slider'; import { Stack } from '/@/shared/components/stack/stack'; 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'; import { PlayerType } from '/@/shared/types/types'; const calculateVolumeUp = (volume: number, volumeWheelStep: number, volumeMax: number) => { let volumeToSet: number; const newVolumeGreaterThanMax = volume + volumeWheelStep > volumeMax; if (newVolumeGreaterThanMax) { volumeToSet = volumeMax; } 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 = useShowRatings(); const showFavorites = useShowFavorites(); return ( {showRatings && } {showFavorites && } ); }; const AutoDJButton = () => { const { t } = useTranslation(); const settings = useAutoDJSettings(); const { setSettings } = useSettingsStoreActions(); 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 strategyTitle = settings.mode === AUTO_DJ_MODE.ALBUMS ? t('setting.autoDJ_albumStrategy') : t('setting.autoDJ_songStrategy'); const strategyValue = settings.mode === AUTO_DJ_MODE.ALBUMS ? (settings.albumStrategy ?? AUTO_DJ_STRATEGY.SIMILAR) : (settings.songStrategy ?? AUTO_DJ_STRATEGY.SIMILAR); const enabledOptions = useMemo( () => [ { component: ( { setSettings({ autoDJ: { enabled: value }, }); }} value={settings.enabled} /> ), id: 'enabled', label: t('setting.autoDJ_enabled'), }, ], [setSettings, settings.enabled, t], ); const configOptions = useMemo( () => [ { component: (