-//
-
-END
-
- my $start_page = &Apache::loncommon::start_page('Results',$js);
+ my $start_page = &Apache::loncommon::start_page('Results',undef);
my $breadcrumbs=
&Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',
$env{'form.catalogmode'} ne 'import');
@@ -2228,8 +2215,21 @@ SCRIPT
$r->rflush();
}
+sub reload_result_frame {
+ my ($r) = @_;
+ my $newloc = '/adm/searchcat?phase=results&persistent_db_id='.
+ $env{'form.persistent_db_id'};
+ $r->print(<
+SCRIPT
+
+ $r->rflush();
+}
+
{
- my $max_time = 300; # seconds for the search to complete
+ my $max_time = 60; # seconds for the search to complete
my $start_time = 0;
my $last_time = 0;
@@ -2410,6 +2410,7 @@ END
##
## Prepare for the big loop.
my $hitcountsum;
+ my $oldhitcountsum;
my %matches;
my $server;
my $status;
@@ -2456,7 +2457,7 @@ END
&update_status($r,
&mt('waiting on [_1]',join(' ',keys(%Server_status))));
}
- sleep(1);
+ sleep(0.1);
}
#
# Loop through the servers we have contacted but do not
@@ -2532,7 +2533,13 @@ END
delete($Server_status{$server});
}
last if ($connection->aborted());
- &update_count_status($r,$hitcountsum);
+ if ($oldhitcountsum < $hitcountsum) {
+ &update_count_status($r,$hitcountsum);
+ if ($hitcountsum <= $env{'form.show'}) {
+ reload_result_frame($r);
+ }
+ $oldhitcountsum = $hitcountsum;
+ }
}
last if ($connection->aborted());
&update_seconds($r);
@@ -2626,6 +2633,8 @@ sub display_results {
if ($env{'form.catalogmode'} eq 'import') {
if (! tie(%groupsearch_db,'GDBM_File',$diropendb,
&GDBM_WRCREAT(),0640)) {
+ # NOTE: this can happen when a previous request to searchcat?phase=results gets interrupted
+ # (%groupsearch_db is not untied)
$r->print(''.
&mt('Unable to save import results.').
'
'.
@@ -2634,6 +2643,10 @@ sub display_results {
$r->rflush();
return;
}
+ # untie %groupsearch_db if the connection gets aborted before the end
+ $r->register_cleanup(sub {
+ untie %groupsearch_db if (tied(%groupsearch_db));
+ });
}
##
## Prepare the table for querying
@@ -2775,8 +2788,7 @@ sub display_results {
);
if ($total_results == 0) {
- $r->print(''.
- ''.&mt('There are currently no results.').'
'.
+ $r->print(''.&mt('There are currently no results.').'
'.
"".
&Apache::loncommon::end_page());
return;
@@ -3149,6 +3161,14 @@ SCRIPT
SCRIPT
+ $js.=<
+SCRIPT
+
my $start_page = &Apache::loncommon::start_page(undef,$js,
{'only_body' =>1,
'add_wishlist' =>1,
@@ -3179,10 +3199,28 @@ sub print_frames_interface {
my $results_link = &results_link();
my $js = <
-//
+
+var loading_results = true;
+var need_reloading = false;
+var new_location;
+function update_results(newloc) {
+ if (loading_results) {
+ need_reloading = true;
+ new_location = newloc;
+ } else {
+ loading_results = true;
+ resultsframe.location = newloc;
+ }
+}
+function done_loading_results() {
+ loading_results = false;
+ if (need_reloading) {
+ need_reloading = false;
+ update_results(new_location);
+ }
+}
JS
@@ -3800,7 +3838,7 @@ Cleans the global %groupsearch_db by rem
######################################################################
sub start_fresh_session {
delete $groupsearch_db{'mode_catalog'};
- foreach (keys %groupsearch_db) {
+ foreach (keys(%groupsearch_db)) {
if ($_ =~ /^pre_/) {
delete $groupsearch_db{$_};
}