A decentralized music tracking and discovery platform built on AT Protocol 🎵

Add release date and year to song view

Use artist genres instead of album genres. Parse Spotify album
release_date based on release_date_precision ('day' or 'year') to
compute releaseDate and year and pass them from retrieve to
presentation.

+21 -2
+21 -2
apps/api/src/xrpc/app/rocksky/song/matchSong.ts
··· 55 55 .execute() 56 56 .then(([row]) => row); 57 57 58 + let releaseDate = null, 59 + year = null; 60 + 58 61 if (!track) { 59 62 const spotifyTrack = await searchOnSpotify( 60 63 ctx, ··· 82 85 discNumber: spotifyTrack.disc_number, 83 86 lyrics: null, 84 87 composer: null, 85 - genre: spotifyTrack.album.genres?.[0] || null, 88 + genre: spotifyTrack.artists[0]?.genres?.[0] || null, 86 89 label: spotifyTrack.album.label || null, 87 90 copyrightMessage: spotifyTrack.album.copyrights?.[0]?.text || null, 88 91 uri: null, ··· 92 95 updatedAt: new Date(), 93 96 xataVersion: 0, 94 97 }; 98 + 99 + if (spotifyTrack.album.release_date_precision == "day") { 100 + releaseDate = spotifyTrack.album.release_date; 101 + year = parseInt(spotifyTrack.album.release_date.split("-")[0]); 102 + } 103 + 104 + if (spotifyTrack.album.release_date_precision == "year") { 105 + releaseDate = `${spotifyTrack.album.release_date}-01-01`; 106 + year = parseInt(spotifyTrack.album.release_date); 107 + } 95 108 } 96 109 } 97 110 ··· 111 124 .where(eq(tables.scrobbles.trackId, track?.id)) 112 125 .execute() 113 126 .then((rows) => rows[0]?.count || 0), 127 + Promise.resolve(releaseDate), 128 + Promise.resolve(year), 114 129 ]); 115 130 }, 116 131 catch: (error) => new Error(`Failed to retrieve artist: ${error}`), 117 132 }); 118 133 }; 119 134 120 - const presentation = ([track, uniqueListeners, playCount]: [ 135 + const presentation = ([track, uniqueListeners, playCount, releaseDate, year]: [ 121 136 SelectTrack, 122 137 number, 123 138 number, 139 + string | null, 140 + number | null, 124 141 ]): Effect.Effect<SongViewDetailed, never> => { 125 142 return Effect.sync(() => ({ 126 143 ...track, 144 + releaseDate, 145 + year, 127 146 playCount, 128 147 uniqueListeners, 129 148 createdAt: track.createdAt.toISOString(),