From 4c476dfd3e41bc1ccb4e51790e34d92e69d12e17 Mon Sep 17 00:00:00 2001 From: Lucas Gabriel Vuotto Date: Tue, 29 Apr 2025 12:11:30 +0000 Subject: [PATCH] site: show similar media in media view --- lib/Pooru/Site/Controller/Media.pm | 27 +++++++++++++++++++++++---- templates/media.html.ep | 11 +++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/Pooru/Site/Controller/Media.pm b/lib/Pooru/Site/Controller/Media.pm index 7958f58..983a07a 100644 --- a/lib/Pooru/Site/Controller/Media.pm +++ b/lib/Pooru/Site/Controller/Media.pm @@ -46,19 +46,26 @@ sub show ($self) my $page = $v->optional("page")->num(1, undef)->param // 1; return $self->render(status => 400) if $v->has_error; + my $tags = $v->optional("tags")->param; + return $self->render(status => 400) if $v->has_error; + my $media_id = $self->stash("media_id"); $self->render_later; - my $endpoint = $self->api_v0_url->path("media/$media_id") + my $media_endpoint = $self->api_v0_url->path("media/$media_id") ->query(page => $page); - $self->ua->get_p($endpoint)->then(sub ($tx) { + my $similar_endpoint = $self->api_v0_url + ->path("media/similar/$media_id"); + my $media_p = $self->ua->get_p($media_endpoint); + my $similar_p = $self->ua->get_p($similar_endpoint); + Mojo::Promise->all($media_p, $similar_p)->then(sub ($media, $similar) { return $self->render( text => "Backend error.", status => 500, - ) if $tx->error; + ) if $media->[0]->error; - my $json = $tx->res->json; + my $json = $media->[0]->res->json; my @tags = map +{ name => $_->{name}, kind_id => $_->{kind_id}, @@ -66,6 +73,18 @@ sub show ($self) count => $_->{count}, }, $json->{tags}->@*; + if (!$similar->[0]->error) { + my @similar_media = map +{ + similarity_score => $_->{similarity_score}, + show_media_url => $self->url_for("show_media", + media_id => $_->{id}) + ->query(tags => $tags), + media_src => $self->url_for_file( + $self->storage->get($_->{id})), + }, $similar->[0]->res->json->{media}->@*; + $self->stash(similar_media => [@similar_media]); + } + $self->stash(pager => $json->{pager}); return $self->render( template => "media", diff --git a/templates/media.html.ep b/templates/media.html.ep index 30df87d..c9a7d15 100644 --- a/templates/media.html.ep +++ b/templates/media.html.ep @@ -37,3 +37,14 @@ <% end %> + +% if ((my $similar_media = stash("similar_media") // [])->@* > 0) { +

Similar results

+ +% }