Index: RssNews.pm =================================================================== --- RssNews.pm (revision 4723) +++ RssNews.pm (working copy) @@ -327,9 +327,9 @@ for my $feed (@feedURLPrefs) { if ($feed) { my $name = $feed_names{$feed}; - if ($name && $name !~ /^http\:/) { + if ($name && $name !~ /^(?:http|file)\:/) { push @names, $name; - } elsif ($feed =~ /^http\:/) { + } elsif ($feed =~ /^(?:http|file)\:/) { my $xml = getFeedXml($feed); if ($xml && exists $xml->{channel}->{title}) { # trim required to remove leading newlines @@ -431,6 +431,34 @@ $getFeedXml_semaphore = 1; } + if ($feed_url =~ /^file/) + { + my $feed_file = $feed_url; + $feed_file =~ s/^file://; + $feed_file =~ s/^\/+/\//; + #accomodate windows drive letter suckiness + $feed_file =~ s/^\/([a-z]:)/$1/i; + + open (DIN, $feed_file); + if ($@) { + $::d_plugins && msg("RssNews failed to parse feed <$feed_url> because:\n$@"); + $getFeedXml_semaphore = 0; + return 0; + } + my @content = ; + close DIN; + my $content = join ("\n", @content); + + my $xml = eval { XMLin($content, forcearray => ["item"], keyattr => []) }; + $getFeedXml_semaphore = 0; + + if ($@) { + $::d_plugins && msg("RssNews failed to parse feed <$feed_url> because:\n$@"); + return 0; + } + return ($xml); + } + my $http = Slim::Player::Protocols::HTTP->new({ 'url' => $feed_url, 'create' => 0,