From c1598cd2d2e625167dfda6e5ad5f4229f32fa1ea Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Tue, 14 May 2024 20:42:13 +0200 Subject: feat(users/Profpatsch/whatcd-resolver): display all artists apparently the `torrent_group` json only contains one artist, while the torrent itself contains a list of them. This is important, because we need the artist id and the `torrent_group` does not provide it, only the torrent one. Change-Id: I3db45f454f14e89ea8c8dafba2065ecd55f5bcda Reviewed-on: https://cl.tvl.fyi/c/depot/+/11670 Autosubmit: Profpatsch Tested-by: BuildkiteCI Reviewed-by: Profpatsch --- users/Profpatsch/whatcd-resolver/src/Redacted.hs | 14 +++++++++---- .../whatcd-resolver/src/WhatcdResolver.hs | 23 ++++++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/users/Profpatsch/whatcd-resolver/src/Redacted.hs b/users/Profpatsch/whatcd-resolver/src/Redacted.hs index c0c26b72d659..bc13d049ed50 100644 --- a/users/Profpatsch/whatcd-resolver/src/Redacted.hs +++ b/users/Profpatsch/whatcd-resolver/src/Redacted.hs @@ -360,8 +360,9 @@ data TorrentData transmissionInfo = TorrentData { groupId :: Int, torrentId :: Int, seedingWeight :: Int, + artists :: [T2 "artistId" Int "artistName" Text], torrentJson :: Json.Value, - torrentGroupJson :: T3 "artist" Text "groupName" Text "groupYear" Int, + torrentGroupJson :: T2 "groupName" Text "groupYear" Int, torrentStatus :: TorrentStatus transmissionInfo } @@ -409,13 +410,18 @@ getBestTorrents opts = do groupId <- Dec.fromField @Int torrentId <- Dec.fromField @Int seedingWeight <- Dec.fromField @Int - torrentJson <- Dec.json Json.asValue + (torrentJson, artists) <- Dec.json $ do + val <- Json.asValue + artists <- Json.keyOrDefault "artists" [] $ Json.eachInArray $ do + id_ <- Json.keyLabel @"artistId" "id" (Json.asIntegral @_ @Int) + name <- Json.keyLabel @"artistName" "name" Json.asText + pure $ T2 id_ name + pure (val, artists) torrentGroupJson <- ( Dec.json $ do - artist <- Json.keyLabel @"artist" "artist" Json.asText groupName <- Json.keyLabel @"groupName" "groupName" Json.asText groupYear <- Json.keyLabel @"groupYear" "groupYear" (Json.asIntegral @_ @Int) - pure $ T3 artist groupName groupYear + pure $ T2 groupName groupYear ) hasTorrentFile <- Dec.fromField @Bool transmissionTorrentHash <- diff --git a/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs b/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs index dc7929144ac5..e3cf8aa8ba77 100644 --- a/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs +++ b/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs @@ -496,15 +496,21 @@ getBestTorrentsTable = do fresh & foldMap ( \b -> do - let artistLink :: Text = [fmt|/artist?db_id={b.groupId}|] + let artists = + b.artists + <&> ( \a -> + T2 + (label @"url" [fmt|/artist?db_id={a.artistId}|]) + (label @"content" $ Html.toHtml @Text a.artistName) + ) + & mkLinkList + [hsx| {localTorrent b} {Html.toHtml @Int b.groupId} - - {Html.toHtml @Text b.torrentGroupJson.artist} - + {artists} {Html.toHtml @Text b.torrentGroupJson.groupName} {Html.toHtml @Int b.seedingWeight} @@ -532,6 +538,15 @@ getBestTorrentsTable = do |] +mkLinkList :: [T2 "url" Text "content" Html] -> Html +mkLinkList xs = + xs + <&> ( \x -> do + [hsx|{x.content}|] + ) + & List.intersperse ", " + & mconcat + getTransmissionTorrentsTable :: (MonadTransmission m, MonadThrow m, MonadLogger m, MonadOtel m) => m Html getTransmissionTorrentsTable = do -- cgit 1.4.1