1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut-pastebin synced 2025-06-07 06:06:23 -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) {
$c->delay(sub {
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 {
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) = $output_hr->{$output_lang};
@ -44,6 +46,7 @@ sub api_get_paste {
description => $row->{desc},
language => $output_lang,
output => $output,
status => $status,
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) {
$c->delay(sub {
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 {
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) = $output_hr->{$output_lang};
my $data = {
paste => $row->{paste},
when => $row->{when},
username => $row->{who},
description => $row->{desc},
language => $output_lang,
output => $output,
warning => "If this was multi-language paste, you just got a random language",
output => $output_hr,
};
$c->render(json => $data);

View file

@ -20,8 +20,6 @@ sub run_eval {
my ($self) = @_;
my $data = $self->req->body_params;
$self = $self->inactivity_timeout(3600);
my $code = $data->param('code') // '';
@ -29,13 +27,17 @@ sub run_eval {
$self->delay(sub {
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;
},
sub {
my $delay = shift;
my ($output) = @_;
my ($evalres) = @_;
use Data::Dumper;
print Dumper("wutwut", $evalres);
my $output = $evalres->{output};
$self->render(json => {evalout => $output});
})

View file

@ -85,15 +85,18 @@ sub get_paste {
$c->delay(sub {
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 {
my ($delay, $evalout) = @_;
my ($delay, $evalres) = @_;
my ($status, $evalout) = $evalres->@{qw/status output/};
$c->stash($row);
$c->stash({language => $c->languages->get_language_hash->{$row->{language}}});
$c->stash({all_langs => $c->languages->get_language_hash});
$c->stash({page_tmpl => 'viewer.html'});
$c->stash({paste_id => $pasteid});
$c->stash({eval => $evalout});
$c->stash({eval_status => $status});
$c->stash({perl_sort_versions => \&App::Model::Languages::perl_sort_versions});
$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 {
my ($self, $paste_id, $code, $langs, $callback) = @_;
my ($self, $paste_id, $code, $langs, $wait, $callback) = @_;
print "Entering\n";
if (@$langs == 1 && $langs->[0] eq "evalall") {
@ -40,7 +45,7 @@ sub get_eval {
use Data::Dumper;
print "Languages! ", Dumper($langs);
if ($paste_id && (my $cached = $memd->get($paste_id))) {
if ($paste_id && (my $cached = _get_cache($paste_id))) {
$callback->($cached);
} else {
# connect to server
@ -52,9 +57,16 @@ sub get_eval {
my $reader = $self->get_eval_reader($stream);
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) {
if ($lang eq 'text') {
$callback->("");
$callback->({status => "ready", output => {}});
return;
} else {
my $future = $self->async_eval($stream, $reader, $lang, $code);
@ -72,11 +84,13 @@ sub get_eval {
if (!keys %futures) { # I'm the last one
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";
use Data::Dumper;
print Dumper(\%output);
$callback->(\%output);
if ($wait || @$langs == 1) {
$callback->({status => "ready", output => \%output});
}
}
});
}

View file

@ -74,6 +74,9 @@
</div>
</div>
<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 %]
[% ELSIF eval.keys.size == 1 %]
<div id="eval" class="col-md-12">