1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut-pastebin synced 2025-06-07 14:17:26 -04:00

Waiting works properly

This commit is contained in:
Ryan Voots 2019-09-08 01:49:48 -04:00
parent 48acf59c2f
commit b21463287b
6 changed files with 43 additions and 18 deletions

View file

@ -30,10 +30,12 @@ sub api_get_paste {
if ($row) { if ($row) {
$c->delay(sub { $c->delay(sub {
my ($delay) = @_; my ($delay) = @_;
$c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], $delay->begin(0, 1)) $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $delay->begin(0, 1))
}, },
sub { sub {
my ($delay, $output_hr) = @_; my ($delay, $evalres) = @_;
my ($status, $output_hr) = $evalres->@{qw/status output/};
my ($output_lang) = keys %$output_hr; # grab a random output value, should be the first one since multilang support isn't working yet my ($output_lang) = keys %$output_hr; # grab a random output value, should be the first one since multilang support isn't working yet
my ($output) = $output_hr->{$output_lang}; my ($output) = $output_hr->{$output_lang};
@ -44,6 +46,7 @@ sub api_get_paste {
description => $row->{desc}, description => $row->{desc},
language => $output_lang, language => $output_lang,
output => $output, output => $output,
status => $status,
warning => "If this was multi-language paste, you just got a random language", warning => "If this was multi-language paste, you just got a random language",
}; };

View file

@ -50,21 +50,21 @@ sub api_get_paste {
if ($row) { if ($row) {
$c->delay(sub { $c->delay(sub {
my ($delay) = @_; my ($delay) = @_;
$c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], $delay->begin(0, 1)) $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $delay->begin(0, 1))
}, },
sub { sub {
my ($delay, $output_hr) = @_; my ($delay, $evalres) = @_;
my ($status, $output_hr) = $evalres->@{qw/status output/};
my ($output_lang) = keys %$output_hr; # grab a random output value, should be the first one since multilang support isn't working yet my ($output_lang) = keys %$output_hr; # grab a random output value, should be the first one since multilang support isn't working yet
my ($output) = $output_hr->{$output_lang};
my $data = { my $data = {
paste => $row->{paste}, paste => $row->{paste},
when => $row->{when}, when => $row->{when},
username => $row->{who}, username => $row->{who},
description => $row->{desc}, description => $row->{desc},
language => $output_lang, language => $output_lang,
output => $output, output => $output_hr,
warning => "If this was multi-language paste, you just got a random language",
}; };
$c->render(json => $data); $c->render(json => $data);

View file

@ -20,8 +20,6 @@ sub run_eval {
my ($self) = @_; my ($self) = @_;
my $data = $self->req->body_params; my $data = $self->req->body_params;
$self = $self->inactivity_timeout(3600); $self = $self->inactivity_timeout(3600);
my $code = $data->param('code') // ''; my $code = $data->param('code') // '';
@ -29,13 +27,17 @@ sub run_eval {
$self->delay(sub { $self->delay(sub {
my $delay = shift; my $delay = shift;
$self->eval->get_eval(undef, $code, [$language], $delay->begin(0,1)); $self->eval->get_eval(undef, $code, [$language], 1, $delay->begin(0,1));
return 1; return 1;
}, },
sub { sub {
my $delay = shift; my $delay = shift;
my ($output) = @_; my ($evalres) = @_;
use Data::Dumper;
print Dumper("wutwut", $evalres);
my $output = $evalres->{output};
$self->render(json => {evalout => $output}); $self->render(json => {evalout => $output});
}) })

View file

@ -85,15 +85,18 @@ sub get_paste {
$c->delay(sub { $c->delay(sub {
my $delay = shift; my $delay = shift;
$c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], $delay->begin(0,1)); $c->eval->get_eval($pasteid, $row->{paste}, [$row->{language}], 0, $delay->begin(0,1));
}, sub { }, sub {
my ($delay, $evalout) = @_; my ($delay, $evalres) = @_;
my ($status, $evalout) = $evalres->@{qw/status output/};
$c->stash($row); $c->stash($row);
$c->stash({language => $c->languages->get_language_hash->{$row->{language}}}); $c->stash({language => $c->languages->get_language_hash->{$row->{language}}});
$c->stash({all_langs => $c->languages->get_language_hash}); $c->stash({all_langs => $c->languages->get_language_hash});
$c->stash({page_tmpl => 'viewer.html'}); $c->stash({page_tmpl => 'viewer.html'});
$c->stash({paste_id => $pasteid}); $c->stash({paste_id => $pasteid});
$c->stash({eval => $evalout}); $c->stash({eval => $evalout});
$c->stash({eval_status => $status});
$c->stash({perl_sort_versions => \&App::Model::Languages::perl_sort_versions}); $c->stash({perl_sort_versions => \&App::Model::Languages::perl_sort_versions});
$c->render('page'); $c->render('page');

View file

@ -29,9 +29,14 @@ sub _adopt_future {
}) })
} }
sub _get_cache {
my ($key) = @_;
return unless defined $key;
return $memd->get($key);
}
sub get_eval { sub get_eval {
my ($self, $paste_id, $code, $langs, $callback) = @_; my ($self, $paste_id, $code, $langs, $wait, $callback) = @_;
print "Entering\n"; print "Entering\n";
if (@$langs == 1 && $langs->[0] eq "evalall") { if (@$langs == 1 && $langs->[0] eq "evalall") {
@ -40,7 +45,7 @@ sub get_eval {
use Data::Dumper; use Data::Dumper;
print "Languages! ", Dumper($langs); print "Languages! ", Dumper($langs);
if ($paste_id && (my $cached = $memd->get($paste_id))) { if ($paste_id && (my $cached = _get_cache($paste_id))) {
$callback->($cached); $callback->($cached);
} else { } else {
# connect to server # connect to server
@ -52,9 +57,16 @@ sub get_eval {
my $reader = $self->get_eval_reader($stream); my $reader = $self->get_eval_reader($stream);
my %output; my %output;
# TODO make running status messages per langs?
$memd->set($paste_id, {status => 'running', output => {}});
if (!$wait && @$langs != 1) {
$callback->({status => 'running', output => {}});
}
for my $lang (@$langs) { for my $lang (@$langs) {
if ($lang eq 'text') { if ($lang eq 'text') {
$callback->(""); $callback->({status => "ready", output => {}});
return; return;
} else { } else {
my $future = $self->async_eval($stream, $reader, $lang, $code); my $future = $self->async_eval($stream, $reader, $lang, $code);
@ -72,11 +84,13 @@ sub get_eval {
if (!keys %futures) { # I'm the last one if (!keys %futures) { # I'm the last one
print "Calling memset\n"; print "Calling memset\n";
$memd->set($paste_id, \%output) if ($paste_id); $memd->set($paste_id, {status => 'ready', output => \%output}) if ($paste_id);
print "Returning output to delay\n"; print "Returning output to delay\n";
use Data::Dumper; use Data::Dumper;
print Dumper(\%output); print Dumper(\%output);
$callback->(\%output); if ($wait || @$langs == 1) {
$callback->({status => "ready", output => \%output});
}
} }
}); });
} }

View file

@ -74,6 +74,9 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
[% IF eval_status == "running" %]
<div id="evalstatus">Eval still running, please refresh page after waiting</div>
[% END %]
[% IF eval.keys.size == 0 || !eval.keys.size.defined %] [% IF eval.keys.size == 0 || !eval.keys.size.defined %]
[% ELSIF eval.keys.size == 1 %] [% ELSIF eval.keys.size == 1 %]
<div id="eval" class="col-md-12"> <div id="eval" class="col-md-12">