From 0b881b6d23f71e3624eb46b408cf9c3476055f7b Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Fri, 7 Mar 2025 11:18:55 +0100 Subject: [PATCH] feat(users/Profpatsch/whatcd-resolver): simplify search MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Throws out htmx for search in favor of a full page-reload for search. This means we can reload the page and it will re-do the search. It’s not POST anymore cause we don’t really change anything, just do some caching when doing the search. Could probably also cache the search result, but simple simple Change-Id: I70b0cbac55f67c986aeecfedcf0b3968890b3b9c Reviewed-on: https://cl.tvl.fyi/c/depot/+/13212 Tested-by: BuildkiteCI Reviewed-by: Profpatsch --- .../whatcd-resolver/src/WhatcdResolver.hs | 118 +++++++++++------- 1 file changed, 74 insertions(+), 44 deletions(-) diff --git a/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs b/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs index cf54ad735..419e0feb9 100644 --- a/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs +++ b/users/Profpatsch/whatcd-resolver/src/WhatcdResolver.hs @@ -135,37 +135,43 @@ htmlUi = do counterHtml <- counterHtmlM mainHtml counterHtml uniqueRunId span ), - ( "snips/redacted/search", - Html $ - \span -> do - dat <- - parseMultipartOrThrow - span - req - ( do - label @"searchstr" <$> Multipart.field "redacted-search" Cat.id - ) - t <- redactedSearchAndInsert [("searchstr", dat.searchstr)] + ( "redacted-search", + HtmlWithQueryArgs (singleQueryArgument "searchstr" Cat.id) $ + \searchstr _span -> do + t <- redactedSearchAndInsert [("searchstr", searchstr)] runTransaction $ do res <- t - table <- - getBestTorrentsTable - (label @"groupByReleaseType" True) - ( Just (E21 (label @"onlyTheseTorrents" res.newTorrents)) :: - ( Maybe - ( E2 - "onlyTheseTorrents" - [Label "torrentId" Int] - "artistRedactedId" - Natural - ) + (table, settings) <- + concurrentlyTraced + ( getBestTorrentsTable + (label @"groupByReleaseType" True) + ( Just + ( E21 + (label @"onlyTheseTorrents" res.newTorrents) + ) :: + Maybe + ( E2 + "onlyTheseTorrents" + [Label "torrentId" Int] + "artistRedactedId" + Natural + ) ) ) - pure - [hsx| -

Search results for
{dat.searchstr}

- {table} - |] + (getSettings) + pure $ + mainHtml' + ( MainHtml + { pageTitle = [fmt|whatcd-resolver – Search – {searchstr & bytesToTextUtf8Lenient}|], + counterHtml = "", + mainContent = + [hsx|

Search results for
{searchstr}

{table}|], + uniqueRunId, + searchFieldContent = searchstr & bytesToTextUtf8Lenient, + settings + } + ) + _span ), ( "snips/redacted/torrentDataJson", Html $ \span -> do @@ -337,28 +343,52 @@ htmlUi = do (getBestTorrentsTable (label @"groupByReleaseType" False) Nothing) (getSettings) -- transmissionTorrentsTable <- lift @Transaction getTransmissionTorrentsTable - let returnUrl = (label @"returnUrl" "/") pure $ - htmlPageChrome - "whatcd-resolver" - ( [hsx| - {counterHtml} - {settingButtons returnUrl settings} + mainHtml' + ( MainHtml + { pageTitle = "whatcd-resolver", + counterHtml, + mainContent = bestTorrentsTable, + uniqueRunId, + settings, + searchFieldContent = "" + } + ) + _span + +data MainHtml = MainHtml + { pageTitle :: Text, + counterHtml :: Html, + mainContent :: Html, + searchFieldContent :: Text, + uniqueRunId :: Text, + settings :: Settings + } + +mainHtml' :: MainHtml -> Otel.Span -> Html +mainHtml' dat _span = do + -- transmissionTorrentsTable <- lift @Transaction getTransmissionTorrentsTable + let returnUrl = (label @"returnUrl" "/") + + htmlPageChrome + dat.pageTitle + ( [hsx| + {dat.counterHtml} + {settingButtons returnUrl dat.settings} |] - <> [hsx| -
- + <> [hsx| + + + name="searchstr" + value={dat.searchFieldContent} />
Search running!
-
- {bestTorrentsTable} +
+ {dat.mainContent}
|] - ) + ) -- | Run two actions concurrently, and add them to the current Otel trace concurrentlyTraced :: (MonadUnliftIO m) => m a -> m b -> m (a, b)