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;
|
my $page = $v->optional("page")->num(1, undef)->param // 1;
|
||||||
return $self->render(status => 400) if $v->has_error;
|
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");
|
my $media_id = $self->stash("media_id");
|
||||||
|
|
||||||
$self->render_later;
|
$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);
|
->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(
|
return $self->render(
|
||||||
text => "Backend error.",
|
text => "Backend error.",
|
||||||
status => 500,
|
status => 500,
|
||||||
) if $tx->error;
|
) if $media->[0]->error;
|
||||||
|
|
||||||
my $json = $tx->res->json;
|
my $json = $media->[0]->res->json;
|
||||||
my @tags = map +{
|
my @tags = map +{
|
||||||
name => $_->{name},
|
name => $_->{name},
|
||||||
kind_id => $_->{kind_id},
|
kind_id => $_->{kind_id},
|
||||||
|
@ -66,6 +73,18 @@ sub show ($self)
|
||||||
count => $_->{count},
|
count => $_->{count},
|
||||||
}, $json->{tags}->@*;
|
}, $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});
|
$self->stash(pager => $json->{pager});
|
||||||
return $self->render(
|
return $self->render(
|
||||||
template => "media",
|
template => "media",
|
||||||
|
|
|
@ -37,3 +37,14 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
</div>
|
</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