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:
parent
48acf59c2f
commit
b21463287b
6 changed files with 43 additions and 18 deletions
|
@ -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",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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});
|
||||||
})
|
})
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Add table
Reference in a new issue