mirror of
https://github.com/jeffvli/feishin.git
synced 2026-08-08 05:12:57 +02:00
add and adjust some log entries
This commit is contained in:
@@ -288,7 +288,6 @@ const AudioDeviceConfig = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Select
|
<Select
|
||||||
clearable
|
|
||||||
comboboxProps={{ withinPortal: false }}
|
comboboxProps={{ withinPortal: false }}
|
||||||
data={audioDevices}
|
data={audioDevices}
|
||||||
disabled={status === PlayerStatus.PLAYING}
|
disabled={status === PlayerStatus.PLAYING}
|
||||||
|
|||||||
@@ -550,8 +550,6 @@ export const PlayerProvider = ({ children }: { children: React.ReactNode }) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const getQueue = useCallback(() => {
|
const getQueue = useCallback(() => {
|
||||||
logger.debug('Cleared queue');
|
|
||||||
|
|
||||||
const queue = storeActions.getQueue();
|
const queue = storeActions.getQueue();
|
||||||
return queue.items;
|
return queue.items;
|
||||||
}, [storeActions]);
|
}, [storeActions]);
|
||||||
|
|||||||
@@ -64,9 +64,10 @@ export const useAutoDJ = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info('Auto play triggered', {
|
logger.info('Auto DJ triggered', {
|
||||||
remaining: properties.remaining,
|
remaining: properties.remaining,
|
||||||
songId: properties.song?.id,
|
songId: properties.song?.id,
|
||||||
|
songName: properties.song?.name,
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -144,7 +145,7 @@ export const useAutoDJ = () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Auto play failed', {
|
logger.error('Auto DJ failed', {
|
||||||
error: (error as Error).message,
|
error: (error as Error).message,
|
||||||
songId: properties.song?.id,
|
songId: properties.song?.id,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export const useUpdateCurrentSong = () => {
|
|||||||
if (!isEqual(currentSongData, updatedSong)) {
|
if (!isEqual(currentSongData, updatedSong)) {
|
||||||
updateQueueSong(currentSong.id, updatedSong);
|
updateQueueSong(currentSong.id, updatedSong);
|
||||||
|
|
||||||
logger.debug('Song updated in queue', {
|
logger.debug('Differences found, updating song in queue', {
|
||||||
id: currentSong.id,
|
id: currentSong.id,
|
||||||
name: updatedSong.name,
|
name: updatedSong.name,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ export const filterSongsByPlayerFilters = (songs: Song[], filters: PlayerFilter[
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (filteredSongs.length > 0) {
|
if (filteredSongs.length > 0) {
|
||||||
logger.debug('Player filters applied', {
|
logger.info('Player filters applied', {
|
||||||
filteredCount: filteredSongs.length,
|
filteredCount: filteredSongs.length,
|
||||||
filteredSongs: filteredSongs.map(({ filter, song }) => ({
|
filteredSongs: filteredSongs.map(({ filter, song }) => ({
|
||||||
artist: song.artistName,
|
artist: song.artistName,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { createWithEqualityFn } from 'zustand/traditional';
|
|||||||
|
|
||||||
import { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events';
|
import { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events';
|
||||||
import { usePlaybackType, usePlayerStoreBase, useSettingsStore } from '/@/renderer/store';
|
import { usePlaybackType, usePlayerStoreBase, useSettingsStore } from '/@/renderer/store';
|
||||||
|
import { logger } from '/@/renderer/utils/logger';
|
||||||
import { PlayerStatus, PlayerType } from '/@/shared/types/types';
|
import { PlayerStatus, PlayerType } from '/@/shared/types/types';
|
||||||
|
|
||||||
export type RadioCurrentStationArt = {
|
export type RadioCurrentStationArt = {
|
||||||
@@ -43,6 +44,7 @@ interface RadioStore {
|
|||||||
export const useRadioStore = createWithEqualityFn<RadioStore>((set) => ({
|
export const useRadioStore = createWithEqualityFn<RadioStore>((set) => ({
|
||||||
actions: {
|
actions: {
|
||||||
pause: () => {
|
pause: () => {
|
||||||
|
logger.debug('Paused radio playback');
|
||||||
set({ isPlaying: false });
|
set({ isPlaying: false });
|
||||||
usePlayerStoreBase.getState().mediaPause();
|
usePlayerStoreBase.getState().mediaPause();
|
||||||
},
|
},
|
||||||
@@ -68,6 +70,10 @@ export const useRadioStore = createWithEqualityFn<RadioStore>((set) => ({
|
|||||||
nextStationArt = stationArt ?? null;
|
nextStationArt = stationArt ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.debug('Started radio playback', {
|
||||||
|
hasStationArt: Boolean(nextStationArt),
|
||||||
|
stationName: newStationName,
|
||||||
|
});
|
||||||
usePlayerStoreBase.getState().mediaPlay();
|
usePlayerStoreBase.getState().mediaPlay();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -97,8 +103,10 @@ export const useRadioStore = createWithEqualityFn<RadioStore>((set) => ({
|
|||||||
// When stopping radio with mpv, just pause instead of calling mediaStop
|
// When stopping radio with mpv, just pause instead of calling mediaStop
|
||||||
// This prevents mpv from quitting
|
// This prevents mpv from quitting
|
||||||
if (playbackType === PlayerType.LOCAL && mpvPlayer) {
|
if (playbackType === PlayerType.LOCAL && mpvPlayer) {
|
||||||
|
logger.debug('Paused radio playback via mpv');
|
||||||
mpvPlayer.pause();
|
mpvPlayer.pause();
|
||||||
} else {
|
} else {
|
||||||
|
logger.debug('Stopped radio playback');
|
||||||
usePlayerStoreBase.getState().mediaStop();
|
usePlayerStoreBase.getState().mediaStop();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import isElectron from 'is-electron';
|
import isElectron from 'is-electron';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
|
|
||||||
|
import { logger } from '/@/renderer/utils/logger';
|
||||||
import { setCustomThemeRegistry } from '/@/shared/themes/app-theme';
|
import { setCustomThemeRegistry } from '/@/shared/themes/app-theme';
|
||||||
import { AppThemeConfiguration } from '/@/shared/themes/app-theme-types';
|
import { AppThemeConfiguration } from '/@/shared/themes/app-theme-types';
|
||||||
|
|
||||||
@@ -73,13 +74,26 @@ const toRegistry = (rawThemes: RawCustomTheme[]): Record<string, AppThemeConfigu
|
|||||||
|
|
||||||
export const useCustomThemesStore = create<CustomThemesActions & CustomThemesState>()((set) => ({
|
export const useCustomThemesStore = create<CustomThemesActions & CustomThemesState>()((set) => ({
|
||||||
openThemesFolder: async () => {
|
openThemesFolder: async () => {
|
||||||
|
try {
|
||||||
await customThemesApi?.openFolder();
|
await customThemesApi?.openFolder();
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn('Failed to open custom themes folder', { error: String(error) });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
refresh: async () => {
|
refresh: async () => {
|
||||||
if (!customThemesApi) return;
|
if (!customThemesApi) return;
|
||||||
|
try {
|
||||||
const rawThemes = (await customThemesApi.get()) as unknown as RawCustomTheme[];
|
const rawThemes = (await customThemesApi.get()) as unknown as RawCustomTheme[];
|
||||||
setCustomThemeRegistry(toRegistry(rawThemes));
|
setCustomThemeRegistry(toRegistry(rawThemes));
|
||||||
set({ themes: rawThemes.map(toMeta) });
|
set({ themes: rawThemes.map(toMeta) });
|
||||||
|
logger.debug('Refreshed custom themes', {
|
||||||
|
errorCount: rawThemes.filter((t) => t.error).length,
|
||||||
|
themeCount: rawThemes.length,
|
||||||
|
themes: rawThemes.map((t) => t.label),
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn('Failed to refresh custom themes', { error: String(error) });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
themes: [],
|
themes: [],
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { useShallow } from 'zustand/react/shallow';
|
import { useShallow } from 'zustand/react/shallow';
|
||||||
import { createWithEqualityFn } from 'zustand/traditional';
|
import { createWithEqualityFn } from 'zustand/traditional';
|
||||||
|
|
||||||
|
import { logger } from '/@/renderer/utils/logger';
|
||||||
|
|
||||||
export type SleepTimerMode = 'endOfAlbum' | 'endOfSong' | 'timed';
|
export type SleepTimerMode = 'endOfAlbum' | 'endOfSong' | 'timed';
|
||||||
|
|
||||||
interface SleepTimerActions {
|
interface SleepTimerActions {
|
||||||
@@ -27,6 +29,7 @@ export const useSleepTimerStore = createWithEqualityFn<SleepTimerActions & Sleep
|
|||||||
(set) => ({
|
(set) => ({
|
||||||
active: false,
|
active: false,
|
||||||
cancelTimer: () => {
|
cancelTimer: () => {
|
||||||
|
logger.info('Cancelled sleep timer');
|
||||||
set({
|
set({
|
||||||
active: false,
|
active: false,
|
||||||
mode: 'timed',
|
mode: 'timed',
|
||||||
@@ -46,6 +49,7 @@ export const useSleepTimerStore = createWithEqualityFn<SleepTimerActions & Sleep
|
|||||||
},
|
},
|
||||||
|
|
||||||
startEndOfAlbumTimer: () => {
|
startEndOfAlbumTimer: () => {
|
||||||
|
logger.debug('Started sleep timer', { mode: 'endOfAlbum' });
|
||||||
set({
|
set({
|
||||||
active: true,
|
active: true,
|
||||||
mode: 'endOfAlbum',
|
mode: 'endOfAlbum',
|
||||||
@@ -55,6 +59,7 @@ export const useSleepTimerStore = createWithEqualityFn<SleepTimerActions & Sleep
|
|||||||
},
|
},
|
||||||
|
|
||||||
startEndOfSongTimer: () => {
|
startEndOfSongTimer: () => {
|
||||||
|
logger.debug('Started sleep timer', { mode: 'endOfSong' });
|
||||||
set({
|
set({
|
||||||
active: true,
|
active: true,
|
||||||
mode: 'endOfSong',
|
mode: 'endOfSong',
|
||||||
@@ -64,6 +69,10 @@ export const useSleepTimerStore = createWithEqualityFn<SleepTimerActions & Sleep
|
|||||||
},
|
},
|
||||||
|
|
||||||
startTimedTimer: (durationSeconds: number) => {
|
startTimedTimer: (durationSeconds: number) => {
|
||||||
|
logger.debug('Started sleep timer', {
|
||||||
|
durationSeconds,
|
||||||
|
mode: 'timed',
|
||||||
|
});
|
||||||
set({
|
set({
|
||||||
active: true,
|
active: true,
|
||||||
mode: 'timed',
|
mode: 'timed',
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import type { PersistStorage, StateStorage } from 'zustand/middleware';
|
|||||||
import { del, get, set } from 'idb-keyval';
|
import { del, get, set } from 'idb-keyval';
|
||||||
import mergeWith from 'lodash/mergeWith';
|
import mergeWith from 'lodash/mergeWith';
|
||||||
|
|
||||||
|
import { logger } from '/@/renderer/utils/logger';
|
||||||
|
|
||||||
type PlayerStorePersistedSlice = {
|
type PlayerStorePersistedSlice = {
|
||||||
player?: unknown;
|
player?: unknown;
|
||||||
queue?: QueueData;
|
queue?: QueueData;
|
||||||
@@ -78,7 +80,8 @@ export const playerStoreStorage: PersistStorage<unknown> = {
|
|||||||
let parsed: { state?: { player?: unknown; queue?: QueueData }; version?: number };
|
let parsed: { state?: { player?: unknown; queue?: QueueData }; version?: number };
|
||||||
try {
|
try {
|
||||||
parsed = JSON.parse(mainRaw as string);
|
parsed = JSON.parse(mainRaw as string);
|
||||||
} catch {
|
} catch (error) {
|
||||||
|
logger.warn('Failed to parse player store', { error: String(error) });
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +92,8 @@ export const playerStoreStorage: PersistStorage<unknown> = {
|
|||||||
if (queueRaw) {
|
if (queueRaw) {
|
||||||
try {
|
try {
|
||||||
queue = JSON.parse(queueRaw as string) as QueueData;
|
queue = JSON.parse(queueRaw as string) as QueueData;
|
||||||
} catch {
|
} catch (error) {
|
||||||
|
logger.warn('Failed to parse player queue', { error: String(error) });
|
||||||
queue = undefined;
|
queue = undefined;
|
||||||
}
|
}
|
||||||
} else if (parsed.state?.queue) {
|
} else if (parsed.state?.queue) {
|
||||||
@@ -234,7 +238,9 @@ export const splitSettingsStorage: StateStorage = {
|
|||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// If parsing fails, continue with reading from split keys
|
// If parsing fails, continue with reading from split keys
|
||||||
console.warn('Failed to migrate old settings format:', e);
|
logger.warn('Failed to migrate old settings format', {
|
||||||
|
error: String(e),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,7 +256,10 @@ export const splitSettingsStorage: StateStorage = {
|
|||||||
mergedState[keyName] = JSON.parse(value);
|
mergedState[keyName] = JSON.parse(value);
|
||||||
hasData = true;
|
hasData = true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn(`Failed to parse ${key}:`, e);
|
logger.warn('Failed to parse settings key', {
|
||||||
|
error: String(e),
|
||||||
|
key,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -311,7 +320,7 @@ export const splitSettingsStorage: StateStorage = {
|
|||||||
localStorage.setItem('store_settings_version', data.version.toString());
|
localStorage.setItem('store_settings_version', data.version.toString());
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to split settings storage:', e);
|
logger.error('Failed to split settings storage', { error: String(e) });
|
||||||
localStorage.setItem(name, value);
|
localStorage.setItem(name, value);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user