mirror of
https://github.com/markuryy/shark.git
synced 2025-12-13 12:01:01 +00:00
feat(dz): add local caching and UI for user favorites
This commit is contained in:
@@ -307,7 +307,7 @@ export class DeezerAPI {
|
||||
const response = await this.apiCall('deezer.pageProfile', {
|
||||
USER_ID: userId,
|
||||
tab: 'playlists',
|
||||
nb: 100
|
||||
nb: -1
|
||||
});
|
||||
|
||||
return response.TAB?.playlists?.data || [];
|
||||
@@ -317,6 +317,86 @@ export class DeezerAPI {
|
||||
}
|
||||
}
|
||||
|
||||
// Get user albums
|
||||
async getUserAlbums(): Promise<any[]> {
|
||||
try {
|
||||
const userData = await this.getUserData();
|
||||
const userId = userData.USER.USER_ID;
|
||||
|
||||
const response = await this.apiCall('deezer.pageProfile', {
|
||||
USER_ID: userId,
|
||||
tab: 'albums',
|
||||
nb: -1
|
||||
});
|
||||
|
||||
return response.TAB?.albums?.data || [];
|
||||
} catch (error) {
|
||||
console.error('Error fetching albums:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Get user artists
|
||||
async getUserArtists(): Promise<any[]> {
|
||||
try {
|
||||
const userData = await this.getUserData();
|
||||
const userId = userData.USER.USER_ID;
|
||||
|
||||
const response = await this.apiCall('deezer.pageProfile', {
|
||||
USER_ID: userId,
|
||||
tab: 'artists',
|
||||
nb: -1
|
||||
});
|
||||
|
||||
return response.TAB?.artists?.data || [];
|
||||
} catch (error) {
|
||||
console.error('Error fetching artists:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Get user favorite tracks (uses the more reliable song.getFavoriteIds method)
|
||||
async getUserTracks(): Promise<any[]> {
|
||||
try {
|
||||
// Get favorite track IDs
|
||||
const idsResponse = await this.apiCall('song.getFavoriteIds', {
|
||||
nb: -1,
|
||||
start: 0,
|
||||
checksum: null
|
||||
});
|
||||
|
||||
const trackIds = idsResponse.data?.map((x: any) => x.SNG_ID) || [];
|
||||
|
||||
if (trackIds.length === 0) {
|
||||
console.log('[Deezer] No favorite tracks found');
|
||||
return [];
|
||||
}
|
||||
|
||||
console.log(`[Deezer] Found ${trackIds.length} favorite track IDs, fetching details...`);
|
||||
|
||||
// Fetch track details in batches (Deezer API might have limits)
|
||||
const batchSize = 100;
|
||||
const tracks: any[] = [];
|
||||
|
||||
for (let i = 0; i < trackIds.length; i += batchSize) {
|
||||
const batchIds = trackIds.slice(i, i + batchSize);
|
||||
const batchResponse = await this.apiCall('song.getListData', {
|
||||
SNG_IDS: batchIds
|
||||
});
|
||||
|
||||
if (batchResponse.data) {
|
||||
tracks.push(...batchResponse.data);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[Deezer] Fetched ${tracks.length} track details`);
|
||||
return tracks;
|
||||
} catch (error) {
|
||||
console.error('Error fetching favorite tracks:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Get album data
|
||||
async getAlbumData(albumId: string): Promise<any> {
|
||||
return this.apiCall('album.getData', { alb_id: albumId });
|
||||
|
||||
Reference in New Issue
Block a user