+
+sub parse_jumpgate {
+ my ($scan,$file) = @_;
+
+ $file =~ s/,//g;
+ while ($file =~ m{(\d+):(\d+):(\d+)(?::\d+)?\D+(Attack|Defend|Return)</td><td class="left">([^<]*)\D+(\d+)\D+(\d+)}g){
+ my ($sender) = $dbh->selectrow_array($findplanet,undef,$1,$2,$3,$scan->{tick});
+ ($sender) = $dbh->selectrow_array($findoldplanet,undef,$1,$2,$3,$scan->{tick})
+ if ((not defined $sender) && $4 eq 'Return');
+ my $id = addintel($5,$4,$sender,$scan->{pid},$scan->{tick}+$6,$6
+ ,undef,$7, $scan->{x} == $1 && $scan->{y} == $2);
+ $intelscan->execute($id,$scan->{id});
+ }
+
+}
+
+sub parse_military {
+ my ($scan,$file) = @_;
+
+ doMilScan($dbh, $scan, $file);
+}
+
+my $adddevscan = $dbh->prepare(q{INSERT INTO development_scans
+ (id,tick,pid,light_fac,medium_fac,heavy_fac,amps,distorters
+ ,metal_ref,crystal_ref,eonium_ref,reslabs,fincents,milcents,seccents,structdefs
+ ,travel,infra,hulls,waves,extraction,covert,mining,population,total)
+ VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
+ });
+
+
+my %parsers = (
+ Planet => \&parse_planet,
+ Incoming => \&parse_incoming,
+ Unit => \&parse_unit,
+ 'Advanced Unit' => \&parse_unit,
+ Jumpgate => \&parse_jumpgate,
+ Military => \&parse_military,
+);
+
+
+$dbh->begin_work or die 'No transaction';
+$newscans->execute or die $dbh->errstr;
+$dbh->pg_savepoint('scans') or die "No savepoint";
+
+my $parsedscans = 0;
+
+while (my $scan = $newscans->fetchrow_hashref){
+ $dbh->pg_release('scans') or die "Couldn't save";
+ $dbh->pg_savepoint('scans') or die "Couldn't save";
+ my $file = get("http://game.planetarion.com/showscan.pl?scan_id=$scan->{scan_id}");
+ next unless defined $file;