Changeset 577

Show
Ignore:
Timestamp:
12/23/06 07:17:55 (3 years ago)
Author:
vasi
Message:

Fix case when mirrored but not cached. Don't allow empty charset

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • scrapers/trunk/RSS.pm

    r576 r577  
    113113         
    114114        my $default = 'ISO-8859-1'; 
    115         $charset = $default unless defined $charset; 
     115        $charset = $default unless $charset; 
    116116        return $charset; 
    117117} 
     
    140140        if ($response->code == RC_NOT_MODIFIED) { 
    141141                my $name = $subs[-2]; 
    142                 return lock_retrieve(mirror_file($url, type => $name)); 
    143         } else { 
    144                 die $response->status_line unless $response->is_success; 
     142                my $cache = mirror_file($url, type => $name); 
     143                return lock_retrieve($cache) if -f $cache; 
    145144                 
    146                 my $content = read_file($mirror, ':raw'); 
    147                 my $charset = charset($response, $content); 
    148                 $content = decode($charset, $content); 
     145                # Woops, got mirrored but not cached 
     146                unlink $mirror; 
     147                $response = $ua->mirror($url, $mirror); 
     148        }        
    149149                 
    150                 my (%cached, $ret); 
    151                 while (@subs) { 
    152                         (my $name, my $sub, @subs) = @subs; 
    153                         $ret = $cached{$name} = $sub->($content, %cached); 
    154                         lock_store($ret, mirror_file($url, type => $name)); 
    155                 } 
    156                  
    157                 return $ret; 
    158         } 
     150        die $response->status_line unless $response->is_success; 
     151         
     152        my $content = read_file($mirror, ':raw'); 
     153        my $charset = charset($response, $content); 
     154        $content = decode($charset, $content); 
     155         
     156        my (%cached, $ret); 
     157        while (@subs) { 
     158                (my $name, my $sub, @subs) = @subs; 
     159                $ret = $cached{$name} = $sub->($content, %cached); 
     160                lock_store($ret, mirror_file($url, type => $name)); 
     161        } 
     162         
     163        return $ret; 
    159164} 
    160165