UNPKG

bandcamp-fetch

Version:
94 lines 3.4 kB
import FanItemsBaseParser from './FanItemsBaseParser.js'; export default class FanWishlistParser extends FanItemsBaseParser { static parseWishlistFromPage(html, opts) { return this.parsePageItems(html, { ...opts, dataKey: 'wishlist', parseItemFn: this.parseWishlistItem }); } static parseWishlistFromContinuation(json, continuation, opts) { return this.parseContinuationItems(json, continuation, { ...opts, dataKey: 'items', parseItemFn: this.parseWishlistItem }); } static parseWishlistItem(data, opts, tracklists) { if (!data) { return null; } const _findInTrackLists = (tracklists, id) => { if (!tracklists || typeof tracklists !== 'object') { return null; } for (const tracks of Object.values(tracklists)) { if (Array.isArray(tracks)) { const track = tracks.find((t) => t.id === id); if (track) { return track; } } } }; let mediaItemType; switch (data.tralbum_type) { case 'a': mediaItemType = 'album'; break; case 't': mediaItemType = 'track'; break; default: mediaItemType = null; } if (!mediaItemType) { return null; } const mediaItem = { type: mediaItemType, id: data.item_id, name: data.item_title, url: data.item_url, imageUrl: '', artist: { name: data.band_name } }; if (data.item_art_id && opts.imageFormat?.id) { mediaItem.imageUrl = `${opts.imageBaseUrl}/img/a${data.item_art_id}_${opts.imageFormat.id}.jpg`; } if (data.url_hints && data.url_hints.subdomain && mediaItem.artist) { mediaItem.artist.url = `https://${data.url_hints.subdomain}.bandcamp.com`; } const featuredTrackData = data.featured_track !== undefined ? _findInTrackLists(tracklists, data.featured_track) : null; if (featuredTrackData) { const duration = featuredTrackData.duration; const streamUrl = featuredTrackData.file?.['mp3-128']; const streamUrlHQ = featuredTrackData.file?.['mp3-v0']; if (mediaItemType === 'album') { const featuredTrack = { id: featuredTrackData.id, position: featuredTrackData.track_number, name: featuredTrackData.title, artist: featuredTrackData.artist, duration, streamUrl }; if (streamUrlHQ) { featuredTrack.streamUrlHQ = streamUrlHQ; } mediaItem.featuredTrack = featuredTrack; } else { mediaItem.duration = duration; mediaItem.streamUrl = streamUrl; if (streamUrlHQ) { mediaItem.streamUrlHQ = streamUrlHQ; } } } return mediaItem; } } //# sourceMappingURL=FanWishlistParser.js.map