mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-14 20:40:21 +02:00
feat(player): add server-side autosave capability
This commit is contained in:
@@ -9,6 +9,7 @@ import { MpvPlayer } from '/@/renderer/features/player/audio-player/mpv-player';
|
||||
import { WebPlayer } from '/@/renderer/features/player/audio-player/web-player';
|
||||
import { SleepTimerHook } from '/@/renderer/features/player/components/sleep-timer-button';
|
||||
import { AutoDJHook } from '/@/renderer/features/player/hooks/use-auto-dj';
|
||||
import { AutosaveHook } from '/@/renderer/features/player/hooks/use-autosave';
|
||||
import { MediaSessionHook } from '/@/renderer/features/player/hooks/use-media-session';
|
||||
import { MPRISHook } from '/@/renderer/features/player/hooks/use-mpris';
|
||||
import { PlaybackHotkeysHook } from '/@/renderer/features/player/hooks/use-playback-hotkeys';
|
||||
@@ -64,6 +65,7 @@ export const AudioPlayers = () => {
|
||||
<UpdateCurrentSongHook />
|
||||
<RadioAudioInstanceHook />
|
||||
<RadioMetadataHook />
|
||||
<AutosaveHook />
|
||||
<AudioPlayersContent
|
||||
audioContext={audioContext}
|
||||
audioDeviceId={audioDeviceId}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import { useEffect, useRef } from 'react';
|
||||
|
||||
import { useSaveQueue } from '/@/renderer/features/player/hooks/use-queue-restore';
|
||||
import { useCurrentServer, usePlayerSong, useSettingsStore } from '/@/renderer/store';
|
||||
import { ServerType } from '/@/shared/types/domain-types';
|
||||
|
||||
export const useAutosave = () => {
|
||||
const server = useCurrentServer();
|
||||
const currentSong = usePlayerSong();
|
||||
const priorSongId = useRef<string | undefined>(undefined);
|
||||
const songCount = useRef(0);
|
||||
const { count, enabled } = useSettingsStore((state) => state.general.autoSave);
|
||||
const { mutate: savePlayQueue } = useSaveQueue();
|
||||
|
||||
useEffect(() => {
|
||||
if (enabled && server.type !== ServerType.JELLYFIN) {
|
||||
if (currentSong?._uniqueId !== priorSongId.current) {
|
||||
if (songCount.current === count) {
|
||||
savePlayQueue();
|
||||
songCount.current = 1;
|
||||
} else {
|
||||
songCount.current += 1;
|
||||
}
|
||||
|
||||
priorSongId.current = currentSong?._uniqueId;
|
||||
}
|
||||
}
|
||||
}, [enabled, count, currentSong?._uniqueId, savePlayQueue, server.type]);
|
||||
};
|
||||
|
||||
export const AutosaveHook = () => {
|
||||
useAutosave();
|
||||
return null;
|
||||
};
|
||||
@@ -89,8 +89,7 @@ export const useSaveQueue = () => {
|
||||
});
|
||||
|
||||
toast.success({
|
||||
message: '',
|
||||
title: t('form.saveQueue.success', { postProcess: 'sentenceCase' }),
|
||||
message: t('form.saveQueue.success', { postProcess: 'sentenceCase' }),
|
||||
});
|
||||
} catch (error) {
|
||||
toast.error({
|
||||
|
||||
Reference in New Issue
Block a user