corpus

Log | Files | Refs | README | LICENSE

commit 978298d616a5c72ef42e0ca57522ca83a23aab7c
parent 4c423ee4dc265ea073580c663d8c664d9d6337df
Author: mtmn <miro@haravara.org>
Date:   Sun, 12 Apr 2026 20:50:31 +0200

chore: add footer, update readme, tidy

Diffstat:
MREADME.md | 3+--
Msrc/Client.purs | 8+++++---
Msrc/Main.purs | 41++++++++++++++++++++++-------------------
3 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/README.md b/README.md @@ -2,5 +2,4 @@ | | | | :--- | ---: | -| Scorpus is a [ListenBrainz](https://listenbrainz.org) frontend built with PureScript and Halogen. Under the hood it stores track metadata in DuckDB and cover images in a S3 bucket. | <img src="docs/korpus.webp" width="400" alt="Korpus"> | - +| **Scorpus** is an alternative [ListenBrainz](https://listenbrainz.org) dashboard written in [PureScript](https://www.purescript.org). It stores listens metadata in [DuckDB](https://duckdb.org) and caches cover art in a blob storage. diff --git a/src/Client.purs b/src/Client.purs @@ -154,13 +154,15 @@ component = ] StatsTab -> renderStatsView state.expandedSections state.stats - , HH.p - [ HP.id "last-updated" + , HH.div + [ HP.id "footer" , HP.class_ (H.ClassName "small") ] - [ HH.text $ fromMaybe "" state.lastCheck ] + [ HH.span_ [ HH.text $ fromMaybe "" state.lastCheck ] + ] ] + renderStatsView _ Nothing = HH.div [ HP.class_ (H.ClassName "loading") ] [ HH.text "Loading stats..." ] renderStatsView expandedSections (Just (Stats { genres, labels, years })) = diff --git a/src/Main.purs b/src/Main.purs @@ -895,11 +895,12 @@ fetchMusicBrainzRelease mbid = do Just { head } -> fromString head Nothing -> Nothing Log.info $ "Enriched " <> mbid <> ": genre=" <> show genre <> " label=" <> show label <> " year=" <> show year - + -- Warn if all fields are empty - when (genre == Nothing && label == Nothing && year == Nothing) $ - Log.warn $ "All fields empty for " <> mbid <> " - possible parsing issue or missing data" - + when (genre == Nothing && label == Nothing && year == Nothing) + $ Log.warn + $ "All fields empty for " <> mbid <> " - possible parsing issue or missing data" + pure $ Just { genre, label, year } Right fr | fr.status == 404 -> do Log.info $ "MusicBrainz 404 for " <> mbid @@ -927,13 +928,14 @@ fetchLastfmGenre artist release = do Log.error $ "Last.fm genre JSON error: " <> Exception.message err pure Nothing Right json -> do - let genre = do - obj <- toObject json - album <- Object.lookup "album" obj >>= toObject - tags <- Object.lookup "tags" album >>= toObject - tagArray <- Object.lookup "tag" tags >>= toArray - firstTag <- tagArray !! 0 >>= toObject - Object.lookup "name" firstTag >>= toString + let + genre = do + obj <- toObject json + album <- Object.lookup "album" obj >>= toObject + tags <- Object.lookup "tags" album >>= toObject + tagArray <- Object.lookup "tag" tags >>= toArray + firstTag <- tagArray !! 0 >>= toObject + Object.lookup "name" firstTag >>= toString pure genre _ -> do Log.warn "Last.fm genre API request failed" @@ -959,12 +961,13 @@ fetchDiscogsGenre artist release = do Log.error $ "Discogs genre JSON error: " <> Exception.message err pure Nothing Right json -> do - let genre = do - obj <- toObject json - results <- Object.lookup "results" obj >>= toArray - firstResult <- results !! 0 >>= toObject - genres <- Object.lookup "genres" firstResult >>= toArray - genres !! 0 >>= toString + let + genre = do + obj <- toObject json + results <- Object.lookup "results" obj >>= toArray + firstResult <- results !! 0 >>= toObject + genres <- Object.lookup "genres" firstResult >>= toArray + genres !! 0 >>= toString pure genre _ -> do Log.warn "Discogs genre API request failed" @@ -1007,11 +1010,11 @@ enrichMetadata conn isSyncing = forever do Nothing -> do -- Try Discogs as final fallback fetchDiscogsGenre artist release - + -- Update with the best genre we found let finalMbdata = mbdata { genre = finalGenre } upsertReleaseMetadata conn mbid finalMbdata.genre finalMbdata.label finalMbdata.year - + case finalGenre of Just genre -> Log.info $ "Added fallback genre from " <> (if lastfmGenre /= Nothing then "Last.fm" else "Discogs") <> " for " <> mbid <> ": " <> genre Nothing -> do