restructure files onto electron-vite boilerplate

This commit is contained in:
jeffvli 2025-05-18 14:03:18 -07:00
parent 91ce2cd8a1
commit 1cf587bc8f
457 changed files with 9927 additions and 11705 deletions

View file

@ -1,6 +1,11 @@
import { useCallback, useEffect } from 'react';
import isElectron from 'is-electron';
import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/renderer/types';
import debounce from 'lodash/debounce';
import { useCallback, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { toast } from '/@/renderer/components';
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
import { updateSong } from '/@/renderer/features/player/update-remote-song';
import {
useCurrentPlayer,
useCurrentStatus,
@ -12,19 +17,15 @@ import {
useShuffleStatus,
} from '/@/renderer/store';
import { usePlaybackType } from '/@/renderer/store/settings.store';
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
import debounce from 'lodash/debounce';
import { toast } from '/@/renderer/components';
import { useTranslation } from 'react-i18next';
import { updateSong } from '/@/renderer/features/player/update-remote-song';
import { PlaybackType, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/renderer/types';
import { setAutoNext, setQueue, setQueueNext } from '/@/renderer/utils/set-transcoded-queue-data';
const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
const mpvPlayerListener = isElectron() ? window.electron.mpvPlayerListener : null;
const ipc = isElectron() ? window.electron.ipc : null;
const utils = isElectron() ? window.electron.utils : null;
const mpris = isElectron() && utils?.isLinux() ? window.electron.mpris : null;
const remote = isElectron() ? window.electron.remote : null;
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
const mpvPlayerListener = isElectron() ? window.api.mpvPlayerListener : null;
const ipc = isElectron() ? window.api.ipc : null;
const utils = isElectron() ? window.api.utils : null;
const mpris = isElectron() && utils?.isLinux() ? window.api.mpris : null;
const remote = isElectron() ? window.api.remote : null;
const mediaSession = navigator.mediaSession;
export const useCenterControls = (args: { playersRef: any }) => {
@ -32,7 +33,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
const { playersRef } = args;
const currentPlayer = useCurrentPlayer();
const { setShuffle, setRepeat, play, pause, previous, next, setCurrentIndex, autoNext } =
const { autoNext, next, pause, play, previous, setCurrentIndex, setRepeat, setShuffle } =
usePlayerControls();
const setCurrentTime = useSetCurrentTime();
const queue = useDefaultQueue();
@ -45,7 +46,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
const currentPlayerRef = currentPlayer === 1 ? player1Ref : player2Ref;
const nextPlayerRef = currentPlayer === 1 ? player2Ref : player1Ref;
const { handleScrobbleFromSongRestart, handleScrobbleFromSeek } = useScrobble();
const { handleScrobbleFromSeek, handleScrobbleFromSongRestart } = useScrobble();
useEffect(() => {
if (mediaSession) {
@ -226,12 +227,12 @@ export const useCenterControls = (args: { playersRef: any }) => {
};
switch (repeatStatus) {
case PlayerRepeat.NONE:
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ALL:
handleRepeatAll[playbackType]();
break;
case PlayerRepeat.NONE:
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ONE:
handleRepeatOne[playbackType]();
break;
@ -310,12 +311,12 @@ export const useCenterControls = (args: { playersRef: any }) => {
};
switch (repeatStatus) {
case PlayerRepeat.NONE:
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ALL:
handleRepeatAll[playbackType]();
break;
case PlayerRepeat.NONE:
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ONE:
handleRepeatOne[playbackType]();
break;
@ -418,12 +419,12 @@ export const useCenterControls = (args: { playersRef: any }) => {
};
switch (repeatStatus) {
case PlayerRepeat.NONE:
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ALL:
handleRepeatAll[playbackType]();
break;
case PlayerRepeat.NONE:
handleRepeatNone[playbackType]();
break;
case PlayerRepeat.ONE:
handleRepeatOne[playbackType]();
break;
@ -510,7 +511,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
}, 100);
const handleSeekSlider = useCallback(
(e: number | any) => {
(e: any | number) => {
setCurrentTime(e, true);
handleScrobbleFromSeek(e);
debouncedSeek(e);
@ -564,6 +565,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
});
mpvPlayerListener.rendererCurrentTime((_event: any, time: number) => {
console.log('time :>> ', time);
setCurrentTime(time);
});

View file

@ -1,31 +1,32 @@
import { useCallback, useRef } from 'react';
import { useQueryClient } from '@tanstack/react-query';
import { useCurrentServer, usePlayerControls, usePlayerStore } from '/@/renderer/store';
import { useGeneralSettings, usePlaybackType } from '/@/renderer/store/settings.store';
import { PlayQueueAddOptions, Play, PlaybackType } from '/@/renderer/types';
import { toast } from '/@/renderer/components/toast/index';
import isElectron from 'is-electron';
import { nanoid } from 'nanoid/non-secure';
import { useCallback, useRef } from 'react';
import { useTranslation } from 'react-i18next';
import { queryKeys } from '/@/renderer/api/query-keys';
import {
instanceOfCancellationError,
LibraryItem,
QueueSong,
Song,
SongListResponse,
instanceOfCancellationError,
} from '/@/renderer/api/types';
import {
getPlaylistSongsById,
getSongById,
getAlbumSongsById,
getAlbumArtistSongsById,
getSongsByQuery,
getGenreSongsById,
getArtistSongsById,
} from '/@/renderer/features/player/utils';
import { queryKeys } from '/@/renderer/api/query-keys';
import { useTranslation } from 'react-i18next';
import { toast } from '/@/renderer/components/toast/index';
import { PlayersRef } from '/@/renderer/features/player/ref/players-ref';
import { updateSong } from '/@/renderer/features/player/update-remote-song';
import {
getAlbumArtistSongsById,
getAlbumSongsById,
getArtistSongsById,
getGenreSongsById,
getPlaylistSongsById,
getSongById,
getSongsByQuery,
} from '/@/renderer/features/player/utils';
import { useCurrentServer, usePlayerControls, usePlayerStore } from '/@/renderer/store';
import { useGeneralSettings, usePlaybackType } from '/@/renderer/store/settings.store';
import { Play, PlaybackType, PlayQueueAddOptions } from '/@/renderer/types';
import { setQueue, setQueueNext } from '/@/renderer/utils/set-transcoded-queue-data';
const getRootQueryKey = (itemType: LibraryItem, serverId: string) => {
@ -55,7 +56,7 @@ const getRootQueryKey = (itemType: LibraryItem, serverId: string) => {
return queryKey;
};
const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
const addToQueue = usePlayerStore.getState().actions.addToQueue;
@ -65,20 +66,20 @@ export const useHandlePlayQueueAdd = () => {
const playbackType = usePlaybackType();
const server = useCurrentServer();
const { play } = usePlayerControls();
const timeoutIds = useRef<Record<string, ReturnType<typeof setTimeout>> | null>({});
const timeoutIds = useRef<null | Record<string, ReturnType<typeof setTimeout>>>({});
const { doubleClickQueueAll } = useGeneralSettings();
const handlePlayQueueAdd = useCallback(
async (options: PlayQueueAddOptions) => {
if (!server) return toast.error({ message: 'No server selected', type: 'error' });
const { initialIndex, initialSongId, playType, byData, byItemType, query } = options;
let songs: QueueSong[] | null = null;
const { byData, byItemType, initialIndex, initialSongId, playType, query } = options;
let songs: null | QueueSong[] = null;
let initialSongIndex = 0;
if (byItemType) {
let songList: SongListResponse | undefined;
const { type: itemType, id } = byItemType;
const { id, type: itemType } = byItemType;
const fetchId = nanoid();
timeoutIds.current = {

View file

@ -1,4 +1,5 @@
import { useContext } from 'react';
import { PlayQueueHandlerContext } from '/@/renderer/features/player/context/play-queue-handler-context';
export const usePlayQueueAdd = () => {

View file

@ -1,5 +1,6 @@
import { useCallback, useEffect, WheelEvent } from 'react';
import isElectron from 'is-electron';
import { useCallback, useEffect, WheelEvent } from 'react';
import {
useMuted,
usePlayerControls,
@ -9,10 +10,10 @@ import {
} from '/@/renderer/store';
import { useGeneralSettings } from '/@/renderer/store/settings.store';
const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
const mpvPlayerListener = isElectron() ? window.electron.mpvPlayerListener : null;
const ipc = isElectron() ? window.electron.ipc : null;
const remote = isElectron() ? window.electron.remote : null;
const mpvPlayer = isElectron() ? window.api.mpvPlayer : null;
const mpvPlayerListener = isElectron() ? window.api.mpvPlayerListener : null;
const ipc = isElectron() ? window.api.ipc : null;
const remote = isElectron() ? window.api.remote : null;
const calculateVolumeUp = (volume: number, volumeWheelStep: number) => {
let volumeToSet;
@ -39,7 +40,7 @@ const calculateVolumeDown = (volume: number, volumeWheelStep: number) => {
};
export const useRightControls = () => {
const { setVolume, setMuted } = usePlayerControls();
const { setMuted, setVolume } = usePlayerControls();
const volume = useVolume();
const muted = useMuted();
const { volumeWheelStep } = useGeneralSettings();
@ -98,7 +99,7 @@ export const useRightControls = () => {
}, [setVolume, volume, volumeWheelStep]);
const handleVolumeWheel = useCallback(
(e: WheelEvent<HTMLDivElement | HTMLButtonElement>) => {
(e: WheelEvent<HTMLButtonElement | HTMLDivElement>) => {
let volumeToSet;
if (e.deltaY > 0 || e.deltaX > 0) {
volumeToSet = calculateVolumeDown(volume, volumeWheelStep);

View file

@ -1,4 +1,5 @@
import { useEffect, useCallback, useState, useRef } from 'react';
import { useCallback, useEffect, useRef, useState } from 'react';
import { QueueSong, ServerType } from '/@/renderer/api/types';
import { useSendScrobble } from '/@/renderer/features/player/mutations/scrobble-mutation';
import { usePlayerStore } from '/@/renderer/store';
@ -82,12 +83,12 @@ export const useScrobble = () => {
[isScrobbleEnabled, sendScrobble],
);
const progressIntervalId = useRef<ReturnType<typeof setInterval> | null>(null);
const songChangeTimeoutId = useRef<ReturnType<typeof setTimeout> | null>(null);
const progressIntervalId = useRef<null | ReturnType<typeof setInterval>>(null);
const songChangeTimeoutId = useRef<null | ReturnType<typeof setTimeout>>(null);
const handleScrobbleFromSongChange = useCallback(
(
current: (QueueSong | number | undefined)[],
previous: (QueueSong | number | undefined)[],
current: (number | QueueSong | undefined)[],
previous: (number | QueueSong | undefined)[],
) => {
if (!isScrobbleEnabled) return;
@ -179,8 +180,8 @@ export const useScrobble = () => {
const handleScrobbleFromStatusChange = useCallback(
(
current: (PlayerStatus | number | undefined)[],
previous: (PlayerStatus | number | undefined)[],
current: (number | PlayerStatus | undefined)[],
previous: (number | PlayerStatus | undefined)[],
) => {
if (!isScrobbleEnabled) return;

View file

@ -1,7 +1,8 @@
import { useContext } from 'react';
import { WebAudioContext } from '/@/renderer/features/player/context/webaudio-context';
export const useWebAudio = () => {
const { webAudio, setWebAudio } = useContext(WebAudioContext);
const { setWebAudio, webAudio } = useContext(WebAudioContext);
return { setWebAudio, webAudio };
};