From c466b99e3e18be6aa92238d49256c673377fe8ef Mon Sep 17 00:00:00 2001 From: Hailey Date: Wed, 27 Dec 2023 16:39:50 -0800 Subject: [PATCH] add apple music embed --- __tests__/lib/string.test.ts | 22 +++++++++++++++++ src/lib/strings/embed-player.ts | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/__tests__/lib/string.test.ts b/__tests__/lib/string.test.ts index 99b0d25373..cb27d8f867 100644 --- a/__tests__/lib/string.test.ts +++ b/__tests__/lib/string.test.ts @@ -414,6 +414,10 @@ describe('parseEmbedPlayerFromUrl', () => { 'https://soundcloud.com/user/track', 'https://soundcloud.com/user/sets/set', 'https://soundcloud.com/user/', + + 'https://music.apple.com/us/playlist/playlistName/playlistId', + 'https://music.apple.com/us/album/albumName/albumId', + 'https://music.apple.com/us/album/albumName/albumId?i=songId', ] const outputs = [ @@ -508,6 +512,24 @@ describe('parseEmbedPlayerFromUrl', () => { playerUri: `https://w.soundcloud.com/player/?url=https://soundcloud.com/user/sets/set&auto_play=true&visual=false&hide_related=true`, }, undefined, + + { + type: 'apple_music_playlist', + playlistId: 'playlistId', + playerUri: + 'https://embed.music.apple.com/us/playlist/playlistName/playlistId', + }, + { + type: 'apple_music_album', + albumId: 'albumId', + playerUri: 'https://embed.music.apple.com/us/album/albumName/albumId', + }, + { + type: 'apple_music_song', + songId: 'songId', + playerUri: + 'https://embed.music.apple.com/us/album/albumName/albumId?i=songId', + }, ] it('correctly grabs the correct id from uri', () => { diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts index ec996dfa53..54ed501020 100644 --- a/src/lib/strings/embed-player.ts +++ b/src/lib/strings/embed-player.ts @@ -12,6 +12,9 @@ export type EmbedPlayerParams = | {type: 'spotify_song'; songId: string; playerUri: string} | {type: 'soundcloud_track'; user: string; track: string; playerUri: string} | {type: 'soundcloud_set'; user: string; set: string; playerUri: string} + | {type: 'apple_music_playlist'; playlistId: string; playerUri: string} + | {type: 'apple_music_album'; albumId: string; playerUri: string} + | {type: 'apple_music_song'; songId: string; playerUri: string} export function parseEmbedPlayerFromUrl( url: string, @@ -116,6 +119,45 @@ export function parseEmbedPlayerFromUrl( } } } + + if ( + urlp.hostname === 'music.apple.com' || + urlp.hostname === 'music.apple.com' + ) { + // This should always have: locale, type (playlist or album), name, and id. We won't use spread since we want + // to check if the length is correct + const pathParams = urlp.pathname.split('/') + const type = pathParams[2] + const songId = urlp.searchParams.get('i') + + if (pathParams.length === 5 && (type === 'playlist' || type === 'album')) { + const embedUri = `https://embed.music.apple.com${urlp.pathname}${ + urlp.search ? '?i=' + songId : '' + }` + + if (type === 'playlist') { + return { + type: 'apple_music_playlist', + playlistId: pathParams[4], + playerUri: embedUri, + } + } else if (type === 'album') { + if (songId) { + return { + type: 'apple_music_song', + songId, + playerUri: embedUri, + } + } else { + return { + type: 'apple_music_album', + albumId: pathParams[4], + playerUri: embedUri, + } + } + } + } + } } export function getPlayerHeight({ @@ -146,6 +188,8 @@ export function getPlayerHeight({ return 165 case 'soundcloud_set': return 360 + case 'apple_music_song': + return 150 default: return width }