diff --git a/acqui.simple/marcimport.pl b/acqui.simple/marcimport.pl
index 7aae1e9d67..de3fea6ea3 100755
--- a/acqui.simple/marcimport.pl
+++ b/acqui.simple/marcimport.pl
@@ -133,8 +133,14 @@ if ($input->param('z3950queue')) {
}
chop $serverlist;
my $q_serverlist=$dbh->quote($serverlist);
- my $sth=$dbh->prepare("insert into z3950queue (term,type,servers) values ($q_term, '$type', $q_serverlist)");
+ my $rand=$input->param('rand');
+ my $sth=$dbh->prepare("select identifier from z3950queue where
+ identifier=$rand");
$sth->execute;
+ unless ($sth->rows) {
+ $sth=$dbh->prepare("insert into z3950queue (term,type,servers, identifier) values ($q_term, '$type', $q_serverlist, '$rand')");
+ $sth->execute;
+ }
}
}
@@ -695,26 +701,56 @@ EOF
$sth->execute;
my ($servers) = $sth->fetchrow;
my $serverstring;
+ my $starttimer=time();
foreach $serverstring (split(/\s+/, $servers)) {
my ($name, $server, $database, $auth) = split(/\//, $serverstring, 4);
if ($name eq 'MAN') {
print "$server/$database
\n";
- } elsif ($name eq 'LOC') {
- print "Library of Congress
\n";
- } elsif ($name eq 'NLC') {
- print "National Library of Canada
\n";
} else {
my $sti=$dbh->prepare("select name from
z3950servers where id=$name");
$sti->execute;
my ($longname)=$sti->fetchrow;
- print "$longname
\n";
+ print "\n";
+ if ($longname) {
+ print "$longname \n";
+ } else {
+ print "$server/$database \n";
+ }
}
- print "
\n";
my $q_server=$dbh->quote($serverstring);
+ my $startrecord=$input->param("ST-$name");
+ ($startrecord) || ($startrecord='0');
my $sti=$dbh->prepare("select numrecords,id,results,startdate,enddate from z3950results where queryid=$id and server=$q_server");
$sti->execute;
($numrecords,$resultsid,$data,$startdate,$enddate) = $sti->fetchrow;
+ my $serverplaceholder='';
+ foreach ($input->param) {
+ (next) unless (/ST-(.+)/);
+ my $serverid=$1;
+ (next) if ($serverid eq $name);
+ my $place=$input->param("ST-$serverid");
+ $serverplaceholder.="\&ST-$serverid=$place";
+ }
+ if ($numrecords) {
+ my $previous='';
+ my $next='';
+ if ($startrecord>0) {
+ $previous="Previous";
+ }
+ my $highest;
+ $highest=$startrecord+10;
+ ($highest>$numrecords) && ($highest=$numrecords);
+ if ($numrecords>$startrecord+10) {
+ $next="Next";
+ }
+ print "[Viewing ".($startrecord+1)." to ".$highest." of $numrecords records] $previous | $next
\n";
+ } else {
+ print "
\n";
+ }
+ print "\n";
+ my $stj=$dbh->prepare("update z3950results set highestseen=".($startrecord+10)." where id=$resultsid");
+ $stj->execute;
if ($sti->rows == 0) {
print "pending...";
} elsif ($enddate == 0) {
@@ -728,8 +764,17 @@ EOF
}
print "processing... ($elapsedtime)";
} elsif ($numrecords) {
- my @records=parsemarcdata($data);
+ my $splitchar=chr(29);
+ my @records=split(/$splitchar/, $data);
+ $data='';
+ for ($i=$startrecord; $i<$startrecord+10; $i++) {
+ $data.=$records[$i].$splitchar;
+ }
+ @records=parsemarcdata($data);
+ my $counter=0;
foreach $record (@records) {
+ $counter++;
+ #(next) unless ($counter>=$startrecord && $counter<=$startrecord+10);
my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $note, $controlnumber);
foreach $field (@$record) {
if ($field->{'tag'} eq '001') {
@@ -800,6 +845,8 @@ EOF
}
print "
\n";
}
+ my $elapsed=time()-$starttimer;
+ print "
It took $elapsed seconds to process this page.\n";
} else {
my $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file");
$sth->execute;
@@ -907,30 +954,54 @@ sub z3950 {
$type=uc($type);
$term=~s/</g;
$term=~s/>/>/g;
- if ($done == 1) {
- my $elapsed=$enddate-$startdate;
- my $elapsedtime='';
- if ($elapsed>60) {
- $elapsedtime=sprintf "%d minutes",($elapsed/60);
- } else {
- $elapsedtime=sprintf "%d seconds",$elapsed;
+ my $sti=$dbh->prepare("select id,server,startdate,enddate,numrecords from z3950results where queryid=$id");
+ $sti->execute;
+ if ($sti->rows) {
+ my $processing=0;
+ my $realenddate=0;
+ my $totalrecords=0;
+ while (my ($r_id,$r_server,$r_startdate,$r_enddate,$r_numrecords) = $sti->fetchrow) {
+ if ($r_enddate==0) {
+ $processing=1;
+ } else {
+ if ($r_enddate>$realenddate) {
+ $realenddate=$r_enddate;
+ }
+ }
+
+ $totalrecords+=$r_numrecords;
}
- if ($numrecords) {
- print "- $type=$term Done. $numrecords records found in $elapsedtime.
\n";
+ if ($processing) {
+ my $elapsed=time()-$startdate;
+ my $elapsedtime='';
+ if ($elapsed>60) {
+ $elapsedtime=sprintf "%d minutes",($elapsed/60);
+ } else {
+ $elapsedtime=sprintf "%d seconds",$elapsed;
+ }
+ if ($totalrecords) {
+ $totalrecords="$totalrecords found.";
+ } else {
+ $totalrecords='';
+ }
+ print " - $type=$term Processing... $totalrecords ($elapsedtime)
\n";
} else {
- print " - $type=$term Done. No records found. Search took $elapsedtime.
\n";
+ my $elapsed=$realenddate-$startdate;
+ my $elapsedtime='';
+ if ($elapsed>60) {
+ $elapsedtime=sprintf "%d minutes",($elapsed/60);
+ } else {
+ $elapsedtime=sprintf "%d seconds",$elapsed;
+ }
+ if ($totalrecords) {
+ $totalrecords="$totalrecords found.";
+ } else {
+ $totalrecords='';
+ }
+ print " - $type=$term Done. $totalrecords ($elapsedtime)
\n";
}
- } elsif ($done == -1) {
- my $elapsed=time()-$startdate;
- my $elapsedtime='';
- if ($elapsed>60) {
- $elapsedtime=sprintf "%d minutes",($elapsed/60);
- } else {
- $elapsedtime=sprintf "%d seconds",$elapsed;
- }
- print " - $type=$term Processing ($elapsedtime)
\n";
} else {
- print " - $type=$term $done Pending
\n";
+ print " - $type=$term Pending
\n";
}
}
print "
\n";
@@ -944,15 +1015,17 @@ sub z3950 {
}
$serverlist.=" \n";
+ my $rand=rand(1000000000);
print << "EOF";