Fix ESLint errors
This commit is contained in:
@@ -24,13 +24,13 @@ export const AudioPlayer: React.FC = () => {
|
||||
|
||||
// Save position when component unmounts or track changes
|
||||
useEffect(() => {
|
||||
const audioCurrent = audioRef.current;
|
||||
return () => {
|
||||
const audioCurrent = audioRef.current;
|
||||
if (audioCurrent && currentTrack && audioCurrent.currentTime > 10) {
|
||||
localStorage.setItem(`navidrome-track-time-${currentTrack.id}`, audioCurrent.currentTime.toString());
|
||||
}
|
||||
};
|
||||
}, [currentTrack?.id]);
|
||||
}, [currentTrack]);
|
||||
|
||||
useEffect(() => {
|
||||
const audioCurrent = audioRef.current;
|
||||
@@ -62,7 +62,7 @@ export const AudioPlayer: React.FC = () => {
|
||||
audioCurrent.play();
|
||||
setIsPlaying(true);
|
||||
}
|
||||
}, [currentTrack?.id, currentTrack?.url]);
|
||||
}, [currentTrack]);
|
||||
|
||||
useEffect(() => {
|
||||
const audioCurrent = audioRef.current;
|
||||
|
||||
@@ -116,15 +116,15 @@ export const AudioPlayerProvider: React.FC<{ children: React.ReactNode }> = ({ c
|
||||
setQueue((prevQueue) => prevQueue.filter((_, i) => i !== index));
|
||||
}, []);
|
||||
|
||||
const playNextTrack = () => {
|
||||
const playNextTrack = useCallback(() => {
|
||||
if (queue.length > 0) {
|
||||
const nextTrack = queue[0];
|
||||
setQueue((prevQueue) => prevQueue.slice(1));
|
||||
playTrack(nextTrack);
|
||||
}
|
||||
};
|
||||
}, [queue, playTrack]);
|
||||
|
||||
const playPreviousTrack = () => {
|
||||
const playPreviousTrack = useCallback(() => {
|
||||
if (playedTracks.length > 0) {
|
||||
const previousTrack = playedTracks[playedTracks.length - 1];
|
||||
setPlayedTracks((prevPlayedTracks) => prevPlayedTracks.slice(0, -1));
|
||||
@@ -136,9 +136,9 @@ export const AudioPlayerProvider: React.FC<{ children: React.ReactNode }> = ({ c
|
||||
|
||||
setCurrentTrack(previousTrack);
|
||||
}
|
||||
};
|
||||
}, [playedTracks, currentTrack]);
|
||||
|
||||
const addAlbumToQueue = async (albumId: string) => {
|
||||
const addAlbumToQueue = useCallback(async (albumId: string) => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
const { album, songs } = await api.getAlbum(albumId);
|
||||
@@ -159,9 +159,9 @@ export const AudioPlayerProvider: React.FC<{ children: React.ReactNode }> = ({ c
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
}, [api, songToTrack, toast]);
|
||||
|
||||
const addArtistToQueue = async (artistId: string) => {
|
||||
const addArtistToQueue = useCallback(async (artistId: string) => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
const { artist, albums } = await api.getArtist(artistId);
|
||||
@@ -187,8 +187,8 @@ export const AudioPlayerProvider: React.FC<{ children: React.ReactNode }> = ({ c
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
const playAlbum = async (albumId: string) => {
|
||||
}, [api, songToTrack, toast]);
|
||||
const playAlbum = useCallback(async (albumId: string) => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
const { album, songs } = await api.getAlbum(albumId);
|
||||
@@ -216,9 +216,9 @@ export const AudioPlayerProvider: React.FC<{ children: React.ReactNode }> = ({ c
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
}, [api, playTrack, songToTrack, toast]);
|
||||
|
||||
const playAlbumFromTrack = async (albumId: string, startingSongId: string) => {
|
||||
const playAlbumFromTrack = useCallback(async (albumId: string, startingSongId: string) => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
const { album, songs } = await api.getAlbum(albumId);
|
||||
@@ -251,7 +251,7 @@ export const AudioPlayerProvider: React.FC<{ children: React.ReactNode }> = ({ c
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
}, [api, playTrack, songToTrack, toast]);
|
||||
|
||||
const skipToTrackInQueue = useCallback((index: number) => {
|
||||
if (index >= 0 && index < queue.length) {
|
||||
|
||||
@@ -53,7 +53,7 @@ export const NavidromeProvider: React.FC<NavidromeProviderProps> = ({ children }
|
||||
|
||||
const api = getNavidromeAPI();
|
||||
|
||||
const loadAlbums = async () => {
|
||||
const loadAlbums = useCallback(async () => {
|
||||
setAlbumsLoading(true);
|
||||
setError(null);
|
||||
try {
|
||||
@@ -73,9 +73,9 @@ export const NavidromeProvider: React.FC<NavidromeProviderProps> = ({ children }
|
||||
} finally {
|
||||
setAlbumsLoading(false);
|
||||
}
|
||||
};
|
||||
}, [api]);
|
||||
|
||||
const loadArtists = async () => {
|
||||
const loadArtists = useCallback(async () => {
|
||||
setArtistsLoading(true);
|
||||
setError(null);
|
||||
try {
|
||||
@@ -87,9 +87,9 @@ export const NavidromeProvider: React.FC<NavidromeProviderProps> = ({ children }
|
||||
} finally {
|
||||
setArtistsLoading(false);
|
||||
}
|
||||
};
|
||||
}, [api]);
|
||||
|
||||
const loadPlaylists = async () => {
|
||||
const loadPlaylists = useCallback(async () => {
|
||||
setPlaylistsLoading(true);
|
||||
setError(null);
|
||||
try {
|
||||
@@ -101,11 +101,11 @@ export const NavidromeProvider: React.FC<NavidromeProviderProps> = ({ children }
|
||||
} finally {
|
||||
setPlaylistsLoading(false);
|
||||
}
|
||||
};
|
||||
}, [api]);
|
||||
|
||||
const refreshData = async () => {
|
||||
const refreshData = useCallback(async () => {
|
||||
await Promise.all([loadAlbums(), loadArtists(), loadPlaylists()]);
|
||||
};
|
||||
}, [loadAlbums, loadArtists, loadPlaylists]);
|
||||
|
||||
const searchMusic = async (query: string) => {
|
||||
setError(null);
|
||||
@@ -247,7 +247,7 @@ export const NavidromeProvider: React.FC<NavidromeProviderProps> = ({ children }
|
||||
};
|
||||
|
||||
initialize();
|
||||
}, []);
|
||||
}, [api, refreshData]);
|
||||
|
||||
const value: NavidromeContextType = {
|
||||
// Data
|
||||
|
||||
@@ -86,7 +86,7 @@ export default function PlaylistPage() {
|
||||
<div className="h-full px-4 py-6 lg:px-8">
|
||||
<div className="text-center">
|
||||
<h2 className="text-2xl font-bold">Playlist not found</h2>
|
||||
<p className="text-muted-foreground">The playlist you're looking for doesn't exist.</p>
|
||||
<p className="text-muted-foreground">The playlist you're looking for doesn't exist.</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -6,7 +6,7 @@ export interface NavidromeConfig {
|
||||
password: string;
|
||||
}
|
||||
|
||||
export interface SubsonicResponse<T = any> {
|
||||
export interface SubsonicResponse<T = Record<string, unknown>> {
|
||||
'subsonic-response': {
|
||||
status: string;
|
||||
version: string;
|
||||
@@ -99,7 +99,7 @@ class NavidromeAPI {
|
||||
return crypto.createHash('md5').update(password + salt).digest('hex');
|
||||
}
|
||||
|
||||
private async makeRequest(endpoint: string, params: Record<string, any> = {}): Promise<any> {
|
||||
private async makeRequest(endpoint: string, params: Record<string, string | number> = {}): Promise<Record<string, unknown>> {
|
||||
const salt = this.generateSalt();
|
||||
const token = this.generateToken(this.config.password, salt);
|
||||
|
||||
@@ -216,7 +216,7 @@ class NavidromeAPI {
|
||||
}
|
||||
|
||||
async createPlaylist(name: string, songIds?: string[]): Promise<Playlist> {
|
||||
const params: Record<string, any> = { name };
|
||||
const params: Record<string, string | number> = { name };
|
||||
if (songIds && songIds.length > 0) {
|
||||
songIds.forEach((id, index) => {
|
||||
params[`songId[${index}]`] = id;
|
||||
@@ -224,11 +224,11 @@ class NavidromeAPI {
|
||||
}
|
||||
|
||||
const response = await this.makeRequest('createPlaylist', params);
|
||||
return response.playlist;
|
||||
return response.playlist as Playlist;
|
||||
}
|
||||
|
||||
async updatePlaylist(playlistId: string, name?: string, comment?: string, songIds?: string[]): Promise<void> {
|
||||
const params: Record<string, any> = { playlistId };
|
||||
const params: Record<string, string | number> = { playlistId };
|
||||
if (name) params.name = name;
|
||||
if (comment) params.comment = comment;
|
||||
if (songIds) {
|
||||
|
||||
Reference in New Issue
Block a user