- my ($problem, $format, $contest) = map {scalar $req->param($_)} 'problem', 'prog_format', 'contest';
- my $ext = FORMAT_EXTENSION->{$format};
- my $prog = $req->upload('prog');
- die if defined $contest && $contest !~ /^\w+$/;
-
- if (defined $contest) {
- my $meta = LoadFile "ct/$contest/meta.yml";
- die unless time >= $meta->{start} && time <= $meta->{end}
- }
-
- my $dir = tempdir;
- $prog->link("$dir/prog.$ext");
- DumpFile "$dir/meta.yml", {
- files => {
- prog => {
- format => $format,
- name => 'prog.cpp',
+ my ($problem, $format, $contest, $private) = map {scalar $req->param($_)} 'problem', 'prog_format', 'contest', 'private';
+ my $prog;
+ $req->upload('prog')->slurp($prog);
+ die if defined $contest && $contest !~ /^\w+$/ ;
+ die if defined $contest && (time < contest_start $contest || time > contest_end $contest);
+
+ my $job = push_job (
+ date => time,
+ problem => $problem,
+ user => $r->user,
+ defined $private ? (private => $private) : (),
+ defined $contest ? (contest => $contest, private => 1) : (),
+ filesize => length $prog,
+ extension => Gruntmaster::Page::Log::FORMAT_EXTENSION->{$format},
+ );
+
+ set_job_inmeta $job, {
+ files => {
+ prog => {
+ format => $format,
+ name => 'prog.' . Gruntmaster::Page::Log::FORMAT_EXTENSION->{$format},
+ content => $prog,
+ }