--- plagger/lib/Plagger/Plugin/Filter/FetchEnclosure/Mplayer.pm.orig 2006-10-14 22:15:08.000000000 +0900 +++ plagger/lib/Plagger/Plugin/Filter/FetchEnclosure/Mplayer.pm 2008-07-21 20:28:55.000000000 +0900 @@ -24,14 +24,20 @@ unless (defined $self->conf->{type}) { $context->log(error => q{config 'type' is not set.}); } - my $file_name_base = $args->{entry}->date->strftime('%Y%m%d-%H%M'); for my $enclosure ($args->{entry}->enclosures) { - unless ($enclosure->type =~ $self->conf->{type}) { $enclosure->local_path('dummy') unless $enclosure->local_path; next; } + + my $file_name_base; + if (defined $args->{entry}->date) { + $file_name_base = $args->{entry}->date->strftime('%Y%m%d-%H%M'); + } + else { + $file_name_base = $self->_guess_file_name_base($enclosure); + } my $dir_name = $self->conf->{sub_dir_name} || $args->{feed}->id_safe; my $feed_dir @@ -52,7 +58,7 @@ my $fetched_data_path = "$file_path_base.$fetched_extension"; if (-e $fetched_data_path || -e $output_path) { my $length = -s _; - $ enclosure->url($enclosure->url); + $enclosure->url($enclosure->url); $enclosure->length($length); $enclosure->type('audio/x-wav'); $enclosure->local_path($output_path); @@ -117,6 +123,33 @@ return @stream_urls; } +sub _guess_file_name_base { + my ($self, $enclosure) = @_; + + my $res = $self->{ua}->fetch($enclosure->url) + or Plagger->context->log; + + my $file_name_base; + + if ($enclosure->type =~ /asf/) { + $res->content =~ m!(?:http|mms)://.*/(.*?)\.(?:wmv|wsx|wma|asf)!; + $file_name_base = $1; + } + elsif ($enclosure->type =~ /realaudio/) { + $res->content =~ m!rtsp://.*/(.*?)\.(?:rm|smi)!; + $file_name_base = $1; + } + + unless ($file_name_base) { + Plagger->context->log(warn => "Cannot guess file name base " . $enclosure->url) + } + else { + Plagger->context->log(debug => "guessed file name base is " . $file_name_base) + } + + return $file_name_base; +} + 1; __END__