Index: Slim/Utils/Scanner/Remote.pm =================================================================== --- Slim/Utils/Scanner/Remote.pm (revision 24387) +++ Slim/Utils/Scanner/Remote.pm (working copy) @@ -395,6 +395,8 @@ $track->update; } + my $length = $http->response->content_length; + # Look for bitrate information in header indicating it's an Icy stream if ( my $bitrate = ( $http->response->header('icy-br') || $http->response->header('x-audiocast-bitrate') ) * 1000 ) { $log->is_debug && $log->debug("Found bitrate in header: $bitrate"); @@ -400,9 +402,16 @@ $log->is_debug && $log->debug("Found bitrate in header: $bitrate"); $track = Slim::Music::Info::setBitrate( $track->url, $bitrate ); + + if ($length) { + $track = Slim::Music::Info::setDuration( $track->url, ( $length * 8 ) / $bitrate ); + } if ( $track->url ne $url ) { Slim::Music::Info::setBitrate( $url, $bitrate ); + if ($length) { + Slim::Music::Info::setDuration( $url, ( $length * 8 ) / $bitrate ); + } } # We don't need to read any more data from this stream @@ -553,6 +562,13 @@ } } + # Set duration if available and this is not a broadcast stream + if ( my $secs = $wma->info('playtime_seconds') ) { + if ( $secs > 0 && !( $wma->info('flags') && $wma->info('flags')->{'broadcast'} == 1 ) ) { + $track= Slim::Music::Info::setDuration( $track->url, $secs ); + } + } + # Save this metadata for the MMS protocol handler to use if ( my $song = $args->{'song'} ) { $song->{'scanData'} ||= {}; @@ -569,7 +585,7 @@ } sub parseAudioData { - my ( $http, $track, $args, $url ) = @_; + my ( $http, $track, $args, $url, $length ) = @_; $http->disconnect; @@ -582,6 +598,8 @@ my $io = IO::String->new( $http->response->content_ref ); my $formatClass = Slim::Formats->classForFormat($type); + + my $cl = $http->response->content_length; if ( $formatClass && Slim::Formats->loadTagFormatForType($type) && $formatClass->can('scanBitrate') ) { ($bitrate, $vbr) = $formatClass->scanBitrate( $io, $track->url ); @@ -588,10 +606,16 @@ if ( $bitrate > 0 && !$track->bitrate ) { $track = Slim::Music::Info::setBitrate( $track->url, $bitrate, $vbr ); + if ($cl) { + $track = Slim::Music::Info::setDuration( $track->url, ( $cl * 8 ) / $bitrate ); + } # Copy bitrate to redirected URL if ( $track->url ne $url ) { - Slim::Music::Info::setBitrate( $url, $bitrate, $vbr ); + Slim::Music::Info::setBitrate( $url, $bitrate ); + if ($cl) { + Slim::Music::Info::setDuration( $url, ( $cl * 8 ) / $bitrate ); + } } } } @@ -600,7 +624,7 @@ } # Update filesize with Content-Length - if ( my $cl = $http->response->content_length ) { + if ( $cl ) { $track->filesize( $cl ); $track->update;