Changeset 23149

Show
Ignore:
Timestamp:
18.10.2010 00:24:44 (9 years ago)
Author:
davidb
Message:

Progressbar code upgraded to be able to monitor multiple upload files at once

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/cgi-bin/talkback-progressbar.pl

    r23140 r23149  
    2525 
    2626 
     27sub get_progress_filename 
     28{ 
     29    my ($uploaded_file) = @_; 
     30 
     31    my $progress_file = $uploaded_file; 
     32 
     33    $progress_file =~ s{^(.*)\/}{};  
     34    $progress_file =~ s/\.*?$//; 
     35    $progress_file .= "-progress.txt"; 
     36 
     37    my $progress_filename = &util::filename_cat($gsdl_tmp_dir, $progress_file); 
     38 
     39    return $progress_filename; 
     40} 
     41 
     42sub get_file_central_filename 
     43{ 
     44    my $file_central = &util::filename_cat($gsdl_tmp_dir,"file-central.txt"); 
     45 
     46    return $file_central; 
     47} 
     48 
     49sub read_file_central 
     50{ 
     51    my $fc_filename = get_file_central_filename(); 
     52 
     53    my @fc_list; 
     54 
     55    if (open(FCIN,"<$fc_filename")) { 
     56     
     57    my $fc_list_str = do { local $/; <FCIN> }; 
     58    @fc_list = split(/\n/,$fc_list_str); 
     59 
     60    close(FCIN); 
     61    } 
     62    else { 
     63    # OK to have no file-central.txt to start with 
     64    # return empty list 
     65    @fc_list = (); 
     66    } 
     67 
     68    return \@fc_list; 
     69     
     70} 
     71 
     72sub remove_from_file_central 
     73{ 
     74    my ($filename,$fc_list) = @_; 
     75 
     76    my @new_fc_list = (); 
     77 
     78    my $removed = 0; 
     79 
     80    foreach my $f (@$fc_list) { 
     81 
     82    if ($f ne $filename) { 
     83        push(@new_fc_list,$f); 
     84    } 
     85    else { 
     86        $removed = 1; 
     87    } 
     88    } 
     89 
     90    if (!$removed) { 
     91    print STDERR "Warning: Failed to locate '$filename' in file-central.txt\n"; 
     92    } 
     93 
     94    return \@new_fc_list; 
     95} 
     96 
     97sub add_to_file_central 
     98{ 
     99    my ($filename,$fc_list) = @_; 
     100 
     101    my @new_fc_list = @$fc_list; 
     102 
     103    my $duplicate = 0; 
     104    foreach my $f (@new_fc_list) { 
     105 
     106    if ($f eq $filename) { 
     107        $duplicate = 1; 
     108    } 
     109    } 
     110 
     111    if (!$duplicate) { 
     112    push(@new_fc_list,$filename); 
     113    } 
     114    else { 
     115    print STDERR "Warning: Ingoring request to add duplicate entry:\n"; 
     116    print STDERR "         '$filename' into file-central.txt\n" 
     117    } 
     118 
     119    return \@new_fc_list; 
     120} 
     121 
     122 
     123 
     124sub write_file_central 
     125{ 
     126    my ($fc_list) = @_; 
     127 
     128    my $fc_filename = get_file_central_filename(); 
     129 
     130    if (open(FCOUT,">$fc_filename")) { 
     131     
     132    foreach my $f (@$fc_list) { 
     133        print FCOUT "$f\n"; 
     134    } 
     135 
     136    close(FCOUT); 
     137    } 
     138    else { 
     139    print STDERR "Error: Failed to write out $fc_filename\n"; 
     140    print STDERR "$!\n"; 
     141    } 
     142} 
     143 
    27144sub monitor_upload  
    28145{             
    29     my ($filename, $buffer, $bytes_read, $data) = @_; 
     146    my ($uploading_file, $buffer, $bytes_read, $data) = @_; 
    30147     
    31148    $bytes_read ||= 0;  
    32  
    33     my $full_filename = &util::filename_cat($gsdl_tmp_dir, 
    34                         "$filename-progress.txt"); 
    35        
    36     open(COUNTER, ">$full_filename");  
     149     
     150    my $progress_filename = get_progress_filename($uploading_file); 
     151 
     152    if (! -f $progress_filename) { 
     153    my $fc_list = read_file_central(); 
     154    $fc_list = add_to_file_central($uploading_file,$fc_list); 
     155    write_file_central($fc_list); 
     156    } 
     157     
     158    open(COUNTER, ">$progress_filename");  
    37159     
    38160    my $per = 0;  
     
    46168    # Sleep for 10 msecs 
    47169    select(undef, undef, undef, 0.01); 
     170    #select(undef, undef, undef, 0.1); 
    48171} 
    49172 
     
    75198sub remove_progress_file  
    76199{  
    77     my ($file) = @_; 
    78  
    79     $file =~ s{^(.*)\/}{};  
    80  
    81     my $progress_filename = &util::filename_cat($gsdl_tmp_dir, 
    82                         "$file-progress.txt"); 
     200    my ($uploaded_file) = @_; 
     201 
     202    my $progress_filename = get_progress_filename($uploaded_file); 
    83203 
    84204    if (!unlink($progress_filename)) { 
    85205    print STDERR "Warning: Failed to delete $progress_filename\n";  
    86206    } 
     207 
     208    my $fc_list = read_file_central(); 
     209    $fc_list = remove_from_file_central($uploaded_file,$fc_list); 
     210    write_file_central($fc_list); 
    87211} 
    88212 
     
    151275main();  
    152276 
     277 
    153278#===== 
    154  
    155  
    156279 
    157280sub inc_wait_dots 
     
    172295} 
    173296 
     297 
    174298sub check_status_single_file 
    175299{ 
    176300    my ($filename) = @_; 
    177     $filename =~ s{^(.*)\/}{};  
    178  
    179     my $monitor_filename = &util::filename_cat($gsdl_tmp_dir, 
    180                            "$filename-progress.txt"); 
     301     
     302    my $monitor_filename = get_progress_filename($filename); 
    181303 
    182304    if (! -f  $monitor_filename ) { 
     
    197319 
    198320    my $r = ""; 
    199     $r .= "<div style=\"float:left;\">$filename:</div>"; 
     321    $r .= "<div>$filename:</div>"; 
     322    $r .= "<nobr>"; 
    200323    $r .= "<div style=\"width: ${fgwidth}px; $fgcol $style_base\"></div>";  
    201324    $r .= "<div style=\"width: ${bgwidth}px; $bgcol $style_base\"></div>"; 
    202325    $r .= "<div style=\"float:left; width: 80px\">&nbsp;$s%</div>";  
    203     $r .= "<br>"; 
     326    $r .= "</nobr>"; 
     327    $r .= "<br />"; 
    204328 
    205329    return $r;  
     
    209333sub check_status_all 
    210334{ 
    211     my $file_central = &util::filename_cat($gsdl_tmp_dir,"file-central.txt"); 
     335    my $file_central = get_file_central_filename(); 
    212336 
    213337    my $html = ""; 
    214338 
    215     if (open my $FC, '<', $file_central) { 
    216     # Read entire file in all at once 
    217     my $file_list_str = do { local $/; <$FC> }; 
    218     my @file_list = split(/\n/,$file_list_str); 
    219  
    220     foreach my $f (@file_list) { 
    221         $html .= check_status_single_file($f); 
    222     } 
    223  
    224     close ($FC);  
    225     } 
    226     else { 
    227     # error 
    228     $html = "Failed to open $file_central: $!\n"; 
     339    my $fc_list = read_file_central(); 
     340 
     341    foreach my $f (@$fc_list) { 
     342    $html .= check_status_single_file($f); 
    229343    } 
    230344 
     
    243357 
    244358    my $filename = $gsdl_cgi->param('uploadedfile'); 
    245     if (defined $filename) { 
     359 
     360    if ((defined $filename) && ($filename ne "")) { 
    246361    $html .= check_status_single_file($filename); 
    247362    }