site: show similar media in media view
This commit is contained in:
parent
c625ee860a
commit
4c476dfd3e
2 changed files with 34 additions and 4 deletions
|
@ -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",
|
||||
|
|
|
@ -37,3 +37,14 @@
|
|||
<% end %>
|
||||
|
||||
</div>
|
||||
|
||||
% if ((my $similar_media = stash("similar_media") // [])->@* > 0) {
|
||||
<h2>Similar results</h2>
|
||||
<div class="layout-flex-row gallery">
|
||||
% for my $m ($similar_media->@*) {
|
||||
<%= link_to $m->{show_media_url} => begin %>
|
||||
<%= image $m->{media_src}, alt => "Score: $m->{similarity_score}" %>
|
||||
<%= end %>
|
||||
% }
|
||||
</div>
|
||||
% }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue