corpus

Log | Files | Refs | README | LICENSE

commit e07c9c839b8d13395caa9dd4cb3b98d94a7a7159
parent 030a32b4d7a9bd7b8fee3367d3a1d92daeb5dd98
Author: mtmn <miro@haravara.org>
Date:   Sat, 11 Apr 2026 18:02:54 +0200

fix: move user to config, click listens go home

Diffstat:
M.env.example | 1+
Msrc/Client.purs | 4++--
Msrc/Main.purs | 37+++++++++++++++++++++----------------
3 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/.env.example b/.env.example @@ -1,3 +1,4 @@ +LISTENBRAINZ_USER= DISCOGS_TOKEN= LASTFM_API_KEY= S3_BUCKET= diff --git a/src/Client.purs b/src/Client.purs @@ -99,9 +99,9 @@ component = [ HH.h1_ [ HH.text "scrobbler" ] , HH.div [ HP.class_ (H.ClassName "tabs") ] - [ HH.button + [ HH.a [ HP.class_ (H.ClassName $ "tab-btn" <> if state.activeTab == ListensTab then " active" else "") - , HE.onClick \_ -> SwitchTab ListensTab + , HP.href "/" ] [ HH.text "listens" ] , HH.button diff --git a/src/Main.purs b/src/Main.purs @@ -49,12 +49,12 @@ import S3 (existsInS3, uploadToS3, getS3Url) type Request = IncomingMessage IMServer type Response = ServerResponse -listenBrainzUrl :: String -listenBrainzUrl = "https://api.listenbrainz.org/1/user/mtmn/listens" +listenBrainzUrl :: String -> String +listenBrainzUrl username = "https://api.listenbrainz.org/1/user/" <> username <> "/listens" -fetchListenBrainzData :: Int -> Aff String -fetchListenBrainzData count = makeAff \callback -> do - let url = listenBrainzUrl <> "?count=" <> show count +fetchListenBrainzData :: String -> Int -> Aff String +fetchListenBrainzData username count = makeAff \callback -> do + let url = listenBrainzUrl username <> "?count=" <> show count req <- HTTPS.get url req # on_ Client.responseH \res -> do @@ -72,9 +72,9 @@ fetchListenBrainzData count = makeAff \callback -> do pure nonCanceler -fetchListenBrainzDataBefore :: Int -> Aff String -fetchListenBrainzDataBefore maxTs = makeAff \callback -> do - let url = listenBrainzUrl <> "?count=100&max_ts=" <> show maxTs +fetchListenBrainzDataBefore :: String -> Int -> Aff String +fetchListenBrainzDataBefore username maxTs = makeAff \callback -> do + let url = listenBrainzUrl username <> "?count=100&max_ts=" <> show maxTs req <- HTTPS.get url req # on_ Client.responseH \res -> do @@ -92,15 +92,16 @@ fetchListenBrainzDataBefore maxTs = makeAff \callback -> do pure nonCanceler -syncData :: Connection -> Aff Unit -syncData conn = do +syncData :: Connection -> String -> Aff Unit +syncData conn username | username == "" = pure unit +syncData conn username = do forever do void $ performFullSync delay (Milliseconds 60000.0) where performFullSync = do - result <- try $ fetchListenBrainzData 100 + result <- try $ fetchListenBrainzData username 100 case result of Right body -> do case parseJson body >>= decodeJson of @@ -119,7 +120,7 @@ syncData conn = do paginateUntilDone minTs acc = case minTs of Nothing -> pure acc Just ts -> do - result <- try $ fetchListenBrainzDataBefore ts + result <- try $ fetchListenBrainzDataBefore username ts case result of Right body -> do case parseJson body >>= decodeJson of @@ -369,6 +370,8 @@ indexHtml = cursor: pointer; font-family: inherit; font-size: 12px; + text-decoration: none; + display: inline-block; } .tab-btn.active { @@ -845,12 +848,12 @@ enrichMetadata conn = forever do Right Nothing -> pure unit Right (Just mbdata) -> upsertReleaseMetadata conn mbid mbdata.genre mbdata.label mbdata.year -startServer :: Int -> String -> Effect Unit -startServer port dbFile = launchAff_ do +startServer :: Int -> String -> String -> Effect Unit +startServer port dbFile username = launchAff_ do conn <- connect dbFile initDb conn initReleaseMetadata conn - void $ forkAff $ syncData conn + void $ forkAff $ syncData conn username void $ forkAff $ enrichMetadata conn liftEffect $ do @@ -871,6 +874,8 @@ main = do env <- getEnv let port = fromMaybe 8000 (Object.lookup "PORT" env >>= fromString) let dbFile = fromMaybe "scorpus.db" (Object.lookup "DATABASE_FILE" env) - startServer port dbFile + let username = fromMaybe "" (Object.lookup "LISTENBRAINZ_USER" env) + when (username == "") $ Log.warn "LISTENBRAINZ_USER is not set — syncing will be disabled" + startServer port dbFile username foreign import split :: String -> String -> Array String